> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Intercom Integration for AI Agents & Workflows

> Customer communication platform for support, engagement, and marketing automation.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img className="block dark:hidden" src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/intercom-light.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=d856b06b92f1a7c9c45a0a255560e996" alt="Intercom logo" width="72" height="72" data-path="logos/intercom-light.svg" />

<img className="hidden dark:block" src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/intercom-dark.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=1d52a89fe148981a832488b6c8454b9c" alt="Intercom logo" width="72" height="72" data-path="logos/intercom-dark.svg" />

## Overview

Add **Intercom** to any ModuleX agent or workflow. Customer-communication integration for Intercom: contacts (CRUD + search), notes, tags, admins, conversations (CRUD + search), and inbound/outbound messaging. All against `api.intercom.io` with the `Intercom-Version: 2.12` header on every request.

<Info>
  **Categories**: Customer Support · CRM & Customer · Communication · Automation · Development · **Auth**: Access Token · **Actions**: 13
</Info>

## Authentication

### Access Token

Use your Intercom Access Token for direct authentication

#### Required Credentials

| Field        | Description                                                                                                                                                                                                                                                                    | Required | Format                                           |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ------------------------------------------------ |
| Access Token | Your Intercom Access Token                                                                                                                                                                                                                                                     | Yes      | `dG9rOjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |
| API Base URL | Intercom API base URL (optional — leave empty for [https://api.intercom.io](https://api.intercom.io) US default). Set to [https://api.eu.intercom.io](https://api.eu.intercom.io) for EU workspaces or [https://api.au.intercom.io](https://api.au.intercom.io) for Australia. | No       | `https://api.intercom.io`                        |

## Available Actions

