Request a withdrawal under organisation policy
202 is accepted for processing, never proof of settlement. One persisted idempotency key per payment, unique within the organisation. Same key and validated body return the original row (200); a conflicting body returns 409. Replays do not reissue failed or received rows. No approval endpoint is exposed.
/api/v1/withdrawals202 is accepted for processing, never proof of settlement. One persisted idempotency key per payment, unique within the organisation. Same key and validated body return the original row (200); a conflicting body returns 409. Replays do not reissue failed or received rows. No approval endpoint is exposed.
Authorization
KeyId Timestamp Signature Key ID registered by your organisation administrator.
In: header
Unix seconds within ±300 seconds of the server clock.
In: header
Padded base64 Ed25519 signature over timestamp, METHOD, exact path+query, lowercase SHA256(raw body), Idempotency-Key or empty string, joined with LF. Legacy HMAC uses lowercase hex HMAC-SHA256. Signing is required; entering a static value is insufficient.
In: header
Query Parameters
Fresh random UUID per attempt, included in the signed path. Avoids duplicate signatures for identical requests in the same second.
uuidHeader Parameters
^[\x21-\x7e]{1,128}$Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/withdrawals" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "wallet_id": "string", "asset": "string", "amount": "string", "destination": "stringst" }'{ "data": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "status": "received", "wallet_id": "string", "asset": "string", "amount": "string", "destination": "string", "network": "string", "tx_hash": "string", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" }, "meta": { "count": 0, "limit": 0, "offset": 0, "next_offset": 0, "idempotent_replay": true, "already_exists": true, "stale": true }}List recorded withdrawals GET
Scoped to this key's workspace. Follow meta.next_offset (null at the end); new rows may shift offsets, so deduplicate by id. Use the detail endpoint to refresh status.
Refresh withdrawal status GET
Returns last recorded state with meta.stale=true if a live refresh fails. Final rows use recorded state. Polling never approves or retries a payment.