Rule of thumb. Read state with a header credential. Move money or change keys with a signature.
Read vs. mutate
Read state
Account, orders, fills, positions, funding, sessions. Present an API key (
See Read credentials.
X-API-KEY) or device key (X-DEVICE-KEY) in a header. No signing.
See Read credentials.
Move money or change keys
Order entry, transfers, withdrawals, session and master-key management. Sign the request bytes and send a signed payload. No header key authorizes a write.
Credential map
Five long-lived credentials and two one-shot tokens. Each request type maps to exactly one.| Credential | What it is | Used for |
|---|---|---|
| Master key | Secp256k1 (EIP-712) or Passkey (WebAuthn). The account root. | Mint and revoke sessions; manage other keys. |
| Session key | Ed25519, minted by a master key. | Sign trading, cash, and key-management writes. |
| API key | Opaque string in X-API-KEY. | Read-only programmatic access. |
| Device key | Opaque string in X-DEVICE-KEY. | Reads, plus minting pairings and WebSocket tickets. |
| Device-pairing token | One-shot bearer token. | A single write to one pairing mailbox. |
| WebSocket ticket | One-shot ticket. | One private WebSocket connection. |
How writes are signed
A write packs[Header || RequestId || Body], signs those bytes with the credential’s private key, and sends a Base64SignedPayload envelope. The curve depends on the credential. The signed payload page covers the byte layout and per-curve signing (Ed25519, Secp256k1, Passkey); session signatures cover the X-PUBLIC-KEY / X-SIGNATURE / X-REQUEST-ID header triple for session-signed reads.
Accepted signed writes return a RequestAck — { status, processed_at_ns }. A 200 OK is not proof of acceptance; always read the body before treating a write as done. See Error model.