Webhook Topics

The following topics are available and you can be notified when an action relating to that topic occurs. You just need to tell us where to send the notification. The 'Item Type' column shows the API type that will be sent as the data of the notification.

TopicItem TypeDescription
conversation.user.createdConversationSubscribe to user/lead initiated conversations
conversation.user.repliedConversationSubscribe to contact user/lead conversation replies
conversation.admin.repliedConversationSubscribe to admin conversation replies
conversation.admin.single.createdConversationSubscribe to admin initiated 1:1 conversations
conversation.admin.assignedConversationSubscribe to admin conversation assignments
conversation.admin.notedConversationSubscribe to admin conversation notes
conversation.admin.closedConversationSubscribe to admin conversation closes
conversation.admin.openedConversationSubscribe to admin conversation opens
conversation.admin.snoozedConversationSubscribe to admin conversation snoozes
conversation.admin.unsnoozedConversationSubscribe to admin conversation unsnoozes
conversation_part.tag.createdConversationSubscribe to conversation parts being tagged
conversation.deletedConversationSubscribe to conversation deleted
user.createdUserSubscribe to user creations
user.deletedUserSubscribe to user deletions
user.unsubscribedUserSubscribe to user unsubscriptions from email
user.email.updatedUserSubscribe to user email address being updated
user.tag.createdUserTagSubscribe to users being tagged
user.tag.deletedUserTagSubscribe to users being untagged
contact.createdLeadSubscribe to lead creations
contact.signed_upLeadSubscribe to leads converting to users
contact.added_emailLeadSubscribe to emails being added to leads
contact.tag.createdContactTagSubscribe to leads being tagged
contact.tag.deletedContactTagSubscribe to leads being untagged
visitor.signed_upVisitorSubscribe to visitors converting to users
company.createdCompanySubscribe to company creations
event.createdEventSubscribe to events
pingPingSent when a post to the subscription's ping resource is received, or periodically by Intercom. Ping is always subscribed to.

Webhooks and Permissions

Each webhook topic is associated with one or more permission scopes. If you would like to setup a webhook for a particular topic then you will need to select the appropriate permission scope to be able to request 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.

Webhook topicWorks with permissionsGroups
conversation_part.tag.createdRead conversationsConversation data
conversation.admin.assignedRead conversationsConversation data
conversation.admin.closedRead conversationsConversation data
conversation.admin.notedRead conversationsConversation data
conversation.admin.openedRead conversationsConversation data
conversation.admin.repliedRead conversationsConversation data
conversation.admin.single. createdRead conversationsConversation data
conversation.admin.snoozedRead conversationsConversation data
conversation.admin.unsnoozedRead conversationsConversation data
conversation.user.createdRead conversationsConversation data
conversation.user.repliedRead conversationsConversation data
conversation.deletedRead conversationsConversation data
contact.added_emailRead users and companies, Read and write users, Read one user and one companyCustomer data
contact.createdRead users and companies, Read and write users, Read one user and one companyCustomer data
contact.signed_upRead users and companies, Read and write users, Read one user and one companyCustomer data
contact.tag.createdRead users and companies, Read and write users, Read one user and one companyCustomer data
contact.tag.deletedRead users and companies, Read and write users, Read one user and one companyCustomer data
user.createdRead users and companies, Read and write users, Read one user and one companyCustomer data
user.deletedRead users and companies, Read and write users, Read one user and one companyCustomer data
user.email.updatedRead users and companies, Read and write users, Read one user and one companyCustomer data
user.tag.createdRead users and companies, Read and write users, Read one user and one companyCustomer data
user.tag.deletedRead users and companies, Read and write users, Read one user and one companyCustomer data
user.unsubscribedRead users and companies, Read and write users, Read one user and one companyCustomer data
visitor.signed_upRead users and companies, Read and write users, Read one user and one companyCustomer data
event.createdRead eventsCustomer event data
company.createdRead users and companies, Read one user and one companyCompany data

Webhook Notification Object

A 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 to the right, 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

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

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) 5xxClient 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.
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.

Signed Notifications

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

The value of this X-Hub-Signature header is computed 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 a SHA-1 signature computed using the HMAC algorithm as 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" : {}
    }
  }
}

Contact Tag Model for Webhooks

The Contact Tag model is only returned for webhooks. It is not used with the Lead (i.e. contact) or Tag endpoints themselves. 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",
      "user_id": "12"
  }
}

A contact tag is composed from the existing contact and tag JSON and is sent when contacts are tagged and untagged via the contact.tag.created and contact.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.

User Tag Model for Webhooks

The User Tag model is only returned for webhooks. It is not used with the User or Tag endpoints themselves. You can see an example object below:

{
  "type": "user_tag",
  "created_at": 1392731331,
  "tag" : {
      "id": "17513",
      "name": "independent",
      "type": "tag"
    },
  "user" : {
      "type": "user",
      "id": "530370b477ad7120001d",
      "user_id": "25"
  }
}

A user tag is composed from the existing user and tag JSON and is sent when users are tagged and untagged via the user.tag.created and user.tag.deleted topics.

AttributeTypeDescription
typestringValue is 'user_tag'.
created_attimestampThe time the user tag object was created.
tagTagThe tag that was added or removed.
userUserThe user that was tagged or untagged.