🎯

intercom

🎯Skill

from vm0-ai/vm0-skills

VibeIndex|
What it does

Manages customer interactions by creating, updating, and tracking contacts, conversations, messages, and support tickets via Intercom API.

πŸ“¦

Part of

vm0-ai/vm0-skills(138 items)

intercom

Installation

Add MarketplaceAdd marketplace to Claude Code
/plugin marketplace add vm0-ai/vm0-skills
Install PluginInstall plugin from marketplace
/plugin install notion@vm0-skills
Install PluginInstall plugin from marketplace
/plugin install slack-webhook@vm0-skills
git cloneClone repository
git clone https://github.com/vm0-ai/vm0-skills.git
πŸ“– Extracted from docs: vm0-ai/vm0-skills
11Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

Intercom REST API for managing customer conversations, contacts, messages, and support tickets. Use this skill to send messages, manage contacts, handle conversations, and access help center content.

Overview

# Intercom API

Manage customer conversations, contacts, messages, articles, and support operations via the Intercom REST API.

> Official docs: https://developers.intercom.com/docs

---

When to Use

Use this skill when you need to:

  • Manage contacts - Create, update, search, and delete user profiles
  • Handle conversations - List, search, reply to, assign, and close conversations
  • Send messages - Create and send messages to contacts
  • Manage companies - Track organizations and their members
  • Work with articles - Access help center content and knowledge base
  • Add notes - Annotate contact profiles with internal notes
  • Use tags - Organize contacts and conversations with labels
  • Track events - Record custom user activities and behaviors
  • Manage tickets - Create and handle support tickets

---

Prerequisites

Getting Your Access Token

  1. Log in to your [Intercom workspace](https://app.intercom.com/)
  2. Navigate to Settings β†’ Developers β†’ Developer Hub
  3. Create a new app or select an existing one
  4. Go to Configure β†’ Authentication
  5. Copy your Access Token

```bash

export INTERCOM_ACCESS_TOKEN="your_access_token"

```

Verify Token

Test your token:

```bash

bash -c 'curl -s "https://api.intercom.io/admins" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Accept: application/json" -H "Intercom-Version: 2.14"' | jq '.admins[] | {id, name, email}'

```

Expected response: List of admins in your workspace

βœ… This skill has been tested and verified with a live Intercom workspace. All core endpoints work correctly.

Regional Endpoints

  • US (Default): https://api.intercom.io/
  • Europe: https://api.eu.intercom.io/
  • Australia: https://api.au.intercom.io/

---

> Important: When using $VAR in a command that pipes to another command, wrap the command containing $VAR in bash -c '...'. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.

> ```bash

> bash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY"' | jq .

> ```

How to Use

All examples assume INTERCOM_ACCESS_TOKEN is set.

Base URL: https://api.intercom.io/

Required Headers:

  • Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}
  • Accept: application/json
  • Intercom-Version: 2.14

---

Core APIs

1. List Admins

Get all admins/teammates in your workspace:

```bash

bash -c 'curl -s "https://api.intercom.io/admins" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Accept: application/json" -H "Intercom-Version: 2.14"' | jq '.admins[] | {id, name, email}'

```

---

2. Create Contact

Create a new contact (lead or user):

Write to /tmp/intercom_request.json:

```json

{

"email": "user@example.com",

"name": "John Doe",

"phone": "+1234567890"

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/contacts" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Accept: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

With custom attributes:

Write to /tmp/intercom_request.json:

```json

