Skip to main content
Every protected endpoint — and the WebSocket handshake — is authenticated with an HMAC-SHA256 request signature. There are no session cookies or bearer tokens: each request carries its own signature, timestamp and nonce, so a captured request can’t be replayed.

Credentials

You receive two values during onboarding: The secret never travels over the wire — only the signature derived from it.
Never expose your API secret in client-side code or commit it to version control. Keep it in a secret manager or environment variable.

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:
Rules — get these exactly right or the signature won’t match:
  • 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.
Then:

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.