Webhook reference: withdrawal.statusChanged
Reference schema for outbound webhooks Cryptonly POSTs to your configured HTTPS webhookUrl. Each delivery includes an x-webhook-signature header (HMAC-SHA256 over the raw JSON body). This route exists for Swagger documentation only; implement verification and handling on your own server.
Required scope: withdrawals.list.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
object
Currency code.
Destination wallet address
On-chain transaction hash
Withdrawal amount in cryptoCurrencyCode
Withdrawal amount in USD
Optional funding currency_conversion that topped up the withdrawal asset before this withdrawal debit (auto-convert).
Network fee debited from the user in cryptoCurrencyCode (same value used in debitedAmount = amount + this fee)
Same fee, snapshotted to USD at commit time
Exact total debited in cryptoCurrencyCode (on-chain amount + on-chain fee)
object
Commit channel; omitted when unknown (rows created before this metadata existed).
ISO 8601 timestamp.
ISO 8601 timestamp.
Opaque id from the quote phase; equals the committed network transfer id when set.
Network transfer backing this withdrawal once committed.
Status immediately before this transition.
ISO 8601 timestamp when Cryptonly signed and sent the webhook.
Examples
Sample withdrawal.statusChanged payload
{ "event": "withdrawal.statusChanged", "data": { "id": "a1630edf-cef9-46d5-af2b-d882c35075f7", "orderId": "order_webhook_reference_001", "accountId": "f80e79ba-6815-4216-80df-f51c4a651e37", "cryptoCurrencyCode": "ETH", "address": "0x1111111111111111111111111111111111111111", "amount": 100, "transactionHash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "status": "completed", "previousStatus": "processing", "convertId": null, "feeAmount": 1, "feeAmountUsd": 1, "amountUsd": 100, "debitedAmount": 101, "createdAt": "2026-10-19T16:17:14.745Z", "updatedAt": "2026-10-19T16:17:14.745Z", "quoteId": "42d73f45-6479-48ad-92fa-f6a6b13f05b2", "transferId": "4270c088-ce18-451f-8a60-495b258689fc", "source": "api" }, "timestamp": "2026-01-01T12:00:00.000Z"}Responses
Section titled “Responses”Reference endpoint acknowledged.
Request validation failed (e.g. missing or malformed body / query).
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}Missing or invalid x-tenant-api-key header. Code: exceptions.auth.invalidApiKey.
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}Request origin IP is not on the tenant API allowlist (exceptions.auth.ipNotAllowed), or the API key is missing the scope required by this operation (exceptions.auth.insufficientScope).
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}Rate limit exceeded for this endpoint. Retry after the window resets. Code: exceptions.rateLimit.exceeded. The extension.msBeforeNext field tells you how long to wait.
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}Unexpected server error. Safe to retry idempotent operations after a backoff.
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}