Can an AI agent use Intercom?
As of 15 Oct 2026, an AI agent can't reliably get into Intercom on its own, but once it is in it does 60% of the core work.
- Find: Docs for agents: llms.txt, an OpenAPI and an MCP server; a docs page for each core task.
- Access: Signs up sometimes.
- Use: 60% of the work.
- Pay: Reaches the checkout: Stopped at the $39 a month charge.
- Leave: Nothing to cancel: Deletes its data, but the login stays.
To reach L3 · Does the work: let an agent get in on its own in every drive.
With an account set up by a person: not measured yet.
Got in on 1 of 3 drives: the bot check let it through in some and not in others.
What the levels meanDriven 15 Oct 2026Same level in 3 drives in a rowRules of 15 Oct 2026Claim this page
Written and checked by our agents from this drive's record. How we write.
Who gets in
- Agents on a serverCan't get in on their own.
- Signed agentsThe sign-up page opens.
- Agents in a person's browserNot measured yet.
Sign-up page checked 15 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from
What an agent can do in Intercom.
On its own
- Reply to, tag, assign, and close customer conversations
- Create and resolve support tickets, including custom ticket types
- Add knowledge articles and collections that the AI agent and the human-assist tool can draw answers from
2 more
- Manage contacts, companies, and tags
- Read conversations and add internal notes through Intercom's newer AI-assistant connection
What it can't, and why
- Have the AI agent answer and resolve customer questions through the APIIntercom requires a manual request to turn this on, even on the trial
- Get an API key without using a web browserkeys are only issued through a web dashboard page
- Buy a paid plan on its owncheckout ends at a card-entry form; the agent had no card
Can an AI agent sign up for Intercom on its own?
It signs up on its own (in a browser), but can't get in on its own: a later step stopped it. Web form at www.intercom.com/signup/email (email, name + password, company, company size) with an invisible reCAPTCHA that let our agent's browser through; starts a 14-day Advanced trial without a card. No sign-up API. The developer sign-up link in the API auth docs (app.intercom.com/admins/sign_up/developer) showed an AWS WAF 'Let's confirm you are human' page instead.
Every way in it offers, as our agent tried them
| Way in | What happened |
|---|---|
| Email and password | Got in, 9 min |
| Sign‑in for apps (OAuth, MCP) | Got in, 4 min |
Does Intercom have an MCP server, and can an agent connect to it?
Yes. Intercom has an official MCP server. The server lists 15 tools.
A new agent can't reliably get in on its own (drive of 15 Oct 2026). Through the MCP server, 4 of our agent's 5 attempts worked.
What the drive found
APIOpenAPIMCP · official–CLISDKllms.txtWebhooks–SandboxHow does an AI agent get an Intercom API key?
In the drive of 15 Oct 2026, our agent got its Intercom API key in a browser, without a person. Access token only from the web: Developer Hub > New app > Configure > Authentication (masked, eye button). No API or CLI to create, scope or revoke a token. MCP: OAuth with DCR and two consent pages.
Can an AI agent delete its Intercom account?
Not all of it: it deletes its data, but the login stays. Settings > Workspace > General > Delete workspace (type your full name, then the workspace name). The page says deletion completes within 14 days; the REST token then answered 401 token_suspended and the MCP token 401. The teammate login still signs in, to a 'Create a new workspace' page; no control to delete the login itself was found.
Can an AI agent pay for Intercom?
Reaches the checkout: stopped at the $39 a month charge.
Reached the card form and stopped: Essential, $39 a month.
Checkout: a Stripe card formAn invisible bot check loaded at checkoutWallets: Google PayWays to pay found: Card checkout (Stripe Elements).
No card needed to start.
What would let agents pay on their own
- Accept x402 or MPP on your API. Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card.Step-by-step guide
- List your plans on Stripe Projects. Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev).Step-by-step guide
No 402, x402, MPP or billing API. In-app 'Buy Intercom' opens teams-checkout: Monthly Essential $39/seat/mo, Continue to payment shows a Stripe Elements card form (Google Pay, Stripe invisible hCaptcha), optional Tax ID, last button 'Pay now'. Stopped there: no card.
Ways to pay checked 15 Oct 2026.
For the team behind Intercom.
Where agents stop in Intercom today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Open the Fin Agent API to trial workspacesStep-by-step guide
- Add a token API or device login
- Fix MCP token revocationStep-by-step guide
3 more fixes
- Support MCP (the 28 Jul 2026 spec) server/discover
- Let agents pay without a card form Step-by-step guide
- Add a reply tool to the MCP server
- Claim it free and reply next to the result.
- A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
- Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
Details
Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.
Already claimed it? Open it in your dashboard.
Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.
Embed the badge on your site
Behind the level.
The part scores and the measures behind them.
Part scores and the measures · the docs · level history · paid plans
Part scores
- Holds up: 74 of 100, fair
Agent-ready setup
- llms.txt: found
- OpenAPI: found
- MCP server: found
- CLI: not found
Not measured in this drive: Docs match (part of an Audit).
Security: reported privately to the owner
The measures
- Work done60
- Reliability83
- Crash test65
The docs
600 of 13,299 pages read. Complete.
- A getting-started page
- An auth page
- Errors listed with their codes
- Code examples on most pages
- Newest page updated 15 Oct 2026
- A page for 10 of 10 core tasks
Read on 15 Oct 2026.
Tried as documented
3 of 7 documented ways to do the core work worked when tried.
| What happened | Ways |
|---|---|
| Worked when tried | 3 |
| Documented, didn't work | 4 |
| Not tried (a paid plan, or no way to reach it) | 0 |
| Worked, but not in the docs | 1 |
Level history
- 1 Oct 2026L4Runs on its own
- 1 Oct 2026sign-up variesL1Needs a person
- 6 Oct 2026L1Needs a person
- 15 Oct 2026L1Needs a person
Needs a paid plan
Not counted in the level. Our drive used no-card trial (14-day Advanced trial).
| Capability | Plan |
|---|---|
| Fin Insights (Pro add-on) | Pro add-on $100/mo |
| Auto-translate | Copilot add-on |
How Intercom handles an agent's mistakes · 9 probes · core run 3×
Malformed requests, a retry, a wrong key and a short burst of reads on our agent's own account, and how Intercom answered.
- Clear errors79
- Recovery67
- Safe retries50
- Vaguebad enum message_typeReply to a customer conversation from a shared team inbox400 {"type": "error.list", "request_id": "000f4pfed3qi6icp4i50", "errors": [{"code": "parameter_invalid", "message": "Unsupported message type"}]}
- Vaguemissing admin_idReply to a customer conversation from a shared team inbox400 {"type": "error.list", "request_id": "000fgliqo89jmp9it090", "errors": [{"code": "parameter_invalid", "message": "ID is required"}]}
- Clearmissing ticket_type_idCreate and track a support ticket through to resolution400 {"type": "error.list", "request_id": "000d6m474iobqnikb70g", "errors": [{"code": "parameter_not_found", "message": "ticket_type_id is a required parameter"}]}
- Clearnonexistent ticket idCreate and track a support ticket through to resolution404 {"type": "error.list", "request_id": "0000vd2nqqcpjfs7shkg", "errors": [{"code": "not_found", "message": "Resource Not Found"}]}
- Clearreply to deleted conversationReply to a customer conversation from a shared team inbox404 {"type": "error.list", "request_id": "000g11c8orhegb4j86l0", "errors": [{"code": "not_found", "message": "Resource Not Found"}]}
- Clearduplicate ticket type nameDefine custom ticket types and attributes400 {"type": "error.list", "request_id": "000g85q6fmmcstrdo2t0", "errors": [{"code": "parameter_invalid", "message": "A ticket type with [redacted] Bug already exists"}]}
- Clearwrong tokenReply to a customer conversation from a shared team inbox{"type":"error.list","request_id":"000ceqjvbc35i80fa9dg","errors":[{"code":"unauthorized","message":"Access Token Invalid"}]} 401
- Clearburst 15 x GET /tagsTag a conversation or contactcodes ['200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200']; last headers: x-ratelimit-limit: 1667; x-ratelimit-reset: 1792046104; x-ratelimit-remai
- Clearsame create twiceCreate and track a support ticket through to resolution200 id 215476403737233 / 200 id 215476403737396
For agents and builders.
The drive as data, every checkpoint and all 105 attempts.
How an agent connects · 6 tips
/api/tools/intercom.json/tools/intercom.mdMCP get_tool {"slug":"intercom"}
- Send Intercom-Version: 2.16; errors come as error.list with a code and message, not problem+json.
- Ticket list attributes take list_items as a comma string; a list_options object gets a vague 400.
- A contact's company link can read empty right after attaching; read again a moment later.
- There is no idempotency key: a repeated POST /tickets makes a second ticket.
- MCP update_article wants the id as a string.
- The sign-up wizard keeps its state in the page: do it in one browser session.
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessdevelopers.intercom.com/llms.txt and .md pages, 2.16 API reference with a downloadable OpenAPI 3.0.1 (266 operations), MCP guide.
- Sign upIn a browserWeb form at www.intercom.com/signup/email (email, name + password, company, company size) with an invisible reCAPTCHA that let our agent's browser through; starts a 14-day Advanced trial without a card. No sign-up API. The developer sign-up link in the API auth docs (app.intercom.com/admins/sign_up/developer) showed an AWS WAF 'Let's confirm you are human' page instead.
- VerifyIn a browserVerification mail from team@intercom.io arrived within a minute; the link logged the browser in.
- KeyIn a browserAccess token only from the web: Developer Hub > New app > Configure > Authentication (masked, eye button). No API or CLI to create, scope or revoke a token. MCP: OAuth with DCR and two consent pages.
- First callHeadlessGET https://api.intercom.io/me with the token, Intercom-Version 2.16: 200.
- First actionHeadlessPOST /contacts and POST /conversations created a contact and a customer conversation, read back with GET.
- PayIn a browserNo 402, x402, MPP or billing API. In-app 'Buy Intercom' opens teams-checkout: Monthly Essential $39/seat/mo, Continue to payment shows a Stripe Elements card form (Google Pay, Stripe invisible hCaptcha), optional Tax ID, last button 'Pay now'. Stopped there: no card.
- CancelNot neededNothing to cancel: our agent started no paid plan.
- DeleteIn a browserSettings > Workspace > General > Delete workspace (type your full name, then the workspace name). The page says deletion completes within 14 days; the REST token then answered 401 token_suspended and the MCP token 401. The teammate login still signs in, to a 'Create a new workspace' page; no control to delete the login itself was found.
The attempt log · 105 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| MCP discovery: POST server/discover to https://mcp.intercom.com/mcp | mcp | done ✓ | HTTP 401 WWW-Authenticate Bearer resource_metadata=https://mcp.intercom.com/.well-known/oauth-protected-resource/mcp scope="mcp operator"; auth required before any protocol answer |
| OAuth metadata: PRM + AS metadata | api | done ✓ | PRM 200 resource https://mcp.intercom.com/mcp; AS metadata has registration_endpoint /register (DCR), no client_id_metadata_document_supported, no device endpoint, PKCE S256 |
| sign up: Sign up at www.intercom.com/signup/email (email, name+password, company, size) | browser | done ✓ | POST app.intercom.com/ember/signups 201, workspace id hcvs1aup; invisible reCAPTCHA scripts loaded on the form, no challenge shown. Note: app.intercom.com/admins/sign_up/developer (linked from the API auth docs) showed an AWS WAF "Let's confirm you are human" page (Begin button) instead of a form; not attempted further |
| verify email: Open verification link from team@intercom.io | browser | done ✓ | mail arrived within a minute; link opened app.intercom.com/a/apps/hcvs1aup/hello |
| session: Logged-in session after verify | browser | done ✓ | verify link logged the browser in to workspace hcvs1aup |
| API access token: Create a private app in Developer Hub, read its access token | browser | done ✓ | Developer Hub > New app > Create app (app package 212692); Configure > Authentication shows the access token masked, revealed with the eye button; token works on GET /me |
| scoped API key headless: Look for a documented API/CLI route to create or revoke an access token | none | blocked | Searched the 2.16 OpenAPI (266 operations) and the Authentication docs: tokens come only from the Developer Hub web UI (app package Authentication page) or OAuth app install; no token-create endpoint, no CLI |
| first API call: GET https://api.intercom.io/me with Bearer token | api | done ✓ | 200 admin 11897874 the agent's inbox, app hcvs1aup region US; Intercom-Version 2.16 accepted |
| first real action: Create a contact (POST /contacts) and a contact-initiated conversation (POST /conversations) | api | done ✓ | contact 6ad071732abfff1e5ffa3cd2 and conversation 215476403673018 created; GET /conversations/{id} 200 state open |
| Reply to a customer conversation: Create a customer conversation to reply to (POST /conversations from our test contact) | api | done ✓ | 200 user_message conversation_id 215476403673018 |
| Reply to a customer conversation: GET /conversations/{id} | api | done ✓ | 200 state open, source.body matches |
| Reply to a customer conversation: POST /conversations/{id}/reply as admin (message_type comment) | api | done ✓ | 200, conversation part author admin 11897874 with our body; read back via GET shows the admin part |
| Reply to a customer conversation: Close the conversation (POST /conversations/{id}/parts message_type close) | api | done ✓ | 200 state closed |
| Reply to a customer conversation: DELETE /conversations/{id}, then GET | api | done ✓ | DELETE 200 {deleted:true}; GET 404 not_found |
| Reply to a customer conversation: Fresh conversation, admin reply, read back, delete | api | done ✓ | conv 215476403675063 reply 200 readback 1 delete 200 |
| Reply to a customer conversation: Fresh conversation, admin reply, read back, delete | api | done ✓ | conv 215476403675521 reply 200 readback 1 delete 200 |
| Create and track a ticket: POST /tickets with our ticket type and test contact | api | done ✓ | 200 ticket 215476403678298 state submitted, attributes as sent |
| Create and track a ticket: GET /tickets/{id} and POST /tickets/search | api | done ✓ | GET 200 attributes match; search by ticket_type_id total_count 1 |
| Create and track a ticket: PUT /tickets/{id} state in_progress + Severity Low, read back | api | done ✓ | 200; GET shows Severity Low, state in_progress |
| Create and track a ticket: Admin reply on ticket, then resolve (state resolved, open false) | api | done ✓ | reply 200; PUT 200; GET state resolved open false |
| Create and track a ticket: DELETE /tickets/{id}, GET | api | done ✓ | DELETE 200 deleted true; GET 404 |
| Define ticket types and attributes: POST /ticket_types, POST /ticket_types/{id}/attributes (list) | api | done ✓ | type 4623009 created with 4 states; attribute Severity 14524731 created. First try with input_options.list_options got 400 parameter_invalid "Data type is list but no list options were given"; the spec field is list_items (comma string) |
| Define ticket types and attributes: GET /ticket_types and /ticket_types/{id} | api | done ✓ | type listed; attributes _default_title_, _default_description_, Severity |
| Define ticket types and attributes: PUT /ticket_types/{id} description; PUT attribute description; read back | api | done ✓ | both 200; GET shows updated descriptions |
| Define ticket types and attributes: Create a ticket of the new type with the Severity attribute | api | done ✓ | ticket 215476403678298 accepted Severity High and later Low |
| Create and track a ticket: create, resolve, read back, delete | api | done ✓ | ticket 215476403680924 update 200 state resolved delete 200 |
| Create and track a ticket: create, resolve, read back, delete | api | done ✓ | ticket 215476403681379 update 200 state resolved delete 200 |
| Define ticket types and attributes: new type + attribute, read back, archive | api | done ✓ | type 4623010 attr 200 readback 1 archive 200 |
| Define ticket types and attributes: new type + attribute, read back, archive | api | done ✓ | type 4623011 attr 200 readback 1 archive 200 |
| Define ticket types and attributes: Remove the ticket type: no DELETE documented, archive with PUT archived=true, read back | api | done ✓ | PUT 200; GET archived true. API offers archive only, no hard delete |
| Fin Agent API: POST /fin/ask on our workspace | api | failed | 403 api_plan_restricted "Fin Agent API is not enabled for your app." Docs: access is requested at Settings > Integrations > Fin Agent API by telling Intercom the use case (manual grant), even on the Advanced trial |
| Fin Agent API: POST /fin/procedures/{id}/run on our workspace | api | failed | 403 api_plan_restricted "Fin Agent API is not enabled for your app." Docs: access is requested at Settings > Integrations > Fin Agent API by telling Intercom the use case (manual grant), even on the Advanced trial |
| Fin Agent API: POST /fin/escalate on our workspace | api | failed | 403 api_plan_restricted "Fin Agent API is not enabled for your app." Docs: access is requested at Settings > Integrations > Fin Agent API by telling Intercom the use case (manual grant), even on the Advanced trial |
| Create and update a contact with custom attributes: Create and update a contact with custom attributes | api | done ✓ | POST /data_attributes 200; PUT /contacts 200; GET custom_attributes={'ad_plan': 'pro'} |
| Group contacts into a company record: Group contacts into a company record | api | failed | POST /companies 200 id 6ad0723733dd506ea14a35be; attach 200; GET /companies/{id}/contacts 200 has contact=False |
| Segment contacts (list segments, contact segments): Segment contacts (list segments, contact segments) | api | done ✓ | GET /segments 200 ['Active', 'New', 'Slipping Away']; GET /contacts/{id}/segments 200; API is read-only for segments (create in UI) |
| Log a custom event for a user: Log a custom event for a user | api | done ✓ | POST /events 202; GET /events?type=user&user_id 200 found=True {'type': 'event.list', 'events': [{'type': 'event', 'id': '[id]', 'created_at': 1792045627, 'event_name': 'ad-test-eve |
| Tag a contact: Tag a contact | api | done ✓ | POST /tags 200 id 16537211; tag contact 200; GET contact tags found=True |
| Organize teammates into Teams (list teams): Organize teammates into Teams (list teams) | api | done ✓ | GET /teams 200 {'type': 'team.list', 'teams': []}; API is read-only for teams (no create documented) |
| Add an internal note to a conversation: Add an internal note to a conversation | api | done ✓ | conv 215476403696106; reply type note 200; GET shows note part=True |
| Assign a conversation to a teammate: Assign a conversation to a teammate | api | done ✓ | POST /conversations/{id}/parts assignment 200; GET admin_assignee_id=11897874 |
| Tag a conversation: Tag a conversation | api | done ✓ | POST /conversations/{id}/tags 200; GET tags found=True |
| Group contacts into a company record (read back after delay): Group contacts into a company record (read back after delay) | api | done ✓ | GET /contacts/{id}/companies 200 has company=True; GET /companies/{id}/contacts 200 total 1 (first read right after attach was empty: eventual consistency) |
| Organize help center content into collections: Organize help center content into collections | api | done ✓ | POST collections 200 id 19783425; GET 200 name [redacted] Collection |
| Publish and manage a help center article: Publish and manage a help center article | api | done ✓ | POST /articles 200 id 17608840; PUT publish 200; GET title=AgentDrives test article (updated) state=published |
| Manage AI content sources for Fin (content import source + external page): Manage AI content sources for Fin (content import source + external page) | api | failed | POST /ai/content_import_sources 200 {'id': 162262, 'type': 'content_import_source', 'last_synced_at': 1792045688, 'status': 'active', 'url': 'https://www.agentdrives.com/', 'sync_behavior': 'api',; POST /ai/external_pages 400 {'type': 'error.list', 'request_id': '000ejanhp263gsvn5qr0', 'errors': [{'code': 'parameter_not_found', 'message': 'locale is a required parameter'}]}; GET 0 |
| Create a News Item (draft, not published to anyone): Create a News Item (draft, not published to anyone) | api | done ✓ | POST 200 id 160314; PUT 200; GET title AgentDrives test news (updated) state draft |
| Send an outbound in-app message to our own test contact: Send an outbound in-app message to our own test contact | api | failed | POST /messages inapp to our contact 200 {'type': 'admin_message', 'id': '259069283', 'created_at': 1792045694, 'subject': 'AgentDrives test in-app message', 'body': 'AgentDrives test in-app message', 'message_type': 'inapp', 'owner': {'type; GET conversation 0 |
| Side conversations: API lists them; no create endpoint documented: Side conversations: API lists them; no create endpoint documented | api | partial | GET /conversations/{id}/side_conversations 200 {'type': 'side_conversation.list', 'side_conversations': [], 'total_count': 0, 'pages': {'type': 'pages', 'next': None, 'page': 1, 'per_page': 25, 'to; starting a side conversation is not in the 2.16 API (UI only); not created |
| Data Connectors: list: Data Connectors: list | api | done ✓ | GET /data_connectors 200 {'type': 'list', 'data': [], 'pages': {'type': 'pages', 'per_page': 20}} |
| Reporting data export: list datasets: Reporting data export: list datasets | api | done ✓ | GET /export/reporting_data/get_datasets 200 {'type': 'list', 'data': [{'id': 'conversation', 'name': 'Conversation', 'description': 'Conversation-level details: status, channel, assignee.', 'default_time_attribute_id': 'conversation.conversatio |
| Export conversation data (content export job): Export conversation data (content export job) | api | done ✓ | POST /export/content/data 200 job la1mprbxvey2j81i; GET status 200 in_progress |
| Phone calls: list calls via API: Phone calls: list calls via API | api | partial | GET /calls 200 {'type': 'list', 'data': [], 'total_count': 0, 'pages': {'type': 'pages', 'page': 1, 'per_page': 25, 'total_pages': 0}}; API is read-only for calls; placing a call needs a phone number in the Inbox |
| Manage AI content sources for Fin: Create content import source + external page with locale and availability, read back | api | done ✓ | POST /ai/content_import_sources 200 id 162263; POST /ai/external_pages 200 id 239848625 fin_availability true; GET 200. (The first try without locale/availability fields failed.) |
| Send an outbound message: POST /messages in-app from our admin to our own test contact; read back | api | partial | POST /messages 200 admin_message id 259069283; no conversation_id returned and /conversations/search for the contact finds none (in-app message waits until the contact opens the Messenger); /messages/status needs a ruleset_id, which this response does not give: no documented read-back for a one-off message |
| Fin answers a customer question: Fin AI Agent > Test (batch test): add question "How do I reset the widget?" and run as Preview user | browser | done ✓ | testing/41598: Fin answered "You can reset the widget in Settings..." citing Content (1), the external page we created via POST /ai/external_pages; answer shown in the run with rating controls |
| AI content powers Fin answers: Check Fin uses the API-created external page | browser | done ✓ | Fin batch test answer used Content (1) and repeated the page text |
| Fin answers a customer question: Create a Fin batch test group with one question | browser | done ✓ | group 41598 created via Add manually > Save |
| Fin answers a customer question: Open the test group and read Fin answer | browser | done ✓ | testing/41598 shows the question and Fin answer |
| Fin answers a customer question: Rate Fin answer Good, read back | browser | done ✓ | after rating, reload shows no Unrated label |
| Fin answers a customer question: Manage > Delete group, reopen URL | browser | done ✓ | redirected to testing list; testing/41598 no longer shows the question |
| Docs claim: Reply to a customer conversation from a shared team inbox: POST /conversations/{id}/reply | api | done ✓ | admin reply landed, read back |
| Docs claim: Let Fin AI Agent answer a customer question automatically: POST /fin/ask | api | failed | 403 api_plan_restricted: Fin Agent API is not enabled for your app (access granted on request) |
| Docs claim: Run a Fin Procedure (deterministic multi-step workflow) for a user: POST /fin/procedures/{procedure_id}/run | api | failed | 403 api_plan_restricted |
| Docs claim: Escalate a Fin conversation to a human teammate: POST /fin/escalate | api | failed | 403 api_plan_restricted |
| Docs claim: Create and track a support ticket through to resolution: POST /tickets | api | done ✓ | created, read back, deleted |
| Docs claim: Define custom ticket types and attributes: POST /ticket_types, POST /ticket_types/{id}/attributes | api | done ✓ | both created; list attribute takes list_items |
| Docs claim: Make and receive phone support calls inside the inbox: POST /calls (Calls) | api | failed | the 2.16 spec has GET /calls, GET /calls/{id}, recording, transcript and POST /calls/search only: no operation places or answers a call |
| Fin answers a customer question: New batch test group, one new question, read answer, delete group | browser | done ✓ | testing/41599 Fin answered from Content (1): reset under Settings; group deleted |
| Fin answers a customer question: New batch test group, one new question, read answer, delete group | browser | done ✓ | testing/415910 Fin answered from Content (1): reset under Settings; group deleted |
| MCP version: server/discover with token, then initialize | mcp | done ✓ | server/discover -> HTTP 400 JSON-RPC -32000 "Unsupported protocol version: 2026-07-28 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)" (not -32022); initialize offering 2026-07-28 answered protocolVersion 2025-11-25, serverInfo Intercom 0.3.0, SSE reply; tools/list 15 tools (docs say 14) |
| MCP OAuth sign-in: DCR register client, PKCE authorize with our account, token exchange | browser | done ✓ | POST /register 201-style client mZAVbcZiAEv0hhob (DCR, no CIMD); two consent pages (mcp.intercom.com Allow, then app.intercom.com Authorize access); token exchange headless, expires_in 3600, refresh token; callback carried no iss parameter (RFC 9207) |
| Add an internal note via MCP: MCP add_internal_note, read back with get_conversation | mcp | done ✓ | note_added true id 56127735616; get_conversation shows the note text |
| Help center article via MCP: MCP create_article draft, update_article title, read back via REST, delete via REST | mcp | done ✓ | create_article draft -> id; update_article with id as a string renamed it (a numeric id gets -32602 'expected string'); GET /articles/17609180 title 'MCP test article 2 (updated)'; deleted via REST |
| Docs claim: Reply to a customer conversation from a shared team inbox: add_internal_note (no reply tool) | mcp | partial ✓ | MCP can read conversations and add internal notes, but has no tool to send a reply to the customer |
| Build an automated Workflow: Workflows > New workflow > Create from scratch, trigger: customer sends first message | browser | done ✓ | draft workflow 71535825 opened in the visual builder |
| Build an automated Workflow: Add step Let Fin answer, Save, reload | browser | done ✓ | after reload the workflow shows trigger + Let Fin handle step (Service) |
| Build an automated Workflow: Reload the workflow editor | browser | done ✓ | state persisted (Draft) |
| Build an automated Workflow: Set the workflow live / Preview it | browser | failed | Set live is held: banner "Install the Messenger first to set this workflow live"; the Preview button did not respond to a click in our agent's browser (timeout), so the workflow never ran |
| Chat live through the Messenger widget: Load the Messenger snippet (app_id hcvs1aup) on our own test page (agentdrives.com path served by our agent's browser) and open a chat | browser | failed | widget.intercom.io/widget/hcvs1aup answered 200 but no launcher frame or further Messenger requests followed in 12 s; the workspace had is_web_messenger_disabled true at signup and the Messenger was not installed. Cause not pinned down: could be the workspace setting or our test-page setup; not a confirmed product fault |
| Copilot drafting in the inbox: Open a customer conversation, ask Copilot how to answer | browser | done ✓ | Copilot answered "instruct them to reset the widget under Settings" citing 1 source (AgentDrives FAQ, our API-made external page) |
| Copilot drafting in the inbox: Add to composer, Send; read back via GET /conversations/{id} | browser | done ✓ | admin reply with the Copilot text appears in the thread and in the API conversation parts |
| walk to last click: Buy Intercom > teams-checkout: Monthly, Essential, 1 seat, Continue to payment | browser | done ✓ | app.intercom.com/a/apps/hcvs1aup/teams-checkout?plan_id=54: Essential $39/seat/mo monthly ($29 annual); Continue to payment opens Stripe Elements payment form (Google Pay frame, Stripe invisible hCaptcha frame, no 3DS frame seen), optional Tax ID field, no phone field; last button "Pay now" ("Today your trial will end and you will be charged $39"). Stopped there: no card |
| Continue with Google: pw sso google | browser | skipped | pw sso google: refused-ours, this drive has no Google account |
| sign-up call: look for a sign-up API or /auth.md | none | skipped | no sign-up API in the 2.16 OpenAPI; /auth.md 404; no agent_auth block in the MCP AS metadata (door_probe) |
| Build a Series campaign: Outbound > Series > New Series, read back in the list | browser | done ✓ | series 517681 opened in edit mode; Series list shows 1 series, Untitled, Draft, created by [redacted] (not set live: no messages sent) |
| Run an in-app Survey: Outbound > New message > Survey | browser | failed | New message panel lists Survey templates (Measure NPS); clicking the Survey entry did not open an editor in our agent's browser (URL stayed /outbound/all). The checkout page lists Surveys under the Proactive Support Plus add-on ($99/mo) on paid plans |
| Create a Product Tour: Outbound > New message > Product Tour | browser | failed | Product Tour templates listed in the New message panel; our scripted click loop stopped after the Survey entry did not open an editor, so no tour was created. Checkout lists Product tours under Proactive Support Plus ($99/mo add-on) |
| Send an onboarding Checklist: Outbound > New message > Checklist | browser | failed | Series templates include "Activate new users with a checklist"; the checklist editor was not reached in our click loop. Checkout lists Checklists under Proactive Support Plus ($99/mo add-on) |
| A/B test message variants: Check where A/B testing lives | browser | failed | Checkout page lists A/B testing under the Proactive Support Plus add-on; not reached in the message editor (no message editor opened); no API surface |
| Fin Insights (Pro add-on): Look for it in the app | browser | plan_gated | checkout page: Pro add-on $100/mo includes Operator, CX Score, AI Topics, Trends, AI Recommendations; the inbox showed CX Score fields empty on our trial |
| Test Fin with simulations: Fin AI Agent > Test | browser | partial ✓ | Test section offers Batch test (questions answered by Fin, rated) which we ran 3 times; no separate end-to-end Simulations entry seen on the Test page |
| Auto-translate conversations: Check inbox translation | browser | plan_gated | checkout page: Copilot add-on ($29-35/seat/mo) "Translate multilingual chats"; not exercised |
| SSO: docs check | none | skipped | web UI only (Settings > Security), no API in 2.16 spec; not configured: needs an identity provider we do not run |
| teammate permissions: docs check | none | skipped | Settings > Teammates permissions, UI only; no admin-permissions write endpoint in the 2.16 spec (GET /admins only) |
| multiple brands: GET /brands | api | done ✓ | GET /brands 200 lists the default brand AgentDrives (also shown on the conversation as Brand AgentDrives); creating brands is UI only |
| third-party integrations: docs check | none | skipped | App Store / Settings > Integrations, UI only; MCP and Data Connectors documented; not connected (no third-party accounts) |
| HIPAA: docs check | none | skipped | Expert plan setting, UI only; needs a BAA, not something a account can sign |
| Fin Procedure: Fin AI Agent > Train > Procedures > New procedure | browser | partial | procedure 2158282 opened as Untitled Draft with When to trigger / Guidance / Instructions and a Preview + Simulations panel; Save stayed disabled with empty instructions and the run (preview) did not finish loading in our agent's browser, so no procedure ran |
| Fin Simulations: find Simulations | browser | partial | Simulations tab exists in the procedure editor preview panel; not run |
| Escalate Fin conversation to a human: Escalation via UI | browser | failed | Fin escalation needs Fin live on a customer channel; Fin could not go live because the Messenger was not installed (workflow Set live held), and the Fin Agent API escalate call is 403 api_plan_restricted. Train > Escalation settings exist but no conversation reached Fin |
| revoke MCP token: POST revocation_endpoint from AS metadata (https://mcp.intercom.com/token) with token | api | failed | 400 unsupported_grant_type "Grant type not supported"; token still answers tools/list 200: the advertised revocation_endpoint is the token endpoint and does not revoke |
| revoke access token: No API to revoke; token ended by deleting the workspace | browser | done ✓ | after workspace delete GET /me 401 token_suspended "Unauthorized token, suspended application"; MCP token 401 -32001 "Workspace admin no longer has access" |
| cancel: nothing to cancel | none | skipped | Advanced trial started without a card; no plan bought; checkout says the subscription renews monthly "unless canceled via your billing settings" |
| delete workspace: Settings > Workspace > General > Delete workspace (type full name, Confirm delete, type workspace name, Delete workspace) | browser | done ✓ | redirected to /a/apps/new (Create a new Intercom workspace); page says the workspace is deleted within 14 days of confirmation; REST token 401 token_suspended, MCP token 401. The teammate login itself still signs in (to the create-workspace page): no account-delete control found |
Also in Customer support.
ChatwootL1Can't sign up on its ownIntercom vs Chatwoot
CrispL1Can't sign up on its ownIntercom vs Crisp
FreshdeskL1Can't sign up on its ownIntercom vs Freshdesk
FrontL1Can't sign up on its ownIntercom vs Front