TANITARDevelopers
Webhooks

Endpoint states

The four states of a webhook endpoint, the transitions between them, and what each does to deliveries in flight.

An endpoint has a state and, separately, a testStatus.

stateReceives new eventsMeaning
pendingNoRegistered, not yet enabled.
activeYesEnabled after a passed test.
disabledNoStopped; can be enabled again.
revokedNoRetired permanently. Terminal.
testStatusMeaning
untestedNo test since registration or since the URL last changed.
passedThe last test delivery got a 2xx.
failedThe last test delivery did not.

Transitions

flowchart LR
    P[pending] -- enable after passed test --> A[active]
    P -- disable --> D[disabled]
    A -- disable --> D
    D -- enable after passed test --> A
    P -- revoke --> R[revoked]
    A -- revoke --> R
    D -- revoke --> R
  • Enable requires testStatus passed. You can test in any non-revoked state.
  • Disable is allowed from any non-revoked state.
  • Changing the URL is allowed in pending and disabled only, and resets testStatus to untested, so the endpoint must pass a new test before it is enabled again.
  • Revoke is allowed from any non-revoked state. It also revokes every signing secret of the endpoint. A revoked endpoint refuses every further change with 409 WEBHOOK_ENDPOINT_REVOKED.

Every transition requires the current revision in If-Match and is recorded in your organization's audit log. See Register and manage endpoints for the routes.

What happens to deliveries in flight

Only active endpoints receive new deliveries: an event that occurs while the endpoint is in any other state creates no delivery for it, and is not delivered later when the endpoint becomes active.

Deliveries that were already pending on the retry ladder are checked again before each attempt:

Endpoint state at the next attemptEffect on a pending delivery
activeThe attempt is sent.
pending or disabledSettles dead with reason ENDPOINT_DISABLED; nothing is sent.
revokedSettles dead with reason ENDPOINT_REVOKED; nothing is sent.

An attempt already in progress when you disable or revoke the endpoint completes normally.

Deliveries that went dead because the endpoint was disabled are not revived by enabling it again. Once the endpoint is active, replay them: one at a time, or all of them with a batch replay. A revoked endpoint's deliveries cannot be replayed, since replay requires an active endpoint; they remain visible in the delivery log for 30 days.

On this page