Knock · AsyncAPI Specification

Knock Outbound Webhooks

Version 1.0.0

Knock fires outbound webhook events for message lifecycle (sent, delivered, seen, read, interacted, archived, link_clicked, bounced, undelivered) and for environment changes (workflow / email_layout / translation / partial / source_event_action updates and commits). Subscribers configure a webhook URL in the Knock dashboard; payloads are POSTed as JSON.

View Spec View on GitHub NotificationMessagingInfrastructureWorkflowsCross-ChannelEmailSMSPushIn-AppChatSlackWebhookMCPAI AgentsDeveloper PlatformAsyncAPIEventsWebhooks

Channels

webhooks/messages
subscribe receiveMessageEvent
Message lifecycle events for one of the configured outbound webhook endpoints.
webhooks/workflows
subscribe receiveWorkflowEvent
Workflow update + commit events.
webhooks/email_layouts
subscribe receiveEmailLayoutEvent
webhooks/translations
subscribe receiveTranslationEvent
webhooks/partials
subscribe receivePartialEvent
webhooks/source_event_actions
subscribe receiveSourceEventActionEvent

Messages

MessageSent
MessageSent
MessageDelivered
MessageDelivered
MessageDeliveryAttempted
MessageDeliveryAttempted
MessageUndelivered
MessageUndelivered
MessageBounced
MessageBounced
MessageSeen
MessageSeen
MessageUnseen
MessageUnseen
MessageRead
MessageRead
MessageUnread
MessageUnread
MessageArchived
MessageArchived
MessageUnarchived
MessageUnarchived
MessageInteracted
MessageInteracted
MessageLinkClicked
MessageLinkClicked
WorkflowUpdated
WorkflowUpdated
WorkflowCommitted
WorkflowCommitted
EmailLayoutUpdated
EmailLayoutUpdated
EmailLayoutCommitted
EmailLayoutCommitted
TranslationUpdated
TranslationUpdated
TranslationCommitted
TranslationCommitted
PartialUpdated
PartialUpdated
PartialCommitted
PartialCommitted
SourceEventActionUpdated
SourceEventActionUpdated
SourceEventActionCommitted
SourceEventActionCommitted

Servers

https
knock https://api.knock.app
Subscribers configure a target URL in the Knock dashboard; Knock POSTs JSON events to it.

AsyncAPI Specification

Raw ↑
asyncapi: '2.6.0'
id: 'urn:knock:webhooks'
info:
  title: Knock Outbound Webhooks
  version: '1.0.0'
  description: |
    Knock fires outbound webhook events for message lifecycle (sent, delivered, seen,
    read, interacted, archived, link_clicked, bounced, undelivered) and for environment
    changes (workflow / email_layout / translation / partial / source_event_action updates
    and commits). Subscribers configure a webhook URL in the Knock dashboard; payloads
    are POSTed as JSON.
  contact:
    name: Knock
    url: https://docs.knock.app/developer-tools/outbound-webhooks/overview
defaultContentType: application/json
servers:
  knock:
    url: https://api.knock.app
    protocol: https
    description: Subscribers configure a target URL in the Knock dashboard; Knock POSTs JSON events to it.
channels:
  webhooks/messages:
    description: Message lifecycle events for one of the configured outbound webhook endpoints.
    subscribe:
      operationId: receiveMessageEvent
      message:
        oneOf:
          - $ref: '#/components/messages/MessageSent'
          - $ref: '#/components/messages/MessageDelivered'
          - $ref: '#/components/messages/MessageDeliveryAttempted'
          - $ref: '#/components/messages/MessageUndelivered'
          - $ref: '#/components/messages/MessageBounced'
          - $ref: '#/components/messages/MessageSeen'
          - $ref: '#/components/messages/MessageUnseen'
          - $ref: '#/components/messages/MessageRead'
          - $ref: '#/components/messages/MessageUnread'
          - $ref: '#/components/messages/MessageArchived'
          - $ref: '#/components/messages/MessageUnarchived'
          - $ref: '#/components/messages/MessageInteracted'
          - $ref: '#/components/messages/MessageLinkClicked'
  webhooks/workflows:
    description: Workflow update + commit events.
    subscribe:
      operationId: receiveWorkflowEvent
      message:
        oneOf:
          - $ref: '#/components/messages/WorkflowUpdated'
          - $ref: '#/components/messages/WorkflowCommitted'
  webhooks/email_layouts:
    subscribe:
      operationId: receiveEmailLayoutEvent
      message:
        oneOf:
          - $ref: '#/components/messages/EmailLayoutUpdated'
          - $ref: '#/components/messages/EmailLayoutCommitted'
  webhooks/translations:
    subscribe:
      operationId: receiveTranslationEvent
      message:
        oneOf:
          - $ref: '#/components/messages/TranslationUpdated'
          - $ref: '#/components/messages/TranslationCommitted'
  webhooks/partials:
    subscribe:
      operationId: receivePartialEvent
      message:
        oneOf:
          - $ref: '#/components/messages/PartialUpdated'
          - $ref: '#/components/messages/PartialCommitted'
  webhooks/source_event_actions:
    subscribe:
      operationId: receiveSourceEventActionEvent
      message:
        oneOf:
          - $ref: '#/components/messages/SourceEventActionUpdated'
          - $ref: '#/components/messages/SourceEventActionCommitted'
