/api/partner/ routes.
1
Register your endpoint
Create a webhook takes an Five endpoints per firm — a sixth answers
https URL of at most 500
characters. Omit events to receive everything, including event types added later; name a
subset to filter.409, so delete one first. Plain http is refused
with a 400, as is an unknown event type, and the error names the valid types. A host that
resolves to a private address is refused at delivery time.The response carries the signing secret. It is shown on every read, not once, because it
authenticates us to your endpoint and grants no access here — so
listing your webhooks later will show it again.2
Prove the wiring with a test delivery
Create a test delivery sends a An endpoint that refuses the ping is still a
ping to one
of your endpoints immediately, signed exactly like a real event. This is the call to run while
you are building the receiver: it exercises the real signature, the real headers, and the real
network path.200 here, with ok: false, the status your
endpoint returned, and a detail saying why. The request succeeded at what it was asked to do;
reporting your endpoint’s failure as our error would tell you the wrong thing. A test delivery
is not retried and is not written to the log.3
Verify every delivery over the raw bytes
Each delivery carries a Two rules make this work. The timestamp is inside the signed material, so a captured body
cannot be replayed under a fresh clock — reject anything outside a five-minute window. And you
must verify against the bytes you received: parsing the JSON and re-serializing it changes the
whitespace, and the signature will not match.
trdrs-signature header of the form t=<epoch seconds>,v1=<64 hex characters>. v1 is an HMAC-SHA256, keyed with your endpoint’s signing secret, over the string
<t>.<raw request body>.4
Answer 2xx fast, and tolerate a duplicate
Answer
2xx to accept a delivery. Anything else — including a timeout — is retried with
backoff for about nine hours in total, so your endpoint may see the same event twice.Key your handler on the delivery id, or on the natural key in the payload: referenceId on
balance and reset events, registrationId on registration events, accountNumber on risk
events. Acknowledge first and do your processing afterwards; a handler that finishes its work
before responding will time out and be retried even though it succeeded.5
Read the log when something goes quiet
List webhook deliveries is the log for one
endpoint, newest first: what we sent, what your endpoint answered, and what is still queued.
limit is 1 to 200 and defaults to 50. Out of range is a 400, never a silent clamp.The event catalog
Every delivery uses the same envelope: a
type, a createdAt, and a data object carrying the
event’s own fields.
events filter receives every type in this table, and every type
added to it later. Name the events explicitly if you would rather opt in deliberately.
Reading a delivery row
Terminal rows age out after 60 days. A pending row is never swept.
Deleting an endpoint
Delete a webhook stops delivery immediately and takes the endpoint’s delivery log with it, so read anything you still need first. Deleting one endpoint never affects another.Where to go deeper
- Events and webhooks — the retry schedule attempt by attempt, and the delivery contract in full.
- Follow registrations — the two onboarding events, and reconciling them against the registration list.
- Govern account risk — what puts a
risk.lockedon the wire. - Record balance operations — what puts a
balance.recordedon it.