Request Body
| Field | Type | Need | Description | Example |
|---|---|---|---|---|
”account” | string | required | User’s wallet address | 42trU9A5… |
“signature” | string | required | Cryptographic signature | 5j1Vy9Uq… |
“timestamp” | integer | required | Current timestamp in milliseconds | 1716200000000 |
”amount” | string | required | Amount to withdraw in USDC | 100.50 |
”idempotency_key” | string | optional | Full UUID string. Prevents duplicate withdrawals. Required when the account has two-factor authentication on | 550e8400-e29b-41d4-a716-446655440000 |
”agent_wallet” | string | optional | Agent wallet address | 69trU9A5… |
“expiry_window” | integer | optional | Signature expiry in milliseconds | 30000 |
”two_factor” | object | conditional | Two-factor proof. Required when the account has two-factor authentication on. Not part of the signed payload. See below |
Two-factor authentication
If the account’s owner has turned on two-factor authentication, every withdrawal needs a proof, including withdrawals that an agent wallet signs. To turn it on or manage factors, see Two-factor authentication.- Send an
idempotency_key. A retry with the same key and the same request returns the first result, so a retry does not need a new code. - Send the proof in
two_factor, outside the signeddata. For an authenticator app, use{"type": "totp", "code": "123456"}. Recovery keys do not authorize withdrawals.
Response
- Status 200: Success
- Status 400: Invalid request parameters
- Status 409:
idempotency_keyalready used for a different request. A retry of the same request returns the first result - Status 500: Internal server error