Crypto Withdrawals
Initiate crypto withdrawal
https://api.firstleeward.com/v0/crypto-withdrawalsReserves funds against an in-flight withdrawal and opens the signature window. Fetch a signing payload with GET /crypto-withdrawals/:id/payload, then submit the owner signature with POST /crypto-withdrawals/:id/sign.
Authorizations
Authorizationstring · headerrequiredAPI key as Bearer token, e.g. Bearer YOUR_API_KEY
Headers
Leeward-Versionenum<string>requiredAPI version (YYYY-MM-DD). Available option: 2026-09-18
Idempotency-KeystringrequiredUnique key for safely retrying this request. Up to 255 characters; we recommend a UUIDv4. The first request executes and its response is cached; subsequent requests with the same key replay the cached response (24h retention).
Body
application/json
accountIdstring<uuid>requiredAccount whose wallet the funds leave
chainIdstringrequiredBlockchain network to withdraw on
ETHEREUM_MAINNETETHEREUM_SEPOLIABASE_MAINNETBASE_SEPOLIAARBITRUM_ONE_MAINNETARBITRUM_ONE_SEPOLIAPOLYGON_MAINNETPOLYGON_AMOYSOLANA_MAINNETSOLANA_DEVNETassetIdstringrequiredAsset to withdraw - the token contract address, or a reserved identifier for the chain native asset
amountstringrequiredGross amount to withdraw, with decimals applied. The fee is taken out of this rather than charged on top.
destinationAddressstringrequiredAddress that receives the net amount
Response
200Crypto withdrawal resource
idstring<uuid>requiredUnique withdrawal identifier
accountIdstring<uuid>requiredAccount the funds are withdrawn from
chainIdstringrequiredBlockchain network the transfer happens on
ETHEREUM_MAINNETETHEREUM_SEPOLIABASE_MAINNETBASE_SEPOLIAARBITRUM_ONE_MAINNETARBITRUM_ONE_SEPOLIAPOLYGON_MAINNETPOLYGON_AMOYSOLANA_MAINNETSOLANA_DEVNETassetobjectrequiredAsset metadata
Show child attributes
symbolstringrequiredAsset symbol
namestring | nullrequiredFull asset name
decimalsintegerrequiredNumber of decimal places
logoUristring | nullrequiredURI to asset logo image
amountstringrequiredGross amount requested, with decimals applied. The fee is taken out of this rather than charged on top.
netAmountstringrequiredAmount the destination receives: the gross less the fee
feeobjectrequiredFee charged for the withdrawal, fixed at the time it was requested
Show child attributes
amountstringrequiredFee retained, with decimals applied
assetobjectrequiredAsset metadata
Show child attributes
symbolstringrequiredAsset symbol
namestring | nullrequiredFull asset name
decimalsintegerrequiredNumber of decimal places
logoUristring | nullrequiredURI to asset logo image
destinationAddressstringrequiredAddress the funds are sent to
statusstringrequiredCurrent withdrawal status
PENDING_SIGNATUREPROCESSINGCOMPLETEDEXPIREDCANCELLEDFAILEDfailureReasonstring | nullrequiredWhat went wrong. Set only when the status is FAILED.
REJECTED_BY_COMPLIANCEACCOUNT_RESTRICTEDTRANSACTION_FAILEDtransactionIdstring | nullrequiredOn-chain transaction identifier. Present once the transfer has been submitted to the network, which happens while the status is still PROCESSING.
expiresAtstringrequiredWhen the signature window closes. Past this point the withdrawal is closed and the funds become spendable again.
completedAtstring | nullrequiredWhen the transfer was observed to be irreversible on-chain, which is when the status became COMPLETED. Null until then.
createdAtstringrequiredISO 8601 creation timestamp
updatedAtstringrequiredISO 8601 last update timestamp
400Response for status 400
Option 1 · CryptoWithdrawalInvalidAssetError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 2 · CryptoWithdrawalInvalidDestinationError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 3 · CryptoWithdrawalAccountNotActiveError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 4 · CryptoWithdrawalAccountPausedError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 5 · CryptoWithdrawalChainNotAvailableError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 6 · CryptoWithdrawalBelowMinimumError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 7 · CryptoWithdrawalInsufficientWithdrawableError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired404Account not found
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired409A withdrawal is already in flight for this wallet
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired