All integrations

Help Scout

BUSINESS · CRM & SUPPORT

Conversations, customers, mailboxes and reports under that person’s own access.

Acts as the person, not as itself

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.

Credentials never touch the agent

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.

Every call on the record

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.

What an agent can do

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_conversationidWRITE

Delete 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}

api
helpscout_delete_conversations_by_conversationid_attachments_by_attachmentidWRITE

Delete 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}

api
helpscout_delete_conversations_by_conversationid_snoozeWRITE

Unsnoozes 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

api
helpscout_delete_conversations_by_conversationid_threads_by_threadid_scheduleWRITE

Unschedules the thread. The scheduled thread is converted into a standard draft thread. via DELETE /v2/conversations/{conversationId}/threads/{threadId}/schedule

api
helpscout_delete_customer_properties_by_slugWRITE

Soft 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}

api
helpscout_delete_customers_by_customeridWRITE

Hard-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}

api
helpscout_delete_customers_by_customerid_addressWRITE

Delete the customer's address. via DELETE /v2/customers/{customerId}/address

api
helpscout_delete_customers_by_customerid_chats_by_chatidWRITE

Delete a customer's chat handle. via DELETE /v2/customers/{customerId}/chats/{chatId}

api
helpscout_delete_customers_by_customerid_emails_by_emailidWRITE

Delete a customer's email. via DELETE /v2/customers/{customerId}/emails/{emailId}

api
helpscout_delete_customers_by_customerid_phones_by_phoneidWRITE

Delete a customer's phone. via DELETE /v2/customers/{customerId}/phones/{phoneId}

api
helpscout_delete_customers_by_customerid_social_profiles_by_socialprofileidWRITE

Delete a customer's social profile. via DELETE /v2/customers/{customerId}/social-profiles/{socialProfileId}

api
helpscout_delete_customers_by_customerid_websites_by_websiteidWRITE

Delete a customer's website. via DELETE /v2/customers/{customerId}/websites/{websiteId}

api
helpscout_delete_mailboxes_by_mailboxid_saved_replies_by_savedreplyidWRITE

Delete a saved reply. via DELETE /v2/mailboxes/{mailboxId}/saved-replies/{savedReplyId}

api
helpscout_delete_organizations_by_organizationidWRITE

Deletes a single organization by ID. Also removes the reference to this organization from all customers. via DELETE /v2/organizations/{organizationId}

api
helpscout_delete_organizations_by_organizationid_properties_by_slugWRITE

Removes the value of an organization property for this specific organization. The property definition itself is not deleted. via DELETE /v2/organizations/{organizationId}/properties/{slug}

api
helpscout_delete_organizations_properties_by_slugWRITE

Deletes an organization property definition. This is a soft-delete; the property is removed permanently after a grace period. via DELETE /v2/organizations/properties/{slug}

api
helpscout_delete_users_by_useridWRITE

Delete a user. Only Administrators and Account Owners can delete users. The user making the request can't delete themselves. via DELETE /v2/users/{userId}

api
helpscout_delete_webhooks_by_webhookidWRITE

Delete a webhook. via DELETE /v2/webhooks/{webhookId}

api
helpscout_get_conversationsREAD

List 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

api
helpscout_get_conversations_by_conversationidREAD

Retrieve 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}

api
helpscout_get_conversations_by_conversationid_attachments_by_attachmentid_dataREAD

Get the attachment's content as base64-encoded data. via GET /v2/conversations/{conversationId}/attachments/{attachmentId}/data

api
helpscout_get_conversations_by_conversationid_threadsREAD

List 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

api
helpscout_get_conversations_by_conversationid_threads_by_threadid_original_sourceREAD

Returns 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.

api
helpscout_get_customer_propertiesREAD

List 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

api
helpscout_get_customersREAD

List 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

api
helpscout_get_customers_by_customeridREAD

Retrieve 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}

api
helpscout_get_customers_by_customerid_addressREAD

Get the customer's address. via GET /v2/customers/{customerId}/address

