CONNECT APP
Build with Intercom
Communication
- OAuth
MCP
Give your agent Intercom tools
Every Intercom action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Intercom account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "intercom",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Add Tag To Contact:
const result = await mcp.callTool({
name: "intercom-add-tag-to-contact",
arguments: {
contactId: "Contact ID",
tagId: "Tag ID",
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "intercom",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Add Tag To Contact:
result = await session.call_tool("intercom-add-tag-to-contact", {
"contactId": "Contact ID",
"tagId": "Tag ID",
})API PROXY
Call the Intercom API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Intercom API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://api.intercom.io/me",
})
// Any allowed Intercom endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://api.intercom.io/me
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkuaW50ZXJjb20uaW8vbWU?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Intercom actions from your backend
Connect a user's Intercom account once, then run Add Tag To Contact on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "intercom-add-tag-to-contact",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
intercom: { authProvisionId: "apn_xxxxxxx" },
contactId: "Contact ID",
tagId: "Tag ID",
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="intercom-add-tag-to-contact",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"intercom": {"authProvisionId": "apn_xxxxxxx"},
"contactId": "Contact ID",
"tagId": "Tag ID",
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "intercom-add-tag-to-contact",
"configured_props": {
"intercom": { "authProvisionId": "apn_xxxxxxx" },
"contactId": "Contact ID",
"tagId": "Tag ID"
}
}'TOOLS
Intercom actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Add Tag To Contact
actionAdds a specific tag to a contact in Intercom. Use Search Contacts to find the contact's ID and List Tag ID Options to find valid tag IDs before calling this action. Example: set Contact ID to63a07ddf05a32042dffac965and Tag ID to7522907to tag that contact. Returns the updated tag object on success. See the documentation.Writev0.0.5 -
Create Note
actionCreates a note on a contact's record in Intercom. The note is automatically attributed to the currently authenticated admin — no Admin ID prop is required. Use Search Contacts to find the contact's ID before calling this action. Example: set User to63a07ddf05a32042dffac965and Body toFollowed up via email on 2024-01-15to log a note on that contact. Returns the new note object includingid,body, andauthor. See the documentationWritev0.0.9 -
List Admin ID Options
actionRetrieves all admins in your Intercom workspace and returns their IDs and names. Call this action before any action that requires an Admin ID — such as Manage A Conversation, Reply To Conversation, or Send Message To Contact — to discover valid values. Example: returns[{ label: "Jane Doe", value: "25" }, ...]. See the documentation.Read-onlyv0.0.3 -
List Assignee ID Options
actionRetrieves all teams in your Intercom workspace and returns their IDs and names. Call this action before Manage A Conversation to discover valid team IDs for conversation assignment. Example: returns[{ label: "Support", value: "334" }, ...]. Use0to represent Unassigned. See the documentation.Read-onlyv0.0.3 -
List Conversations
actionLists conversations in your Intercom workspace, most recently updated first (GET /conversations). Use this to discover a conversation's ID before calling Reply To Conversation, Manage A Conversation, or Retrieve Conversation — there is no other way to look one up. Returns a bounded page of conversations, each includingid,state,created_at, and the latest message part. Ifpages.next.starting_afteris present in the response, call this action again with that cursor in Starting After to retrieve the next page. Pass Fields (e.g.["id", "state", "created_at"]) to limit each returned conversation to only those keys. Example: leave all props empty to fetch the 20 most recently updated conversations. See the documentation.Read-onlyv0.0.2 -
List Tag ID Options
actionRetrieves all tags in your Intercom workspace and returns their IDs and names. Call this action before Add Tag To Contact to discover valid tag IDs. Example: returns[{ label: "VIP", value: "7522907" }, ...]. See the documentation.Read-onlyv0.0.3 -
Manage A Conversation
actionClose, snooze, open, or assign a conversation by its ID. Which of the optional props apply depends on Message Type:closeuses Body,snoozeduses Snoozed Until,assignmentuses Type together with Assignee ID or Team Assignee ID, andopenuses none of them. Example: set Conversation ID to192783634529321, Message Type toclose, and Body toIssue resolvedto close that conversation with a closing comment. See the documentation.Writev0.1.2 -
Reply To Conversation
actionReply to an existing Intercom conversation as an admin or on behalf of a contact (POST /conversations/{conversation_id}/reply). Use List Admin ID Options to find a valid Admin ID, and Search Contacts to find a contact's Intercom user ID, email, or external user ID. Example: set Conversation ID to192783634529321, Reply Type toadmin, Message Type tocomment, Body toThanks for reaching out!, and Admin ID to25to post that comment as an admin reply. See the documentation.Writev0.1.1 -
Retrieve A Conversation
actionFetches a single Intercom conversation by ID and returns the full conversation object, includingid,title,state,created_at,conversation_parts(the message thread), and assignee information. Use this to inspect conversation history or verify state before calling Manage A Conversation or Reply To Conversation. Example: set Conversation ID to123456789to retrieve that conversation. Pass Fields (e.g.["id", "state", "assignee", "created_at"]) to limit the returned object to only those keys. See the documentation.Read-onlyv0.1.1 -
Search Contacts
actionSearch Intercom contacts by a query string (POST /contacts/search). Returns a bounded page of matching contacts, each includingid,email, andexternal_idso you can copy the appropriate value into Reply To Conversation's Intercom User ID, Email, or User ID prop. Ifpages.next.starting_afteris present in the response, call this action again with that cursor in Starting After to retrieve the next page. Pass Fields (e.g.["id", "email", "external_id"]) to limit each returned contact to only those keys. Example: set Query toacmeto find all contacts whose email containsacme. See the documentation.Read-onlyv0.0.2 -
Send Incoming Message
actionCreates a new inbound conversation in Intercom on behalf of a contact (POST /conversations). The action first fetches the contact's role via GET /contacts/{id} to set the correct message sender type — this counts as an additional API call. Use Search Contacts to find valid contact IDs before calling this action. Example: set User to63a07ddf05a32042dffac965and Body toHi, I need help with my orderto open a new conversation from that contact. Returns the new conversation object includingid. See the documentationWritev0.0.9 -
Send Message To Contact
actionSends an outbound message from an admin to a contact in Intercom (POST /messages). Set Message Type toin_appfor an in-app message oremailfor an email — email messages require Subject and support Template (plainorpersonal). Use List Admin ID Options to find a valid From ID and Search Contacts to find a valid To ID. Example: set Message Type toemail, Subject toWelcome!, Template topersonal, From ID to25, To Type touser, and To ID to536e564f316c83104c000020to send a personal welcome email to that contact. See the documentation.Writev0.0.5 -
Upsert Contact
actionCreate a new contact, or update an existing one if a contact with the same Email already exists — Email is the match key for this upsert (any other props you set only apply to the created/updated record, they do not affect matching). Example: set Email tojane.doe@acme.com, Name toJane Doe, and Custom Attributes to{"plan": "pro"}to create Jane's contact, or update hername/planif a contact with that email already exists. Returns the full contact object, including its Intercomid. See the documentation.Writev0.0.6
EVENTS
Intercom triggers
Event sources your backend can deploy for users and receive through a webhook.
-
New Companies
triggerEmit new event each time a new company is added.v0.0.9 -
New Reply From Admin
triggerEmit new event each time an admin replies to a conversation.v0.0.9 -
New Conversations
triggerEmit new event each time a new conversation is added.v0.0.9 -
New Reply From User
triggerEmit new event each time a user replies to a conversation.v0.0.9 -
New Unsubscriptions
triggerEmit new event each time a user unsubscribes from receiving emails.v0.0.9 -
New Users
triggerEmit new event each time a new user is added.v0.0.9 -
Lead Added Email
triggerEmit new event each time a lead adds their email address.v0.0.9 -
New Closed Conversation
triggerEmit new event each time a conversation is closed.v0.0.9 -
New Conversation Rating Added
triggerEmit new event each time a new rating is added to a conversation.v0.0.6 -
New Event
triggerEmit new event for each new Intercom event for a user.v0.0.9 -
New Leads
triggerEmit new event each time a new lead is added.v0.0.9 -
New Tickets
triggerEmit new event when a new ticket is created in Intercom.v0.0.3 -
New Topic (Instant)
triggerEmit new event for each new topic that you subscribed in your webhook. See more here.Instantv0.0.6 -
Tag Added To Conversation
triggerEmit new event each time a new tag is added to a conversation.v0.0.9 -
Tag Added To Lead
triggerEmit new event each time a new tag is added to a lead.v0.0.9 -
Tag Added To User
triggerEmit new event each time a new tag is added to a user.v0.0.9
MULTI-APP
Use Intercom with other popular apps
Most products don't stop at one integration. Pair Intercom with the other apps your users rely on, and ship use cases that span both.
- App slug
- intercom
- Authentication
- OAuth
- Categories
- Communication
- Actions
- 13
- Triggers
- 16
- API proxy
- Available