Get the recorded history of one market
/v1/pm/markets/{venue}/{id}/historyCall this to chart one market of Kalshi, Polymarket US or Hyperliquid from what Sona recorded. The id is the market_id of /v1/pm/markets/top. A Hyperliquid id starts with #, which a URL cannot carry, so write it %23: /v1/pm/markets/hyperliquid/%23111390/history. Other ids are letters, digits, dots, dashes, underscores and colons, up to 200 long, and anything else answers 400 invalid_id.
For kalshi and polymarket-us an item is a snapshot of the market: the Yes price and the volume, open interest and 24-hour volume the venue reported, with null for a figure it does not report. Kalshi snapshots only the 500 markets with the most 24-hour volume, so a quieter market has few points or none. For hyperliquid there are no snapshots, and an item is the last trade price in a 5 minute bucket of the fill tape, with the three volume fields null. All dollar amounts are plain JSON numbers.
Items run oldest first from since (RFC 3339, the last 24 hours by default) and are cut to limit (1 to 1000, 200 by default), so a long window needs a larger limit or a later since. data.market repeats what the venue says about the market, with result set once it has settled. data.coverage says what the venue records.
This is not about a block: meta.finality is none and no Sona-* header is sent. Cost: 1 credit. The time limit is 5 seconds. Answers are kept for 30 seconds, and a stale one for 5 seconds.
Path parameters
| Name | Type | Description |
|---|---|---|
venueRequired | string | The venue whose market to read: |
idRequired | string | The venue's id of the market, the |
Query parameters
| Name | Type | Description |
|---|---|---|
since | string | The start of the window as an RFC 3339 time, such as |
limit | integerDefault 200 | The most points to return, from 1 to 1000. Anything else answers 400 |
Response
The answer, wrapped in the {data, meta, links} envelope.
| Field | Type | Description |
|---|---|---|
| coverage | object | What a recorded venue holds, from when, and how complete it is. It replaces the Polymarket |
| items | array of objects | The points of the window, oldest first. It may be empty. |
| kind | string | Always |
| market | object | What the venue says about the market. |
| source | string | Where the collector reads the venue's data. |
| venue | string | The venue of the market. |
Errors
| Status | Code |
|---|---|
| 400 | invalid_idinvalid_query |
| 404 | not_found |
| 429 | rate_limitedcredits_exhausted |
| 500 | internal |
| 503 | upstream_unavailable |
| 504 | deadline_exceeded |
400 invalid_id for a market id with other characters, 400 invalid_query for a venue that has no history (polymarket and levr) or that Sona does not know, a since that is not a time, a limit outside 1 to 1000 or any other query key, 404 not_found for a market that was never recorded, 429 rate_limited or credits_exhausted, 503 upstream_unavailable with Retry-After: 1 while the recorded data cannot be read, and 504 deadline_exceeded when the budget runs out.