Skip to main content
POST
Submit a withdrawal
Submit a user’s signed withdrawal request.
Use a Broker API Key and pass the target user’s wallet in X-User-Wallet-Address. The gateway checks that the wallet belongs to your Broker. See Broker API Key and signing.

Usage notes

  • r, v, and s are the user’s signature components. timestamp is in milliseconds and must equal the value returned by Get withdrawal signing data.
  • to_address is optional; if provided, it must equal the bound address and match the signing-data request.
  • Idempotency-Key is required. Retrying with the same key for the same user returns the first successful response. success=true means accepted; query Get withdrawal status for the final state.

Authorizations

KEY
string
header
required

Broker API Key

Timestamp
string
header
required

Unix timestamp in seconds

SIGN
string
header
required

Hexadecimal HMAC-SHA512 signature generated with the Broker Secret Key

Headers

X-User-Wallet-Address
string
required

Target user's wallet address. The gateway verifies that the user belongs to the current Broker.

Idempotency-Key
string
required

Idempotency key, maximum 128 characters; UUID recommended. Retrying the same submit endpoint for the same user with the same key returns the first successful response. Reuse the key after a network timeout, but never reuse it for a different request.

Maximum string length: 128
x-perp-device-type
enum<string>
required

DexBuilder device type: 1 Android, 2 iOS, 3 WEB. A missing or invalid value returns INVALID_DEVICE_TYPE. Required only on the platform endpoints that specify this header.

Available options:
1,
2,
3

Body

application/json
r
string
required

r component of the signature over sign_data.data, as 0x hex

v
integer
required

Signature v as an integer, such as 27 or 28

s
string
required

s component of the signature, as 0x hex

chain
enum<string>
required

Network identifier: base, bsc, ethereum, solana, or arbitrum.

Available options:
base,
bsc,
ethereum,
solana,
arbitrum
Example:

"ethereum"

token_address
string
required

Token contract

address
string
required

User wallet; must match the sign_data request

token_amount
string
required

Withdrawal amount

timestamp
integer<int64>
required

Must equal the timestamp in the sign_data response

token_symbol
string
required

Token symbol

to_address
string

Optional. If provided, it must equal the bound signing wallet address; third-party withdrawal destinations are not supported.

Response

Accepted

code
integer

Business code; 0 indicates success

Example:

0

message
string

Human-readable message; success responses use success

Example:

"success"

reason
string

Error reason identifier; usually empty on success

trace_id
string

Trace ID to provide when requesting support

data
object