Crypto Withdrawals
Submit withdrawal signature
https://api.firstleeward.com/v0/crypto-withdrawals/:id/signSubmits the wallet owner signature over the current signing payload. The withdrawal then proceeds to broadcast.
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).
Path Parameters
idstring<uuid>requiredCrypto withdrawal ID
Body
application/json
executionIdstring<uuid>requiredThe executionId returned with the payload that was signed
signaturestringrequiredOwner signature over payloadToSign
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
400The signature does not verify against the registered signer
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired404Crypto withdrawal not found
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired409Response for status 409
Option 1 · CryptoWithdrawalNotSignableError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 2 · CryptoWithdrawalPayloadStaleError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired