Intercom · AsyncAPI Specification

Intercom Webhooks

Version 1.0.0

AsyncAPI description of Intercom's outbound webhook surface. Intercom delivers workspace events to a single subscriber URL configured per app under the Developer Hub > Webhooks settings. Each delivery is a single HTTP POST whose JSON body is a notification envelope of `type: notification_event`. The `topic` field on the envelope identifies the event class (for example `conversation.user.created`, `contact.user.updated`, `company.created`, `ping`). Source documentation: - Webhook models reference: https://developers.intercom.com/docs/references/2.13/webhooks/webhook-models - Webhook topics reference: https://developers.intercom.com/docs/references/2.13/webhooks/webhook-topics - Build a webhook integration: https://developers.intercom.com/docs/build-an-integration/learn-more/webhooks/ Security and signing: Intercom signs every outbound webhook request with the HMAC-SHA1 `X-Hub-Signature` header (RFC 2104). The signature is computed over the raw JSON request body using the Intercom app's `client_secret` as the shared key, and is delivered as the literal string `sha1=` followed by the 40-character hex-encoded digest. Subscribers should recompute the digest with constant-time comparison to verify authenticity. Intercom also sets `User-Agent: intercom-parrot-service-client/1.0`.

View Spec View on GitHub AICustomer ServiceCustomer SupportMessagingAsyncAPIWebhooksEvents

Channels

/intercom/webhook
publish receiveIntercomNotification
Receive an Intercom notification_event
Single subscriber endpoint that receives every Intercom notification event the app is subscribed to. The `topic` field on the JSON envelope identifies the event class. Intercom sends one notification per HTTP POST and expects a 2xx response; non-2xx responses are retried with exponential backoff until `delivery_attempts` is exhausted.

Messages

