Crypto Withdrawal

Confirm or cancel a crypto withdrawal

Performs an action on a prepared crypto withdrawal. CONFIRM accepts the locked network fee and starts on-chain execution via the payout pipeline; it must be called within the confirmation window, after which the withdrawal auto-expires. CANCEL discards the withdrawal and releases the blocked balance. Both actions require the withdrawal to still be awaiting confirmation.

Supports the optional Idempotency-Key header so a retry won't perform the operation twice - a fresh UUID per request is recommended. See <a href="#idempotent-requests">Idempotent requests</a> for more information.

patch/v3/withdrawals/crypto/{id}

Request

  • Base URL
    https://confirmo.net/api
  • URL
    https://confirmo.net/api/v3/withdrawals/crypto/{id}
  • Auth
    HTTP bearer

Path parameters

idstring required

The crypto withdrawal ID.

Request body

action'CONFIRM' | 'CANCEL' required

Example request

{
  "action": "CONFIRM"
}

Response

Crypto withdrawal successfully confirmed or canceled

addressstring
balanceAssetIdstring
createdAtinteger
debitedBalanceQuantitynumber

In net mode this is the entered amount plus the total fee; in gross mode it equals the entered amount. The amount delivered on-chain is this value minus totalFeeQuantity. In the balance asset.

enteredBalanceQuantitynumber
expiresAtinteger
feePaymentMode'net' | 'gross'
idstring
networkFeeQuantitynumber

The on-chain gas is paid in the network's native token (e.g. SOL on Solana); this is that fee recalculated into the balance asset at the current rate — i.e. what the merchant is charged for it.

networkIdstring
notifyUrlstring url
referencestring
status'prepared' | 'confirmed' | 'sending' | 'done' | 'canceled' | 'expired'
substatusstring

Set on a canceled withdrawal: rejected — it could not be processed and will not be retried, and the blocked funds have been released — or manually_canceled when a person ended it. Not every cancellation has a reason to report, so its absence is not itself information — please ask us rather than reading one into it. Treat this as an open set: new values are added as they are announced, and your integration must tolerate ones it does not recognise.

totalFeeQuantitynumber

The sum of the processing fee and the network fee (the latter recalculated from the native gas token into the balance asset). Currently equal to the network fee (processing fee is 0 at launch). The amount delivered on-chain equals debitedBalanceQuantity minus this value.

Example response

{
  "address": "0x1111111111111111111111111111111111111111",
  "balanceAssetId": "USDC",
  "createdAt": 1712311200,
  "enteredBalanceQuantity": 100,
  "expiresAt": 1712311320,
  "feePaymentMode": "net",
  "id": "cwd7Ym1kPq3aWpL",
  "networkId": "ETHEREUM-BLOCKCHAIN-MAINNET",
  "notifyUrl": "https://example.com/webhook",
  "reference": "invoice-4711",
  "status": "prepared",
  "substatus": "manually_canceled",
  "transaction": {
    "hash": "0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.