> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oddswire.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Historical prices and exports

> Received-time ticks, recorded as-of evidence, explicit line cutoffs and complete bounded files.

History is a local private pilot. It requires an API `history` grant and a current account/source/region/purpose review. Exports additionally require `history_export` and a separate export review. REST/Pro/Terminal access, signup and source technical access do not establish these permissions. Historical/export customer-use rights for the working sources remain unresolved; no new paid plan or data licence is activated.

## Permanent native identity

Supply `namespace`, source/region `books`, and `native_fixture_id` (up to ten source-local canonical fixture IDs from mappings' `native_fixture_id`). These are distinct from upstream `source_fixture_id` strings and reviewed group IDs. History keeps original source/native offer/outcome/side/depth identities. Mapping corrections never rewrite a tick or imply that today's grouping was valid in the past.

## Ticks and coverage

`GET /v1/history/ticks` requires inclusive received-time `from` and exclusive `until` bounds, at most 31 days. Tied observations order by immutable ingestion sequence. Unchanged successful observations refresh the separate confirmation journal, not tick history. Preserve decimal/probability strings, nullable `source_ts`, original `seen_ts` and native units; replay never refreshes those clocks.

Every page includes a `history` manifest with the actual retained range, prospective confirmation range/gaps, source-wide pending/quarantined evidence and explicit missing reasons. The free `/v1/history/coverage` control exposes PG evidence ranges, with a separate flag indicating whether selected canonical sink observations were verified. A retained range is not continuous coverage or an audit of every historical sink row. Empty/legacy/missing periods are not backfilled or advertised as multi-year data.

The pilot materializes at most 2,000 ticks or 500 native slots and uses normal 1–100 row pages. Narrow the selection on 422. Cursors bind account/key/grants, filters and the complete retained snapshot; a 409 needs an explicit restart. They never silently skip newly accepted work.

## As-of and lines

`GET /v1/history/snapshot` requires a nonfuture `as_of`. It selects the last recorded confirmation at or before that time per permanent native key, with capture sequence breaking ties. Original price observation time remains distinct from confirmation time. Missing, stale-at-as-of, suspended, unavailable and source-gap evidence remain explicit; no older active quote replaces a later suspension.

`GET /v1/history/lines` also requires an explicit `scheduled_start`. Opening means the first eligible **recorded** pre-start confirmation, not the bookmaker's genuine market opening. Closing uses the established scheduled-start policy: the last confirmation strictly before the requested start, with matching recorded kickoff/state, freshness and liquidity checks. A requested start not yet reached at `as_of` is `not_final`. Unknown legacy confirmations and incompatible/missing evidence do not produce a closing value.

All these results are historical evidence, not executable prices or a settlement/fee compatibility approval. Freshness limits are the current reviewed source policy used to evaluate the requested historical cutoff.

## Complete CSV and Parquet files

`GET /v1/history/export` uses `kind=ticks|snapshot|lines`, the corresponding time parameters, and `format=csv|parquet`. It exports the **whole bounded selection**, with no `limit` or `cursor`. Files are capped at 2 MiB; larger selections fail explicitly rather than truncating. A manifest row carries coverage/query metadata even for an empty selection. Parquet also embeds it in footer metadata.

Canonical decimals remain UTF-8 strings; IDs and nulls retain their meaning. Nested canonical/native fields live losslessly in `record_json`; arbitrary native text is not placed in spreadsheet formula cells. CSV empty decimal cells represent null; Parquet has nullable string columns. Parse IDs/sequences as integers or strings rather than through spreadsheet floating-point inference.

Both local clients return export bytes in the usual result's `data` field and safe content/disposition/digest headers. They never follow redirects or retry a charged download automatically. One completed successful history page or complete file costs one included credit, even when empty. Coverage, errors and 304 remain free; overage stays off. Rights and current access are rechecked before data/304 and after a download reservation.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.