<AccordionGroup>
  <Accordion title="get_contact — Get a contact by their unique Intercom ID">
    ### Parameters

    <ResponseField name="contact_id" type="string" required>
      The unique identifier for the contact
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetContactOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="search_contacts — Search for contacts using various fields and operators">
    ### Parameters

    <ResponseField name="query_field" type="string">
      Field to search by (email, name, phone, role, external\_id, etc.) (Default: `email`)
    </ResponseField>

    <ResponseField name="query_operator" type="string">
      Query operator (=, !=, >, \<, ~~, !~~, IN, NIN) (Default: `=`)
    </ResponseField>

    <ResponseField name="query_value" type="string" required>
      Value to search for
    </ResponseField>

    <ResponseField name="per_page" type="integer">
      Results per page (max 150) (Default: `50`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "contacts": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Contacts",
          "type": "array"
        },
        "total_count": {
          "default": 0,
          "title": "Total Count",
          "type": "integer"
        },
        "pages": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Pages"
        }
      },
      "required": [
        "success"
      ],
      "title": "SearchContactsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="upsert_contact — Create a new contact or update an existing one by email. Searches first; on match it PUTs, otherwise it POSTs.">
    ### Parameters

    <ResponseField name="email" type="string" required>
      The contact's email address
    </ResponseField>

    <ResponseField name="role" type="string">
      Role of the contact ('user' or 'lead')
    </ResponseField>

    <ResponseField name="external_id" type="string">
      A unique identifier from your system
    </ResponseField>

    <ResponseField name="phone" type="string">
      The contact's phone number
    </ResponseField>

    <ResponseField name="name" type="string">
      The contact's name
    </ResponseField>

    <ResponseField name="avatar" type="string">
      URL of the avatar image
    </ResponseField>

    <ResponseField name="unsubscribed_from_emails" type="boolean">
      Whether the contact is unsubscribed from emails
    </ResponseField>

    <ResponseField name="custom_attributes" type="object">
      Custom attributes for the contact
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "action_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Action Type"
        },
        "contact": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Contact"
        }
      },
      "required": [
        "success"
      ],
      "title": "UpsertContactOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_note — Create a note on a contact's record. Auto-attributes the note to the authenticated admin (via a side GET to /me).">
    ### Parameters

    <ResponseField name="contact_id" type="string" required>
      The contact's unique Intercom identifier
    </ResponseField>

    <ResponseField name="body" type="string" required>
      The note content (supports HTML)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateNoteOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="add_tag_to_contact — Add a tag to a contact">
    ### Parameters

    <ResponseField name="contact_id" type="string" required>
      The contact's unique Intercom identifier
    </ResponseField>

    <ResponseField name="tag_id" type="string" required>
      The tag's unique identifier
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "AddTagToContactOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_tags — List all tags in the Intercom workspace">
    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListTagsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_admins — List all admins/teammates in the Intercom workspace">
    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListAdminsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_conversation — Get a conversation by its unique ID">
    ### Parameters

    <ResponseField name="conversation_id" type="string" required>
      The conversation's unique identifier
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetConversationOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_conversations — List conversations in the Intercom workspace">
    ### Parameters

    <ResponseField name="per_page" type="integer">
      Conversations per page (max 150) (Default: `20`)
    </ResponseField>

    <ResponseField name="starting_after" type="string">
      Pagination cursor from previous response
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "conversations": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Conversations",
          "type": "array"
        },
        "pages": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Pages"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListConversationsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="search_conversations — Search for conversations using various fields and operators">
    ### Parameters

    <ResponseField name="query_field" type="string">
      Field to search by (created\_at, state, source.type, etc.) (Default: `created_at`)
    </ResponseField>

    <ResponseField name="query_operator" type="string">
      Query operator (=, !=, >, \<, IN, NIN) (Default: `>`)
    </ResponseField>

    <ResponseField name="query_value" type="string" required>
      Value to search for (timestamp for date fields)
    </ResponseField>

    <ResponseField name="per_page" type="integer">
      Results per page (max 150) (Default: `20`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "conversations": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Conversations",
          "type": "array"
        },
        "total_count": {
          "default": 0,
          "title": "Total Count",
          "type": "integer"
        },
        "pages": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Pages"
        }
      },
      "required": [
        "success"
      ],
      "title": "SearchConversationsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="send_incoming_message — Send a message from a user to start a conversation. Auto-detects the contact's role via a side GET.">
    ### Parameters

    <ResponseField name="contact_id" type="string" required>
      The contact's unique Intercom identifier
    </ResponseField>

    <ResponseField name="body" type="string" required>
      The message content
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "SendIncomingMessageOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="send_message_to_contact — Send a message from an admin to a contact">
    ### Parameters

    <ResponseField name="from_admin_id" type="string" required>
      The admin's unique identifier
    </ResponseField>

    <ResponseField name="to_contact_id" type="string" required>
      The contact's unique identifier
    </ResponseField>

    <ResponseField name="to_type" type="string">
      Recipient type ('user' or 'lead') (Default: `user`)
    </ResponseField>

    <ResponseField name="message_type" type="string">
      Message type ('in\_app' or 'email') (Default: `in_app`)
    </ResponseField>

    <ResponseField name="subject" type="string" required>
      Subject/title of the message
    </ResponseField>

    <ResponseField name="body" type="string" required>
      Message content (HTML and plaintext supported)
    </ResponseField>

    <ResponseField name="template" type="string">
      Template style ('plain' or 'personal') (Default: `personal`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "SendMessageToContactOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="reply_to_conversation — Reply to an existing conversation">
    ### Parameters

    <ResponseField name="conversation_id" type="string" required>
      The conversation's unique identifier
    </ResponseField>

    <ResponseField name="reply_type" type="string" required>
      Type of reply ('user' or 'admin')
    </ResponseField>

    <ResponseField name="message_type" type="string">
      Message type ('comment' or 'note', note only for admin) (Default: `comment`)
    </ResponseField>

    <ResponseField name="body" type="string" required>
      The reply content
    </ResponseField>

    <ResponseField name="admin_id" type="string">
      Admin ID (required if reply\_type is 'admin')
    </ResponseField>

    <ResponseField name="intercom_user_id" type="string">
      Intercom user ID (for user reply)
    </ResponseField>

    <ResponseField name="attachment_urls" type="array">
      List of image URLs to attach (max 10)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "ReplyToConversationOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* `per_page` is clamped at 150 (Intercom's max).
* `reply_to_conversation` allows up to 10 attachment URLs (Intercom's
  max).
* Failures (non-2xx, exceptions) surface as `success=False` + `error`.

## Related integrations

<CardGroup cols={3}>
  <Card title="Klaviyo" href="/integrations/tools/klaviyo" />

  <Card title="Pinterest" href="/integrations/tools/pinterest" />

  <Card title="ServiceNow" href="/integrations/tools/servicenow" />
</CardGroup>

## Links

* [Intercom](https://www.intercom.com)
