Skip to main content
Every webhook delivery is persisted to a tenant-scoped event log before any HTTP attempt. The endpoints below let you read, stream, and replay events without leaving the API. All endpoints require the standard x-chert-tenant + signature/bearer auth.

List events

Response
Pass next_cursor back as cursor to read the next page. When next_cursor is null, you have reached the end.

Get one event

Returns the same shape as a list row, with the full delivery.attempts array. Each attempt records the HTTP status, duration, and any error string.

Replay an event

Re-POSTs the original payload to matching active webhook subscriptions, appends fresh attempts, and updates delivery.status. Use this after fixing a bug in your webhook handler. To replay to one subscription, add ?subscription_id=<subscription_id>.
200 OK
502 Bad Gateway
The replay route keeps its { ok, error, downstream_status } shape and adds the canonical numeric code, a message, a retryable boolean, and a trace_id. A 404 (code 2011 — event not found) and a 400 (code 1002 — no delivery destination configured, or a dev-inbox tenant) are both retryable: false; a 502 delivery failure (code 3004) is retryable: true. See Errors.

Stream events

Server-Sent Events feed. Useful when developing locally without a public URL — equivalent to stripe listen.
  • Connection lives 60 seconds, then closes with event: close. Clients should reconnect.
  • Heartbeat comments arrive every 15 seconds to keep middleboxes from idling out the socket.
  • Pass ?since=<iso> to resume from a known cursor after a reconnect.

Dev inbox

When you create a subscription with url: "https://dev-inbox" (the short sentinel), deliveries are recorded but no outbound POST is attempted. Pull them with:
Switch to a real URL before going to production. Dev-inbox events accumulate indefinitely.

See also