Racing Archive

The market's path per runner, stored at the jump: consensus at fixed marks, moves, breadth, first mover, signal

Cost: 5 credits (JSON) / 20 credits (CSV). The market summary archive: one row per race and runner, written at the jump, carrying the market consensus price at T-60, T-30, T-15, T-10, T-5 and T-2 and at the close, its high and low through the capture window, move_from_t60_pct / move_from_t15_pct / move_t5_close_pct (close against those marks; negative is a runner that shortened), the breadth of the move (books with history, firming, drifting, unchanged), the first attributable book to move with its lead and the followers' median lag, the signal class, and the best closing price against the consensus.

It is GET /v1/racing/intelligence, kept. The same analysis, run at the jump with the archive's own consensus_close_price as the close (close_source: archive; a runner the archive could not score falls back to the ticks at the jump, close_source: ticks), so a live reading and the stored row are one quantity. The ticks it is built from live in the 45-day snapshot store; this row is permanent, from summary_from forward.

Joined at serve time, appended last: venue_id, venue_site, horse_ref, and the runner's finish_position and result_status from the closing-line archive, which land after the summary is written. Scratched runners carry no row.

The signal classes against results are what this table exists for. signal filters on them; joined to finish_position the table says, for any window, how often each class won and at what price. Those strike rates belong on the market report; until they are printed there, compute them from this table rather than trusting the label.

Plans. Plus and above read the whole table; Standard a rolling 90-day window (window_days 90, X-Archive-Window-Days); Free and Hobby a free 403. Standard keys issued before 2026-09-20 keep the whole archive they were sold. date= is a single-day alias for from/to; an unknown parameter, signal or date is a free 422.

get/v1/racing/market-summary

Request

  • Base URL: https://api.puntersedge.online
  • URL: https://api.puntersedge.online/v1/racing/market-summary
  • Auth: API key in header X-API-Key

Query parameters

fromstring nullable

ISO date/time on the race start. Defaults to the table's floor.

tostring nullable

ISO date/time. Defaults to now.

datestring nullable

Single-day alias: date=YYYY-MM-DD is exactly from=YYYY-MM-DD&to=YYYY-MM-DD. Mutually exclusive with from/to.

venuestring nullable

Venue name, case-insensitive, exact match.

categorystring nullable

horse, harness or greyhound — comma-separated for more than one.

categoriesstring nullable

Alias of category. Comma-separated horse, harness, greyhound. Both spellings are accepted on every racing endpoint.

countrystring nullable

Two-letter country code, e.g. AU, NZ.

race_idstring nullable

One race.

signalstring nullable

Comma-separated signal classes to keep: strong_firm, firm, steady, drift, strong_drift, insufficient.

formatstring

csv streams a flat table with a stable column order.

limitinteger
offsetinteger

Headers

X-API-Keystring
X-RapidAPI-Proxy-Secretstring

Response

Successful Response

rows_returnedinteger required
total_rowsinteger required

Rows matching the filter before limit/offset.

limitinteger required
offsetinteger required
summary_fromstring nullable

Earliest start_time in the table. The summary is built from the 45-day tick store, so it begins where that store stood when the job first ran.

window_daysinteger nullable

Set when the caller's plan clamps the lookback. NULL means the whole table.

rowsobject[] required

Example response

{
  "limit": 500,
  "offset": 0,
  "rows": [
    {
      "best_close_bookmaker": "pointsbetau",
      "best_close_price": 7.5,
      "best_vs_consensus_pct": 4.17,
      "books_close": 12,
      "books_drifting": 3,
      "books_firming": 7,
      "books_t15": 12,
      "books_t60": 11,
      "books_unchanged": 2,
      "books_with_history": 12,
      "category": "horse",
      "close_source": "archive",
      "consensus_close": 7.2,
      "consensus_high": 7.8,
      "consensus_high_at": "2026-10-03T02:04:00Z",
      "consensus_low": 6.9,
      "consensus_low_at": "2026-10-03T02:51:00Z",
      "consensus_t10": 7.2,
      "consensus_t15": 7.1,
      "consensus_t2": 7.05,
      "consensus_t30": 7.4,
      "consensus_t5": 7,
      "consensus_t60": 7.6,
      "country": "AU",
      "finish_position": 2,
      "first_mover_at": "2026-10-03T02:11:40Z",
      "first_mover_bookmaker": "neds",
      "first_mover_lead_s": 95,
      "follower_median_lag_s": 140,
      "horse_ref": "pe:aeolian",
      "meeting_date_aet": "2026-10-03",
      "move_from_t15_pct": 1.41,
      "move_from_t60_pct": -5.26,
      "move_t5_close_pct": 2.86,
      "race_id": "race_123",
      "race_number": 2,
      "result_status": "final",
      "runner_key": "aeolian",
      "runner_name": "Aeolian",
      "runner_number": 4,
      "runner_ref": "ra:2098765",
      "signal": "steady",
      "start_time": "2026-10-03T03:00:00Z",
      "ticks_last_5m": 9,
      "ticks_total": 84,
      "venue": "Caulfield",
      "venue_id": "caulfield",
      "venue_site": "caulfield"
    }
  ],
  "rows_returned": 1,
  "summary_from": "2026-08-21T00:12:00Z",
  "total_rows": 1842
}

Changes

No recorded changes to this operation across all 1 revision of this API.