Ping
ping
Sent when an admin manually pings the subscription or Intercom periodically validates it.
AdminAddedToWorkspace
admin.added_to_workspace
A new admin (teammate) joined the workspace.
AdminAwayModeUpdated
admin.away_mode_updated
An admin toggled away mode or updated their reassignment setting.
AdminActivityLogEventCreated
admin.activity_log_event.created
An admin activity log entry was created.
AdminRemovedFromWorkspace
admin.removed_from_workspace
An admin (teammate) was removed from the workspace.
AdminLoggedIn
admin.logged_in
An admin signed in to the workspace.
AdminLoggedOut
admin.logged_out
An admin signed out of the workspace.
ArticleCreated
article.created
A help center article was created.
ArticleUpdated
article.updated
A help center article was updated.
ArticlePublished
article.published
A help center article was published.
ArticleUnpublished
article.unpublished
A help center article was unpublished.
ArticleDeleted
article.deleted
A help center article was deleted.
CompanyCreated
company.created
A new company was created in the workspace.
CompanyUpdated
company.updated
A company's attributes were updated.
CompanyDeleted
company.deleted
A company was deleted.
CompanyContactAttached
company.contact.attached
A contact was attached to a company.
CompanyContactDetached
company.contact.detached
A contact was detached from a company.
ContactArchived
contact.archived
A contact was archived.
ContactDeleted
contact.deleted
A contact was deleted.
ContactEmailUpdated
contact.email.updated
A contact's email address was changed.
ContactLeadAddedEmail
contact.lead.added_email
A lead added an email address (without converting to a user).
ContactLeadCreated
contact.lead.created
A new lead contact was created.
ContactLeadSignedUp
contact.lead.signed_up
A lead converted into a user by signing up.
ContactLeadTagCreated
contact.lead.tag.created
A tag was applied to a lead contact.
ContactLeadTagDeleted
contact.lead.tag.deleted
A tag was removed from a lead contact.
ContactLeadUpdated
contact.lead.updated
A lead's attributes were updated.
ContactMerged
contact.merged
Two contacts were merged.
ContactSubscribed
contact.subscribed
A contact opted in to messaging.
ContactUnarchive
contact.unarchive
A previously archived contact was restored.
ContactUnsubscribed
contact.unsubscribed
A contact opted out of messaging.
ContactUserCreated
contact.user.created
A new user contact was created.
ContactUserTagCreated
contact.user.tag.created
A tag was applied to a user contact.
ContactUserTagDeleted
contact.user.tag.deleted
A tag was removed from a user contact.
ContactUserUpdated
contact.user.updated
A user contact's attributes were updated.
ConversationAdminAssigned
conversation.admin.assigned
An admin or team was assigned to a conversation.
ConversationAdminClosed
conversation.admin.closed
An admin closed a conversation.
ConversationAdminNoted
conversation.admin.noted
An admin added a private note to a conversation.
ConversationAdminOpenAssigned
conversation.admin.open.assigned
An admin reopened and reassigned a conversation in a single action.
ConversationAdminOpened
conversation.admin.opened
An admin reopened a closed conversation.
ConversationAdminReplied
conversation.admin.replied
An admin posted a reply on a conversation.
ConversationAdminSingleCreated
conversation.admin.single.created
An admin started a one-to-one conversation with a contact.
ConversationAdminSnoozed
conversation.admin.snoozed
An admin snoozed a conversation.
ConversationAdminUnsnoozed
conversation.admin.unsnoozed
A snoozed conversation woke up or was manually unsnoozed.
ConversationDeleted
conversation.deleted
A conversation was deleted.
ConversationPartRedacted
conversation_part.redacted
A conversation part was redacted.
ConversationPartTagCreated
conversation_part.tag.created
A tag was applied to a conversation part.
ConversationPriorityUpdated
conversation.priority.updated
A conversation's priority flag changed.
ConversationRatingAdded
conversation.rating.added
A conversation rating was submitted by a contact.
ConversationRead
conversation.read
A conversation was marked as read.
ConversationUserCreated
conversation.user.created
A contact (user or lead) started a new conversation.
ConversationUserReplied
conversation.user.replied
A contact replied on an existing conversation.
ConversationContactAttached
conversation.contact.attached
A contact was attached as a participant on a conversation.
ConversationContactDetached
conversation.contact.detached
A contact was detached from a conversation.
EventCreated
event.created
A data event was tracked against a contact.
TicketCreated
ticket.created
A ticket was created.
TicketStateUpdated
ticket.state.updated
A ticket's state changed.
TicketNoteCreated
ticket.note.created
A private note was added to a ticket.
TicketAdminAssigned
ticket.admin.assigned
A ticket was assigned to an admin.
TicketTeamAssigned
ticket.team.assigned
A ticket was assigned to a team.
TicketContactAttached
ticket.contact.attached
A contact was attached to a ticket.
TicketContactDetached
ticket.contact.detached
A contact was detached from a ticket.
TicketAttributeUpdated
ticket.attribute.updated
A custom or system ticket attribute was updated.
TicketAdminReplied
ticket.admin.replied
An admin replied on a ticket.
TicketContactReplied
ticket.contact.replied
A contact replied on a ticket.
TicketClosed
ticket.closed
A ticket was closed.
TicketRatingProvided
ticket.rating.provided
A rating was submitted on a ticket.
GranularSubscribe
granular.subscribe
A contact opted in to a granular subscription type.
GranularUnsubscribe
granular.unsubscribe
A contact opted out of a granular subscription type.
VisitorSignedUp
visitor.signed_up
An anonymous visitor signed up and became an identified user.
ContentStatBanner
content_stat.banner
A delivery or engagement stat fired for a banner.
ContentStatCarousel
content_stat.carousel
A delivery or engagement stat fired for a carousel.
ContentStatChat
content_stat.chat
A delivery or engagement stat fired for a chat message.
ContentStatChecklist
content_stat.checklist
A delivery or engagement stat fired for a checklist.
ContentStatCustomBot
content_stat.custom_bot
A delivery or engagement stat fired for a custom bot.
ContentStatEmail
content_stat.email
A delivery or engagement stat fired for an email.
ContentStatNewsItem
content_stat.news_item
A delivery or engagement stat fired for a news item.
ContentStatPost
content_stat.post
A delivery or engagement stat fired for a post.
ContentStatPush
content_stat.push
A delivery or engagement stat fired for a push notification.
ContentStatSeries
content_stat.series
A delivery or engagement stat fired for a series.
ContentStatSeriesWebhook
content_stat.series.webhook
A webhook step inside a series fired.
ContentStatSms
content_stat.sms
A delivery or engagement stat fired for an SMS message.
ContentStatSurvey
content_stat.survey
A delivery or engagement stat fired for a survey.
ContentStatTooltipGroup
content_stat.tooltip_group
A delivery or engagement stat fired for a tooltip group.
ContentStatTour
content_stat.tour
A delivery or engagement stat fired for a product tour.