api
helpscout_get_customers_by_customerid_chatsREAD

List the customer's chat handles. via GET /v2/customers/{customerId}/chats

api
helpscout_get_customers_by_customerid_emailsREAD

List the customer's emails. via GET /v2/customers/{customerId}/emails

api
helpscout_get_customers_by_customerid_phonesREAD

List the customer's phones. via GET /v2/customers/{customerId}/phones

api
helpscout_get_customers_by_customerid_social_profilesREAD

List the customer's social profiles. via GET /v2/customers/{customerId}/social-profiles

api
helpscout_get_customers_by_customerid_websitesREAD

List the customer's websites. via GET /v2/customers/{customerId}/websites

api
helpscout_get_mailboxesREAD

List the inboxes (mailboxes) the authorized account can access. Pages contain 50 items. via GET /v2/mailboxes

api
helpscout_get_mailboxes_by_mailboxidREAD

Retrieve 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}

api
helpscout_get_mailboxes_by_mailboxid_fieldsREAD

List 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

api
helpscout_get_mailboxes_by_mailboxid_foldersREAD

List 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

api
helpscout_get_mailboxes_by_mailboxid_routingREAD

Get 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

api
helpscout_get_mailboxes_by_mailboxid_saved_repliesREAD

List 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

api
helpscout_get_mailboxes_by_mailboxid_saved_replies_by_savedreplyidREAD

Get a single saved reply: id, name, text, chatText. via GET /v2/mailboxes/{mailboxId}/saved-replies/{savedReplyId}

api
helpscout_get_organizationsREAD

Returns 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

api
helpscout_get_organizations_by_organizationidREAD

Returns 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}

api
helpscout_get_organizations_by_organizationid_conversationsREAD

Returns conversations associated with an organization with the given ID. via GET /v2/organizations/{organizationId}/conversations

api
helpscout_get_organizations_by_organizationid_customersREAD

Returns customers associated with an organization with the given ID. via GET /v2/organizations/{organizationId}/customers

api
helpscout_get_organizations_propertiesREAD

Returns 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

api
helpscout_get_organizations_properties_by_slugREAD

Returns 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}

api
helpscout_get_ratings_by_ratingidREAD

Get 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}

api
helpscout_get_reports_chatREAD

The 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

api
helpscout_get_reports_companyREAD

The 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

api
helpscout_get_reports_company_customers_helpedREAD

The 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

api
helpscout_get_reports_company_drilldownREAD

The 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

api
helpscout_get_reports_conversationsREAD

The 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

api
helpscout_get_reports_conversations_busy_timesREAD

The 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

api
helpscout_get_reports_conversations_drilldownREAD

The 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

api
helpscout_get_reports_conversations_fields_drilldownREAD

The 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

api
helpscout_get_reports_conversations_newREAD

The 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

api
helpscout_get_reports_conversations_new_drilldownREAD

The 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

api
helpscout_get_reports_conversations_received_messagesREAD

The 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

api
helpscout_get_reports_conversations_volume_by_channelREAD

The 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

api
helpscout_get_reports_docsREAD

The 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

api
helpscout_get_reports_emailREAD

The 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

api
helpscout_get_reports_happinessREAD

The 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

api
helpscout_get_reports_happiness_ratingsREAD

The 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

api
helpscout_get_reports_phoneREAD

The 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

api
helpscout_get_reports_productivityREAD

The 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

api
helpscout_get_reports_productivity_first_response_timeREAD

The 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

api
helpscout_get_reports_productivity_replies_sentREAD

The 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

api
helpscout_get_reports_productivity_resolution_timeREAD

The 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

api
helpscout_get_reports_productivity_resolvedREAD

The 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

api
helpscout_get_reports_productivity_response_timeREAD

The 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

api
helpscout_get_reports_userREAD

The 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

api
helpscout_get_reports_user_chatREAD

The 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

api
helpscout_get_reports_user_conversation_historyREAD

The 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

api
helpscout_get_reports_user_customers_helpedREAD

