Funding

Submit signatures for a pending self-custody withdrawal

POST
/execution/withdrawals/{withdrawalId}/signatures

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.

Path Parameters

withdrawalId*string

Request Body

application/json
  1. body
signatures*array<>
Items1 <= items <= 32

Response Body

200

application/json
  1. response
withdrawalId*string

Withdrawal id. Poll it on the status endpoint.

status*string

Withdrawal status. pending: accepted, not started (the submit response always returns this). bridging: moving funds across chains. transferring: same-chain transfer in progress. Terminal: completed, partial (some sources delivered; see completedAmountRaw), failed.

Value in"pending""bridging""transferring""completed""partial""failed"
requested*

What is being withdrawn.

completedAmountRaw*string

Estimated total delivered by the completed parts. null until the withdrawal is terminal. Integer string in the destination token's atomic units (6 decimals, so 1000000 = 1 USDC; 18 decimals on BNB Chain).

destination*

Where the funds are delivered.

legs*array<>

Transfers that make up the withdrawal.

expected*

Quote for the withdrawal. null fields unless pricingStatus is quoted.

pricingStatus*string

Fee quote state. quoted: expected holds a current quote. unquoted / quoting: no quote yet. unviable: at least one source is too small to cover its fees.

Value in"unquoted""quoting""quoted""unviable"
errorMessage*string

Why the withdrawal failed or only partly completed. null otherwise, and always null on the submit response (errors there are returned as HTTP errors).

sources*array<>

Balances the withdrawal is funded from.

pendingSignatures?array<>

Self-custody only: requests the signing wallet must answer before the withdrawal continues. Absent for managed custody. Answer them on POST /execution/withdrawals/{withdrawalId}/signatures.

Example Request
curl -X POST 'https://api.t.sufwankhalid.com/execution/withdrawals/string/signatures' \  -H 'Content-Type: application/json' \  -d '{  "signatures": [    {      "stepId": "string"    }  ]}'
Example Response
{  "withdrawalId": "string",  "status": "pending",  "requested": {    "tokenSymbol": "USDC",    "amountRaw": "string"  },  "completedAmountRaw": "string",  "destination": {    "chainId": 1,    "address": "string",    "tokenSymbol": "USDC"  },  "legs": [    {      "type": "transfer",      "status": "planned",      "sourceChainId": 0,      "destChainId": 0,      "amountRaw": "string",      "txHash": "string",      "bridgeOperationId": "string",      "sourceTokenSymbol": "string",      "errorMessage": "string"    }  ],  "expected": {    "outputRaw": "string",    "feeRaw": "string",    "etaSeconds": 0  },  "pricingStatus": "unquoted",  "errorMessage": "string",  "sources": [    {      "sourceId": "string",      "chainId": 0,      "tokenSymbol": "USDC",      "tokenAddress": "string",      "decimals": 0,      "amountRaw": "string",      "custodyKind": "DEPOSIT_WALLET",      "venue": "kalshi",      "sourceVenueAccountId": "string",      "sourceExternalAccountId": "string",      "status": "pending",      "txHash": "string",      "bridgeOperationId": "string",      "pendingReason": "awaiting_venue_submission"    }  ],  "pendingSignatures": [    {      "stepId": "string",      "type": "eip712",      "venue": "string",      "signerAddress": "string",      "chainId": 0,      "payload": null,      "expiresAt": "string",      "purpose": "string",      "optional": true    }  ]}