Webhook models

Webhook Topics

You can subscribe to the following Webhook topics, and you will receive notifications on your endpoint URL when an event occurs. The 'Object' column shows the Intercom object related to the event sent as part of the notification.

Each Webhook topic is associated with one or more permissions. When you set up a subscription to a particular topic, you will need to select the appropriate permissions to be able to receive a notification for that topic.

Multiple permissions

Some topic are associated with multiple permissions. In these cases you don't need to select all of these permissions to subscribe to that topic.

Admin topics

TopicObjectEvent descriptionPermissions
admin.added_to_workspaceAdminAn Admin being added to workspaceRead admins
admin.away_mode_updatedAdminAdmin away mode updatesRead admins
admin.removed_from_workspaceAdminAn Admin being removed from a workspaceRead admins
admin.logged_inAdminAn Admin logging into a workspaceRead admins
admin.logged_outAdminAn Admin manually logging out of Intercom in the current workspace or when the Admin's session expires after signing in through SAML SSORead admins

Company topics

TopicObjectEvent descriptionPermissions
company.createdCompanyCompany creationsRead users and companies
Read one user and one company
company.deletedCompanyCompany deletionsRead users and companies
Read one user and one company
company.updatedCompanyCompany being updatedRead users and companies
Read one user and one company
company.contact.attachedCompany, ContactCompany attached to a ContactRead users and companies, Read one user and one company
company.contact.detachedCompany, ContactCompany detached from a ContactRead users and companies, Read one user and one company

Contact topics

TopicObjectEvent descriptionPermissions
contact.archivedContactContacts archivedRead users and companies
Read and write users
Read one user and one company
contact.deletedContactContacts deletedRead users and companies
Read one user and one company
contact.email.updatedContactA Contact email address is updatedRead users and companies
Read and write users
Read one user and one company
contact.lead.added_emailContactAn email address is added to a Contact
(Lead)
Read users and companies
Read and write users
Read one user and one company
contact.lead.createdContactContact creations
(Lead)
Read users and companies
Read and write users
Read one user and one company
contact.lead.signed_upContactContacts converting from Leads to UsersRead users and companies
Read and write users
Read one user and one company
contact.lead.tag.createdContact TagContacts being tagged (Lead)Read users and companies
Read and write users
Read one user and one company
contact.lead.tag.deletedContact TagContacts being untagged (Lead)Read users and companies
Read and write users
Read one user and one company
contact.lead.updatedContactContacts being updated
(Lead)
Read users and companies
Read and write users
Read one user and one company
contact.mergedContactContacts being merged
(User and Lead)
Read users and companies
Read and write users
Read one user and one company
contact.subscribedSubscriptionContacts subscribing to emailRead users and companies
Read and write users
Read one user and one company
contact.unarchiveContactContacts unarchivedRead users and companies
Read and write users
Read one user and one company
contact.unsubscribedSubscriptionContacts unsubscribing from emailRead users and companies
Read and write users
Read one user and one company
contact.user.createdContactContact creations
(User)
Read users and companies
Read and write users
Read one user and one company
contact.user.tag.createdContact TagContacts being tagged
(User)
Read users and companies
Read and write users
Read one user and one company
contact.user.tag.deletedContact TagContacts being untagged
(User)
Read users and companies
Read and write users
Read one user and one company
contact.user.updatedContactContact updated (User)Read users and companies, Read and write users,
Read one user and one company

Conversation topics

TopicObjectEvent descriptionPermissions
conversation.admin.assignedConversationAdmin conversation assignmentsRead conversations
conversation.admin.closedConversationAdmin conversation closedRead conversations
conversation.admin.notedConversationAdmin conversation notesRead conversations
conversation.admin.open.assignedConversationAdmin open conversation assignmentsRead conversations
conversation.admin.openedConversationAdmin conversation opensRead conversations
conversation.admin.repliedConversationAdmin conversation repliesRead conversations
conversation.admin.single.createdConversationAdmin initiated 1:1 conversationsRead conversations
conversation.admin.snoozedConversationAdmin conversation snoozesRead conversations
conversation.admin.unsnoozedConversationAdmin conversation unsnoozesRead conversations
conversation.deletedConversationConversation deletedRead conversations
conversation_part.redactedConversation PartConversation parts being deletedRead conversations
conversation_part.tag.createdConversation PartConversation parts being taggedRead conversations
conversation.priority.updatedConversationConversation priority updatedRead conversations
conversation.rating.addedConversationConversations getting a ratingRead conversations
conversation.readConversationContacts reading conversations
(User and Lead)
conversation.user.createdConversationContact initiated conversations
(User and Lead)
Read conversations
conversation.user.repliedConversationContact conversation replies
(Visitor, Lead and User)
Read conversations
conversation.contact.attachedConversation, ContactContact attached to a conversationRead conversations
conversation.contact.detachedConversation, ContactContact detached from a conversationRead conversations

Event topics

TopicObjectEvent descriptionPermissions
event.createdEventEvents createdRead events

Subscription topics