The 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

api
helpscout_get_reports_user_drilldownREAD

The 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

api
helpscout_get_reports_user_happinessREAD

The 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

api
helpscout_get_reports_user_ratingsREAD

The 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

api
helpscout_get_reports_user_repliesREAD

The 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

api
helpscout_get_reports_user_resolutionsREAD

The 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

api
helpscout_get_tagsREAD

Returns 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

api
helpscout_get_tags_by_tagidREAD

Returns 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}

api
helpscout_get_teamsREAD

List 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

api
helpscout_get_teams_by_teamid_membersREAD

List the members of a team. via GET /v2/teams/{teamId}/members

api
helpscout_get_usersREAD

List 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

api
helpscout_get_users_by_useridREAD

Retrieve 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}

api
helpscout_get_users_by_userid_conversation_reassignmentREAD

Get a user's automatic conversation reassignment configuration. via GET /v2/users/{userId}/conversation-reassignment

api
helpscout_get_users_by_userid_statusREAD

Get 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

api
helpscout_get_users_meREAD

Retrieves information about the authenticated user. See Get User for response field descriptions. via GET /v2/users/me

api
helpscout_get_users_statusREAD

List 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

api
helpscout_get_v3_conversations_by_conversationidREAD

Same 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.

api
helpscout_get_v3_conversations_by_conversationid_threadsREAD

Same 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.

api
helpscout_get_v3_customersREAD

List 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.

api
helpscout_get_v3_system_usersREAD

List 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.

api
helpscout_get_v3_system_users_by_systemuseridREAD

Get 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.

api
helpscout_get_webhooksREAD

List webhooks. Each webhook has id, url, state (enabled/disabled), events, notification, payloadVersion (V2 deprecated / V3), label and mailboxIds. via GET /v2/webhooks

api
helpscout_get_webhooks_by_webhookidREAD

Get a single webhook: id, url, state (enabled or disabled), events, notification, payloadVersion, label, mailboxIds. via GET /v2/webhooks/{webhookId}

api
helpscout_get_workflowsREAD

List 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

api
helpscout_patch_conversations_by_conversationidWRITE

JSONPatch 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}

api
helpscout_patch_conversations_by_conversationid_threads_by_threadidWRITE

JSONPatch 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}

api
helpscout_patch_conversations_by_conversationid_threads_by_threadid_scheduleWRITE

Publishes 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

api
helpscout_patch_customers_by_customeridWRITE

JSONPatch-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}

api
helpscout_patch_customers_by_customerid_propertiesWRITE

Update 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

api
helpscout_patch_workflows_by_workflowidWRITE

Change a workflow's status via a JSONPatch-style payload. via PATCH /v2/workflows/{workflowId}

api
helpscout_post_conversationsWRITE

Creates 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

api
helpscout_post_conversations_by_conversationid_chatsWRITE

Add 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

api
helpscout_post_conversations_by_conversationid_customerWRITE

Add 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

api
helpscout_post_conversations_by_conversationid_notesWRITE

Add 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

api
helpscout_post_conversations_by_conversationid_phonesWRITE

Add 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

api
helpscout_post_conversations_by_conversationid_replyWRITE

Add 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

api
helpscout_post_conversations_by_conversationid_threads_by_threadid_attachmentsWRITE

Upload 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

api
helpscout_post_customer_propertiesWRITE

Create a customer property definition. There is a limit of 50 customer property definitions per company. via POST /v2/customer-properties

api
helpscout_post_customersWRITE

Create 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

api
helpscout_post_customers_by_customerid_addressWRITE

Create the customer's address. via POST /v2/customers/{customerId}/address

api
helpscout_post_customers_by_customerid_chatsWRITE

Add a chat handle to the customer. via POST /v2/customers/{customerId}/chats

api
helpscout_post_customers_by_customerid_emailsWRITE

Add an email to the customer. via POST /v2/customers/{customerId}/emails

api
helpscout_post_customers_by_customerid_phonesWRITE

