This is the practical companion to the Webhooks reference pages. It covers everything you need to receive, verify, and reliably process DimeTrades webhook deliveries.
The five-minute summary. Register a webhookUrl; DimeTrades POSTs a signed JSON envelope to it whenever an order or trade you’re exposed to changes state. Verify the X-DimeTrades-Signature header with your webhook secret before trusting the body. Return any 2xx quickly — everything else is retried with backoff. Dedupe on the envelope’s id, since a retried delivery reuses it.

1. Setup

Webhook delivery is configured per brand by your DimeTrades account contact:
  1. A webhookUrl is set on your brand — the HTTPS endpoint deliveries are POSTed to.
  2. A signing secret is issued — shown to you exactly once, the same way an API secret is. Store it like any other credential; it cannot be retrieved again, only rotated (which invalidates the old one).
  3. Delivery can be paused at any time without losing the URL/secret configuration.
There is no self-serve registration endpoint yet — deliveries only start once both a URL and a secret are configured on your brand.

2. Verifying a delivery

Every delivery carries three headers on top of the JSON body:
X-DimeTrades-Signature is t=<unix seconds>,v1=<hex signature>, where:
To verify (pseudocode, Stripe-style):
Compute the signature over the raw request body bytes, before any JSON parsing or re-serialization — re-stringifying a parsed object can reorder keys or change whitespace and will not match.
Use a constant-time comparison for the signature check (timingSafeEqual or equivalent), not === — a naive string comparison leaks timing information an attacker can use to forge a valid signature byte by byte.

3. Retries & idempotency

If your endpoint doesn’t return a 2xx status (including on a timeout), delivery is retried with exponential backoff: Every retry of the same logical event reuses the same id. Process deliveries idempotently — key any side effects (e.g. updating your own order ledger) off id, not off receipt time, so a retried delivery after a slow 2xx you never saw doesn’t double-apply.
Delivery is at-least-once, never exactly-once, and order between different events is not guaranteed if your endpoint is slow enough for retries to interleave. Treat each event’s data as the authoritative state at that point in time — don’t assume you’ll never see order.filled before a order.partially_filled you’re still retrying.

4. Responding fast

Acknowledge receipt (2xx) as soon as you’ve durably queued the event — before doing any slow downstream work (calling your own services, writing to your database beyond an initial “received” marker). A slow 2xx still counts as a timeout from our side and triggers a redundant retry.

5. Event catalog

wallet.debit/wallet.credit are only sent to brands with external wallet integration enabled. If you manage your own users’ balances (REQ-01), DimeTrades holds no wallet of its own for them — these two events are the authoritative instruction to apply the debit/credit on your side, not an FYI. Dedupe on id is not optional here the way it’s a good idea for the other events: applying the same one twice double-charges or overpays your customer. They’re documented in full, alongside the synchronous reservation-confirmation check DimeTrades calls on your side (a plain POST endpoint, not a webhook — see Confirm a wallet reservation), in the External wallet integration guide and its own External Wallet Webhooks reference section — not under Webhooks like the rest of this table.
Every wallet.debit/wallet.credit reason and the exact events each money flow sends are listed in the Wallet events reference. Full request/response shapes and one example payload per event are on the Webhooks reference pages, generated from the same OpenAPI spec as the rest of this API.
Busts and price corrections. trade.busted and trade.corrected announce them, and for customers whose cash you hold the matching wallet.credit / wallet.debit carries the money. There is no need to poll trade history. Your endpoint must be subscribed to the new events; see the Wallet events reference.

6. A minimal receiver