- One endpoint, 24 query types — switch behavior via the
typefield - Zero auth — every type, including by-address account queries, is callable from any IP without keys
- Address-discoverable — any wallet can be inspected (positions, orders, fills, PnL)
- Raw data — clients compute their own indicators; all monetary values are decimal strings
- Independent rate-limit pool — does not share quota with the existing REST or WebSocket APIs
Quick start
When to use the Public Info API
This API is a new, additive read-only surface. It runs alongside the existing REST and WebSocket APIs and uses an independent rate-limit pool. Reach for it when you want to:- Build a public dashboard, AI agent, or analytics tool without wiring up authentication
- Look up positions, orders, fills, or PnL for any address (whale tracking, copy trading, leaderboards)
- Prototype against Orderly data quickly, no API keys required
- Backtest strategies with historical candles, funding rates, or trade history
- Aggregate cross-account / platform-wide views (e.g. liquidation heatmaps)
Endpoint
type field selects the handler.
Response envelope
Success:ts is the server’s response timestamp in milliseconds (UTC).
Error codes
A
RATE_LIMIT_EXCEEDED response additionally carries "retry_after": <ms epoch> and a Retry-After HTTP header (in seconds).
Address resolution
Endpoints that takeaddress resolve it to one or more accounts via the internal user table. The optional broker_id and account_id narrow the scope.
If no accounts match, the response is
ADDRESS_NOT_FOUND (HTTP 404).
Some endpoints (accountState, feeRate) change response shape based on whether account_id is supplied — see the per-endpoint docs.
Pagination
Paginated endpoints returndata.next_cursor (an opaque Base64 string; null on the last page). Pass it back as cursor to fetch the next page.
marketSummary, marketTrades, fundingComparison, orderbook, and rateLimitStatus do not paginate — they return a bounded snapshot in a single response.
Time conventions
- All timestamps are milliseconds since Unix epoch (UTC)
- Range validation: timestamps must lie in
[0, 253402300799000](year 9999); out-of-range throwsINVALID_PARAM - Several endpoints snap default lookbacks to UTC day boundaries — noted per endpoint
Rate limits
Weight pool
Quota is tracked per IP, in weight units, on a rolling one-minute window.
Each query type costs a different amount of weight. Pick lighter types when polling.
Weight per query type
Response headers
Every response includes:X-RateLimit-Weight reports how much this single call consumed.
Over-quota response
HTTP429 with:
Retry-After HTTP header (in seconds) is included.
rateLimitStatus
Read your IP’s quota state for the rolling one-minute window. Weight: 0 — calling it does not consume any quota, so it is safe to poll on every loop iteration.
Request:
Data freshness
Worst-case data freshness per query type / field — the data you receive is at most this old, and usually fresher. Use this to decide how often to poll: there is no benefit to polling faster than a type’s freshness window.
For multi-source bundles, fields in one response can have different freshness, so they are listed per field;
agentContext / positionContext reflect their oldest sub-block.
trades older than 24 hours are served from the historical archive (refreshed hourly); fills within the last 24 hours are real-time.
Query types
- Market data —
marketSummary,marketDetail,orderbook,candles,marketTrades,liquidations,fundingRateHistory,fundingComparison - Account data (require
address) —accounts,accountState,agentContext,feeRate,fundingPayments,historicalOrders,openOrders,orderStatus,portfolio,positionContext,trades,userDepositsWithdrawals,whaleContext - Platform data —
topAddresses,platformPositions