Webhook delivery
Webhooks are stored in a durable outbox before they’re sent, so a restart or deploy doesn’t lose them.- Each attempt times out after 8 seconds.
- A failed attempt (anything other than a
2xx) is retried with increasing delays. The schedule runs from 30 seconds to 12 hours, for about a day in total. - After the last attempt, the delivery is marked as failed. It stays in the delivery log.
- A disabled or deleted endpoint stops receiving events. A rotated secret is used on the next attempt.
- The event
idand payload stay the same across retries, so your handler can deduplicate.
Idempotency
Anything that creates money-related records accepts an idempotency key:- Events, keyed on
idempotencyKey. A duplicate event isn’t counted twice. - Credit grants and purchases, keyed on
idempotencyKey. A retry grants or sells once.
Usage ingestion
- Event batches can contain a mix of accepted and rejected events. The response lists both, so retry only the rejected ones after you fix them.
- Entitlement checks in the SDK keep answering during short outages, using cached answers for up to 24 hours by default. Choose
onUnavailabledeliberately: see Entitlements.
Rate limits and maintenance
- If you’re rate limited, the API returns
429. Back off and retry. - During maintenance, changes are paused and the API returns
503with"code": "maintenance". Read-only checks may still work. Retry after a few minutes.
Health checks
Failure modes and what to do
Support
For incidents, include the workspace subdomain, the request time (in UTC), and thex-request-id or event id involved.