Skip to main content
Response parsing should preserve the payload and the 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

Treat HTTP status as the control signal and the JSON body as debugging context. Validation, auth, route, plan-gate, rate-limit, and upstream errors require different client behavior. Use Errors for the retry model.

Empty Success Responses

Some historical requests return success: 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 include meta.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

Store meta.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-4 mark_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 empty data 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.

Next Step

Use Example responses for payload examples, Schemas for field categories, and Examples for copyable parser patterns.
Last modified on August 13, 2026