meta context that makes it usable later. Use Example responses for schema-backed payload examples, Schemas for shared field notes, and OpenAPI for endpoint-specific generated schemas.
Most market-data routes return a JSON envelope with success, data, and meta. Some auth, system, wallet, and data-quality routes have resource-specific bodies; use the REST reference and response headers for the exact response shape of a specific endpoint.
Success Envelope
Response Handling Checklist
Use this checklist before a client, agent, or parser stores response data.Error Envelope
Empty Success Responses
Some historical requests returnsuccess: true with an empty data array. Before treating that as “no market activity,” check meta for coverage annotations. The two empty states mean different things, and clients and coding agents that skip this check misread pre-coverage windows as quiet markets.
A request to
/v1/hyperliquid/trades/{symbol} for a window that ends before the symbol’s coverage starts returns:
meta.coverage_from is the ISO 8601 start of recorded coverage for the requested symbol and data type. meta.notice is a human-readable explanation of why the page is empty. These fields appear on trades, candles, order book history, funding, open interest, and liquidation range queries across venues when the requested window ends after the venue family’s earliest recorded date for that data type but before the symbol’s own coverage begins. Windows that end before the venue family’s earliest recorded date return a 400 range error instead, and quiet windows inside coverage return the plain envelope without annotations.
Do not turn an empty page into synthetic rows in either state. Store the route, query parameters, meta.count, meta.next_cursor, meta.request_id, and any coverage annotations, then decide whether the downstream job should move the window, continue, narrow the window, or mark the output incomplete.
Pagination
Historical routes can includemeta.next_cursor. Keep request IDs per page, not just for the final result. A resumable job should store route family, route path, symbol, query parameters, cursor, request ID, output file, and data-quality decision.
Do not widen pagination loops until a one-page request confirms the route family, response shape, and freshness gate.
Field dictionary
What the common fields mean, and the handling that keeps a backtest honest.Numbers and decimals
Types are not uniform across routes, so check the route before you bind a model.Timestamps
There are two clocks. Log both when you store a record.Order-book fields
Trade and liquidation fields
IDs to keep
Storemeta.request_id (or the x-request-id header) for support. Keep oid, trade_id, and cloid to join order lifecycle across snapshots, diffs, and fills.
Probability, not price
HIP-4mark_price and mid_price are implied probabilities in [0, 1], not USD. Spot symbols are pairs, and HIP-3 symbols can carry a builder prefix. Keep the venue family with every record so a later join stays inside one family.
Empty, null, and gap are different
An emptydata array on success: true with meta.coverage_from and meta.notice means the requested window ends before coverage for that symbol begins; move the window forward and check /v1/symbols. An empty array without those fields means no pre-coverage condition was detected: usually a quiet page inside coverage, though a window past the end of a symbol’s coverage returns the same plain envelope, so confirm the window against /v1/symbols coverage dates before recording a quiet market. Do not fabricate rows in either state. A null or missing field means “not available for this record,” not zero. A coverage gap inside covered history is a third thing: confirm it against the data-quality coverage route rather than inferring it from an empty page.
Data-Quality Responses
Data-quality routes answer whether a downstream job should trust a market-data result. A degraded status, incident, latency issue, or coverage gap does not always mean every route is unusable. It means the client must compare the state to the job tolerance and record that decision. For backtests, alerts, exports, dashboards, and model features, store both the quality response and the downstream data request ID. Coverage routes such as/v1/data-quality/coverage/{exchange}/{symbol} can return resource-specific bodies without success, data, or meta; parse those from the REST reference instead of forcing the market-data envelope onto them.
Export Responses
Data Catalog exports return files and dashboard job state, not ordinary market-data JSON. Preserve the selected market, schema keys, UTC range, estimated size, credits, checkout state, delivery state, and data-rights decision with the export record. If the workflow needs programmatic market data, use REST, WebSocket, SDKs, CLI, MCP Server, or OpenAPI-backed routes.Parser Checklist
1
Check HTTP status
Decide retry, fail-fast, auth repair, or support escalation from the status class.
2
Check body success
Handle
success: false as an application error and preserve error.code.3
Handle empty pages
Treat
success: true plus empty data as a state to record, not as permission to fabricate records. Check meta.coverage_from and meta.notice first: present means the window predates coverage; absent usually means a quiet market, though windows past the end of a symbol’s coverage also return the plain envelope, so confirm coverage dates via /v1/symbols.4
Log request ID
Store
meta.request_id for envelope responses. For resource-specific bodies, store x-request-id or the client wrapper’s request handle when available.5
Use the route schema
Parse
data from the endpoint-specific OpenAPI schema, not from a nearby example.6
Keep venue context
Persist venue family and symbol style beside records so downstream joins do not mix families.