Servers

https
subscriber {webhookUrl}
Customer-hosted HTTPS endpoint that receives webhook POSTs from Intercom. The full URL is configured per app on the Developer Hub Webhooks page.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Intercom Webhooks
  version: '1.0.0'
  description: |-
    AsyncAPI description of Intercom's outbound webhook surface. Intercom delivers
    workspace events to a single subscriber URL configured per app under the
    Developer Hub > Webhooks settings. Each delivery is a single HTTP POST whose
    JSON body is a notification envelope of `type: notification_event`. The
    `topic` field on the envelope identifies the event class (for example
    `conversation.user.created`, `contact.user.updated`, `company.created`,
    `ping`).

    Source documentation:
      - Webhook models reference: https://developers.intercom.com/docs/references/2.13/webhooks/webhook-models
      - Webhook topics reference: https://developers.intercom.com/docs/references/2.13/webhooks/webhook-topics
      - Build a webhook integration: https://developers.intercom.com/docs/build-an-integration/learn-more/webhooks/

    Security and signing:
      Intercom signs every outbound webhook request with the HMAC-SHA1
      `X-Hub-Signature` header (RFC 2104). The signature is computed over the
      raw JSON request body using the Intercom app's `client_secret` as the
      shared key, and is delivered as the literal string `sha1=` followed by the
      40-character hex-encoded digest. Subscribers should recompute the digest
      with constant-time comparison to verify authenticity. Intercom also sets
      `User-Agent: intercom-parrot-service-client/1.0`.
  contact:
    name: Intercom Developer Support
    url: https://developers.intercom.com/
  license:
    name: Intercom Terms of Service
    url: https://www.intercom.com/legal/terms-and-policies

defaultContentType: application/json

servers:
  subscriber:
    url: '{webhookUrl}'
    protocol: https
    description: |-
      Customer-hosted HTTPS endpoint that receives webhook POSTs from Intercom.
      The full URL is configured per app on the Developer Hub Webhooks page.
    variables:
      webhookUrl:
        default: https://example.com/intercom/webhook
        description: Fully-qualified HTTPS URL of the subscriber endpoint.
    security:
      - hubSignature: []

