This is the partner webhook control plane — account-level endpoints, HMAC-signed, retried with backoff, managed over the API. It is a separate system from the per-list Delivery Forwarding webhooks configured in the dashboard (which use a shared-secret header and are not retried). This page describes the control-plane system.
Event types
A registered endpoint subscribes to one or more of:business_profile.* events carry business_profile_id and verification_status in their data object — fetch the profile or its submissions for the full detail.The event envelope
Each POST body is a single event (not a batch). Content type isapplication/json.
event_idis minted once per logical event and shared across all endpoints, retries, and replays — dedupe on it (see below).account_external_idscarries the external IDs of the child the event belongs to, so a single receiver can route across your whole portfolio.attemptstarts at1and increments on each retry.
Signature headers
How to verify
- Read
X-Trackly-Signatureand parse thet(timestamp) andv1(signature) parts. - Reject the request if
tis more than 300 seconds from your current time — this bounds replay. - Compute
HMAC-SHA256(signing_secret, "{t}.{raw_body}")as a hex string, whereraw_bodyis the exact raw request body bytes (do not re-serialize the parsed JSON — key order and whitespace must match). - Compare your computed value to
v1using a constant-time comparison. - During a secret rotation, if
v1doesn’t match, repeat the check againstX-Trackly-Signature-Prevwith your previous secret before rejecting.
Delivery semantics
- At-least-once and unordered. A carrier receipt can be redelivered and a status can be revised (e.g.
deliveredlater corrected tofailed). Dedupe onevent_id, and let the latest received state win. - Retries with backoff. A non-
2xxresponse (or a timeout — your endpoint must answer within 10 seconds) is retried up to 5 times with delays of roughly 1m, 5m, 15m, 1h, 4h. After the budget is exhausted the delivery is markeddead. - Replayable. Every attempt is logged and can be re-sent from the deliveries API, reusing the original
event_id. - HTTPS only. Endpoints must be
https://public URLs; Trackly pins the resolved IP and does not follow redirects.
Rotating the signing secret
Rotate the secret and the old secret keeps working for a 24-hour grace window. During that window events are signed with the new secret inX-Trackly-Signature and the old secret in X-Trackly-Signature-Prev, so you can deploy the new secret with zero missed events. After the window, only the new secret is used.
Related
Create an endpoint
Register an HTTPS endpoint to receive events.
Deliveries & replay
Inspect the delivery log and replay events.