{

"email": "user@example.com",

"name": "John Doe",

"custom_attributes": {

"plan": "premium",

"signup_date": "2024-01-15"

}

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/contacts" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Accept: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

3. Get Contact

Retrieve a specific contact by ID. Replace with the actual contact ID:

```bash

curl -s "https://api.intercom.io/contacts/" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Accept: application/json" -H "Intercom-Version: 2.14"

```

---

4. Update Contact

Update contact information. Replace with the actual contact ID:

Write to /tmp/intercom_request.json:

```json

{

"name": "Jane Doe",

"custom_attributes": {

"plan": "enterprise"

}

}

```

Then run:

```bash

curl -s -X PATCH "https://api.intercom.io/contacts/" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Accept: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json

```

Note: Newly created contacts may need a few seconds before they can be updated.

---

5. Delete Contact

Permanently delete a contact. Replace with the actual contact ID:

```bash

curl -s -X DELETE "https://api.intercom.io/contacts/" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Accept: application/json" -H "Intercom-Version: 2.14"

```

---

6. Search Contacts

Search contacts with filters:

Write to /tmp/intercom_request.json:

```json

{

"query": {

"field": "email",

"operator": "=",

"value": "user@example.com"

}

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/contacts/search" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json' | jq '.data[] | {id, email, name}'

```

Search with multiple filters:

Write to /tmp/intercom_request.json:

```json

{

"query": {

"operator": "AND",

"value": [

{

"field": "role",

"operator": "=",

"value": "user"

},

{

"field": "custom_attributes.plan",

"operator": "=",

"value": "premium"

}

]

}

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/contacts/search" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json' | jq '.data[] | {id, email, name}'

```

---

7. List Conversations

Get all conversations:

```bash

bash -c 'curl -s "https://api.intercom.io/conversations?order=desc&sort=updated_at" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Accept: application/json" -H "Intercom-Version: 2.14"' | jq '.conversations[] | {id, state, created_at, updated_at}'

```

---

8. Get Conversation

Retrieve a specific conversation. Replace with the actual conversation ID:

```bash

bash -c 'curl -s "https://api.intercom.io/conversations/" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Accept: application/json" -H "Intercom-Version: 2.14"'

```

---

9. Search Conversations

Search for open conversations:

Write to /tmp/intercom_request.json:

```json

{

"query": {

"operator": "AND",

"value": [

{

"field": "state",

"operator": "=",

"value": "open"

}

]

}

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/conversations/search" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json' | jq '.conversations[] | {id, state, created_at}'

```

Search by assignee:

Replace with the actual admin ID in the request JSON below.

Write to /tmp/intercom_request.json:

```json

{

"query": {

"field": "admin_assignee_id",

"operator": "=",

"value": ""

}

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/conversations/search" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json' | jq '.conversations[] | {id, state, created_at}'

```

---

10. Reply to Conversation

Reply as an admin. Replace and with actual IDs:

Write to /tmp/intercom_request.json:

```json

{

"message_type": "comment",

"type": "admin",

"admin_id": "",

"body": "Thank you for your message. We'll help you with this."

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/conversations//parts" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

11. Assign Conversation

Assign a conversation to an admin or team. Replace , , and with actual IDs:

Write to /tmp/intercom_request.json:

```json

{

"message_type": "assignment",

"type": "admin",

"admin_id": "",

"assignee_id": ""

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/conversations//parts" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

12. Close Conversation

Close an open conversation. Replace and with actual IDs:

Write to /tmp/intercom_request.json:

```json

{

"message_type": "close",

"type": "admin",

"admin_id": ""

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/conversations//parts" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

13. Create Note

Add an internal note to a contact. Replace with the actual contact ID:

Write to /tmp/intercom_request.json:

```json

{

"body": "Customer is interested in enterprise plan. Follow up next week."

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/contacts//notes" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

14. List Tags

Get all tags:

```bash

bash -c 'curl -s "https://api.intercom.io/tags" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Intercom-Version: 2.14"' | jq '.data[] | {id, name}'

```

---

15. Create Tag

Create a new tag:

Write to /tmp/intercom_request.json:

```json

{

"name": "VIP Customer"

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/tags" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

16. Tag Contact

Add a tag to a contact. Replace and with actual IDs:

Write to /tmp/intercom_request.json:

```json

{

"id": ""

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/contacts//tags" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

17. Untag Contact

Remove a tag from a contact. Replace and with actual IDs:

```bash

curl -s -X DELETE "https://api.intercom.io/contacts//tags/" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Intercom-Version: 2.14"

```

---

18. List Articles

Get help center articles:

```bash

bash -c 'curl -s "https://api.intercom.io/articles" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Intercom-Version: 2.14"' | jq '.data[] | {id, title, url}'

```

---

19. Get Article

Retrieve a specific article. Replace with the actual article ID:

```bash

bash -c 'curl -s "https://api.intercom.io/articles/" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Intercom-Version: 2.14"'

```

---

20. Create Company

Create a new company:

Write to /tmp/intercom_request.json:

```json

{

"company_id": "acme-corp-123",

"name": "Acme Corporation",

"plan": "enterprise",

"size": 500,

"website": "https://acme.com"

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/companies" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

21. Attach Contact to Company

Associate a contact with a company. Replace and with actual IDs:

Write to /tmp/intercom_request.json:

```json

{

"id": ""

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/contacts//companies" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

22. Track Event

Record a custom event for a contact:

Write to /tmp/intercom_request.json:

```json

{

"event_name": "purchased-plan",

"created_at": 1234567890,

"user_id": "user-123",

"metadata": {

"plan": "premium",

"price": 99

}

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/events" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

Common Workflows

Find and Reply to Open Conversations

Write to /tmp/intercom_request.json:

```json

{

"query": {

"field": "state",

"operator": "=",

"value": "open"

}

}

```

Then run:

```bash

# Search for open conversations

OPEN_CONVS="$(bash -c 'curl -s -X POST "https://api.intercom.io/conversations/search" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json | jq -r ".conversations[0].id"')"

# Replace with the actual admin ID

ADMIN_ID=""

```

Write to /tmp/intercom_request.json:

```json

{

"message_type": "comment",

"type": "admin",

"admin_id": "",

"body": "We're looking into this for you."

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/conversations/${OPEN_CONVS}/parts" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

Create Contact and Add to Company

Write to /tmp/intercom_request.json:

```json

{

"email": "newuser@acme.com",

"name": "New User"

}

```

Then run:

```bash

# Create contact and extract ID

CONTACT_ID=$(bash -c 'curl -s -X POST "https://api.intercom.io/contacts" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json | jq -r ".id"')

# Replace with the actual company ID

COMPANY_ID=""

```

Write to /tmp/intercom_request.json:

```json

{

"id": ""

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/contacts/${CONTACT_ID}/companies" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json'

```

---

Search Operators

Field Operators

  • = - Equals
  • != - Not equals
  • < - Less than
  • > - Greater than
  • <= - Less than or equal
  • >= - Greater than or equal
  • IN - In list
  • NIN - Not in list
  • ~ - Contains (for strings)
  • !~ - Does not contain

Query Operators

  • AND - All conditions must match
  • OR - Any condition can match

Example Complex Search

Write to /tmp/intercom_request.json:

```json

{

"query": {

"operator": "AND",

"value": [

{

"field": "role",

"operator": "=",

"value": "user"

},

{

"field": "created_at",

"operator": ">",

"value": 1609459200

},

{

"field": "custom_attributes.plan",

"operator": "IN",

"value": ["premium", "enterprise"]

}

]

},

"pagination": {

"per_page": 50

}

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://api.intercom.io/contacts/search" -H "Authorization: Bearer ${INTERCOM_ACCESS_TOKEN}" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json' | jq '.data[] | {id, email, name}'

```

---

Rate Limits

  • Private Apps: 10,000 API calls per minute
  • Public Apps: 10,000 API calls per minute
  • Workspace Limit: 25,000 API calls per minute (combined)

When rate limited, API returns 429 Too Many Requests.

Rate Limit Headers:

  • X-RateLimit-Limit: Requests per minute allowed
  • X-RateLimit-Remaining: Remaining requests in current window
  • X-RateLimit-Reset: Unix timestamp when limit resets

---

Guidelines

  1. Always include required headers: All requests should have Authorization, Accept: application/json, and Intercom-Version: 2.14 headers
  2. Use correct HTTP methods:

- GET for retrieving data

- POST for creating resources and searches

- PATCH for updating resources (not PUT)

- DELETE for removing resources

  1. Handle rate limits: Monitor X-RateLimit-Remaining and implement exponential backoff
  2. Wait after creating resources: Newly created contacts may need a few seconds before they can be updated or searched
  3. Use search wisely: Search endpoints are powerful but count toward rate limits
  4. Pagination: Use cursor-based pagination for large datasets
  5. Test with small datasets: Verify your queries work before scaling up
  6. Secure tokens: Never expose access tokens in public repositories or logs
  7. Use filters: Narrow search results with filters to reduce API calls
  8. Conversation states: Valid states are open, closed, snoozed
  9. Custom attributes: Define custom fields in Intercom UI before using in API
  10. Check workspace ID: Your workspace ID is included in contact responses for verification

---

API Reference

  • Main Documentation: https://developers.intercom.com/docs
  • API Reference: https://developers.intercom.com/docs/references/rest-api/api-intercom-com/
  • Authentication: https://developers.intercom.com/docs/build-an-integration/learn-more/authentication/
  • Rate Limiting: https://developers.intercom.com/docs/references/rest-api/errors/rate-limiting/
  • Contacts API: https://developers.intercom.com/docs/references/rest-api/api-intercom-com/contacts/
  • Conversations API: https://developers.intercom.com/docs/references/rest-api/api-intercom-com/conversations/
  • Developer Hub: https://app.intercom.com/a/apps/_/developer-hub

More from this repository10