channels:
  /intercom/webhook:
    description: |-
      Single subscriber endpoint that receives every Intercom notification event
      the app is subscribed to. The `topic` field on the JSON envelope identifies
      the event class. Intercom sends one notification per HTTP POST and expects
      a 2xx response; non-2xx responses are retried with exponential backoff
      until `delivery_attempts` is exhausted.
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: receiveIntercomNotification
      summary: Receive an Intercom notification_event
      description: |-
        Intercom POSTs a `notification_event` envelope to the subscriber URL.
        The envelope carries the topic and a `data.item` payload whose shape
        depends on the topic. Subscribers MUST verify the `X-Hub-Signature`
        header before processing the body.
      message:
        oneOf:
          - $ref: '#/components/messages/Ping'
          - $ref: '#/components/messages/AdminAddedToWorkspace'
          - $ref: '#/components/messages/AdminAwayModeUpdated'
          - $ref: '#/components/messages/AdminActivityLogEventCreated'
          - $ref: '#/components/messages/AdminRemovedFromWorkspace'
          - $ref: '#/components/messages/AdminLoggedIn'
          - $ref: '#/components/messages/AdminLoggedOut'
          - $ref: '#/components/messages/ArticleCreated'
          - $ref: '#/components/messages/ArticleUpdated'
          - $ref: '#/components/messages/ArticlePublished'
          - $ref: '#/components/messages/ArticleUnpublished'
          - $ref: '#/components/messages/ArticleDeleted'
          - $ref: '#/components/messages/CompanyCreated'
          - $ref: '#/components/messages/CompanyUpdated'
          - $ref: '#/components/messages/CompanyDeleted'
          - $ref: '#/components/messages/CompanyContactAttached'
          - $ref: '#/components/messages/CompanyContactDetached'
          - $ref: '#/components/messages/ContactArchived'
          - $ref: '#/components/messages/ContactDeleted'
          - $ref: '#/components/messages/ContactEmailUpdated'
          - $ref: '#/components/messages/ContactLeadAddedEmail'
          - $ref: '#/components/messages/ContactLeadCreated'
          - $ref: '#/components/messages/ContactLeadSignedUp'
          - $ref: '#/components/messages/ContactLeadTagCreated'
          - $ref: '#/components/messages/ContactLeadTagDeleted'
          - $ref: '#/components/messages/ContactLeadUpdated'
          - $ref: '#/components/messages/ContactMerged'
          - $ref: '#/components/messages/ContactSubscribed'
          - $ref: '#/components/messages/ContactUnarchive'
          - $ref: '#/components/messages/ContactUnsubscribed'
          - $ref: '#/components/messages/ContactUserCreated'
          - $ref: '#/components/messages/ContactUserTagCreated'
          - $ref: '#/components/messages/ContactUserTagDeleted'
          - $ref: '#/components/messages/ContactUserUpdated'
          - $ref: '#/components/messages/ConversationAdminAssigned'
          - $ref: '#/components/messages/ConversationAdminClosed'
          - $ref: '#/components/messages/ConversationAdminNoted'
          - $ref: '#/components/messages/ConversationAdminOpenAssigned'
          - $ref: '#/components/messages/ConversationAdminOpened'
          - $ref: '#/components/messages/ConversationAdminReplied'
          - $ref: '#/components/messages/ConversationAdminSingleCreated'
          - $ref: '#/components/messages/ConversationAdminSnoozed'
          - $ref: '#/components/messages/ConversationAdminUnsnoozed'
          - $ref: '#/components/messages/ConversationDeleted'
          - $ref: '#/components/messages/ConversationPartRedacted'
          - $ref: '#/components/messages/ConversationPartTagCreated'
          - $ref: '#/components/messages/ConversationPriorityUpdated'
          - $ref: '#/components/messages/ConversationRatingAdded'
          - $ref: '#/components/messages/ConversationRead'
          - $ref: '#/components/messages/ConversationUserCreated'
          - $ref: '#/components/messages/ConversationUserReplied'
          - $ref: '#/components/messages/ConversationContactAttached'
          - $ref: '#/components/messages/ConversationContactDetached'
          - $ref: '#/components/messages/EventCreated'
          - $ref: '#/components/messages/TicketCreated'
          - $ref: '#/components/messages/TicketStateUpdated'
          - $ref: '#/components/messages/TicketNoteCreated'
          - $ref: '#/components/messages/TicketAdminAssigned'
          - $ref: '#/components/messages/TicketTeamAssigned'
          - $ref: '#/components/messages/TicketContactAttached'
          - $ref: '#/components/messages/TicketContactDetached'
          - $ref: '#/components/messages/TicketAttributeUpdated'
          - $ref: '#/components/messages/TicketAdminReplied'
          - $ref: '#/components/messages/TicketContactReplied'
          - $ref: '#/components/messages/TicketClosed'
          - $ref: '#/components/messages/TicketRatingProvided'
          - $ref: '#/components/messages/GranularSubscribe'
          - $ref: '#/components/messages/GranularUnsubscribe'
          - $ref: '#/components/messages/VisitorSignedUp'
          - $ref: '#/components/messages/ContentStatBanner'
          - $ref: '#/components/messages/ContentStatCarousel'
          - $ref: '#/components/messages/ContentStatChat'
          - $ref: '#/components/messages/ContentStatChecklist'
          - $ref: '#/components/messages/ContentStatCustomBot'
          - $ref: '#/components/messages/ContentStatEmail'
          - $ref: '#/components/messages/ContentStatNewsItem'
          - $ref: '#/components/messages/ContentStatPost'
          - $ref: '#/components/messages/ContentStatPush'
          - $ref: '#/components/messages/ContentStatSeries'
          - $ref: '#/components/messages/ContentStatSeriesWebhook'
          - $ref: '#/components/messages/ContentStatSms'
          - $ref: '#/components/messages/ContentStatSurvey'
          - $ref: '#/components/messages/ContentStatTooltipGroup'
          - $ref: '#/components/messages/ContentStatTour'

