Create a withdrawal¶
POST /v1/withdrawals
Build a redeem settlement for a vault position and return the unsigned payload to sign, along with a withdrawal quote id. Pass a share count as a base-10 integer string, pass "max", or omit shares entirely to redeem the full balance. Sign the authorization and executeDigest exactly as for a deposit, then submit the signatures with the quote id to the deposits endpoint to execute the withdrawal.
Authentication
Send your API key in the api-key header.
Request body (application/json)
{
"userAddress": "0x7c3bd8a1f0a4d1a707f3b8f2eab6a95cbe8f1a3d",
"chain": 84532,
"vault": "0x9d4454b023096f34b160d6b654540c56a1f81688",
"shares": "max"
}
Responses
| Status | Description |
|---|---|
200 |
The withdrawal plan and the settlement payload to sign. |
400 |
Invalid request. Possible codes: USER_003 (invalid userAddress), VALIDATION_001 (malformed vault address or shares value), CHAIN_001 (unsupported chain), TRANSACTION_002 (no shares to redeem). |
404 |
No configured venue matches this vault on this chain (RESOURCE_001). |
500 |
Server-side failure. Possible codes: CHAIN_003 (share balance read failed over RPC), SYSTEM_002 (no settlement delegate configured for the chain), SYSTEM_001 (storage failure). |
200 response
{
"success": true,
"data": {
"quoteId": "6884f2a0a9b1d43e2c7a9f44",
"kind": "withdraw",
"shares": "24998100",
"txPayload": {
"authorization": {
"chainId": 84532,
"address": "0x5fbdb2315678afecb367f032d93f642f64180aa3",
"nonce": 8
},
"executeDigest": "0x5d4c7b6a9f8e1d2c3b4a5f6e7d8c9b0a1f2e3f2a9c1d8e5b4a706f9d2c1b8a3e",
"calls": [
{
"target": "0x9d4454b023096f34b160d6b654540c56a1f81688",
"value": "0",
"data": "0xba0876520000000000000000000000000000000000000000000000000000000001406a140000000000000000000000007c3bd8a1f0a4d1a707f3b8f2eab6a95cbe8f1a3d0000000000000000000000007c3bd8a1f0a4d1a707f3b8f2eab6a95cbe8f1a3d"
}
],
"executeNonce": "1"
},
"expiresAt": 1785283620
},
"timestamp": "2026-07-29T10:17:02.310Z"
}