Loading documentation…
Loading documentation…
Design for retained history, duplicates, concurrent delivery and uncertain acceptance.
Delivery is at least once within bounded attempts and retained history. It is not an exactly-once guarantee or unlimited replay promise. An accepted refresh can finish before its event is projected or delivered.
Within a Project, committed event positions define replay and SSE order. occurred_at may be earlier than events already projected. There is no global order across Projects. Concurrent webhook attempts, retries and redrive can arrive out of order. Use the stable event ID to deduplicate, then reconcile the current refresh or inventory state as required.
Endpoint eligibility is decided when an event is projected. A newly active endpoint can receive a delayed projection with an earlier occurrence time. Events projected while an endpoint is paused or suspended remain in Activity but acquire no delivery obligation for that endpoint. Resuming does not backfill those events.
Any 2xx completes delivery. Transport errors, timeouts, 408, 425, 429 and 5xx can retry. Other 3xx/4xx fail the delivery; redirects are not followed. HTTP 410 suspends the endpoint. Ten consecutive failed attempts can suspend it; a successful attempt resets the streak.
A delivery window allows at most 20 attempts over 24 hours, additionally bounded by remaining payload retention. Retries use exponential jitter, from at least one second to at most one hour. A valid Retry-After is respected within the one-hour and remaining-horizon bounds.
A timeout or lost response does not prove your receiver rejected the event. It may already have committed. A recovered abandoned send is marked ambiguous and may retry. Receiver uniqueness and durable local work must make both retries and manual redrive safe. Never log or return raw receiver error bodies in customer diagnostics.
Inventory and Billing own request admission, allowance/prepaid selection and settlement. An event is a terminal observation, not a settlement instruction. Projecting it again, replaying it over SSE, retrying a webhook or redriving a retained delivery does not reserve, debit, settle or refund money. Your receiver must also avoid repeating its own business action when a duplicate arrives.
See limits for retention and recovery for gaps and restored histories.