Crypto Withdrawals

Initiate crypto withdrawal

POSThttps://api.firstleeward.com/v0/crypto-withdrawals

Reserves 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 · headerrequired

API key as Bearer token, e.g. Bearer YOUR_API_KEY

Headers

Leeward-Versionenum<string>required

API version (YYYY-MM-DD). Available option: 2026-09-18

Idempotency-Keystringrequired

Unique 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>required

Account whose wallet the funds leave

chainIdstringrequired

Blockchain network to withdraw on

Available options:ETHEREUM_MAINNETETHEREUM_SEPOLIABASE_MAINNETBASE_SEPOLIAARBITRUM_ONE_MAINNETARBITRUM_ONE_SEPOLIAPOLYGON_MAINNETPOLYGON_AMOYSOLANA_MAINNETSOLANA_DEVNET
assetIdstringrequired

Asset to withdraw - the token contract address, or a reserved identifier for the chain native asset

amountstringrequired

Gross amount to withdraw, with decimals applied. The fee is taken out of this rather than charged on top.

destinationAddressstringrequired

Address that receives the net amount

Response

200Crypto withdrawal resource
idstring<uuid>required

Unique withdrawal identifier

accountIdstring<uuid>required

Account the funds are withdrawn from

chainIdstringrequired

Blockchain network the transfer happens on

Available options:ETHEREUM_MAINNETETHEREUM_SEPOLIABASE_MAINNETBASE_SEPOLIAARBITRUM_ONE_MAINNETARBITRUM_ONE_SEPOLIAPOLYGON_MAINNETPOLYGON_AMOYSOLANA_MAINNETSOLANA_DEVNET
assetobjectrequired

Asset metadata

Show child attributes
symbolstringrequired

Asset symbol

namestring | nullrequired

Full asset name

decimalsintegerrequired

Number of decimal places

logoUristring | nullrequired

URI to asset logo image

amountstringrequired

Gross amount requested, with decimals applied. The fee is taken out of this rather than charged on top.

netAmountstringrequired

Amount the destination receives: the gross less the fee

feeobjectrequired

Fee charged for the withdrawal, fixed at the time it was requested

Show child attributes
amountstringrequired

Fee retained, with decimals applied

assetobjectrequired

Asset metadata

Show child attributes
symbolstringrequired

Asset symbol

namestring | nullrequired

Full asset name

decimalsintegerrequired

Number of decimal places

logoUristring | nullrequired

URI to asset logo image

destinationAddressstringrequired

Address the funds are sent to

statusstringrequired

Current withdrawal status

Available options:PENDING_SIGNATUREPROCESSINGCOMPLETEDEXPIREDCANCELLEDFAILED
failureReasonstring | nullrequired

What went wrong. Set only when the status is FAILED.

Available options:REJECTED_BY_COMPLIANCEACCOUNT_RESTRICTEDTRANSACTION_FAILED
transactionIdstring | nullrequired

On-chain transaction identifier. Present once the transfer has been submitted to the network, which happens while the status is still PROCESSING.

expiresAtstringrequired

When the signature window closes. Past this point the withdrawal is closed and the funds become spendable again.

completedAtstring | nullrequired

When the transfer was observed to be irreversible on-chain, which is when the status became COMPLETED. Null until then.

createdAtstringrequired

ISO 8601 creation timestamp

updatedAtstringrequired

ISO 8601 last update timestamp

400Response for status 400
Option 1 · CryptoWithdrawalInvalidAssetError
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired
Option 2 · CryptoWithdrawalInvalidDestinationError
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired
Option 3 · CryptoWithdrawalAccountNotActiveError
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired
Option 4 · CryptoWithdrawalAccountPausedError
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired
Option 5 · CryptoWithdrawalChainNotAvailableError
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired
Option 6 · CryptoWithdrawalBelowMinimumError
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired
Option 7 · CryptoWithdrawalInsufficientWithdrawableError
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired
404Account not found
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired
409A withdrawal is already in flight for this wallet
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired