18+ Only  |  Gambling can be addictive — please gamble responsibly  |  Gambling Help: 1800 858 858  |  GambleAware

API reference / Racing Archive

GET /v1/racing/market-summary

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

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.

Requires X-API-Key 5 credits (JSON) / 20 credits (CSV)

Request

curl 'https://api.puntersedge.online/v1/racing/market-summary?date=2026-10-03&category=horse&signal=strong_firm,firm' \
  -H 'X-API-Key: YOUR_KEY'

Parameters

NameIn TypeRequired Description
from query string no ISO date/time on the race start. Defaults to the table's floor.
to query string no ISO date/time. Defaults to now.
date query string no Single-day alias: date=YYYY-MM-DD is exactly from=YYYY-MM-DD&to=YYYY-MM-DD. Mutually exclusive with from/to.
venue query string no Venue name, case-insensitive, exact match.
category query string no horse, harness or greyhound — comma-separated for more than one.
categories query string no Alias of `category`. Comma-separated horse, harness, greyhound. Both spellings are accepted on every racing endpoint since 2026-09-24; before that, using one family's spelling on the other was a hard 422.
country query string no Two-letter country code, e.g. AU, NZ.
race_id query string no One race.
signal query string no Comma-separated signal classes to keep: strong_firm, firm, steady, drift, strong_drift, insufficient.
format query string no csv streams a flat table with a stable column order.
limit query integer no
offset query integer no

Responses

Status codes: 200, 401, 402, 403, 422, 429, 500. Response bodies are JSON; the full schema is in /openapi.json.

Example response

200 application/json — this call costs 5 credits (JSON) / 20 credits (CSV). Field names and types are as the API returns them; values are a real sample, trimmed to a few items.

{
  "rows_returned": 2,
  "total_rows": 6953,
  "limit": 2,
  "offset": 0,
  "summary_from": "2026-08-21T22:26:00Z",
  "window_days": null,
  "rows": [
    {
      "race_id": "ed191df6-9f77-4e35-a7a9-0757d89430d9",
      "runner_key": "trantoro",
      "venue": "Gawler",
      "race_number": 7,
      "category": "horse",
      "country": "AU",
      "start_time": "2026-10-05T06:55:00Z",
      "meeting_date_aet": "2026-10-05",
      "runner_name": "Trantoro",
      "runner_number": 10,
      "runner_ref": "ra:NzM2MjcwNDkwMA",
      "consensus_t60": 4.77,
      "consensus_t30": 4.75,
      "consensus_t15": 4.73,
      "consensus_t10": 4.74,
      "consensus_t5": 4.49,
      "consensus_t2": 4.48,
      "consensus_close": 4.269,
      "close_source": "archive",
      "books_t60": 13,
      "books_t15": 13,
      "books_close": 13,
      "consensus_high": 4.77,
      "consensus_high_at": "2026-10-05T06:12:04Z",
      "consensus_low": 4.27,
      "consensus_low_at": "2026-10-05T06:54:04Z",
      "move_from_t60_pct": -10.5,
      "move_from_t15_pct": -9.75,
      "move_t5_close_pct": -4.92,
      "ticks_total": 96,
      "ticks_last_5m": 42,
      "books_with_history": 14,
      "books_firming": 14,
      "books_drifting": 0,
      "books_unchanged": 0,
      "first_mover_bookmaker": null,
      "first_mover_at": null,
      "first_mover_lead_s": null,
      "follower_median_lag_s": null,
      "signal": "firm",
      "best_close_price": 4.4,
      "best_close_bookmaker": "betgold",
      "best_vs_consensus_pct": 3.07,
      "venue_id": "gawler",
      "venue_site": "gawler",
      "horse_ref": "pe:trantoro",
      "finish_position": 1,
      "result_status": "final"
    },
    {
      "race_id": "ed191df6-9f77-4e35-a7a9-0757d89430d9",
      "runner_key": "willaston",
      "venue": "Gawler",
      "race_number": 7,
      "category": "horse",
      "country": "AU",
      "start_time": "2026-10-05T06:55:00Z",
      "meeting_date_aet": "2026-10-05",
      "runner_name": "Willaston",
      "runner_number": 16,
      "runner_ref": "ra:NzMyOTk0Njc3MA",
      "consensus_t60": 44.8,
      "consensus_t30": 44.59,
      "consensus_t15": 45.82,
      "consensus_t10": 49.52,
      "consensus_t5": 36.83,
      "consensus_t2": 31.58,
      "consensus_close": 31.41,
      "close_source": "archive",
      "books_t60": 13,
      "books_t15": 13,
      "books_close": 13,
      "consensus_high": 50.3,
      "consensus_high_at": "2026-10-05T06:43:04Z",
      "consensus_low": 31.58,
      "consensus_low_at": "2026-10-05T06:53:04Z",
      "move_from_t60_pct": -29.89,
      "move_from_t15_pct": -31.45,
      "move_t5_close_pct": -14.72,
      "ticks_total": 100,
      "ticks_last_5m": 45,
      "books_with_history": 13,
      "books_firming": 13,
      "books_drifting": 0,
      "books_unchanged": 0,
      "first_mover_bookmaker": null,
      "first_mover_at": null,
      "first_mover_lead_s": null,
      "follower_median_lag_s": null,
      "signal": "strong_firm",
      "best_close_price": 34.0,
      "best_close_bookmaker": "betr_au",
      "best_vs_consensus_pct": 8.25,
      "venue_id": "gawler",
      "venue_site": "gawler",
      "horse_ref": "pe:willaston",
      "finish_position": 2,
      "result_status": "final"
    }
  ]
}

Related endpoints

Try it against live data

The free tier needs no credit card, and the sandbox endpoints need no key at all.

Get a free API key Quickstart
This site contains wagering-related analysis and is intended for Australian users aged 18+. Gambling involves risk. Please gamble responsibly.