Outreach Webhooks

Event-driven webhook deliveries for accounts, calls, contacts, email addresses, imports, Kaia recordings, mailings, opportunities, opportunity prospect roles, prospects, sequences, sequence states, tasks and users. Subscribers register HTTPS endpoints via POST /api/v2/webhooks and receive JSON:API style payloads with HMAC signature verification.

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/outreach-webhooks"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

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

Get an API key

Free tier, no email required.

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

AsyncAPI Specification

outreach-webhooks-asyncapi.yml Raw ↑
asyncapi: 2.6.0
info:
  title: Outreach Webhooks
  version: '1.0.0'
  description: |
    AsyncAPI description of the Outreach webhook surface. Outreach delivers JSON:API
    style event payloads to subscriber URLs registered via `POST /api/v2/webhooks`.
    Each webhook subscribes to a single `resource` + `action` pair (wildcards `*`
    are also supported on either field). Payload version 1 carries only changed
    attributes; payload version 2 additionally carries a `beforeUpdate` envelope
    with the prior values of changed attributes.

    Signature verification: when a webhook is created with a `secret`, every
    delivery includes an `Outreach-Webhook-Signature` HTTP header containing the
    HMAC hex digest of the secret and the raw request body. Every delivery also
    carries the webhook's `outreach-webhook-cleanup-token` header so subscribers
    can deregister the webhook even after API access is revoked.

    Delivery contract: subscribers should respond `200 OK` within 5 seconds.
    Outreach retries up to 3 times (4 attempts total) at 1-second intervals on
    network failures. Non-2xx HTTP responses such as 500 or 429 are treated as
    acknowledgments and are not retried. Redirects are not followed. Hostnames
    resolving to private IP ranges suspend a webhook for 1 hour; DNS failures
    suspend for 1 minute. Webhooks that remain unrecovered for 7+ days are
    permanently deactivated.
  contact:
    name: Outreach Developer Platform
    url: https://developers.outreach.io/api/webhooks/
  license:
    name: Proprietary
    url: https://www.outreach.io/legal
  termsOfService: https://www.outreach.io/legal
defaultContentType: application/json
servers:
  subscriber:
    url: '{webhookUrl}'
    protocol: https
    description: |
      The HTTPS endpoint registered on the webhook subscription. Outreach POSTs
      JSON payloads to this URL. The URL is supplied by the subscriber at
      webhook creation time via `POST https://api.outreach.io/api/v2/webhooks`.
    variables:
      webhookUrl:
        description: Subscriber-controlled HTTPS endpoint that receives Outreach webhook deliveries.
        default: https://example.com/outreach/webhook
