2xx status within 15 seconds. Everything else is a failure: a 3xx (redirects are not followed), 4xx or 5xx status, a timeout, a TLS, DNS or connection error, or a URL that resolves to an address AllRide refuses to call.
Retry schedule
When an event occurs, AllRide first stores it, with its complete body, for every endpoint that subscribes to its type, in the same transaction as the change that caused it. The delivery shows up in the log at once asPENDING. Only then is the send triggered through AllRide’s delivery queue (Google Cloud Pub/Sub). The sender acknowledges the queue message only when your endpoint answered 2xx (the delivery becomes DELIVERED); after a failed attempt the message is not acknowledged and the queue delivers it again:
- with an increasing backoff, starting at about 30 seconds and growing to at most 10 minutes between attempts;
- at most 5 delivery attempts in total. When the fifth attempt fails the delivery becomes
FAILEDand is no longer retried; you can still replay it while it is in the delivery log, 30 days after the event; - with the body stored at event time, byte for byte (same
event.idandevent.timestamp), signed again at each send:tinx-signing-signatureand the signatures differ between attempts while the body stays identical; Retry-Afterheaders in your responses are not honoured; the backoff is fixed by the platform.
PENDING. A delivery that still cannot be sent after 3 re-queues becomes FAILED with lastErrorCode delivery-stalled (a fault on AllRide’s side, which AllRide monitors), and you can replay it. Deliveries can therefore arrive late and out of order: do not rely on the order of deliveries: deduplicate on event.id and use event.timestamp or the resource’s own timestamps to discard stale updates.
Automatic disabling
AllRide never disables an endpoint automatically, however many deliveries fail. Deliveries stop only when:- you pause or delete the endpoint. While an endpoint is paused, its events are stored as
FAILEDdeliveries withlastErrorCodeendpoint-disabledand no attempt, and can be replayed within 30 days of the event (resume the endpoint first); - your partner is not
active, or its API access is notactive. Events in such a period are neither delivered nor logged and cannot be replayed. Each endpoint shows the reason indeliveriesBlockedReason(api-access-inactiveorpartner-inactive, elsenull).
filter[status]=FAILED) or alert on your own receiver’s error rate: a delivery that fails 5 times stays FAILED until you replay it.
Delivery logs
The delivery log has one delivery per stored event and endpoint, kept for 30 days. Read it in the developer dashboard or with List deliveries and Get a delivery (permissionview-webhook-deliveries, delegable to API keys).
A delivery is listed as soon as its event is stored, before the first send:
Why a delivery failed (lastErrorCode)
lastErrorCode is the errorCode of the last attempt, or one of the delivery-level codes below when no request was sent for it. Every FAILED delivery can be replayed while it is in the log.
Filter the list by
webhookEndpointId, status, eventType, lastStatusCode (gte, lte), webhookEventId and createdAt; the default order is newest first.
issued.codeandissued.linkofredemption-createdandredemption-voidedare masked;- a redemption entity’s
emailbecomes the first character of the local part,••••and the domain (a••••@example.com); itsrefIdanddisplayNamebecome"••••".
view-consumer-billing, and deliveries of price-terms-* types only to principals with view-consumer-pricing. For others they are left out of lists, and reading or replaying one answers 404 webhook-delivery-not-found.
Erased entities. After you erase a redemption entity, the events that concern it have no payload any more: their deliveries show payload: null and they cannot be replayed.
To keep the log as a file, page through List webhook deliveries as described in Downloading large lists; the rows hold the same masked bodies.
Replay
Replays re-send an event that your endpoint missed, for example after an outage. They needmanage-webhooks (delegable to API keys), an active endpoint (else 409 webhook-endpoint-not-active) and active API access (else 403 api-access-inactive). A delivery can be replayed, singly or in bulk, while it is in the delivery log: 30 days after its event was created. After that the delivery is gone (404 webhook-delivery-not-found). An event whose payload was removed because its entity was erased answers 410 webhook-event-expired. A replay ignores the endpoint’s current subscription: you asked for it explicitly.
One delivery. Replay a delivery re-sends the same stored event: the same body and event.id, with a fresh t and signatures. It answers 202 with the webhookDeliveryId; the delivery goes back to PENDING, its new attempts are added with trigger: replay, and it is retried like any other delivery. A replay starts five new attempts. The log keeps counting: attemptNo continues after the earlier attempts (a FAILED delivery with five attempts that is replayed and then answered 2xx shows attemptNo 1 to 6), attemptCount is the total number of attempts (the length of attempts[]), and replayCount says how often the delivery was replayed.
[since, until) whose delivery is FAILED (all attempts failed, or stored while the endpoint was paused), optionally only for some eventTypes. Each one goes back to PENDING with its original event.id.
sincemay be at most 30 days in the past (else400data-failed-validationwith the constraintout-of-range);untildefaults to now.- One call queues at most 10,000 events. When more match,
truncatedistrue: call again withsinceset tonextSinceonce the first batch has gone out. - The events are sent in the background; follow them in the log with
filter[status]=PENDING. While a bulk replay of the same endpoint is still running, a second call answers409invalid-state-transition. Pausing the endpoint stops the remaining sends. - Billing and
price-terms-*events are included only when you hold the matching read permission; events of erased entities are skipped and not counted.