Add a phone to the customer. via POST /v2/customers/{customerId}/phones

api
helpscout_post_customers_by_customerid_social_profilesWRITE

Add a social profile to the customer. via POST /v2/customers/{customerId}/social-profiles

api
helpscout_post_customers_by_customerid_websitesWRITE

Add a website to the customer. via POST /v2/customers/{customerId}/websites

api
helpscout_post_mailboxes_by_mailboxid_saved_repliesWRITE

Create a saved reply in an inbox. via POST /v2/mailboxes/{mailboxId}/saved-replies

api
helpscout_post_organizationsWRITE

Creates 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

api
helpscout_post_organizations_propertiesWRITE

Creates a new organization property definition for the account. Each account can have up to 50 property definitions. via POST /v2/organizations/properties

api
helpscout_post_usersWRITE

Creates 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

api
helpscout_post_webhooksWRITE

Create 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

api
helpscout_post_workflows_by_workflowid_runWRITE

Run 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

api
helpscout_put_conversations_by_conversationid_fieldsWRITE

Update 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

api
helpscout_put_conversations_by_conversationid_snoozeWRITE

Snooze a conversation. Every subsequent request overrides the previous snooze settings. via PUT /v2/conversations/{conversationId}/snooze

api
helpscout_put_conversations_by_conversationid_tagsWRITE

Update 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

api
helpscout_put_conversations_by_conversationid_threads_by_threadid_scheduleWRITE

Schedules a reply/forward thread. Subsequent requests override the previous schedules. via PUT /v2/conversations/{conversationId}/threads/{threadId}/schedule

api
helpscout_put_customers_by_customeridWRITE

Overwrite 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}

api
helpscout_put_customers_by_customerid_addressWRITE

Update the customer's address. via PUT /v2/customers/{customerId}/address

api
helpscout_put_customers_by_customerid_chats_by_chatidWRITE

Update a customer's chat handle. via PUT /v2/customers/{customerId}/chats/{chatId}

api
helpscout_put_customers_by_customerid_emails_by_emailidWRITE

Update a customer's email. via PUT /v2/customers/{customerId}/emails/{emailId}

api
helpscout_put_customers_by_customerid_phones_by_phoneidWRITE

Update a customer's phone. via PUT /v2/customers/{customerId}/phones/{phoneId}

api
helpscout_put_customers_by_customerid_social_profiles_by_socialprofileidWRITE

Update a customer's social profile. via PUT /v2/customers/{customerId}/social-profiles/{socialProfileId}

api
helpscout_put_customers_by_customerid_websites_by_websiteidWRITE

Update a customer's website. via PUT /v2/customers/{customerId}/websites/{websiteId}

api
helpscout_put_mailboxes_by_mailboxid_routingWRITE

Update the inbox's routing configuration. via PUT /v2/mailboxes/{mailboxId}/routing

api
helpscout_put_mailboxes_by_mailboxid_saved_replies_by_savedreplyidWRITE

Update a saved reply. via PUT /v2/mailboxes/{mailboxId}/saved-replies/{savedReplyId}

api
helpscout_put_organizations_by_organizationidWRITE

Updates 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}

api
helpscout_put_organizations_by_organizationid_properties_by_slugWRITE

Sets 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}

api
helpscout_put_organizations_properties_by_slugWRITE

Updates 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}

api
helpscout_put_teams_by_teamid_membersWRITE

Add and/or remove team members. via PUT /v2/teams/{teamId}/members

api
helpscout_put_users_by_userid_conversation_reassignmentWRITE

Update a user's automatic conversation reassignment configuration. via PUT /v2/users/{userId}/conversation-reassignment

api
helpscout_put_users_by_userid_statusWRITE

Set a user's status. Administrators and Account Owners can edit other users' status. via PUT /v2/users/{userId}/status

api
helpscout_put_webhooks_by_webhookidWRITE

Update a webhook. via PUT /v2/webhooks/{webhookId}

api

Put Help Scout behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.