Withdrawal completed
A fiat or stablecoin withdrawal reaches COMPLETED and settles to the destination account.
Headers
t=<unix-timestamp>,v1=<hex-hmac>: a hex-encoded HMAC-SHA256 signature computed over {timestamp}.{raw_body} (the exact bytes sent, not a re-serialized copy) using your webhook signing secret. Reject if t is more than 300 seconds from now, then verify v1 with a constant-time compare. See Webhook authentication.
"t=1735689600,v1=5257a869e7bfbe00e0be2007c1b7be16bb2ba57ee233b0d0c4de5d83b3f5e01d"
Body
Webhook delivery envelope for withdrawal status changes. data is the withdrawal in its current state.
Webhook delivery identifier, readable typed-prefix ID (evt_ prefix). The deduplication key — a single event may be delivered more than once on retries; deduplicate on this value.
^evt_[1-9A-HJ-NP-Za-km-z]{1,22}$"evt_NDqQ9LmcUASpnHR6CTvdkk"
Resource noun naming the event subject. Always withdrawals for withdrawal events.
"withdrawals"
Dot-namespaced, product-prefixed event name ({product}.{resource}.{action}).
fx.withdrawal.completed RFC 3339 UTC timestamp (millisecond precision) at which OpenFX built and dispatched this delivery. Not when the withdrawal itself settled; see data.completedAt for that.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$"2026-04-28T10:00:00.000Z"
The withdrawal in its current state (v3 conventions: camelCase keys, string amounts).
Response
Return any 2xx to acknowledge receipt. A non-2xx response or a timeout causes OpenFX to retry on its published delivery schedule.