Who am I (yekar.intercom.me) | Read | The 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) | Read | Every 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) | Read | Every 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) | Read | A 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) | Read | One 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) | Read | Find 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) | Write | Reply 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) | Write | Assign 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) | Write | Open, 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) | Write | Add 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) | Write | Start 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) | Read | Find 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) | Read | One 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) | Write | Create 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) | Write | Update 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) | Read | A 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) | Read | One 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) | Read | A 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) | Read | One 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. |