TopicsObjectEvent descriptionPermissions
granular.unsubscribeSubscriptionA User unsubscribes from a message subscription typeRead and list users and companies
Read and write users
Read one user and one company
granular.subscribeSubscriptionA User subscribes from a message subscription typeRead and list users and companies
Read and write users
Read one user and one company

Visitor topics

TopicsObjectEvent descriptionPermissions
visitor.signed_upVisitorContacts converting from Visitors to UsersRead users and companies
Read and write users
Read one user and one company

Ping

TopicsObjectEvent description
pingPingSent when a post to the subscription's ping resource is received or periodically by Intercom. Ping is always subscribed to.

Content stat topics

TopicsObjectEvent descriptionPermissions
content_stat.bannerContent StatBanner message events:
- receipt (Banner displayed)
- goal_success
- click
- collected_email
- reaction
Read content data
content_stat.carouselContent StatMobile carousel events:
- receipt (Carousel displayed)
- goal_success
- button_tap
- completion
- dismissal
- permission_grant
Read content data
content_stat.chatContent StatChat message events:
- receipt (Chat delivered)
- goal_success
- open
- click
- collected_email
- reply
Read content data
content_stat.checklistContent StatChecklist events:
- receipt (Checklist shown)
- goal_success
Read content data
content_stat.custom_botContent StatCustom Bot events:
- receipt
- goal_success
- reply
- completion
Read content data
content_stat.emailContent StatEmail events:
- receipt (Email sent)
- goal_success
- open
- click
- reply

Email failure events:
- hard_bounce
- soft_bounce
- spam_complaint
- unsubscribe
Read content data
content_stat.news_itemContent StatNews Item events:
- receipt (News Item displayed)
- open
- click
- reaction
Read content data
content_stat.postContent StatPost message events:
- receipt (Post sent)
- goal_success
- open
- click
- Reply
- reaction
Read content data
content_stat.pushContent StatPush message events:
- receipt (Push sent)
- goal_success
- Open

Push message failure events:
- push_failure
Read content data
content_stat.seriesContent StatSeries campaign events:
- receipt
- goal_success
- series_completion
- series_disengagement
- series_exit
Read content data
content_stat.series.webhookContent StatSeries Webhook events:
- receipt

Series Webhook failure event:
- failure
Read content data
content_stat.smsContent StatSMS message events:
- receipt (SMS sent)
- goal_success
- keyword_reply

Failure stat types include:
- sms_failure
- unsubscribe
Read content data
content_stat.surveyContent StatSurvey events:
- receipt (Survey shown)
- goal_success
- answer
- click
- completion
- dismissal
Read content data
content_stat.tooltip_groupContent StatTooltip events:
- receipt
- goal_success
Read content data
content_stat.tourContent StatProduct tour events:
- receipt (Tour shown)
- goal_success
- tour_step_failure
- completion
Read content data

Webhook notification object

A standard Webhook notification object contains the following fields:

AttributeTypeDescription
typestringValue is 'notification_event'
idstringThe Intercom defined id representing the notification.
selfstringThe Intercom defined URL for the subscription. Optional.
created_attimestampThe timestamp the notification was created.
topicstringCorresponds to a topic.
delivery_attemptsnumberThe number of times this notification has been attempted.
first_sent_attimestampThe first time the delivery was attempted.
dataobjectA container for the data associated with the notification.
data.itemobjectThe data associated with the notification, which will have a 'type' field.

The contents of data.item object will be defined according to its type field. In the example below, the type value of Company indicates a company object.

{
  "type": "notification_event",
  "topic": "company.created",
  "id": "notif_ccd8a4d0-f965-11e3-a367-c779cae3e1b3",
  "app_id" : "a86dr8yl",
  "created_at": 1392731331,
  "delivery_attempts": 1,
  "first_sent_at": 1392731392,
  "data": {
    "item": {
      "type": "company",
      "id": "531ee472cce572a6ec000006",
      "name": "Blue Sun",
      "company_id": "6",
      "remote_created_at": 1394531169,
      "created_at": 1394533506,
      "updated_at": 1396874658,
      "custom_attributes": {
      }
    }
  }
}

Handling Webhook notifications

You will receive notifications on your chosen topics when you set up a subscription. How you handle those notifications, i.e. the HTTP status code returned, will determine the subsequent state of that subscription.

Timeout

You have 5 seconds to respond to a notification. If you don't send a response within that time, the notification is treated as failed and will be retried only once after 1 minute. If you respond with too many error responses, we drop future notifications for a period of 15 minutes.

Response CodeDescriptionAction
2xxSuccessThe webhook was successfully delivered.
410GoneWhen a 410 is received, we assume the resource is no longer available. We will disable the subscription and no more notifications will be sent.
429Too many requestsWhen a 429 is received, all notifications from that subscription will be throttled. Depending on the rate of delivery, this delay can be between 1 minute to 2 hours. If 429s continue and any notification is delayed for > 2 hours then we will drop that notification.
4xx (excl. 429)
5xx
Client or service errorsWe will retry after 1 minute for all other errors. If the 2nd retry fails then we mark the notification delivery as failed.

