Agent skill
intercom
Intercom API for customer messaging. Use when user mentions "Intercom", "customer chat", "messaging", or asks about Intercom conversations.
Install this agent skill to your Project
npx add-skill https://github.com/vm0-ai/vm0-skills/tree/main/intercom
SKILL.md
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
- Log in to your Intercom workspace
- Navigate to Settings → Developers → Developer Hub
- Create a new app or select an existing one
- Go to Configure → Authentication
- Copy your Access Token
export INTERCOM_TOKEN="your_access_token"
Verify Token
Test your token:
curl -s "https://api.intercom.io/admins" -H "Authorization: Bearer $(printenv INTERCOM_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/
How to Use
All examples assume INTERCOM_TOKEN is set.
Base URL: https://api.intercom.io/
Required Headers:
Authorization: Bearer ${INTERCOM_TOKEN}Accept: application/jsonIntercom-Version: 2.14
Core APIs
1. List Admins
Get all admins/teammates in your workspace:
curl -s "https://api.intercom.io/admins" -H "Authorization: Bearer $(printenv INTERCOM_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:
{
"email": "user@example.com",
"name": "John Doe",
"phone": "+1234567890"
}
Then run:
curl -s -X POST "https://api.intercom.io/contacts" -H "Authorization: Bearer $(printenv INTERCOM_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:
{
"email": "user@example.com",
"name": "John Doe",
"custom_attributes": {
"plan": "premium",
"signup_date": "2024-01-15"
}
}
Then run:
curl -s -X POST "https://api.intercom.io/contacts" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-contact-id> with the actual contact ID:
curl -s "https://api.intercom.io/contacts/<your-contact-id>" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Accept: application/json" -H "Intercom-Version: 2.14"
4. Update Contact
Update contact information. Replace <your-contact-id> with the actual contact ID:
Write to /tmp/intercom_request.json:
{
"name": "Jane Doe",
"custom_attributes": {
"plan": "enterprise"
}
}
Then run:
curl -s -X PATCH "https://api.intercom.io/contacts/<your-contact-id>" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-contact-id> with the actual contact ID:
curl -s -X DELETE "https://api.intercom.io/contacts/<your-contact-id>" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Accept: application/json" -H "Intercom-Version: 2.14"
6. Search Contacts
Search contacts with filters:
Write to /tmp/intercom_request.json:
{
"query": {
"field": "email",
"operator": "=",
"value": "user@example.com"
}
}
Then run:
curl -s -X POST "https://api.intercom.io/contacts/search" -H "Authorization: Bearer $(printenv INTERCOM_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:
{
"query": {
"operator": "AND",
"value": [
{
"field": "role",
"operator": "=",
"value": "user"
},
{
"field": "custom_attributes.plan",
"operator": "=",
"value": "premium"
}
]
}
}
Then run:
curl -s -X POST "https://api.intercom.io/contacts/search" -H "Authorization: Bearer $(printenv INTERCOM_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:
curl -s "https://api.intercom.io/conversations?order=desc&sort=updated_at" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-conversation-id> with the actual conversation ID:
curl -s "https://api.intercom.io/conversations/<your-conversation-id>" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Accept: application/json" -H "Intercom-Version: 2.14"
9. Search Conversations
Search for open conversations:
Write to /tmp/intercom_request.json:
{
"query": {
"operator": "AND",
"value": [
{
"field": "state",
"operator": "=",
"value": "open"
}
]
}
}
Then run:
curl -s -X POST "https://api.intercom.io/conversations/search" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-admin-id> with the actual admin ID in the request JSON below.
Write to /tmp/intercom_request.json:
{
"query": {
"field": "admin_assignee_id",
"operator": "=",
"value": "<your-admin-id>"
}
}
Then run:
curl -s -X POST "https://api.intercom.io/conversations/search" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-conversation-id> and <your-admin-id> with actual IDs:
Write to /tmp/intercom_request.json:
{
"message_type": "comment",
"type": "admin",
"admin_id": "<your-admin-id>",
"body": "Thank you for your message. We'll help you with this."
}
Then run:
curl -s -X POST "https://api.intercom.io/conversations/<your-conversation-id>/parts" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-conversation-id>, <your-admin-id>, and <your-assignee-id> with actual IDs:
Write to /tmp/intercom_request.json:
{
"message_type": "assignment",
"type": "admin",
"admin_id": "<your-admin-id>",
"assignee_id": "<your-assignee-id>"
}
Then run:
curl -s -X POST "https://api.intercom.io/conversations/<your-conversation-id>/parts" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json
12. Close Conversation
Close an open conversation. Replace <your-conversation-id> and <your-admin-id> with actual IDs:
Write to /tmp/intercom_request.json:
{
"message_type": "close",
"type": "admin",
"admin_id": "<your-admin-id>"
}
Then run:
curl -s -X POST "https://api.intercom.io/conversations/<your-conversation-id>/parts" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-contact-id> with the actual contact ID:
Write to /tmp/intercom_request.json:
{
"body": "Customer is interested in enterprise plan. Follow up next week."
}
Then run:
curl -s -X POST "https://api.intercom.io/contacts/<your-contact-id>/notes" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json
14. List Tags
Get all tags:
curl -s "https://api.intercom.io/tags" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Intercom-Version: 2.14" | jq '.data[] | {id, name}'
15. Create Tag
Create a new tag:
Write to /tmp/intercom_request.json:
{
"name": "VIP Customer"
}
Then run:
curl -s -X POST "https://api.intercom.io/tags" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-contact-id> and <your-tag-id> with actual IDs:
Write to /tmp/intercom_request.json:
{
"id": "<your-tag-id>"
}
Then run:
curl -s -X POST "https://api.intercom.io/contacts/<your-contact-id>/tags" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-contact-id> and <your-tag-id> with actual IDs:
curl -s -X DELETE "https://api.intercom.io/contacts/<your-contact-id>/tags/<your-tag-id>" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Intercom-Version: 2.14"
18. List Articles
Get help center articles:
curl -s "https://api.intercom.io/articles" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Intercom-Version: 2.14" | jq '.data[] | {id, title, url}'
19. Get Article
Retrieve a specific article. Replace <your-article-id> with the actual article ID:
curl -s "https://api.intercom.io/articles/<your-article-id>" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Intercom-Version: 2.14"
20. Create Company
Create a new company:
Write to /tmp/intercom_request.json:
{
"company_id": "acme-corp-123",
"name": "Acme Corporation",
"plan": "enterprise",
"size": 500,
"website": "https://acme.com"
}
Then run:
curl -s -X POST "https://api.intercom.io/companies" -H "Authorization: Bearer $(printenv INTERCOM_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 <your-contact-id> and <your-company-id> with actual IDs:
Write to /tmp/intercom_request.json:
{
"id": "<your-company-id>"
}
Then run:
curl -s -X POST "https://api.intercom.io/contacts/<your-contact-id>/companies" -H "Authorization: Bearer $(printenv INTERCOM_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:
{
"event_name": "purchased-plan",
"created_at": 1234567890,
"user_id": "user-123",
"metadata": {
"plan": "premium",
"price": 99
}
}
Then run:
curl -s -X POST "https://api.intercom.io/events" -H "Authorization: Bearer $(printenv INTERCOM_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:
{
"query": {
"field": "state",
"operator": "=",
"value": "open"
}
}
Then run:
# Search for open conversations
OPEN_CONVS="$(curl -s -X POST "https://api.intercom.io/conversations/search" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json | jq -r ".conversations[0].id")"
# Replace <your-admin-id> with the actual admin ID
ADMIN_ID="<your-admin-id>"
Write to /tmp/intercom_request.json:
{
"message_type": "comment",
"type": "admin",
"admin_id": "<your-admin-id>",
"body": "We're looking into this for you."
}
Then run:
curl -s -X POST "https://api.intercom.io/conversations/${OPEN_CONVS}/parts" -H "Authorization: Bearer $(printenv INTERCOM_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:
{
"email": "newuser@acme.com",
"name": "New User"
}
Then run:
# Create contact and extract ID
CONTACT_ID=$(curl -s -X POST "https://api.intercom.io/contacts" -H "Authorization: Bearer $(printenv INTERCOM_TOKEN)" -H "Content-Type: application/json" -H "Intercom-Version: 2.14" -d @/tmp/intercom_request.json | jq -r ".id")
# Replace <your-company-id> with the actual company ID
COMPANY_ID="<your-company-id>"
Write to /tmp/intercom_request.json:
{
"id": "<your-company-id>"
}
Then run:
curl -s -X POST "https://api.intercom.io/contacts/${CONTACT_ID}/companies" -H "Authorization: Bearer $(printenv INTERCOM_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 equalIN- In listNIN- Not in list~- Contains (for strings)!~- Does not contain
Query Operators
AND- All conditions must matchOR- Any condition can match
Example Complex Search
Write to /tmp/intercom_request.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:
curl -s -X POST "https://api.intercom.io/contacts/search" -H "Authorization: Bearer $(printenv INTERCOM_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 allowedX-RateLimit-Remaining: Remaining requests in current windowX-RateLimit-Reset: Unix timestamp when limit resets
Guidelines
- Always include required headers: All requests should have
Authorization,Accept: application/json, andIntercom-Version: 2.14headers - Use correct HTTP methods:
GETfor retrieving dataPOSTfor creating resources and searchesPATCHfor updating resources (not PUT)DELETEfor removing resources
- Handle rate limits: Monitor
X-RateLimit-Remainingand implement exponential backoff - Wait after creating resources: Newly created contacts may need a few seconds before they can be updated or searched
- Use search wisely: Search endpoints are powerful but count toward rate limits
- Pagination: Use cursor-based pagination for large datasets
- Test with small datasets: Verify your queries work before scaling up
- Secure tokens: Never expose access tokens in public repositories or logs
- Use filters: Narrow search results with filters to reduce API calls
- Conversation states: Valid states are
open,closed,snoozed - Custom attributes: Define custom fields in Intercom UI before using in API
- 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
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
brave-search
Brave Search API for web search. Use when user says "search web", "Brave search", or asks to "find on web" without specifying Google.
supadata
Supadata API for YouTube/web data. Use when user mentions "Supadata", "YouTube data", "channel stats", or web scraping data.
roadmap-planning
Build and prioritize product roadmaps using scoring models like RICE, ICE, and value-effort matrices. Activate when creating a product roadmap, prioritizing features, sequencing initiatives, mapping dependencies, balancing team capacity, choosing between Now/Next/Later or quarterly planning, or communicating roadmap tradeoffs to executives and stakeholders.
qdrant
Qdrant API for vector search. Use when user mentions "Qdrant", "vector database", "semantic search", or embeddings storage.
calendly
Calendly scheduling API. Use when user mentions "Calendly", "calendly.com", "schedule a meeting", "booking link", "event types", or asks about interview scheduling.
stripe
Stripe API for payments. Use when user mentions "Stripe", "payment", "subscription", "billing", "invoice", or asks about payment processing.
Didn't find tool you were looking for?