Credentials
You receive two values during onboarding:
The secret never travels over the wire — only the signature derived from it.
Required headers
Send these on every authenticated request:The canonical string
The signature is computed over a deterministic string built from six fields joined by newline (\n), in this exact order:
- timestamp / nonce — the same values you put in the headers.
- METHOD — uppercased (
GET,POST,PATCH,DELETE). - path — the request path without the query string or fragment, e.g.
/api/v1/trading/order. Collapse duplicate slashes. - content-type — lowercased, e.g.
application/json. - body hash — SHA-256 of the raw request body bytes (before any JSON
re-encoding), hex-encoded. For requests with no body (most
GETs), hash the empty string.
Validation window
- The timestamp must be within 30 seconds of server time — sync your clock.
- Each nonce may be used once; replays are rejected.
Authorization (claims)
Authentication proves who you are; claims decide what you can do. Your API key carries a set of claims:read:market-data (products, assets,
candles), read:account (your fee + settings), read:orders, write:orders,
cancel:orders, read:assets (wallet balances). Calling a route you lack the
claim for returns 403 even with a valid signature.
Reference implementation
path is what the gateway receives (/api/v1/trading/order), which is the
full path of the URL you call — not just /order.Common failures
See Errors & Rate Limits for the full status-code reference,
and WebSockets for signing the socket handshake.
