Skip to main content
Partner webhooks are account-level endpoints you register through the webhook management API. Every event Trackly delivers to them is signed with HMAC-SHA256 so you can prove it came from Trackly and wasn’t replayed or tampered with.
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 is application/json.
  • event_id is minted once per logical event and shared across all endpoints, retries, and replays — dedupe on it (see below).
  • account_external_ids carries the external IDs of the child the event belongs to, so a single receiver can route across your whole portfolio.
  • attempt starts at 1 and increments on each retry.

Signature headers

How to verify

  1. Read X-Trackly-Signature and parse the t (timestamp) and v1 (signature) parts.
  2. Reject the request if t is more than 300 seconds from your current time — this bounds replay.
  3. Compute HMAC-SHA256(signing_secret, "{t}.{raw_body}") as a hex string, where raw_body is the exact raw request body bytes (do not re-serialize the parsed JSON — key order and whitespace must match).
  4. Compare your computed value to v1 using a constant-time comparison.
  5. During a secret rotation, if v1 doesn’t match, repeat the check against X-Trackly-Signature-Prev with your previous secret before rejecting.
The signing secret is returned once when you create the endpoint (and again on rotation). Store it securely.

Delivery semantics

  • At-least-once and unordered. A carrier receipt can be redelivered and a status can be revised (e.g. delivered later corrected to failed). Dedupe on event_id, and let the latest received state win.
  • Retries with backoff. A non-2xx response (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 marked dead.
  • 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 in X-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.

Create an endpoint

Register an HTTPS endpoint to receive events.

Deliveries & replay

Inspect the delivery log and replay events.