BUSINESS · CRM & SUPPORT
Conversations, customers, mailboxes and reports under that person’s own access.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
helpscout_delete_conversations_by_conversationidWRITEDelete a conversation. If the conversation was merged with another conversation it is no longer accessible under the old ID: Get Conversation returns HTTP 301 with a Location header pointing at the new conversation (for 60 days), and modification requests return 404. via DELETE /v2/conversations/{conversationId}
helpscout_delete_conversations_by_conversationid_attachments_by_attachmentidWRITEDelete an attachment. Attachments can only be deleted if the conversation is in draft status. If the conversation was merged into another conversation the old ID returns 404; call Get Conversation (301 with Location header) to find the new location. via DELETE /v2/conversations/{conversationId}/attachments/{attachmentId}
helpscout_delete_conversations_by_conversationid_snoozeWRITEUnsnoozes the conversation. The conversation is placed into its new home folder (Mine, Team or Unassigned, based on assignee) and reactivated if needed. via DELETE /v2/conversations/{conversationId}/snooze
helpscout_delete_conversations_by_conversationid_threads_by_threadid_scheduleWRITEUnschedules the thread. The scheduled thread is converted into a standard draft thread. via DELETE /v2/conversations/{conversationId}/threads/{threadId}/schedule
helpscout_delete_customer_properties_by_slugWRITESoft delete of a customer property definition - the property is scheduled for a hard delete, and for the grace period its slug is changed to free the original slug. via DELETE /v2/customer-properties/{slug}
helpscout_delete_customers_by_customeridWRITEHard-deletes a customer, their microsurvey responses and their conversations, in compliance with GDPR's right of erasure. There is no undo. Synchronous delete returns 204 and fails with 403 if the user does not have access to all of the customer's conversations or the customer has more than 100 conversations. With ?async=true the delete runs asynchronously (returns 202; no 100-conversation limit) - register a webhook for the customer.deleted event to know when the customer has been completely deleted. via DELETE /v2/customers/{customerId}
helpscout_delete_customers_by_customerid_addressWRITEDelete the customer's address. via DELETE /v2/customers/{customerId}/address
helpscout_delete_customers_by_customerid_chats_by_chatidWRITEDelete a customer's chat handle. via DELETE /v2/customers/{customerId}/chats/{chatId}
helpscout_delete_customers_by_customerid_emails_by_emailidWRITEDelete a customer's email. via DELETE /v2/customers/{customerId}/emails/{emailId}
helpscout_delete_customers_by_customerid_phones_by_phoneidWRITEDelete a customer's phone. via DELETE /v2/customers/{customerId}/phones/{phoneId}
helpscout_delete_customers_by_customerid_social_profiles_by_socialprofileidWRITEDelete a customer's social profile. via DELETE /v2/customers/{customerId}/social-profiles/{socialProfileId}
helpscout_delete_customers_by_customerid_websites_by_websiteidWRITEDelete a customer's website. via DELETE /v2/customers/{customerId}/websites/{websiteId}
helpscout_delete_mailboxes_by_mailboxid_saved_replies_by_savedreplyidWRITEDelete a saved reply. via DELETE /v2/mailboxes/{mailboxId}/saved-replies/{savedReplyId}
helpscout_delete_organizations_by_organizationidWRITEDeletes a single organization by ID. Also removes the reference to this organization from all customers. via DELETE /v2/organizations/{organizationId}
helpscout_delete_organizations_by_organizationid_properties_by_slugWRITERemoves the value of an organization property for this specific organization. The property definition itself is not deleted. via DELETE /v2/organizations/{organizationId}/properties/{slug}
helpscout_delete_organizations_properties_by_slugWRITEDeletes an organization property definition. This is a soft-delete; the property is removed permanently after a grace period. via DELETE /v2/organizations/properties/{slug}
helpscout_delete_users_by_useridWRITEDelete a user. Only Administrators and Account Owners can delete users. The user making the request can't delete themselves. via DELETE /v2/users/{userId}
helpscout_delete_webhooks_by_webhookidWRITEDelete a webhook. via DELETE /v2/webhooks/{webhookId}
helpscout_get_conversationsREADList and filter conversations. All request parameters are joined by the AND operator; the query parameter supports NOT and complex boolean search (subject:, tag:, mailbox:, mailboxid:, modifiedAt:, createdAt:, email:, body:, customerIds:, number:, id:, assigned:, attachments:, replyUserIds:). By default only active conversations are listed, sorted by createdAt descending (equivalent to ?status=active&sortField=createdAt&sortOrder=desc); use status=all for all conversations. Pages contain 25 conversations. With embed=threads, Beacon chat threads appear truncated by design - use List Threads for the full thread. via GET /v2/conversations
helpscout_get_conversations_by_conversationidREADRetrieve a single conversation. Response fields include type (chat/email/phone), status (active/closed/open/pending/spam), state (deleted/draft/published), assignee, createdBy, tags, cc/bcc, primaryCustomer, customFields, snooze and nextEvent data. When a conversation was merged into another, this returns HTTP 301 Moved Permanently with a Location header pointing at the new conversation for 60 days after the merge, then 404. via GET /v2/conversations/{conversationId}
helpscout_get_conversations_by_conversationid_attachments_by_attachmentid_dataREADGet the attachment's content as base64-encoded data. via GET /v2/conversations/{conversationId}/attachments/{attachmentId}/data
helpscout_get_conversations_by_conversationid_threadsREADList a conversation's threads, sorted by createdAt from newest to oldest. Thread types: beaconchat, chat, customer, forwardchild, forwardparent, lineitem, message, note, phone (lineitem represents a state change and has no body/to/cc/bcc/attachments; forwardparent marks the original conversation's thread that initiated a forward, forwardchild the first thread of the new forwarded conversation). Thread states: bounced (email delivery issue), draft, hidden (removed from customer-facing emails), published, review/underreview (stopped by Collision Detection). Attachment states: valid (free from malicious content) or virus. If the conversation was merged into another conversation the old ID returns 404; call Get Conversation (301 with Location header) to find the new location. via GET /v2/conversations/{conversationId}/threads
helpscout_get_conversations_by_conversationid_threads_by_threadid_original_sourceREADReturns the thread's original source. With Accept: application/json the response is a JSON object with an `original` field (original e-mail source); with Accept: message/rfc822 the raw message is returned as message/rfc822. via GET /v2/conversations/{conversationId}/threads/{threadId}/original-source Returns the JSON representation ({"original": ...}). Help Scout also offers the raw RFC-822 message under an `Accept: message/rfc822` header; this integration always asks for JSON, because a raw message is unbounded bytes and there is no header channel in an MCP tool call.
helpscout_get_customer_propertiesREADList the company's customer property definitions. Each definition has type, slug, name and (for dropdowns) options with id and label. via GET /v2/customer-properties
helpscout_get_customersREADList and filter customers. All request parameters are joined by the AND operator. Customers are by default sorted by createdAt from newest to oldest (equivalent to ?sortField=createdAt&sortOrder=desc). Pages contain 50 items. via GET /v2/customers
helpscout_get_customers_by_customeridREADRetrieve a single customer, including profile fields (firstName, lastName, photoUrl/photoType, jobTitle, background, location, organization/organizationId, gender, age), conversationCount, draft flag, createdAt/updatedAt, embedded sub-entities and customer properties (each property has slug, name, type (date/dropdown/number/text/url), value, text and source). Resource links: address, chats, emails, phones, social-profiles, websites, organization. via GET /v2/customers/{customerId}
helpscout_get_customers_by_customerid_addressREADGet the customer's address. via GET /v2/customers/{customerId}/address
helpscout_get_customers_by_customerid_chatsREADList the customer's chat handles. via GET /v2/customers/{customerId}/chats
helpscout_get_customers_by_customerid_emailsREADList the customer's emails. via GET /v2/customers/{customerId}/emails
helpscout_get_customers_by_customerid_phonesREADList the customer's phones. via GET /v2/customers/{customerId}/phones
helpscout_get_customers_by_customerid_social_profilesREADList the customer's social profiles. via GET /v2/customers/{customerId}/social-profiles
helpscout_get_customers_by_customerid_websitesREADList the customer's websites. via GET /v2/customers/{customerId}/websites
helpscout_get_mailboxesREADList the inboxes (mailboxes) the authorized account can access. Pages contain 50 items. via GET /v2/mailboxes
helpscout_get_mailboxes_by_mailboxidREADRetrieve a single inbox: id, name, slug (key used to represent this Inbox), email address, createdAt/updatedAt (UTC). Resource links: folders, fields. via GET /v2/mailboxes/{mailboxId}
helpscout_get_mailboxes_by_mailboxid_fieldsREADList the custom fields of an inbox. Each field has id, required, order, type, name, systemType (which system feature owns the field - topic or sentiment; absent for user-created fields; system fields are managed by Help Scout and cannot be modified), and for dropdowns a list of options (id, order, label). via GET /v2/mailboxes/{mailboxId}/fields
helpscout_get_mailboxes_by_mailboxid_foldersREADList the folders of an inbox. Each folder has id, type, name, totalCount (total conversations), userId (folder owner), activeCount (active tickets) and updatedAt. Pages contain 50 items. via GET /v2/mailboxes/{mailboxId}/folders
helpscout_get_mailboxes_by_mailboxid_routingREADGet the inbox's routing configuration: state (enabled/disabled), assignmentLimit (1-100, always specified for enabled routing), assignmentMethod (round_robin or balanced, always specified for enabled routing), userIds (rotation members; can be empty for disabled routing) and rotation (per-user: userId, conversationsCount, eligible, reason). via GET /v2/mailboxes/{mailboxId}/routing
helpscout_get_mailboxes_by_mailboxid_saved_repliesREADList an inbox's saved replies. Returns a JSON array of {id, name, preview (used for email replies), chatPreview (used for chats)}. via GET /v2/mailboxes/{mailboxId}/saved-replies
helpscout_get_mailboxes_by_mailboxid_saved_replies_by_savedreplyidREADGet a single saved reply: id, name, text, chatText. via GET /v2/mailboxes/{mailboxId}/saved-replies/{savedReplyId}
helpscout_get_organizationsREADReturns a paginated list of organizations for the account, 50 per page. Sortable by name, customerCount, conversationCount, or lastInteractionAt; without a sort parameter the default is lastInteractionAt,desc (most recent interactions first). Direction defaults to desc when omitted. via GET /v2/organizations
helpscout_get_organizations_by_organizationidREADReturns a single organization by ID: id, name, website, description, location (two letter country code), logoUrl, note, domains (used to match customers by email), phones, brandColor; customerCount and conversationCount only when includeCounts=true; properties (definitionId, slug, name, type, value, options[].label) only when includeProperties=true. via GET /v2/organizations/{organizationId}
helpscout_get_organizations_by_organizationid_conversationsREADReturns conversations associated with an organization with the given ID. via GET /v2/organizations/{organizationId}/conversations
helpscout_get_organizations_by_organizationid_customersREADReturns customers associated with an organization with the given ID. via GET /v2/organizations/{organizationId}/customers
helpscout_get_organizations_propertiesREADReturns all organization property definitions for the account. Each account can have up to 50 property definitions. Each has slug, name, type (text/number/url/date/dropdown) and options[].label for dropdown types. via GET /v2/organizations/properties
helpscout_get_organizations_properties_by_slugREADReturns a single organization property definition by slug: slug, name, type (text/number/url/date/dropdown), options[].label for dropdowns. via GET /v2/organizations/properties/{slug}
helpscout_get_ratings_by_ratingidREADGet a satisfaction rating: id, threadId (thread the rating is attached to), conversationId, conversationNumber, mailboxId, comments (optional comment entered by the user), rating (great/not_good/okay/unknown), createdAt, modifiedAt, user (whose reply was rated by the customer), customer (that added the reply). via GET /v2/ratings/{ratingId}
helpscout_get_reports_chatREADThe reporting endpoints are only available to Plus and Pro plans. Volume, efficiency and team productivity for Beacon live chat over time. Third party chat integrations show up in the Volumes by Channel report but are not included here - these metrics cover chats via Beacon only. Returns current/previous (volume.chatConversations, volume.completedChats, volume.missedChats, volume.chatsPerDay, responses.waitTime, responses.responseTime, resolutions.messagesPerChat, resolutions.duration), deltas, and range distributions (waitTime ids 1-5: <1, 1-2, 2-10, 10-20, >20 min; responseTime ids 1-5: <1, 1-2, 2-5, 5-10, >10 min; messagesPerChat ids 1-5: <5, 5-10, 10-20, 20-30, >30; duration ids 1-5: <5, 5-10, 10-20, 20-30, >30 min). via GET /v2/reports/chat
helpscout_get_reports_companyREADThe reporting endpoints are only available to Plus and Pro plans. Statistics about your company performance over a given time range; optionally specify two time ranges to compare. Returns filterTags, current/previous (startDate, endDate, customersHelped, closed, totalReplies, totalUsers, totalDays, repliesPerDayPerUser, repliesPerDay, resolvedPerDay), per-user stats (customersHelped, happinessScore = Great% - NotGood%, replies, handleTime, name, user) and deltas (percentage changes; only with a previous range). via GET /v2/reports/company
helpscout_get_reports_company_customers_helpedREADThe reporting endpoints are only available to Plus and Pro plans. Statistics about how many customers were helped over a given time range; optionally specify two time ranges to compare. via GET /v2/reports/company/customers-helped
helpscout_get_reports_company_drilldownREADThe reporting endpoints are only available to Plus and Pro plans. Similar to the Company Report, but returns the conversation data that makes up the report. Valid range values: replies (filter by number of replies; rangeId 1-4 = 1-4 replies, 5 = >= 5 replies, empty = all), firstReplyResolved (resolved with exactly one reply), resolved (at least one user reply and status Closed), responseTime and firstResponseTime (rangeId 1-10: <15 min, 15-30 min, 30-60 min, 1-2 h, 2-3 h, 3-6 h, 6-12 h, 12-24 h, 1-2 days, >2 days), handleTime (rangeId 1-5: <1 min, 1-2 min, 2-5 min, 5-10 min, >10 min). via GET /v2/reports/company/drilldown
helpscout_get_reports_conversationsREADThe reporting endpoints are only available to Plus and Pro plans. Statistics about conversation volume over a given time range; optionally specify two time ranges to compare. Returns filterTags, busiestDay (days indexed Monday=1..; hours 0-23), busyTimeStart/busyTimeEnd (company time zone), current/previous volume stats (totalConversations, conversationsCreated, newConversations, customers, conversationsPerDay), deltas, and top tags/customers/saved replies/workflows/customFields statistics. via GET /v2/reports/conversations
helpscout_get_reports_conversations_busy_timesREADThe reporting endpoints are only available to Plus and Pro plans. Summary of which days and times had the highest number of new conversations. Days/hours are reported using the company's time zone. via GET /v2/reports/conversations/busy-times
helpscout_get_reports_conversations_drilldownREADThe reporting endpoints are only available to Plus and Pro plans. Similar to the Conversations Report, but returns the conversation data that makes up the report. via GET /v2/reports/conversations/drilldown
helpscout_get_reports_conversations_fields_drilldownREADThe reporting endpoints are only available to Plus and Pro plans. Similar to the Conversations Report, but drills down by a conversation field and returns the conversation data that makes up the report. via GET /v2/reports/conversations/fields-drilldown
helpscout_get_reports_conversations_newREADThe reporting endpoints are only available to Plus and Pro plans. Summary of new conversation volume over a given time range. via GET /v2/reports/conversations/new
helpscout_get_reports_conversations_new_drilldownREADThe reporting endpoints are only available to Plus and Pro plans. Similar to the New Conversations Report, but returns the actual new conversations that make up the report. via GET /v2/reports/conversations/new-drilldown
helpscout_get_reports_conversations_received_messagesREADThe reporting endpoints are only available to Plus and Pro plans. Summary of the volume of received messages over a given time range. Only messages from customers are counted. via GET /v2/reports/conversations/received-messages
helpscout_get_reports_conversations_volume_by_channelREADThe reporting endpoints are only available to Plus and Pro plans. Conversation volumes split by chat, phone and email channels. via GET /v2/reports/conversations/volume-by-channel
helpscout_get_reports_docsREADThe reporting endpoints are only available to Plus and Pro plans. Statistics about Docs usage (searches, top articles, etc.) over a given time range; optionally specify two time ranges to compare. current/previous include failedResult, docsViewedPerVisit (sessions expire after 30 minutes of inactivity), foundAnAnswerResult, visitors, browseAction, searchAction, sentAnEmailResult. via GET /v2/reports/docs
helpscout_get_reports_emailREADThe reporting endpoints are only available to Plus and Pro plans. Efficiency working with email conversations. Returns filterTags, current/previous (volume: emailConversations, emailsCreated, repliesSent, messagesReceived; resolutions: resolved, resolvedOnFirstReply, percentResolvedOnFirstReply, resolutionTime, repliesToResolve, handleTime, closed; responses: responseTime, firstResponseTime), deltas, and range distributions (responseTime/firstResponseTime ids 1-10: <15 min ... >2 days; handleTime ids 1-5: <1 min ... >10 min; repliesToResolve ids 1-5: 1,2,3,4,>=5 replies). via GET /v2/reports/email
helpscout_get_reports_happinessREADThe reporting endpoints are only available to Plus and Pro plans. How many Great, Okay, and Not Good ratings your company received for each period in a time range; optionally compare two ranges. current/previous include ratingsPercent, okay/great/notGood percentages and counts, happinessScore (Great% minus NotGood%), totalCustomersWithRatings, ratingsCount, totalCustomers. via GET /v2/reports/happiness
helpscout_get_reports_happiness_ratingsREADThe reporting endpoints are only available to Plus and Pro plans. A company's individual ratings over a specified time range. Results include conversation number/id/type, threadid, threadCreatedAt, ratingId (1=Great, 2=OK, 3=Not Good), ratingCustomerId/Name, ratingComments, ratingCreatedAt, ratingUserId/Name. via GET /v2/reports/happiness/ratings
helpscout_get_reports_phoneREADThe reporting endpoints are only available to Plus and Pro plans. Volume of phone calls logged in Help Scout. Returns current/previous (phoneConversations, phoneCallsCreated, customers), deltas, and per-user statistics (id, name, current, previous). via GET /v2/reports/phone
helpscout_get_reports_productivityREADThe reporting endpoints are only available to Plus and Pro plans. Snapshot of productivity over a given time range; optionally compare two ranges. Use the Company Drilldown endpoint for the underlying conversation data. current/previous include totalConversations, resolutionTime (seconds), repliesToResolve, responseTime, firstResponseTime, resolved, resolvedOnFirstReply, closed, repliesSent, handleTime, percentResolvedOnFirstReply. Range distributions: responseTime/firstResponseTime ids 1-10 (<15 min ... >2 days), handleTime ids 1-5 (<1 min ... >10 min), repliesToResolve ids 1-5 (1,2,3,4,>=5 replies). via GET /v2/reports/productivity
helpscout_get_reports_productivity_first_response_timeREADThe reporting endpoints are only available to Plus and Pro plans. Average first response times for each period in a specified time range; optionally compare two ranges. via GET /v2/reports/productivity/first-response-time
helpscout_get_reports_productivity_replies_sentREADThe reporting endpoints are only available to Plus and Pro plans. Number of replies sent for each period in a specified time range; optionally compare two ranges. via GET /v2/reports/productivity/replies-sent
helpscout_get_reports_productivity_resolution_timeREADThe reporting endpoints are only available to Plus and Pro plans. Average resolution times for each period in a specified time range; optionally compare two ranges. via GET /v2/reports/productivity/resolution-time
helpscout_get_reports_productivity_resolvedREADThe reporting endpoints are only available to Plus and Pro plans. Number of resolved conversations for each period in a specified time range; optionally compare two ranges. via GET /v2/reports/productivity/resolved
helpscout_get_reports_productivity_response_timeREADThe reporting endpoints are only available to Plus and Pro plans. Average response times for each period in a specified time range; optionally compare two ranges. via GET /v2/reports/productivity/response-time
helpscout_get_reports_userREADThe reporting endpoints are only available to Plus and Pro plans. Snapshot of a user or team's activity over a specified time range; optionally compare two ranges. If a team ID is used instead of a user ID, the report calculates summary data for all team members. Returns filterTags, user info (id, hasPhoto, createdAt, name, totalCustomersHelped, photoUrl), current/previous stats (totalDays, resolved, conversationsCreated, closed, ratings[], totalReplies, resolvedOnFirstReply, percentResolvedOnFirstReply, repliesToResolve, handleTime, happinessScore, responseTime, resolutionTime, repliesPerDay, customersHelped, totalConversations, conversationsPerDay, busiestDay (1=Monday .. 7=Sunday)) and deltas. via GET /v2/reports/user
helpscout_get_reports_user_chatREADThe reporting endpoints are only available to Plus and Pro plans. Snapshot of a user or team's chat activity over a specified time range; optionally compare two ranges. Returns current/previous (totalDays, newConversations, messagesPerChat, responseTime, waitTime, duration - times in seconds) and deltas. via GET /v2/reports/user/chat
helpscout_get_reports_user_conversation_historyREADThe reporting endpoints are only available to Plus and Pro plans. Details about a user's conversations over a specified time range. Each result element represents one reply the user sent, so duplicate entries are possible when the user replied more than once to the same conversation. Results include number, responseTime, firstResponseTime, resolveTime, repliesSent (including other users'), id, status (active/pending/closed/spam), avgHandleTime, customers[]. via GET /v2/reports/user/conversation-history
helpscout_get_reports_user_customers_helpedREADThe reporting endpoints are only available to Plus and Pro plans. Number of customers a user helped for each period in a specified time range; optionally compare two ranges. via GET /v2/reports/user/customers-helped
helpscout_get_reports_user_drilldownREADThe reporting endpoints are only available to Plus and Pro plans. Similar to the User Report, but returns the conversation data that makes up the report. via GET /v2/reports/user/drilldown
helpscout_get_reports_user_happinessREADThe reporting endpoints are only available to Plus and Pro plans. How many Great, Okay, and Not Good ratings a user received for each period in a specified time range; optionally compare two ranges. Same statistics shape as the Happiness Overall Report. via GET /v2/reports/user/happiness
helpscout_get_reports_user_ratingsREADThe reporting endpoints are only available to Plus and Pro plans. A user's individual ratings over a specified time range. Results include conversation number/id/type, threadid, threadCreatedAt, ratingId (1=Great, 2=OK, 3=Not Good), ratingCustomerId/Name, ratingComments, ratingCreatedAt, ratingUserId/Name. via GET /v2/reports/user/ratings
helpscout_get_reports_user_repliesREADThe reporting endpoints are only available to Plus and Pro plans. Number of replies a user sent for each period in a specified time range; optionally compare two ranges. via GET /v2/reports/user/replies
helpscout_get_reports_user_resolutionsREADThe reporting endpoints are only available to Plus and Pro plans. Number of conversations a user resolved for each period in a specified time range; optionally compare two ranges. via GET /v2/reports/user/resolutions
helpscout_get_tagsREADReturns a list of tags used across all inboxes, in alphabetical order. Each tag has id, name (as seen in the web application), slug (slugified version of the tag value), ticketCount, color (deprecated legacy hex value - use the styles object in conversation responses instead), createdAt, updatedAt. Pages contain 50 items. via GET /v2/tags
helpscout_get_tags_by_tagidREADReturns a single tag by ID: id, slug, name, color (deprecated legacy value - use the styles object returned on tags embedded in conversation responses instead). via GET /v2/tags/{tagId}
helpscout_get_teamsREADList teams. Each team has id, name, initials, mention (handle usable to @mention a team in thread bodies), createdAt/updatedAt, timezone, photoUrl. Team IDs share the user ID space and can be used in conversation assignment. via GET /v2/teams
helpscout_get_teams_by_teamid_membersREADList the members of a team. via GET /v2/teams/{teamId}/members
helpscout_get_usersREADList users. By default all user types for your Help Scout plan are returned, including those who have not yet accepted their Help Scout invitations. Pages contain 50 items. via GET /v2/users
helpscout_get_users_by_useridREADRetrieve a single user: id, firstName, lastName, email, createdAt/updatedAt, lastVisit (null if the user never visited), role (owner/admin/user/light user), timezone, type (team or user), photoUrl, initials, mention (handle usable to @mention users in thread bodies), jobTitle, phone, alternateEmails. via GET /v2/users/{userId}
helpscout_get_users_by_userid_conversation_reassignmentREADGet a user's automatic conversation reassignment configuration. via GET /v2/users/{userId}/conversation-reassignment
helpscout_get_users_by_userid_statusREADGet a user's status. Each status has userId; email.status (active/away), email.updatedAt, email.performedBy, email.source (ui/api/presence_detection), email.customStatus (text, emoji, emojiName); chat.status (unavailable/available/assign/custom) and chat.mailboxStatuses (map of mailbox IDs to chat statuses, exposed when the overall status is custom). via GET /v2/users/{userId}/status
helpscout_get_users_meREADRetrieves information about the authenticated user. See Get User for response field descriptions. via GET /v2/users/me
helpscout_get_users_statusREADList statuses for all users. Each status has userId; email.status (active/away), email.updatedAt, email.performedBy, email.source (ui/api/presence_detection), email.customStatus (text, emoji, emojiName); chat.status (unavailable/available/assign/custom) and chat.mailboxStatuses (map of mailbox IDs to chat statuses, exposed when the overall status is custom). via GET /v2/users/status
helpscout_get_v3_conversations_by_conversationidREADSame as Get Conversation, but returns the real `type` value for the createdBy and assignee fields - including system_user for AI-powered system users (person type values: user, customer, team, system_user). The v2 endpoint normalizes system_user to user for backward compatibility. Served from https://api.helpscout.net/v3. via GET /v3/conversations/{conversationId} This is a v3 endpoint: it is served without the /v2 prefix the rest of this integration uses, its response shape is the v3 one rather than the HAL documents the v2 endpoints return, and GET /v3/customers pages by an opaque `cursor` instead of a page number.
helpscout_get_v3_conversations_by_conversationid_threadsREADSame as List Threads, but returns the real `type` value for createdBy and assignedTo fields - including system_user for AI-powered system users (person types: user, customer, team, system_user). The v2 endpoint normalizes system_user to user for backward compatibility. Served from https://api.helpscout.net/v3. via GET /v3/conversations/{conversationId}/threads This is a v3 endpoint: it is served without the /v2 prefix the rest of this integration uses, its response shape is the v3 one rather than the HAL documents the v2 endpoints return, and GET /v3/customers pages by an opaque `cursor` instead of a page number.
helpscout_get_v3_customersREADList and filter customers with cursor-based pagination. All request parameters are joined by the AND operator. Customers are sorted by creation date (createdAt) from newest to oldest with the customer id as tiebreaker. `_links.next` is only present when more data is available. Served from https://api.helpscout.net/v3. via GET /v3/customers This is a v3 endpoint: it is served without the /v2 prefix the rest of this integration uses, its response shape is the v3 one rather than the HAL documents the v2 endpoints return, and GET /v3/customers pages by an opaque `cursor` instead of a page number.
helpscout_get_v3_system_usersREADList system users (e.g. AI agents). Each has id, type (always system_user), firstName, lastName, initials, email, mention (handle for @-references), timezone, role (company member role), photoUrl, createdAt, updatedAt. Served from https://api.helpscout.net/v3. via GET /v3/system-users This is a v3 endpoint: it is served without the /v2 prefix the rest of this integration uses, its response shape is the v3 one rather than the HAL documents the v2 endpoints return, and GET /v3/customers pages by an opaque `cursor` instead of a page number.
helpscout_get_v3_system_users_by_systemuseridREADGet a single system user by ID: id, type (always system_user), firstName, lastName, initials, email, mention, timezone, role, photoUrl, createdAt, updatedAt. Served from https://api.helpscout.net/v3. via GET /v3/system-users/{systemUserId} This is a v3 endpoint: it is served without the /v2 prefix the rest of this integration uses, its response shape is the v3 one rather than the HAL documents the v2 endpoints return, and GET /v3/customers pages by an opaque `cursor` instead of a page number.
helpscout_get_webhooksREADList webhooks. Each webhook has id, url, state (enabled/disabled), events, notification, payloadVersion (V2 deprecated / V3), label and mailboxIds. via GET /v2/webhooks
helpscout_get_webhooks_by_webhookidREADGet a single webhook: id, url, state (enabled or disabled), events, notification, payloadVersion, label, mailboxIds. via GET /v2/webhooks/{webhookId}
helpscout_get_workflowsREADList workflows. Each workflow has id, mailboxId, type (always manual via the API; automatic workflows exist within the app), status (active/inactive/invalid), order, name, createdAt, modifiedAt. Pages contain 50 items. via GET /v2/workflows
helpscout_patch_conversations_by_conversationidWRITEJSONPatch endpoint for changing key conversation fields. Valid path/op combinations: /subject+replace (String), /primaryCustomer.id+replace (Number), /draft+replace (Boolean, publishes a draft), /mailboxId+move (Number, moves the conversation to another inbox), /status+replace (String), /assignTo+replace (Number - a user ID or team ID; teams share the user ID space), /assignTo+remove (un-assigns). If the conversation was merged with another conversation it is no longer accessible under the old ID: Get Conversation returns HTTP 301 with a Location header pointing at the new conversation (for 60 days), and modification requests return 404. via PATCH /v2/conversations/{conversationId}
helpscout_patch_conversations_by_conversationid_threads_by_threadidWRITEJSONPatch endpoint for updating a thread. Only allowed when the authorized user is an administrator or thread editing is enabled for the account. Valid path/op combinations: /text+replace (String - the original text is saved and can be viewed on the Help Scout website), /hidden+replace (Boolean - hides/unhides a non-draft customer or reply thread). If the conversation was merged into another conversation the old ID returns 404; call Get Conversation (301 with Location header) to find the new location. via PATCH /v2/conversations/{conversationId}/threads/{threadId}
helpscout_patch_conversations_by_conversationid_threads_by_threadid_scheduleWRITEPublishes the scheduled thread: the draft thread is turned into a reply/forward thread and the message is sent to the customer. Only needed to send sooner than originally scheduled. via PATCH /v2/conversations/{conversationId}/threads/{threadId}/schedule
helpscout_patch_customers_by_customeridWRITEJSONPatch-style endpoint updating a customer profile after creation (name, email address, phone number, etc.). The payload MUST be an array of patch objects, else a validation error is returned. Individual values can be removed but a whole entry collection cannot (e.g. remove /emails is not allowed); type fields only accept the predefined values of the corresponding entry type. Supported paths: /address/city, /address/country, /address/lines, /address/postalCode, /address/state, /age, /background, /chats, /chats/{chatId}, /chats/{chatId}/type, /chats/{chatId}/value, /emails, /emails/{emailId}, /emails/{emailId}/type, /emails/{emailId}/value, /firstName, /gender, /jobTitle, /lastName, /location, /organization, /phones, /phones/{phoneId}, /phones/{phoneId}/type, /phones/{phoneId}/value, /photoType, /photoUrl, /social-profiles, /social-profiles/{socialProfileId}, /social-profiles/{socialProfileId}/value, /social-profiles/{socialProfile}/type, /websites, /websites/{websiteId}, /websites/{websiteId}/value. To update user-defined customer properties use Update Customer Properties; to fully overwrite the record use the PUT Customer endpoint. via PATCH /v2/customers/{customerId}
helpscout_patch_customers_by_customerid_propertiesWRITEUpdate a customer's property values via their slugs (JSONPatch-style array payload). The properties must be created first, either in the web application or via Create Customer Property Definition; this endpoint only manipulates values of predefined properties. Value formats per property type: number = integer (range [-9223372036854775808, 9223372036854775807]); text = string, max 255 characters; url = valid URL; date = valid date (YYYY-MM-DD); dropdown = option id or label pulled via List Customer Property Definitions. via PATCH /v2/customers/{customerId}/properties
helpscout_patch_workflows_by_workflowidWRITEChange a workflow's status via a JSONPatch-style payload. via PATCH /v2/workflows/{workflowId}
helpscout_post_conversationsWRITECreates a conversation in an inbox with at least one thread. The customer is defined either via customer.id or customer.email (a new customer is created from the optional fields when the email is unknown). Assignment: set assignTo to a user ID or a team ID (teams share the user ID space) to assign; omit assignTo to let Inbox settings decide; send assignTo explicitly null to force unassigned. To create a draft conversation use a reply thread with draft:true. Uploaded thread attachments are scanned; malicious content is made inaccessible. A conversation can contain at most 100 threads - exceeding it returns HTTP 412 Precondition Failed, as does adding threads to conversations locked as too old by company policy. via POST /v2/conversations
helpscout_post_conversations_by_conversationid_chatsWRITEAdd a chat thread to a conversation. When a thread of this type is added, the conversation is reopened unless the thread is imported (imported: true). If the conversation was merged into another conversation the old ID returns 404; call Get Conversation (301 with Location header) to find the new location. A conversation can contain at most 100 threads and company policy can lock conversations that are too old; both cases return HTTP 412 Precondition Failed. via POST /v2/conversations/{conversationId}/chats
helpscout_post_conversations_by_conversationid_customerWRITEAdd a customer thread to a conversation. Unless imported is true, this re-opens the updated conversation. If the conversation was merged into another conversation the old ID returns 404; call Get Conversation (301 with Location header) to find the new location. A conversation can contain at most 100 threads and company policy can lock conversations that are too old; both cases return HTTP 412 Precondition Failed. via POST /v2/conversations/{conversationId}/customer
helpscout_post_conversations_by_conversationid_notesWRITEAdd a note thread to a conversation. If the conversation was merged into another conversation the old ID returns 404; call Get Conversation (301 with Location header) to find the new location. A conversation can contain at most 100 threads and company policy can lock conversations that are too old; both cases return HTTP 412 Precondition Failed. via POST /v2/conversations/{conversationId}/notes
helpscout_post_conversations_by_conversationid_phonesWRITEAdd a phone thread to a conversation. When a thread of this type is added, the conversation is reopened unless the thread is imported (imported: true). If the conversation was merged into another conversation the old ID returns 404; call Get Conversation (301 with Location header) to find the new location. A conversation can contain at most 100 threads and company policy can lock conversations that are too old; both cases return HTTP 412 Precondition Failed. via POST /v2/conversations/{conversationId}/phones
helpscout_post_conversations_by_conversationid_replyWRITEAdd a reply thread to a conversation. Set draft:true to create a draft reply. For an immediately published reply, assignTo can update the conversation owner (user or team ID); for a draft the owner is not updated until the reply is sent. When a thread of this type is added, the conversation is reopened unless the thread is imported (imported: true). If the conversation was merged into another conversation the old ID returns 404; call Get Conversation (301 with Location header) to find the new location. A conversation can contain at most 100 threads and company policy can lock conversations that are too old; both cases return HTTP 412 Precondition Failed. via POST /v2/conversations/{conversationId}/reply
helpscout_post_conversations_by_conversationid_threads_by_threadid_attachmentsWRITEUpload an attachment to a thread. The uploaded attachment is scanned; if malicious content is detected the attachment won't be accessible. If the conversation was merged into another conversation the old ID returns 404; call Get Conversation (301 with Location header) to find the new location. via POST /v2/conversations/{conversationId}/threads/{threadId}/attachments
helpscout_post_customer_propertiesWRITECreate a customer property definition. There is a limit of 50 customer property definitions per company. via POST /v2/customer-properties
helpscout_post_customersWRITECreate a customer. Sub-entity lists (emails, phones, chats, socialProfiles, websites, address) use the same objects as their dedicated create endpoints. The properties field populates customer property values as slug:value pairs; properties must first be created in the web app or via Create Property Definition. Slugs are unique within the company, 1-100 chars, alphanumeric/hyphen/underscore; email, name, company and jobTitle are reserved. Value formats per property type: number = integer (int64 range); text = string max 255 chars; url = valid URL; date = YYYY-MM-DD; dropdown = option id or label from List Properties. via POST /v2/customers
helpscout_post_customers_by_customerid_addressWRITECreate the customer's address. via POST /v2/customers/{customerId}/address
helpscout_post_customers_by_customerid_chatsWRITEAdd a chat handle to the customer. via POST /v2/customers/{customerId}/chats
helpscout_post_customers_by_customerid_emailsWRITEAdd an email to the customer. via POST /v2/customers/{customerId}/emails
helpscout_post_customers_by_customerid_phonesWRITEAdd a phone to the customer. via POST /v2/customers/{customerId}/phones
helpscout_post_customers_by_customerid_social_profilesWRITEAdd a social profile to the customer. via POST /v2/customers/{customerId}/social-profiles
helpscout_post_customers_by_customerid_websitesWRITEAdd a website to the customer. via POST /v2/customers/{customerId}/websites
helpscout_post_mailboxes_by_mailboxid_saved_repliesWRITECreate a saved reply in an inbox. via POST /v2/mailboxes/{mailboxId}/saved-replies
helpscout_post_organizationsWRITECreates a single organization and returns the ID of the created entity in the Resource-Id header. Request schema derived from the documented example. via POST /v2/organizations
helpscout_post_organizations_propertiesWRITECreates a new organization property definition for the account. Each account can have up to 50 property definitions. via POST /v2/organizations/properties
helpscout_post_usersWRITECreates a new user in this account. Only Administrators and Account Owners can create users. The new user receives a welcome/invite email unless sendInvite is false. mailboxes optionally grants the new user email access to inboxes in the same request; the inboxes must belong to the caller/new user's company and the caller must have email access to each one. via POST /v2/users
helpscout_post_webhooksWRITECreate a webhook. With the notification flag set, the payload does not contain the changed entity but just a resource URI that can be used to fetch the entity. via POST /v2/webhooks
helpscout_post_workflows_by_workflowid_runWRITERun a manual workflow on a list of conversations. Only manual workflows can be executed this way. All conversation IDs must belong to existing conversations and be from the same inbox as the workflow. via POST /v2/workflows/{workflowId}/run
helpscout_put_conversations_by_conversationid_fieldsWRITEUpdate a single conversation's custom fields. The entire list of custom fields must be sent; any custom fields on the conversation that are not in the payload are removed (send an empty list to remove all). System fields (fields with a systemType such as Topics and Sentiment, managed by Help Scout) are the exception: leaving one out preserves its value; sending it with an empty value clears it. Value formats: number fields are integer values up to 255 characters; date fields YYYY-MM-DD; dropdown fields must contain the option id; single line fields <= 255 characters; multi-line fields <= 15000 characters. If the conversation was merged with another conversation it is no longer accessible under the old ID: Get Conversation returns HTTP 301 with a Location header pointing at the new conversation (for 60 days), and modification requests return 404. via PUT /v2/conversations/{conversationId}/fields
helpscout_put_conversations_by_conversationid_snoozeWRITESnooze a conversation. Every subsequent request overrides the previous snooze settings. via PUT /v2/conversations/{conversationId}/snooze
helpscout_put_conversations_by_conversationid_tagsWRITEUpdate a single conversation's tags. The entire tag list must be sent; tags not in the payload are removed (send an empty list to remove all). A tag that does not exist yet is first created and then applied. If the conversation was merged with another conversation it is no longer accessible under the old ID: Get Conversation returns HTTP 301 with a Location header pointing at the new conversation (for 60 days), and modification requests return 404. via PUT /v2/conversations/{conversationId}/tags
helpscout_put_conversations_by_conversationid_threads_by_threadid_scheduleWRITESchedules a reply/forward thread. Subsequent requests override the previous schedules. via PUT /v2/conversations/{conversationId}/threads/{threadId}/schedule
helpscout_put_customers_by_customeridWRITEOverwrite the Customer entity fields. A field not set in the request is treated as null and overwritten - for partial updates use the PATCH Update Customer endpoint. Only the base entity is updated; use the Address/Chat Handles/Emails/Phones/Properties/Social Profiles/Websites endpoints for the rest. via PUT /v2/customers/{customerId}
helpscout_put_customers_by_customerid_addressWRITEUpdate the customer's address. via PUT /v2/customers/{customerId}/address
helpscout_put_customers_by_customerid_chats_by_chatidWRITEUpdate a customer's chat handle. via PUT /v2/customers/{customerId}/chats/{chatId}
helpscout_put_customers_by_customerid_emails_by_emailidWRITEUpdate a customer's email. via PUT /v2/customers/{customerId}/emails/{emailId}
helpscout_put_customers_by_customerid_phones_by_phoneidWRITEUpdate a customer's phone. via PUT /v2/customers/{customerId}/phones/{phoneId}
helpscout_put_customers_by_customerid_social_profiles_by_socialprofileidWRITEUpdate a customer's social profile. via PUT /v2/customers/{customerId}/social-profiles/{socialProfileId}
helpscout_put_customers_by_customerid_websites_by_websiteidWRITEUpdate a customer's website. via PUT /v2/customers/{customerId}/websites/{websiteId}
helpscout_put_mailboxes_by_mailboxid_routingWRITEUpdate the inbox's routing configuration. via PUT /v2/mailboxes/{mailboxId}/routing
helpscout_put_mailboxes_by_mailboxid_saved_replies_by_savedreplyidWRITEUpdate a saved reply. via PUT /v2/mailboxes/{mailboxId}/saved-replies/{savedReplyId}
helpscout_put_organizations_by_organizationidWRITEUpdates an organization with the given ID. This is a COMPLETE update: all fields must be provided even if unchanged, otherwise all missing fields are removed from the organization (scalars set to null, arrays cleared). via PUT /v2/organizations/{organizationId}
helpscout_put_organizations_by_organizationid_properties_by_slugWRITESets the value of an organization property, replacing any existing value. The value must be provided as a string regardless of property type: text/url = plain string; number = numeric string (e.g. '100'); date = ISO 8601 date (e.g. '2024-01-15'); dropdown = the exact label of one of the defined options. via PUT /v2/organizations/{organizationId}/properties/{slug}
helpscout_put_organizations_properties_by_slugWRITEUpdates an existing organization property definition (name and options). The property type and slug cannot be changed. When updating options for a dropdown property the entire options list is replaced; property values for removed options are removed. via PUT /v2/organizations/properties/{slug}
helpscout_put_teams_by_teamid_membersWRITEAdd and/or remove team members. via PUT /v2/teams/{teamId}/members
helpscout_put_users_by_userid_conversation_reassignmentWRITEUpdate a user's automatic conversation reassignment configuration. via PUT /v2/users/{userId}/conversation-reassignment
helpscout_put_users_by_userid_statusWRITESet a user's status. Administrators and Account Owners can edit other users' status. via PUT /v2/users/{userId}/status
helpscout_put_webhooks_by_webhookidWRITEUpdate a webhook. via PUT /v2/webhooks/{webhookId}
Put Help Scout behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.