POST with a JSON body to each of your webhook endpoints that subscribes to the event’s type.
How webhooks work
- Something happens in the platform: a voucher is redeemed, a Redemption Link runs out, a voucher set becomes available in your catalog, an invoice is issued.
- AllRide renders the event for your partner (the consumer view of the resource) and stores it, with a stable
event.id, for every webhook endpoint of yours that subscribes to its type. For an active endpoint the delivery appears in your delivery log at once asPENDINGand the send is queued; for a paused endpoint it is stored asFAILEDwithendpoint-disabledand can be replayed after you resume the endpoint. - Your endpoint verifies the
x-signing-signatureheader, answers2xxwithin 15 seconds and processes the event afterwards. - Any other outcome is a failed attempt; the stored event is sent again with backoff, up to 5 attempts in total. The delivery ends as
DELIVERED(a2xx) orFAILED(the last attempt failed, or no request could be sent;lastErrorCodesays why), see Retries, logs and replay.
Deliveries are made only while your partner is
active and its API access is active. Events that occur in other periods are not delivered and cannot be replayed. The endpoint shows the reason in deliveriesBlockedReason.Register an endpoint
Register endpoints in the developer dashboard or through the Workspace API with Create a webhook endpoint. Both need the permissionmanage-webhooks, which you can delegate to API keys. Dashboard users additionally need a recent sign-in.
201 response contains the endpoint and its two signing secrets, firstSecret and secondSecret. They are shown only in this response: store both in your secret manager straight away. An idempotent replay of the request returns the endpoint with the secrets set to null (header Idempotent-Replay-Redacted: true); if you lost the original response, rotate both secrets.
Rules for an endpoint:
eventTypesholds 1 to 30 unique types that your partner may subscribe to; any other type fails with400data-failed-validationand the constraintwebhook-event-type-not-allowed. List webhook event types returns the types you can use.- Billing types (
invoice-*,payment-failed,payment-method-deactivated) needview-consumer-billing, andprice-terms-*types needview-consumer-pricing, held by the user or API key that creates or changes the endpoint. Without it, every write on such an endpoint answers403missing-permission. - A partner has at most 10 endpoints (
webhook-endpoint-limit-reached). - Update replaces
eventTypesas a whole. Pause and resume stop and restart deliveries; events that occur while an endpoint is paused are logged as not delivered and can be replayed within 30 days of the event (resume the endpoint first). Delete is final. - Owners and your technical contact receive an email when an endpoint is created or its URL or event types change.
Endpoint requirements
- HTTPS only, on port 443 or 8443, with a certificate that validates. Plain HTTP is refused.
- Publicly resolvable. URLs that resolve to private, loopback, link-local or cloud metadata addresses are refused when you save them (
422webhook-url-not-allowed) and again at send time. - Answer
2xxwithin 15 seconds. Acknowledge first, then do the work asynchronously (for example through your own queue). Any other status, a timeout or a connection error counts as a failure. - No redirects. AllRide does not follow
3xxresponses; a redirect counts as a failure. - Allow AllRide’s egress addresses if your firewall filters inbound traffic. They are published in Network and IP addresses.
- Verify every request with the
x-signing-signatureheader before you trust the body (Verifying signatures).
Payload format
Every body is a JSON object of at most 64 KiB with two properties,event and payload (the format of AllRide’s company webhooks):
payload is a snapshot taken when the event was created. To act on the latest state, fetch _links.self. Ignore properties and event types you do not know: new ones can be added without a new API version. A partner that is both a provider and a consumer receives the consumer view of its own redemptions here; the provider site documents the provider view.
Delivery guarantees
- At least once. An event can arrive more than once, for example after a timeout or a replay. Make handlers idempotent: deduplicate on
event.id. - Unordered, possibly late. Events can arrive in any order: retries arrive later than newer events, and events are stored before they are sent, so they are never silently dropped: if a send is delayed, an automatic sweep re-queues a delivery never attempted after about 10 minutes, or last attempted more than 30 minutes ago, so it may arrive late. A delivery that still cannot be sent after 3 re-queues becomes
FAILEDwithdelivery-stalledand can be replayed. Useevent.timestamp(or the resource’s own timestamps) to drop stale updates, and re-fetch the resource when the order matters. - Stored, retried, replayable. Each event is stored before it is sent. A failed attempt is sent again with backoff (about 30 seconds growing to 10 minutes), up to 5 attempts in total; then the delivery is
FAILEDand no longer retried, but you can replay it while it is in the delivery log, 30 days after the event. A replay re-sends the same stored event with the sameevent.idand five new attempts; the log keeps counting (attemptNo,attemptCount,replayCount). - Signed at each send. The body is stored at event time and signed when it is sent, so every attempt and replay carries a fresh
tand fresh signatures while the body (includingevent.idandevent.timestamp) stays byte for byte the same.
Test events
Send a test event delivers awebhook-endpoint-test event to one endpoint, even if the endpoint does not subscribe to that type. Use it to check reachability and your signature verification.
202 with the webhookDeliveryId of the stored test event, which is PENDING in the log until it is DELIVERED or FAILED. The body your endpoint receives looks like this:
active endpoint (a paused or deleted one answers 409 webhook-endpoint-not-active) and active API access. They are retried like any other event. The sandbox is a separate environment: register a sandbox endpoint there with sandbox API keys.