APIs
Calibri’s API is grouped by path prefix under one base URL. Each group covers a distinct part of an integration.Market data
https://calibri.io/api/v2/pythiaDiscover events and markets, then read books, tickers, candles, and the
public trade tape — no authentication.Trading
https://calibri.io/api/v2/atlas · …/pythiaPlace EIP-712-signed orders, then list and cancel resting orders. Needs a
key your client can sign with — see below.Account
https://calibri.io/api/v2/atlasBalances, transactions, PnL, contracts, limits, preferences, and rewards.Wallet
https://calibri.io/api/v2/atlasSelf-custody Safe setup, passkey enrolment, signing keys, session keys, and
gasless relay — without holding funds on Calibri.WebSocket
Realtime streamsOrder-book increments, candles, trade prints, underlying prices, and your
own order / fill / balance updates.
Identity
https://calibri.io/api/v2/personaAccount reads and wallet linking for machine integrations. Browser sign-in
is a product UI flow, not a documented API path.Before you integrate
End-to-end flow
Wallet config, approvals, funding, a signed order, status, WebSocket — in order.
Authentication
Mint an API key and HMAC-sign every private request.
Rate limits
Request limits and caching behaviour for public and private endpoints.
Errors
HTTP status codes and the
errors: ["dot.coded"] body shape.Models
Every request and response shape, generated from the specification.
Self-custody
How signed orders and Safe wallets work — Calibri never holds your funds.
Can your account place orders from a script?
Reading is always available. Writing depends on what owns your wallet, because an order carries your own signature as well as the request signature — and a passkey cannot sign outside the browser it was created in.Your own wallet
signature_type 2. You hold the key, so your client signs orders,
withdrawals and redemptions. Nothing to set up.Passkey wallet
signature_type 3. Reads work as they are. To place orders, add a
signing key — a wallet you hold the key for,
which becomes an owner of the same Safe.signature_type on GET /api/v2/atlas/account/wallet before you build, and see
Authentication
for what each type signs.
Base URL
All requests share one base URL and are routed by path prefix:Response format
Responses are plain JSON — a resource object or an array of them. There is no{ success, data } envelope.
Monetary and volume values are strings — parse them as decimals, not floats.
Authentication
Private requests use an HMAC-signed API key (X-Auth-Apikey,
X-Auth-Nonce, X-Auth-Signature). There is no Authorization: Bearer
header. See Authentication.
Pagination
List endpoints that page acceptpage and limit (or similar). Totals come
back in response headers:
Caching
Public market-data routes sendCache-Control (short TTL on live books, longer
on browse, immutable on closed asset ranges). Private account and trade
routes are not shared-cacheable.