Funding

Preview a withdrawal

POST
/execution/withdraw/preview

Authorization

appIdbearerAuth
headerx-app-id<token>

Your application ID. Required on app-tier and user-tier routes. Omitted on routes that authenticate with x-app-api-key only.

headerAuthorizationBearer <JWT>

JWT access token from POST /auth/verify. Required with x-app-id on user routes. On the smart-route quote it is optional and turns a preview into an executable quote.

Request Body

application/json
  1. body
requestId?string

Optional idempotency key for an exact-amount transfer. Reuse with the identical body to recover a lost response. Not combined with max.

Formatuuid
amountRaw*string

Amount to deliver, as a positive integer string in the destination token's atomic units (6 decimals, so 1000000 = 1 USDC; 18 decimals on BNB Chain). Minimum is one whole token. Same-chain transfers debit exactly this. A bridge or swap leg debits up to ~2% more to cover its fee, and when the live fee is lower the recipient gets more than this amount; the preview's receiveAmountRaw is the estimate. To withdraw everything, send max: true.

Match^[1-9][0-9]*$
tokenSymbol*string

Stable-coin symbol the withdrawal is denominated in.

Value in"USDC""USDC.e""USDT"
destinationAddress*string

Recipient address. EVM destinations: 0x-prefixed 20-byte hex. Solana: base58 (32–44 chars).

Match^(0x[a-fA-F0-9]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$
destinationChainId*integer

Chain ID where the recipient address should receive funds.

Range1 <= value
max?boolean

Withdraw-max intent: cap amountRaw to the deliverable maximum instead of rejecting it. Send the full balance as amountRaw with this flag to empty the balance.

signingAddress?string

Self-custody: the linked EVM wallet that owns and signs this withdrawal. Omit for managed custody.

Length42 <= length <= 42
approveMode?string

Self-custody only (ignored without signingAddress): what the signing wallet can sign. Send the same value to the quote, preview and withdraw. sponsored (default): the wallet can sign an EIP-7702 authorization and Calibur batch, so every source is available. user_broadcast: it cannot (e.g. MetaMask). The withdrawal still never asks it to send a transaction or hold gas; sources that would need a batch (an approve, a same-chain swap, or a same-chain transfer of anything but native Circle USDC; decided by token) are left out of Max, preview and selection. A same-chain native USDC transfer is then two EIP-3009 signatures (amount less the network fee, and the fee).

Value in"sponsored""user_broadcast"

Response Body

200

application/json
  1. response
receiveAmountRaw*string

Estimated amount delivered. null when unviable. Integer string in the destination token's atomic units (6 decimals, so 1000000 = 1 USDC; 18 decimals on BNB Chain).

feeRaw*string

Estimated fee, deducted from the withdrawn amount (amount in minus amount delivered). Integer string in the destination token's atomic units (6 decimals, so 1000000 = 1 USDC; 18 decimals on BNB Chain).

relayFeeRaw*string

Bridge provider part of feeRaw; currently equal to it. Integer string in the destination token's atomic units (6 decimals, so 1000000 = 1 USDC; 18 decimals on BNB Chain).

networkFeeRaw*string

Reserved for a separate network fee; currently always null.

pricingStatus*string

quoted: the withdrawal can be routed. unviable: it cannot; see unviableReason.

Value in"quoted""unviable"
quoteExpiresAt*string

ISO-8601 time the quote expires (60 seconds after quoting).

unviableReason*string

Readable reason when unviable: insufficient balance, too small to cover fees, no liquidity, or no safe route.

maxDeliverableRaw*string

Set only when the request exceeds the balance: the largest amountRaw that can be routed. It assumes the full ~2% fee buffer per bridge or swap leg, so the amount actually received is usually higher (see receiveAmountRaw on a quoted preview). Integer string in the destination token's atomic units (6 decimals, so 1000000 = 1 USDC; 18 decimals on BNB Chain).

Example Request
curl -X POST 'https://api.t.sufwankhalid.com/execution/withdraw/preview' \  -H 'Content-Type: application/json' \  -d '{  "amountRaw": "50000000",  "tokenSymbol": "USDC",  "destinationAddress": "0x2f9a4c7e1b3d6f8a0c5e9b2d4f7a1c3e6b8d0f52",  "destinationChainId": 8453}'
Example Response
{  "receiveAmountRaw": "49930000",  "feeRaw": "70000",  "relayFeeRaw": "50000",  "networkFeeRaw": "20000",  "pricingStatus": "quoted",  "quoteExpiresAt": "2026-09-29T15:21:00.000Z",  "unviableReason": null,  "maxDeliverableRaw": "124880000"}