Webhook Endpoints
Register where events are delivered, roll the signing secret without dropping a delivery, and see how the destination is behaving.
Register a webhook endpoint
Delete a webhook endpoint
List webhook endpoints
Get a webhook endpoint
Update a webhook endpoint
ModelsExpand Collapse
Endpoint object { id, created_at, disabled_at, 8 more } A destination this brand’s events are delivered to.
A destination this brand’s events are delivered to.
The event kinds delivered here, or null for every kind (including kinds added later).
How a destination has been behaving, taken from the deliveries actually
attempted against it. Worth reading before assuming an integration is
healthy: a destination that has been refusing events shows up here well
before anyone notices they are missing.
How a destination has been behaving, taken from the deliveries actually attempted against it. Worth reading before assuming an integration is healthy: a destination that has been refusing events shows up here well before anyone notices they are missing.
Failed attempts since the last success. Reset to 0 by any success.
When a delivery to this endpoint last failed. null if none ever has.
A short reason for the last failure, written for a human reading it. The wording is not stable; do not branch on it.
enabled or disabled. A disabled endpoint receives nothing, and events are not queued for it — see the update operation. Values grow additively.
How many undelivered events were dropped by THIS request, present only on the response to a request that disabled or deleted the endpoint. Disabling is a cutoff: everything still queued for this endpoint is dropped then and there rather than waiting to be replayed later.
Where to pick the dropped events back up: pass it as the cursor query
parameter to GET /v1/streams/events and the first event you receive is the
first one dropped. Present alongside backlog_dropped and only then.
Keep it if you rely on webhooks alone. A webhook carries the event’s identity but not its position in the stream, so this response is the only place a push-only integration is handed the position of the gap it just created. Reconnecting without a cursor starts at the present moment and skips the gap entirely.
It stays valid while the events behind it are retained; past that the
stream answers 410 cursor_expired rather than pretending.
EndpointCreated object { id, created_at, disabled_at, 10 more } A newly registered endpoint, together with its signing secret. The secret
appears in this response and never again.
A newly registered endpoint, together with its signing secret. The secret appears in this response and never again.
The event kinds delivered here, or null for every kind (including kinds added later).
How a destination has been behaving, taken from the deliveries actually
attempted against it. Worth reading before assuming an integration is
healthy: a destination that has been refusing events shows up here well
before anyone notices they are missing.
How a destination has been behaving, taken from the deliveries actually attempted against it. Worth reading before assuming an integration is healthy: a destination that has been refusing events shows up here well before anyone notices they are missing.
Failed attempts since the last success. Reset to 0 by any success.
When a delivery to this endpoint last failed. null if none ever has.
A short reason for the last failure, written for a human reading it. The wording is not stable; do not branch on it.
The signing secret, in the Standard Webhooks presentation form
(whsec_ followed by base64). Shown exactly once, here. It is not
recoverable from any later read — if you lose it, add a second secret
and retire this one.
enabled or disabled. A disabled endpoint receives nothing, and events are not queued for it — see the update operation. Values grow additively.
How many undelivered events were dropped by THIS request, present only on the response to a request that disabled or deleted the endpoint. Disabling is a cutoff: everything still queued for this endpoint is dropped then and there rather than waiting to be replayed later.
Where to pick the dropped events back up: pass it as the cursor query
parameter to GET /v1/streams/events and the first event you receive is the
first one dropped. Present alongside backlog_dropped and only then.
Keep it if you rely on webhooks alone. A webhook carries the event’s identity but not its position in the stream, so this response is the only place a push-only integration is handed the position of the gap it just created. Reconnecting without a cursor starts at the present moment and skips the gap entirely.
It stays valid while the events behind it are retained; past that the
stream answers 410 cursor_expired rather than pretending.
EndpointHealth object { consecutive_failures, last_failure_at, last_failure_reason, 2 more } How a destination has been behaving, taken from the deliveries actually
attempted against it. Worth reading before assuming an integration is
healthy: a destination that has been refusing events shows up here well
before anyone notices they are missing.
How a destination has been behaving, taken from the deliveries actually attempted against it. Worth reading before assuming an integration is healthy: a destination that has been refusing events shows up here well before anyone notices they are missing.
Failed attempts since the last success. Reset to 0 by any success.
When a delivery to this endpoint last failed. null if none ever has.
A short reason for the last failure, written for a human reading it. The wording is not stable; do not branch on it.
EndpointList object { data } The endpoints registered for this key’s brand.
The endpoints registered for this key’s brand.
The event kinds delivered here, or null for every kind (including kinds added later).
How a destination has been behaving, taken from the deliveries actually
attempted against it. Worth reading before assuming an integration is
healthy: a destination that has been refusing events shows up here well
before anyone notices they are missing.
How a destination has been behaving, taken from the deliveries actually attempted against it. Worth reading before assuming an integration is healthy: a destination that has been refusing events shows up here well before anyone notices they are missing.
Failed attempts since the last success. Reset to 0 by any success.
When a delivery to this endpoint last failed. null if none ever has.
A short reason for the last failure, written for a human reading it. The wording is not stable; do not branch on it.
enabled or disabled. A disabled endpoint receives nothing, and events are not queued for it — see the update operation. Values grow additively.
How many undelivered events were dropped by THIS request, present only on the response to a request that disabled or deleted the endpoint. Disabling is a cutoff: everything still queued for this endpoint is dropped then and there rather than waiting to be replayed later.
Where to pick the dropped events back up: pass it as the cursor query
parameter to GET /v1/streams/events and the first event you receive is the
first one dropped. Present alongside backlog_dropped and only then.
Keep it if you rely on webhooks alone. A webhook carries the event’s identity but not its position in the stream, so this response is the only place a push-only integration is handed the position of the gap it just created. Reconnecting without a cursor starts at the present moment and skips the gap entirely.
It stays valid while the events behind it are retained; past that the
stream answers 410 cursor_expired rather than pretending.
Webhook EndpointsReplays
Register where events are delivered, roll the signing secret without dropping a delivery, and see how the destination is behaving.
Replay retained webhook events
Get webhook replay status
Webhook EndpointsSecrets
Register where events are delivered, roll the signing secret without dropping a delivery, and see how the destination is behaving.