Decimal strings vs numbers
Some fields come back as decimal strings, others as numbers, and it varies by route:
Keep decimal strings as strings to the application edge, then parse with a decimal library, not a float. Do not assume a field’s type from another route: an order book’s
px is a string, but the same book’s L4 price is a number. Check the type per route on the data-type page.
Timestamps
Response timestamps are RFC 3339 UTC strings with millisecond precision (for example2026-06-05T13:53:33.971Z). Integer milliseconds appear only in fields ending in _ms; a few payloads still carry integer times unless you send the version header, as listed on API conventions. Requests accept Unix milliseconds or RFC 3339 for start, end, timestamp, and at; see Parameters. Store timestamps in UTC and convert only at display.
Symbol and the coin alias
symbol is the canonical field. coin appears in some payloads as a deprecated alias for the same value; prefer symbol and treat coin as legacy. Preserve the venue-specific symbol shape (plain perp, pair, builder prefix, outcome side) exactly as returned.
HIP-4 prices are probabilities
On HIP-4 outcome markets,mark_price and mid_price are implied probabilities in the [0, 1] range, not USD. Label them as probability-like values in any chart, model, or export so downstream code does not treat them as asset prices.
One envelope for every route
Market-data routes wrap the result in{ success, data, meta }, and errors share one shape with a stable error_code. API conventions describes the contract every route follows, and the field dictionary explains individual fields.