Svix · AsyncAPI Specification
Svix Operational Webhooks
Version
View Spec
View on GitHub
WebhookWebhooks As A ServiceWebhook DeliveryWebhook SendingEvent-DrivenEventingMessagingPub-SubStreamingIngestIntegrationReliabilityRetriesDeliverabilitySigningVerificationHMACStandard WebhooksMulti-TenantMulti-RegionEnterpriseSoftware-as-a-ServiceDeveloper PlatformRESTSOC 2HIPAAPCI DSSGDPROpen-SourceRustPolyglot SDKTerraformCLIAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: derived
source: openapi/_original/svix-openapi.json (OpenAPI 3.1 `webhooks` block, Svix API v1.922.0)
spec_type: Webhooks
asyncapi_published: false
asyncapi_probe:
- url: https://docs.svix.com/asyncapi.yaml
status: 404
- url: https://api.svix.com/asyncapi.yaml
status: 404
- url: https://www.svix.com/asyncapi.yaml
status: 404
- url: https://raw.githubusercontent.com/svix/svix-webhooks/main/asyncapi.yaml
status: 404
note: 'Svix publishes NO AsyncAPI document — all four probes above 404 on 2026-08-13 — so none is recorded
here and none was manufactured. What Svix does publish is better than most webhook catalogs: 14 OPERATIONAL
WEBHOOKS defined as first-class `webhooks` entries inside the OpenAPI 3.1 contract itself, each with
a named JSON Schema and a concrete example. This artifact transcribes that catalog. There is a second-order
irony worth recording: Svix is the webhooks-as-a-service company, and its own event surface is the one
thing it describes in OpenAPI rather than AsyncAPI.'
delivery:
signing: Standard Webhooks (svix-id / svix-timestamp / svix-signature headers)
signing_docs: https://docs.svix.com/receiving/verifying-webhooks/how
ack_contract: Return any 2XX to indicate the payload was received successfully.
retry_schedule_docs: https://docs.svix.com/retry-schedule
configuration: Operational webhook endpoints are managed via the v1.operational-webhook.endpoint.* operations.
management_docs: https://docs.svix.com/operational-webhooks
envelope:
fields:
- type
- data
note: 'Every event is {type: "<event.type>", data: {...}} — `type` repeats the event type name.'
summary:
event_count: 14
products:
- Background Tasks
- Dispatch
- Ingest
schemas_defined: 14
all_have_examples: true
events:
- type: endpoint.created
summary: Sent when an endpoint is created.
schema: EndpointCreatedEvent
payload_schema: EndpointCreatedEventData
payload_fields:
- appId
- appUid
- endpointId
- endpointUid
product: Dispatch
example:
data:
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: unique-app-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
endpointUid: unique-endpoint-identifier
type: endpoint.created
- type: endpoint.deleted
summary: Sent when an endpoint is deleted.
schema: EndpointDeletedEvent
payload_schema: EndpointDeletedEventData
payload_fields:
- appId
- appUid
- endpointId
- endpointUid
product: Dispatch
example:
data:
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: unique-app-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
endpointUid: unique-endpoint-identifier
type: endpoint.deleted
- type: endpoint.disabled
summary: Sent when an endpoint has been automatically disabled after continuous failures, or manually
via an API call.
schema: EndpointDisabledEvent
payload_schema: EndpointDisabledEventData
payload_fields:
- appId
- appUid
- endpointId
- endpointUid
- failSince
- trigger
product: Dispatch
example:
data:
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: unique-app-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
endpointUid: unique-endpoint-identifier
failSince: '2022-11-06T15:04:05Z'
trigger: automatic
type: endpoint.disabled
- type: endpoint.enabled
summary: Sent when an endpoint has been enabled.
schema: EndpointEnabledEvent
payload_schema: EndpointEnabledEventData
payload_fields:
- appId
- appUid
- endpointId
- endpointUid
product: Dispatch
example:
data:
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: unique-app-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
endpointUid: unique-endpoint-identifier
type: endpoint.enabled
- type: endpoint.updated
summary: Sent when an endpoint is updated.
schema: EndpointUpdatedEvent
payload_schema: EndpointUpdatedEventData
payload_fields:
- appId
- appUid
- endpointId
- endpointUid
product: Dispatch
example:
data:
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: unique-app-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
endpointUid: unique-endpoint-identifier
type: endpoint.updated
- type: message.attempt.exhausted
summary: Sent when a message delivery has failed (all of the retry attempts have been exhausted).
schema: MessageAttemptExhaustedEvent
payload_schema: MessageAttemptExhaustedEventData
payload_fields:
- appId
- appUid
- endpointId
- lastAttempt
- msgEventId
- msgId
product: Dispatch
example:
data:
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: unique-app-identifier
msgId: msg_1srOrx2ZWZBpBUvZwXKQmoEYga2
msgEventId: unique-msg-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
lastAttempt:
id: atmpt_1srOrx2ZWZBpBUvZwXKQmoEYga2
responseStatusCode: 500
timestamp: '2022-11-06T15:04:05Z'
type: message.attempt.exhausted
- type: message.attempt.failing
summary: 'Sent after a message has been failing for a few times.
It''s sent on the fourth failure. It complements `message.attempt.exhausted` which is sent after the
last failure.'
schema: MessageAttemptFailingEvent
payload_schema: MessageAttemptFailingEventData
payload_fields:
- appId
- appUid
- endpointId
- lastAttempt
- msgEventId
- msgId
product: Dispatch
example:
data:
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: unique-app-identifier
msgId: msg_1srOrx2ZWZBpBUvZwXKQmoEYga2
msgEventId: unique-msg-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
lastAttempt:
id: atmpt_1srOrx2ZWZBpBUvZwXKQmoEYga2
responseStatusCode: 500
timestamp: '2022-11-06T15:04:05Z'
type: message.attempt.failing
- type: message.attempt.recovered
summary: Sent on a successful dispatch after an earlier failure op webhook has already been sent.
schema: MessageAttemptRecoveredEvent
payload_schema: MessageAttemptRecoveredEventData
payload_fields:
- appId
- appUid
- endpointId
- lastAttempt
- msgEventId
- msgId
product: Dispatch
example:
data:
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: unique-app-identifier
msgId: msg_1srOrx2ZWZBpBUvZwXKQmoEYga2
msgEventId: unique-msg-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
lastAttempt:
id: atmpt_1srOrx2ZWZBpBUvZwXKQmoEYga2
responseStatusCode: 200
timestamp: '2022-11-06T15:04:05Z'
type: message.attempt.recovered
- type: background_task.finished
summary: Sent when a background task is finished.
schema: BackgroundTaskFinishedEvent
payload_schema: BackgroundTaskFinishedEvent2
payload_fields:
- data
- status
- task
- taskId
product: Background Tasks
example:
data:
taskId: qtask_1srOrx2ZWZBpBUvZwXKQmoEYga2
task: application.stats
status: finished
data:
appStats:
- messageDestinations: 343
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: null
type: background_task.finished
- type: ingest.endpoint.disabled
summary: Sent when an ingest endpoint has been automatically disabled after continuous failures, or
manually via an API call.
schema: IngestEndpointDisabledEvent
payload_schema: IngestEndpointDisabledEventData
payload_fields:
- endpointId
- endpointUid
- failSince
- sourceId
- trigger
product: Ingest
example:
data:
sourceId: src_30HT9jb8WZXKVWIO44ZDr
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
endpointUid: unique-endpoint-identifier
failSince: '2022-11-06T15:04:05Z'
trigger: automatic
type: ingest.endpoint.disabled
- type: ingest.message.attempt.exhausted
summary: Sent when a message delivery has failed (all of the retry attempts have been exhausted).
schema: IngestMessageAttemptExhaustedEvent
payload_schema: IngestMessageAttemptExhaustedEventData
payload_fields:
- endpointId
- lastAttempt
- msgEventId
- msgId
- sourceId
product: Ingest
example:
data:
sourceId: src_30HT9jb8WZXKVWIO44ZDr
msgId: msg_1srOrx2ZWZBpBUvZwXKQmoEYga2
msgEventId: unique-msg-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
lastAttempt:
id: atmpt_1srOrx2ZWZBpBUvZwXKQmoEYga2
responseStatusCode: 500
timestamp: '2022-11-06T15:04:05Z'
type: ingest.message.attempt.exhausted
- type: ingest.message.attempt.failing
summary: 'Sent after a message has been failing for a few times.
It''s sent on the fourth failure. It complements `ingest.message.attempt.exhausted` which is sent
after the last failure.'
schema: IngestMessageAttemptFailingEvent
payload_schema: IngestMessageAttemptFailingEventData
payload_fields:
- endpointId
- lastAttempt
- msgEventId
- msgId
- sourceId
product: Ingest
example:
data:
sourceId: src_30HT9jb8WZXKVWIO44ZDr
msgId: msg_1srOrx2ZWZBpBUvZwXKQmoEYga2
msgEventId: unique-msg-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
lastAttempt:
id: atmpt_1srOrx2ZWZBpBUvZwXKQmoEYga2
responseStatusCode: 500
timestamp: '2022-11-06T15:04:05Z'
type: ingest.message.attempt.failing
- type: ingest.message.attempt.recovered
summary: Sent on a successful dispatch after an earlier failure op webhook has already been sent.
schema: IngestMessageAttemptRecoveredEvent
payload_schema: IngestMessageAttemptRecoveredEventData
payload_fields:
- endpointId
- lastAttempt
- msgEventId
- msgId
- sourceId
product: Ingest
example:
data:
sourceId: src_30HT9jb8WZXKVWIO44ZDr
msgId: msg_1srOrx2ZWZBpBUvZwXKQmoEYga2
msgEventId: unique-msg-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
lastAttempt:
id: atmpt_1srOrx2ZWZBpBUvZwXKQmoEYga2
responseStatusCode: 200
timestamp: '2022-11-06T15:04:05Z'
type: ingest.message.attempt.recovered
- type: message.attempt.log
summary: Sent after message attempts are made. Contains metadata about message attempts and their results.
In order to reduce the frequency of webhooks, these are sent in batches periodically.
schema: MessageAttemptLogEvent
payload_schema: null
payload_fields: []
product: Dispatch
example:
data:
- orgId: env_1srOrx2ZWZBpBUvZwXKQmoEYga2
appId: app_1srOrx2ZWZBpBUvZwXKQmoEYga2
appUid: unique-app-identifier
endpointId: ep_1srOrx2ZWZBpBUvZwXKQmoEYga2
msgId: msg_1srOrx2ZWZBpBUvZwXKQmoEYga2
msgEventId: unique-msg-identifier
msgCreated: '2022-11-06T15:04:05Z'
attemptStart: '2022-11-06T15:04:06Z'
attemptEnd: '2022-11-06T15:04:07Z'
attemptId: atmpt_1srOrx2ZWZBpBUvZwXKQmoEYga2
responseStatusCode: 200
attemptCount: 1
status: 0
eventType: user.signup
type: message.attempt.log