channels:
  account.created:
    description: Fires when a new Account is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onAccountCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AccountCreated'
  account.updated:
    description: Fires when an Account is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onAccountUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AccountUpdated'
  account.destroyed:
    description: Fires when an Account is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onAccountDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AccountDestroyed'
  call.created:
    description: Fires when a Call record is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onCallCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CallCreated'
  call.updated:
    description: Fires when a Call record is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onCallUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CallUpdated'
  call.destroyed:
    description: Fires when a Call record is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onCallDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CallDestroyed'
  emailAddress.created:
    description: Fires when a new Email Address is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onEmailAddressCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/EmailAddressCreated'
  emailAddress.updated:
    description: Fires when an Email Address is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onEmailAddressUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/EmailAddressUpdated'
  emailAddress.destroyed:
    description: Fires when an Email Address is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onEmailAddressDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/EmailAddressDestroyed'
  import.created:
    description: Fires when a bulk Import job is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onImportCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/ImportCreated'
  import.finished:
    description: Fires when a bulk Import job finishes.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onImportFinished
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/ImportFinished'
  kaiaRecording.created:
    description: Fires when a Kaia call recording is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onKaiaRecordingCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/KaiaRecordingCreated'
  mailing.created:
    description: Fires when a Mailing is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onMailingCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/MailingCreated'
  mailing.updated:
    description: Fires when a Mailing is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onMailingUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/MailingUpdated'
  mailing.destroyed:
    description: Fires when a Mailing is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onMailingDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/MailingDestroyed'
  mailing.bounced:
    description: Fires when a Mailing bounces.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onMailingBounced
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/MailingBounced'
  mailing.delivered:
    description: Fires when a Mailing is delivered.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onMailingDelivered
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/MailingDelivered'
  mailing.opened:
    description: Fires when a Mailing is opened by the recipient.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onMailingOpened
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/MailingOpened'
  mailing.replied:
    description: Fires when a recipient replies to a Mailing.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onMailingReplied
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/MailingReplied'
  opportunity.created:
    description: Fires when an Opportunity is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onOpportunityCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/OpportunityCreated'
  opportunity.updated:
    description: Fires when an Opportunity is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onOpportunityUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/OpportunityUpdated'
  opportunity.destroyed:
    description: Fires when an Opportunity is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onOpportunityDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/OpportunityDestroyed'
  opportunityProspectRole.created:
    description: Fires when an Opportunity Prospect Role is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onOpportunityProspectRoleCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/OpportunityProspectRoleCreated'
  opportunityProspectRole.updated:
    description: Fires when an Opportunity Prospect Role is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onOpportunityProspectRoleUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/OpportunityProspectRoleUpdated'
  opportunityProspectRole.destroyed:
    description: Fires when an Opportunity Prospect Role is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onOpportunityProspectRoleDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/OpportunityProspectRoleDestroyed'
  prospect.created:
    description: Fires when a Prospect is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onProspectCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/ProspectCreated'
  prospect.updated:
    description: Fires when a Prospect is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onProspectUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/ProspectUpdated'
  prospect.destroyed:
    description: Fires when a Prospect is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onProspectDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/ProspectDestroyed'
  sequence.created:
    description: Fires when a Sequence is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onSequenceCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/SequenceCreated'
  sequence.updated:
    description: Fires when a Sequence is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onSequenceUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/SequenceUpdated'
  sequence.destroyed:
    description: Fires when a Sequence is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onSequenceDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/SequenceDestroyed'
  sequenceState.created:
    description: Fires when a Sequence State is created (a prospect added to a sequence).
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onSequenceStateCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/SequenceStateCreated'
  sequenceState.updated:
    description: Fires when a Sequence State is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onSequenceStateUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/SequenceStateUpdated'
  sequenceState.destroyed:
    description: Fires when a Sequence State is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onSequenceStateDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/SequenceStateDestroyed'
  sequenceState.advanced:
    description: Fires when a Sequence State advances to the next step.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onSequenceStateAdvanced
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/SequenceStateAdvanced'
  sequenceState.finished:
    description: Fires when a Sequence State finishes.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onSequenceStateFinished
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/SequenceStateFinished'
  task.created:
    description: Fires when a Task is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onTaskCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/TaskCreated'
  task.updated:
    description: Fires when a Task is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onTaskUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/TaskUpdated'
  task.destroyed:
    description: Fires when a Task is deleted.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onTaskDestroyed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/TaskDestroyed'
  task.completed:
    description: Fires when a Task is completed.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onTaskCompleted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/TaskCompleted'
  user.created:
    description: Fires when a User is created.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onUserCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/UserCreated'
  user.updated:
    description: Fires when a User is updated.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: onUserUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/UserUpdated'
