Commit a withdrawal quote
Commits a previously-obtained quoteId and creates the withdrawal. The deduction currency, total deduction, and FX uplift were locked onto the quote at quote time; commit just locks that single balance, re-checks it still covers the locked total, and deducts inside a serializable transaction. If the locked balance has dropped below the locked total, commit returns withdrawal.insufficientBalance and the merchant must re-quote - commit does not retry against any other currency, even when cross-currency is enabled on the account.
Required scope: withdrawals.create.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Quote id from POST /withdrawal/quote.
Custom metadata
object
HTTPS URL to receive webhook notifications. Must be a public, TLD-qualified HTTPS URL.
Example
https://merchant.example.com/webhooks/cryptonly/withdrawalsResponses
Section titled “Responses”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.
Example
{ "data": { "cryptoCurrencyCode": "USDT_TRC20", "status": "created", "source": "api" }}Validation error, expired/already-committed quote, the locked balance no longer covers the quote, or duplicate orderId.
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"}