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:- A
webhookUrlis set on your brand — the HTTPS endpoint deliveries are POSTed to. - 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).
- Delivery can be paused at any time without losing the URL/secret configuration.
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:
3. Retries & idempotency
If your endpoint doesn’t return a2xx 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.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.