Skip to main content
Know the moment a trader links an account you registered. A registration stays pending until the trader acts, and two webhook events tell your server what happened: registration.linked and registration.revoked. This page covers those two events. The endpoint, the signature check, the retries and the delivery log work the same for every event and live in Receive events, so set that up first. By the end your onboarding system marks a registration complete as soon as the trader links it, and catches any delivery it missed.
1

Subscribe to the two registration events

Register an endpoint that receives only the onboarding events, so your onboarding system gets nothing else. Leaving events out, or sending an empty list, receives every event type.Required scope: venue:configure.
The response is 201 with the endpoint and its signing secret. You can have five endpoints, so an onboarding system and a billing system can each keep their own filter.
Registration events go to the endpoints of the venue your pre-registration key acts for. A Venue key registers endpoints on its own venue, so the call above receives them when your pre-registration key and your Venue key act for the same venue.
2

Read the payload

Every delivery is a POST with the same envelope: a type, a createdAt, and a data object. For a linked registration, data carries the registration’s id, the trader’s email and the account number, the things you sent when you created it, so you can find your own record without a lookup table. A cancelled registration’s data carries its id.
No event fires when a registration expires. A pending registration that nobody links passes its expiresAt quietly, so you notice expiry on the list.
3

Handle a delivery twice without harm

A delivery your endpoint doesn’t answer with 2xx, including one that times out, is retried for about nine hours, so the same event can arrive more than once. Key your processing on registrationId in the payload, which stays the same across retries.
4

Reconcile against the list

The registration list is the settling read: it’s built from the same records the events come from.Read it on a schedule and compare it with your own table. A registration your table calls pending but the list calls linked is a delivery you missed. One the list calls expired is a trader who never arrived.

Resolve a mismatch with our records

Work down this list. Each step is cheaper than the next.
  1. The registration list. It’s the source of truth for status. If it says linked, the trader linked the account, whatever your table says.
  2. The delivery log. GET /api/venues/{venueId}/webhooks/{webhookId}/deliveries lists every attempt for one endpoint, newest first, each with the exact payload sent, so you can replay an event your endpoint dropped. pending means it’s still being retried; failed means the retries ran out.
  3. A test ping. POST /api/venues/{venueId}/webhooks/{webhookId}/test sends a signed ping right now and reports exactly what your endpoint answered. It tells a broken delivery apart from a handler that’s refusing.
Finished delivery rows are kept for 60 days; a row still being retried is never removed. Deleting an endpoint deletes its delivery log too, so read what you need first.

Test it end to end

  1. Register a test endpoint for the two events and send it a test ping. Your endpoint verifies the signature and answers 2xx.
  2. Register an account for a sandbox test trader, then cancel it. Your endpoint receives registration.revoked with that registrationId.
  3. Register it again and link it by signing in as the test trader. Your endpoint receives registration.linked.

Next steps

Receive events

Verify signatures, handle retries and read the delivery log.

Register an account

Create, list and cancel registrations.