Skip to main content

Intercom

Search, read, reply to, assign, tag and resolve Intercom conversations; read and update contacts and companies, and read Help Center articles.

Connect an Intercom workspace with an access token to work its inbox end to end: search conversations by state, assignee, tag or message text, read a thread with every part's visibility spelled out, reply publicly or leave an internal note, assign to a teammate or a team, snooze or close, and tag. Also reads and writes people and companies, sends a new outbound message to a contact, and reads Help Center articles. Every reply carries an explicit public/internal choice with no default, because that is the difference between a note your team sees and words a customer receives.

Connect

Credential fieldRequiredWhere it comes from
Access token (ACCESS_TOKEN)YesFrom the Intercom Developer Hub: your app → Authentication → Access token. It carries exactly the permissions ticked on that screen, and it is bound to one workspace and one region.
SettingRequiredWhat it is
Region (REGION)NoThe workspace's data region: us, eu or au. A token works on only its own region's host - the wrong value here produces a 401 that looks like a bad token. Defaults to us.
API version (API_VERSION)NoThe Intercom-Version header to send. Defaults to 2.11; set it only if your Developer Hub app is pinned elsewhere.

Tools

ToolAccessWhat it does
Who am I (yekar.intercom.me)ReadThe Intercom admin this access token belongs to, the workspace it is installed on, and the regional host and API version this connection is pinned to. Replies, notes, assignments and state changes are authored by this admin unless a tool is given an explicit adminId. Call this first to verify a connection - a token is valid on exactly one region's host, so a mismatch here is the usual cause of a 401.
List admins (yekar.intercom.list-admins)ReadEvery admin (teammate) on the workspace, with their ids, emails and away status. Use it to resolve a name to the adminId that Assign conversation and the reply tools take. Intercom returns the full set in one response, so this is the complete list rather than a page.
List tags (yekar.intercom.list-tags)ReadEvery tag defined on the workspace, with the ids that Tag conversation takes. Intercom's tag endpoint matches on ID, not on name, so resolve a tag here before tagging - and note that tagging with a name Intercom does not know CREATES a tag, which is why this integration only tags by id.
List conversations (yekar.intercom.list-conversations)ReadA page of the workspace's conversations, newest activity first - state, priority, assignee, tags, channel and dates (no message bodies; use Get conversation for the thread). This endpoint carries NO filters and NO total: Intercom does not report how many conversations exist, so total is null rather than a guess. To filter by state, assignee, tag or text, use Search conversations, which does report a real count.
Get conversation (yekar.intercom.get-conversation)ReadOne conversation in full - state, priority, assignee, tags, the opening message, and up to the first 100 conversation parts. EVERY part carries an explicit visibility: "public" means the customer received those words, "internal" means it is an agent-only note that must never be repeated back to them, and "event" means it is a routing action (assignment, close, snooze) rather than prose. Intercom's own count of all parts rides the result, so a long thread reports what was left out instead of looking complete.
Search conversations (yekar.intercom.search-conversations)ReadFind conversations by state, assignee, tag, contact, dates or message text. The query is a list of field/operator/value clauses combined with AND or OR - for example [{field:"state",operator:"=",value:"open"},{field:"admin_assignee_id",operator:"=",value:"12345"}]. Dates are unix timestamps in SECONDS, not milliseconds or ISO strings. total is Intercom's own count of every match, not the size of this page, so it is safe to report as a figure.
Reply to conversation (yekar.intercom.reply-to-conversation)WriteReply to a conversation, or leave an internal note on it. visibility is a REQUIRED argument with no default, because it decides whether a customer receives these words: "public" is delivered to them, "internal" is an agent-only note. The reply is authored by the connection's admin unless adminId names another, and it appears under that person's name in the customer's inbox.
Assign conversation (yekar.intercom.assign-conversation)WriteAssign a conversation to a teammate or a team, or unassign it. assigneeId takes an admin id from List admins or a team id; pass unassign: true instead to clear the assignee. The assignment is recorded on the thread as an event performed by the connection's admin (or by adminId), which is visible to teammates but not to the customer.
Set conversation state (yekar.intercom.set-conversation-state)WriteOpen, close or snooze a conversation. Closing marks it resolved for the team; unlike a closed ticket in some helpdesks it can be reopened later, so closing is not terminal. Snoozing requires snoozedUntil - a unix timestamp in SECONDS at which it returns to the inbox. The change is an event on the thread, not a message: the customer is not notified by it.
Tag conversation (yekar.intercom.tag-conversation)WriteAdd a tag to a conversation, or remove one with remove: true. Takes a tag ID from List tags, never a name: Intercom's tag-by-name endpoint CREATES a tag it does not recognise, so a typo would quietly add a near-duplicate to the workspace's taxonomy rather than fail. Adding a tag that is already on the conversation is a no-op.
Send message (yekar.intercom.send-message)WriteStart a NEW outbound conversation with a contact - this reaches a real person: email puts a message in their inbox, inapp shows it in the Messenger the next time they open your product. It is not a reply; use Reply to conversation to continue an existing thread. Sending cannot be undone or recalled, and each call starts another conversation, so do not retry it blindly. The message is sent by the connection's admin unless adminId names another.
Search contacts (yekar.intercom.search-contacts)ReadFind people in the workspace by email, name, phone, role, dates or a custom attribute. The query is a list of field/operator/value clauses combined with AND or OR - e.g. [{field:"email",operator:"=",value:"[email protected]"}]. Note Intercom's vocabulary: a contact with role "user" has signed up, a "lead" has not, and the SAME person can exist as both until they are merged. total is Intercom's own count of every match, so it is safe to report as a figure.
Get contact (yekar.intercom.get-contact)ReadOne contact in full - role, name, email, phone, location, custom attributes and the activity timestamps (last seen, last replied). Takes Intercom's own contact id; to look someone up by email or external id, use Search contacts.
Create contact (yekar.intercom.create-contact)WriteCreate a person in the workspace. role is required with no default: a "user" has signed up, a "lead" has not, and Intercom keeps them as separate objects. This does NOT deduplicate - creating someone who already exists produces a second record that then has to be merged, so search for them by email or externalId first.
Update contact (yekar.intercom.update-contact)WriteUpdate a contact's details. Only the fields you set are sent, so an untouched name or email is never blanked. Two consequences worth knowing: setting role to "user" converts a lead permanently, and setting unsubscribedFromEmails to true stops all marketing email to that person - do that when they ask, and not otherwise.
List companies (yekar.intercom.list-companies)ReadA page of the workspace's companies - name, plan, size, industry, spend and the workspace's own company_id. Intercom reports no total on this endpoint, so total is null rather than a guess; the page number and total page count it does report are passed through. Use Get company when you already have an id.
Get company (yekar.intercom.get-company)ReadOne company in full - name, plan, seat count, industry, monthly spend, custom attributes and dates. Note Intercom keeps TWO identifiers on a company: id is Intercom's, and company_id is your own system's. This tool takes Intercom's.
List Help Center articles (yekar.intercom.list-articles)ReadA page of the workspace's Help Center articles - title, description, state, locale and URL (no body; use Get article for that). state matters when quoting one to a customer: a draft article is not visible to them and its URL will not resolve. total is Intercom's own count of all articles, not this page.
Get Help Center article (yekar.intercom.get-article)ReadOne Help Center article with its body as plain text (capped, with a truncated flag). Check state before pointing a customer at it: a draft is not published and its URL will not resolve for them.

Notes

  • In Intercom open the Developer Hub (Settings → Integrations → Developer Hub), create an app for your own workspace, and under Authentication copy the Access token.
  • In the same app, under Authentication → Permissions, grant what Yekar.AI needs: read and write conversations, read and write contacts, read companies, read admins, read tags, and read Help Center articles if you want the article tools. A missing permission surfaces as a 403 naming this screen.
  • Set Region to the workspace's data region - us, eu or au (Settings → Workspace → General shows it). This is not cosmetic: a token is valid on exactly ONE region's host, and the other two reject it with a 401 that looks identical to a revoked token. The default is us.
  • The API version is pinned to 2.11. Leave the API version property empty unless your app is pinned to a different version in the Developer Hub, in which case set it to match.
  • Every reply, note, assignment and state change is authored by the admin the access token belongs to unless a tool is given an explicit adminId - call Who am I to see which admin that is.
  • Replies carry an explicit public/internal choice in both directions: a public reply is delivered to the customer and cannot be recalled, and an internal note you read must never be repeated back to them.