components:
  messages:
    MessageSent:                 { name: message.sent,                payload: { $ref: '#/components/schemas/MessageEnvelope' } }
    MessageDelivered:            { name: message.delivered,           payload: { $ref: '#/components/schemas/MessageEnvelope' } }
    MessageDeliveryAttempted:    { name: message.delivery_attempted,  payload: { $ref: '#/components/schemas/MessageDeliveryAttemptedEnvelope' } }
    MessageUndelivered:          { name: message.undelivered,         payload: { $ref: '#/components/schemas/MessageFailureEnvelope' } }
    MessageBounced:              { name: message.bounced,             payload: { $ref: '#/components/schemas/MessageBounceEnvelope' } }
    MessageSeen:                 { name: message.seen,                payload: { $ref: '#/components/schemas/MessageEnvelope' } }
    MessageUnseen:               { name: message.unseen,              payload: { $ref: '#/components/schemas/MessageEnvelope' } }
    MessageRead:                 { name: message.read,                payload: { $ref: '#/components/schemas/MessageEnvelope' } }
    MessageUnread:               { name: message.unread,              payload: { $ref: '#/components/schemas/MessageEnvelope' } }
    MessageArchived:             { name: message.archived,            payload: { $ref: '#/components/schemas/MessageEnvelope' } }
    MessageUnarchived:           { name: message.unarchived,          payload: { $ref: '#/components/schemas/MessageEnvelope' } }
    MessageInteracted:           { name: message.interacted,          payload: { $ref: '#/components/schemas/MessageEnvelope' } }
    MessageLinkClicked:          { name: message.link_clicked,        payload: { $ref: '#/components/schemas/MessageLinkClickedEnvelope' } }
    WorkflowUpdated:             { name: workflow.updated,            payload: { $ref: '#/components/schemas/EnvObjectEnvelope' } }
    WorkflowCommitted:           { name: workflow.committed,          payload: { $ref: '#/components/schemas/CommitEnvelope' } }
    EmailLayoutUpdated:          { name: email_layout.updated,        payload: { $ref: '#/components/schemas/EnvObjectEnvelope' } }
    EmailLayoutCommitted:        { name: email_layout.committed,      payload: { $ref: '#/components/schemas/CommitEnvelope' } }
    TranslationUpdated:          { name: translation.updated,         payload: { $ref: '#/components/schemas/EnvObjectEnvelope' } }
    TranslationCommitted:        { name: translation.committed,       payload: { $ref: '#/components/schemas/CommitEnvelope' } }
    PartialUpdated:              { name: partial.updated,             payload: { $ref: '#/components/schemas/EnvObjectEnvelope' } }
    PartialCommitted:            { name: partial.committed,           payload: { $ref: '#/components/schemas/CommitEnvelope' } }
    SourceEventActionUpdated:    { name: source_event_action.updated, payload: { $ref: '#/components/schemas/EnvObjectEnvelope' } }
    SourceEventActionCommitted:  { name: source_event_action.committed,payload: { $ref: '#/components/schemas/CommitEnvelope' } }
  schemas:
    MessageEnvelope:
      type: object
      properties:
        type:       { type: string, description: 'Event type, e.g. message.sent.' }
        created_at: { type: string, format: date-time }
        data:       { type: object, description: 'The full Message object.' }
        event_data: { type: ['object', 'null'] }
    MessageDeliveryAttemptedEnvelope:
      allOf:
        - $ref: '#/components/schemas/MessageEnvelope'
        - type: object
          properties:
            event_data:
              type: object
              properties:
                attempt:      { type: integer }
                max_attempts: { type: integer }
                retryable:    { type: boolean }
    MessageFailureEnvelope:
      allOf:
        - $ref: '#/components/schemas/MessageEnvelope'
        - type: object
          properties:
            event_data:
              type: object
              properties:
                failure_reason:  { type: string }
                failure_details: { type: string }
    MessageBounceEnvelope:
      allOf:
        - $ref: '#/components/schemas/MessageEnvelope'
        - type: object
          properties:
            event_data:
              type: object
              properties:
                failure_reason:  { type: string }
                failure_details: { type: string }
                token:           { type: string, description: 'Bouncing push token, if applicable.' }
    MessageLinkClickedEnvelope:
      allOf:
        - $ref: '#/components/schemas/MessageEnvelope'
        - type: object
          properties:
            event_data:
              type: object
              properties:
                url: { type: string, format: uri }
    EnvObjectEnvelope:
      type: object
      properties:
        type:       { type: string }
        created_at: { type: string, format: date-time }
        data:       { type: object }
    CommitEnvelope:
      allOf:
        - $ref: '#/components/schemas/EnvObjectEnvelope'
        - type: object
          properties:
            event_data:
              type: object
              properties:
                commit_id: { type: string }

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/knock-webhooks-asyncapi"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.