Signed notifications

Intercom signs webhook notifications via an X-Hub-Signature header. We do this so that you can verify that the notification came from Intercom by decoding the signature.

We compute the value of this X-Hub-Signature header by creating a signature using the body of the JSON request and your App's client_secret value, which you can find on the Basic Info page of your App.

The signature is the hexadecimal (40-byte) representation of an SHA-1 signature computed using the HMAC algorithm defined in RFC2104.

The X-Hub-Signature header value starts with the string sha1= followed by the signature.

POST https://example.org/hooks
User-Agent: intercom-parrot-service-client/1.0
X-Hub-Signature: sha1=21ff2e149e0fdcac6f947740f6177f6434bda921
Accept: application/json
Content-Type: application/json

{
  "type" : "notification_event",
  "id" : "notif_78c122d0-23ba-11e4-9464-79b01267cc2e",
  "topic" : "user.created",
  "app_id" : "a86dr8yl",
  "data" : {
    "type" : "notification_event_data",
    "item" : {
      "type" : "user",
      "id" : "530370b477ad7120001d",
      "user_id" : "25",
      "name" : "Hoban Washburne",
      "unsubscribed_from_emails" : false,
      "custom_attributes" : {}
    }
  }
}

Admin notification object

The Admin notification object is similar to the model returned via the API. You can see an example object below:

{
  "type": "admin",
  "id": "1",
  "name": "John Doe",
  "email": "john.doe@intercom.io",
  "job_title": "CEO",
  "away_mode_enabled": true,
  "away_mode_reassign": false,
  "away_status_reason": "🍔 On lunch",
  "has_inbox_seat": true,
  "team_ids": []
}

Contact Tag notification object

We only return the Contact Tag notification object for Webhooks. You can see an example object below:

{
  "type": "contact_tag",
  "created_at": 1392731331,
  "tag" : {
      "id": "1287",
      "name": "independent",
      "type": "tag"
    },
  "contact" : {
      "type": "contact",
      "id": "1287ab1287fefe",
        ........
  }
}

A Contact Tag notification object is composed from the existing Contact and Tag objects and is sent when Contacts are tagged and untagged via the contact.user.tag.created, contact.lead.tag.created, contact.lead.tag.deleted and contact.user.tag.deleted topics.

AttributeTypeDescription
typestringValue is 'contact_tag'.
created_attimestampThe time the contact tag object was created.
tagTagThe tag that was added or removed.
contactcontactThe contact that was tagged or untagged.

Content Stat notification object

We only return the Content Stat notification object for Webhooks. You can see an example object below:

{
  "type": "content_stat.series",
  "created_at": "2022-10-11T15:01:07.000Z",
  "content_stat": {
    "id": 1,
    "content_type": "series",
     "content_id": 1,
     "stat_type": "receipt",
     "ruleset_id": 29,
     "content_title": "Untitled",
     "ruleset_version_id": -1,
     "receipt_id": 1,
     "tags": {
       "type": "list",
       "has_more": false,
       "data": [],
       "total_count": 0
     },
     "series_id": 1,
     "series_title": null,
     "node_id": 3
  },
  "contact": {
    "type": "contact",
    "id": "6318db7dfb80c614fe1792b5",
    ...
  }
}

The Content Stat notification object will match our existing Webhook notification object detailed here and contains the following fields:

AttributeTypeDescription
idstringThe unique identifier for the Content Stat set by Intercom
content_typestringThe type of Content the Stat relates to, e.g. Email, Chat, Post, Push etc
content_idstringThe unique identifier for the Content given by Intercom, In an A/B test each version has its own identifier.
stat_typestringType of the stat event. While there are some common stat types like "receipt", others are content specific. Content Type email, for example, has stats for unsubscribe, bounce etc. The list of supported stat types is included in the table above. Others may be added over time.
content_titlestringThe title of Content you see in your Intercom Workspace
ruleset_idstringThe unique identifier of the Outbound Message the Content relates to in your Intercom Workspace
ruleset_version_idstringThe unique identifier of the Outbound Message version the Content relates to in your Intercom Workspace
series_idstringOptional - If the stat relates to a Content object (email, push, etc) which is part of a Series campaign, this will include the ID of that Series campaign
series_titlestringOptional - If the stat relates to a Content object (email, push, etc) which is part of a Series campaign, this is title of the Series
node_idstringOptional - If the stat relates to a Content object (email, push, etc) which is part of a Series campaign, this is the ID of the Node in the Series
contactobjectNested Contact object. This is the user or lead to whom the content was sent.
companyobjectOptional nested Company object. If the content stat relates to a company (company predicates were used in the audience targeting), the company information is also included.

Content Stat Survey response notification object

The content_stat.survey notification object contains additional payload fields relating to Survey answers. The individual answer key is included in the answer stat type event. The answers key is included in the completion stat type event showing all answers in the Survey.

AttributeTypeDescription
answered_atstringThe time the question was answered.
question_idstringThe ID of the specific survey question.
question_textstringThe text of the question
responsestringThe raw response from the user