components:
  securitySchemes:
    hubSignature:
      type: httpApiKey
      description: |-
        HMAC-SHA1 signature delivered as `X-Hub-Signature: sha1=<hex digest>`.
        The digest is computed over the raw JSON request body using the
        Intercom app's `client_secret` as the shared secret (RFC 2104).
        Subscribers MUST recompute and compare in constant time before
        trusting the payload.
      name: X-Hub-Signature
      in: header

  messageTraits:
    NotificationHeaders:
      headers:
        type: object
        required:
          - Content-Type
          - X-Hub-Signature
          - User-Agent
        properties:
          Content-Type:
            type: string
            const: application/json
          Accept:
            type: string
            const: application/json
          User-Agent:
            type: string
            const: intercom-parrot-service-client/1.0
          X-Hub-Signature:
            type: string
            description: HMAC-SHA1 signature of the raw request body, prefixed with `sha1=`.
            pattern: '^sha1=[0-9a-f]{40}$'
            example: sha1=21ff2e149e0fdcac6f947740f6177f6434bda921
      bindings:
        http:
          bindingVersion: '0.3.0'

  messages:
    Ping:
      name: PingNotification
      title: ping
      summary: Sent when an admin manually pings the subscription or Intercom periodically validates it.
      traits:
        - $ref: '#/components/messageTraits/NotificationHeaders'
      contentType: application/json
      payload:
        allOf:
          - $ref: '#/components/schemas/NotificationEvent'
          - type: object
            properties:
              topic: { const: ping }
              data:
                type: object
                properties:
                  item:
                    type: object
                    description: Ping payload. Intercom does not publish a schema for this item.
                    additionalProperties: true

    AdminAddedToWorkspace:
      name: AdminAddedToWorkspaceNotification
      title: admin.added_to_workspace
      summary: A new admin (teammate) joined the workspace.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/AdminEnvelope' }
    AdminAwayModeUpdated:
      name: AdminAwayModeUpdatedNotification
      title: admin.away_mode_updated
      summary: An admin toggled away mode or updated their reassignment setting.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/AdminEnvelope' }
    AdminActivityLogEventCreated:
      name: AdminActivityLogEventCreatedNotification
      title: admin.activity_log_event.created
      summary: An admin activity log entry was created.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ActivityLogEventEnvelope' }
    AdminRemovedFromWorkspace:
      name: AdminRemovedFromWorkspaceNotification
      title: admin.removed_from_workspace
      summary: An admin (teammate) was removed from the workspace.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/AdminEnvelope' }
    AdminLoggedIn:
      name: AdminLoggedInNotification
      title: admin.logged_in
      summary: An admin signed in to the workspace.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/AdminEnvelope' }
    AdminLoggedOut:
      name: AdminLoggedOutNotification
      title: admin.logged_out
      summary: An admin signed out of the workspace.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/AdminEnvelope' }

    ArticleCreated:
      name: ArticleCreatedNotification
      title: article.created
      summary: A help center article was created.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ArticleEnvelope' }
    ArticleUpdated:
      name: ArticleUpdatedNotification
      title: article.updated
      summary: A help center article was updated.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ArticleEnvelope' }
    ArticlePublished:
      name: ArticlePublishedNotification
      title: article.published
      summary: A help center article was published.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ArticleEnvelope' }
    ArticleUnpublished:
      name: ArticleUnpublishedNotification
      title: article.unpublished
      summary: A help center article was unpublished.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ArticleEnvelope' }
    ArticleDeleted:
      name: ArticleDeletedNotification
      title: article.deleted
      summary: A help center article was deleted.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ArticleEnvelope' }

    CompanyCreated:
      name: CompanyCreatedNotification
      title: company.created
      summary: A new company was created in the workspace.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/CompanyEnvelope' }
    CompanyUpdated:
      name: CompanyUpdatedNotification
      title: company.updated
      summary: A company's attributes were updated.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/CompanyEnvelope' }
    CompanyDeleted:
      name: CompanyDeletedNotification
      title: company.deleted
      summary: A company was deleted.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/CompanyEnvelope' }
    CompanyContactAttached:
      name: CompanyContactAttachedNotification
      title: company.contact.attached
      summary: A contact was attached to a company.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/CompanyContactRelationEnvelope' }
    CompanyContactDetached:
      name: CompanyContactDetachedNotification
      title: company.contact.detached
      summary: A contact was detached from a company.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/CompanyContactRelationEnvelope' }

    ContactArchived:
      name: ContactArchivedNotification
      title: contact.archived
      summary: A contact was archived.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactDeleted:
      name: ContactDeletedNotification
      title: contact.deleted
      summary: A contact was deleted.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactEmailUpdated:
      name: ContactEmailUpdatedNotification
      title: contact.email.updated
      summary: A contact's email address was changed.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactLeadAddedEmail:
      name: ContactLeadAddedEmailNotification
      title: contact.lead.added_email
      summary: A lead added an email address (without converting to a user).
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactLeadCreated:
      name: ContactLeadCreatedNotification
      title: contact.lead.created
      summary: A new lead contact was created.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactLeadSignedUp:
      name: ContactLeadSignedUpNotification
      title: contact.lead.signed_up
      summary: A lead converted into a user by signing up.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactLeadTagCreated:
      name: ContactLeadTagCreatedNotification
      title: contact.lead.tag.created
      summary: A tag was applied to a lead contact.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactTagEnvelope' }
    ContactLeadTagDeleted:
      name: ContactLeadTagDeletedNotification
      title: contact.lead.tag.deleted
      summary: A tag was removed from a lead contact.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactTagEnvelope' }
    ContactLeadUpdated:
      name: ContactLeadUpdatedNotification
      title: contact.lead.updated
      summary: A lead's attributes were updated.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactMerged:
      name: ContactMergedNotification
      title: contact.merged
      summary: Two contacts were merged.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactSubscribed:
      name: ContactSubscribedNotification
      title: contact.subscribed
      summary: A contact opted in to messaging.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactUnarchive:
      name: ContactUnarchiveNotification
      title: contact.unarchive
      summary: A previously archived contact was restored.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactUnsubscribed:
      name: ContactUnsubscribedNotification
      title: contact.unsubscribed
      summary: A contact opted out of messaging.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactUserCreated:
      name: ContactUserCreatedNotification
      title: contact.user.created
      summary: A new user contact was created.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }
    ContactUserTagCreated:
      name: ContactUserTagCreatedNotification
      title: contact.user.tag.created
      summary: A tag was applied to a user contact.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactTagEnvelope' }
    ContactUserTagDeleted:
      name: ContactUserTagDeletedNotification
      title: contact.user.tag.deleted
      summary: A tag was removed from a user contact.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactTagEnvelope' }
    ContactUserUpdated:
      name: ContactUserUpdatedNotification
      title: contact.user.updated
      summary: A user contact's attributes were updated.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ContactEnvelope' }

    ConversationAdminAssigned:
      name: ConversationAdminAssignedNotification
      title: conversation.admin.assigned
      summary: An admin or team was assigned to a conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationAdminClosed:
      name: ConversationAdminClosedNotification
      title: conversation.admin.closed
      summary: An admin closed a conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationAdminNoted:
      name: ConversationAdminNotedNotification
      title: conversation.admin.noted
      summary: An admin added a private note to a conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationAdminOpenAssigned:
      name: ConversationAdminOpenAssignedNotification
      title: conversation.admin.open.assigned
      summary: An admin reopened and reassigned a conversation in a single action.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationAdminOpened:
      name: ConversationAdminOpenedNotification
      title: conversation.admin.opened
      summary: An admin reopened a closed conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationAdminReplied:
      name: ConversationAdminRepliedNotification
      title: conversation.admin.replied
      summary: An admin posted a reply on a conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationAdminSingleCreated:
      name: ConversationAdminSingleCreatedNotification
      title: conversation.admin.single.created
      summary: An admin started a one-to-one conversation with a contact.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationAdminSnoozed:
      name: ConversationAdminSnoozedNotification
      title: conversation.admin.snoozed
      summary: An admin snoozed a conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationAdminUnsnoozed:
      name: ConversationAdminUnsnoozedNotification
      title: conversation.admin.unsnoozed
      summary: A snoozed conversation woke up or was manually unsnoozed.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationDeleted:
      name: ConversationDeletedNotification
      title: conversation.deleted
      summary: A conversation was deleted.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationPartRedacted:
      name: ConversationPartRedactedNotification
      title: conversation_part.redacted
      summary: A conversation part was redacted.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationPartTagCreated:
      name: ConversationPartTagCreatedNotification
      title: conversation_part.tag.created
      summary: A tag was applied to a conversation part.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationPriorityUpdated:
      name: ConversationPriorityUpdatedNotification
      title: conversation.priority.updated
      summary: A conversation's priority flag changed.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationRatingAdded:
      name: ConversationRatingAddedNotification
      title: conversation.rating.added
      summary: A conversation rating was submitted by a contact.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationRead:
      name: ConversationReadNotification
      title: conversation.read
      summary: A conversation was marked as read.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationUserCreated:
      name: ConversationUserCreatedNotification
      title: conversation.user.created
      summary: A contact (user or lead) started a new conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationUserReplied:
      name: ConversationUserRepliedNotification
      title: conversation.user.replied
      summary: A contact replied on an existing conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationContactAttached:
      name: ConversationContactAttachedNotification
      title: conversation.contact.attached
      summary: A contact was attached as a participant on a conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }
    ConversationContactDetached:
      name: ConversationContactDetachedNotification
      title: conversation.contact.detached
      summary: A contact was detached from a conversation.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/ConversationEnvelope' }

    EventCreated:
      name: EventCreatedNotification
      title: event.created
      summary: A data event was tracked against a contact.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/DataEventEnvelope' }

    TicketCreated:
      name: TicketCreatedNotification
      title: ticket.created
      summary: A ticket was created.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketStateUpdated:
      name: TicketStateUpdatedNotification
      title: ticket.state.updated
      summary: A ticket's state changed.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketNoteCreated:
      name: TicketNoteCreatedNotification
      title: ticket.note.created
      summary: A private note was added to a ticket.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketAdminAssigned:
      name: TicketAdminAssignedNotification
      title: ticket.admin.assigned
      summary: A ticket was assigned to an admin.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketTeamAssigned:
      name: TicketTeamAssignedNotification
      title: ticket.team.assigned
      summary: A ticket was assigned to a team.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketContactAttached:
      name: TicketContactAttachedNotification
      title: ticket.contact.attached
      summary: A contact was attached to a ticket.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketContactDetached:
      name: TicketContactDetachedNotification
      title: ticket.contact.detached
      summary: A contact was detached from a ticket.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketAttributeUpdated:
      name: TicketAttributeUpdatedNotification
      title: ticket.attribute.updated
      summary: A custom or system ticket attribute was updated.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketAdminReplied:
      name: TicketAdminRepliedNotification
      title: ticket.admin.replied
      summary: An admin replied on a ticket.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketContactReplied:
      name: TicketContactRepliedNotification
      title: ticket.contact.replied
      summary: A contact replied on a ticket.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketClosed:
      name: TicketClosedNotification
      title: ticket.closed
      summary: A ticket was closed.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }
    TicketRatingProvided:
      name: TicketRatingProvidedNotification
      title: ticket.rating.provided
      summary: A rating was submitted on a ticket.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/TicketEnvelope' }

    GranularSubscribe:
      name: GranularSubscribeNotification
      title: granular.subscribe
      summary: A contact opted in to a granular subscription type.
      traits: [{ $ref: '#/components/messageTraits/NotificationHeaders' }]
      contentType: application/json
      payload: { $ref: '#/components/schemas/SubscriptionEnvelope' }
    GranularUnsubscribe:
      name: GranularUnsubscribeNotification
      title: granular.unsubscribe
      summary: A contact opted out of a granular sub

# --- truncated at 32 KB (60 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/intercom/refs/heads/main/asyncapi/intercom-webhooks-asyncapi.yml