components:
  messageTraits:
    OutreachWebhookHeaders:
      headers:
        type: object
        properties:
          Outreach-Webhook-Signature:
            type: string
            description: |
              HMAC hex digest of the configured webhook `secret` and the raw
              request body. Present only when the webhook was created with a
              `secret` attribute. Subscribers should recompute and compare in
              constant time before trusting the payload.
          outreach-webhook-cleanup-token:
            type: string
            description: |
              The webhook's cleanup token. Sent on every delivery. Subscribers
              can later POST it to `/api/v2/webhooks/cleanup` to remove the
              webhook even if API access has been revoked.
          Content-Type:
            type: string
            description: Always `application/json`.
            default: application/json
  messages:
    AccountCreated:
      name: AccountCreated
      title: Account Created
      summary: An account was created in Outreach.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/AccountEventPayload'
    AccountUpdated:
      name: AccountUpdated
      title: Account Updated
      summary: An account was updated. With payloadVersion 2, prior values are included under `beforeUpdate`.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/AccountEventPayload'
    AccountDestroyed:
      name: AccountDestroyed
      title: Account Destroyed
      summary: An account was deleted. The payload carries the last known set of attributes.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/AccountEventPayload'
    CallCreated:
      name: CallCreated
      title: Call Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/CallEventPayload'
    CallUpdated:
      name: CallUpdated
      title: Call Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/CallEventPayload'
    CallDestroyed:
      name: CallDestroyed
      title: Call Destroyed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/CallEventPayload'
    EmailAddressCreated:
      name: EmailAddressCreated
      title: Email Address Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/EmailAddressEventPayload'
    EmailAddressUpdated:
      name: EmailAddressUpdated
      title: Email Address Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/EmailAddressEventPayload'
    EmailAddressDestroyed:
      name: EmailAddressDestroyed
      title: Email Address Destroyed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/EmailAddressEventPayload'
    ImportCreated:
      name: ImportCreated
      title: Import Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/ImportEventPayload'
    ImportFinished:
      name: ImportFinished
      title: Import Finished
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/ImportEventPayload'
    KaiaRecordingCreated:
      name: KaiaRecordingCreated
      title: Kaia Recording Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/KaiaRecordingEventPayload'
    MailingCreated:
      name: MailingCreated
      title: Mailing Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/MailingEventPayload'
    MailingUpdated:
      name: MailingUpdated
      title: Mailing Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/MailingEventPayload'
    MailingDestroyed:
      name: MailingDestroyed
      title: Mailing Destroyed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/MailingEventPayload'
    MailingBounced:
      name: MailingBounced
      title: Mailing Bounced
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/MailingEventPayload'
    MailingDelivered:
      name: MailingDelivered
      title: Mailing Delivered
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/MailingEventPayload'
    MailingOpened:
      name: MailingOpened
      title: Mailing Opened
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/MailingEventPayload'
    MailingReplied:
      name: MailingReplied
      title: Mailing Replied
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/MailingEventPayload'
    OpportunityCreated:
      name: OpportunityCreated
      title: Opportunity Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/OpportunityEventPayload'
    OpportunityUpdated:
      name: OpportunityUpdated
      title: Opportunity Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/OpportunityEventPayload'
    OpportunityDestroyed:
      name: OpportunityDestroyed
      title: Opportunity Destroyed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/OpportunityEventPayload'
    OpportunityProspectRoleCreated:
      name: OpportunityProspectRoleCreated
      title: Opportunity Prospect Role Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/OpportunityProspectRoleEventPayload'
    OpportunityProspectRoleUpdated:
      name: OpportunityProspectRoleUpdated
      title: Opportunity Prospect Role Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/OpportunityProspectRoleEventPayload'
    OpportunityProspectRoleDestroyed:
      name: OpportunityProspectRoleDestroyed
      title: Opportunity Prospect Role Destroyed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/OpportunityProspectRoleEventPayload'
    ProspectCreated:
      name: ProspectCreated
      title: Prospect Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/ProspectEventPayload'
    ProspectUpdated:
      name: ProspectUpdated
      title: Prospect Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/ProspectEventPayload'
    ProspectDestroyed:
      name: ProspectDestroyed
      title: Prospect Destroyed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/ProspectEventPayload'
    SequenceCreated:
      name: SequenceCreated
      title: Sequence Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/SequenceEventPayload'
    SequenceUpdated:
      name: SequenceUpdated
      title: Sequence Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/SequenceEventPayload'
    SequenceDestroyed:
      name: SequenceDestroyed
      title: Sequence Destroyed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/SequenceEventPayload'
    SequenceStateCreated:
      name: SequenceStateCreated
      title: Sequence State Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/SequenceStateEventPayload'
    SequenceStateUpdated:
      name: SequenceStateUpdated
      title: Sequence State Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/SequenceStateEventPayload'
    SequenceStateDestroyed:
      name: SequenceStateDestroyed
      title: Sequence State Destroyed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/SequenceStateEventPayload'
    SequenceStateAdvanced:
      name: SequenceStateAdvanced
      title: Sequence State Advanced
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/SequenceStateEventPayload'
    SequenceStateFinished:
      name: SequenceStateFinished
      title: Sequence State Finished
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/SequenceStateEventPayload'
    TaskCreated:
      name: TaskCreated
      title: Task Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/TaskEventPayload'
    TaskUpdated:
      name: TaskUpdated
      title: Task Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/TaskEventPayload'
    TaskDestroyed:
      name: TaskDestroyed
      title: Task Destroyed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/TaskEventPayload'
    TaskCompleted:
      name: TaskCompleted
      title: Task Completed
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/TaskEventPayload'
    UserCreated:
      name: UserCreated
      title: User Created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/UserEventPayload'
    UserUpdated:
      name: UserUpdated
      title: User Updated
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/OutreachWebhookHeaders'
      payload:
        $ref: '#/components/schemas/UserEventPayload'
  schemas:
    EventMeta:
      type: object
      description: Metadata envelope appended to every webhook delivery.
      required:
        - deliveredAt
        - eventName
      properties:
        deliveredAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp of when Outreach delivered the event.
        eventName:
          type: string
          description: Dotted event name in the form `resource.action` (e.g. `prospect.updated`).
    JsonApiResource:
      type: object
      description: |
        Generic JSON:API resource envelope used by Outreach for the `data` and
        `beforeUpdate` blocks. For `created` and `updated` actions, `attributes`
        contains only the fields that were created or changed. For `destroyed`
        actions, `attributes` contains the last known set of attributes.
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Resource type (e.g. `account`, `prospect`, `mailing`).
        id:
          type: string
          description: Resource identifier as a string per JSON:API convention.
        attributes:
          type: object
          additionalProperties: true
          description: Resource attributes as defined by the Outreach REST API for the given type.
        relationships:
          type: object
          additionalProperties: true
          description: JSON:API relationship references as defined by the Outreach REST API.
        links:
          type: object
          additionalProperties: true
          description: Optional JSON:API links object.
    EventEnvelopeBase:
      type: object
      description: |
        Base envelope shared by all Outreach webhook events. Payload version 1
        delivers `data` plus `meta`. Payload version 2 additionally delivers
        `beforeUpdate` carrying the prior values of attributes that changed.
      required:
        - data
        - meta
      properties:
        data:
          $ref: '#/components/schemas/JsonApiResource'
        beforeUpdate:
          allOf:
            - $ref: '#/components/schemas/JsonApiResource'
          description: |
            Only present when the webhook was registered with `payloadVersion: 2`
            and the event is an update. Holds the prior values of changed
            attributes.
        meta:
          $ref: '#/components/schemas/EventMeta'
    AccountEventPayload:
      allOf:
        - $ref: '#/components/schemas/EventEnvelopeBase'
        - type: object
          properties:
            data:
              type: object
              properties:
                type:
                  type: string
                  enum: [account]
    CallEventPayload:
      allOf:
        - $ref: '#/components/schemas/EventEnvelopeBase'
        - type: object
          properties:
            data:
              type: object
              properties:
                type:
                  type: string
                  enum: [call]
    EmailAddressEventPayload:
      allOf:
        - $ref: '#/components/schemas/EventEnvelopeBase'
        - t

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