API reference / Sports
GET /v1/sports/{sport_key}/closing-linesClosing price and line per bookmaker, with the consensus
Paid tiers only — 403 on Free and Hobby. One row per match that started in the range. For each bookmaker: the last head-to-head price, handicap line and total we recorded before the start — the closing snapshot, taken within about ten minutes of the first bounce. Then a consensus across those books: the median closing price on head-to-head, and on the line and total markets the most common closing line with the median price at that exact line. `home_point`/`away_point` are the handicap on each side (-6.5 / +6.5) on the spreads market and the total on both sides of the totals market, where Over is the home side and Under the away side. The lines exist from 2026-09-29; rows recorded before that carry prices only. AFL and AFLW price history is kept permanently, so their closes accumulate season on season; every other sport is a rolling 90-day window. Betfair is never included. An unknown `sport_key`, a backwards range or a range over 92 days is an error and costs nothing.
X-API-Key
5 credits
curl 'https://api.puntersedge.online/v1/sports/afl/closing-lines' \
-H 'X-API-Key: YOUR_KEY'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
sport_key |
path | string | yes | |
from |
query | string | no | ISO date/time. Matches that START on or after this; defaults to 7 days ago. |
to |
query | string | no | ISO date/time. Matches that start on or before this; defaults to now. At most 92 days after `from` — page by month for a season. |
bookmakers |
query | string | no | Comma-separated bookmaker keys, case-insensitive. An unrecognised key is a free 422 naming the valid keys. |
Status codes: 200, 401, 402, 422, 429, 500. Response bodies are JSON; the full schema is in /openapi.json.
200 application/json
— this call costs 5 credits.
Field names and types are as the API returns them; values are a real sample, trimmed to a few items.
[
{
"event_id": "5b0d2e0c-2c6d-4f2a-9a6e-1d2f3c4b5a69",
"sport_key": "aflw",
"home_team": "Carlton (W)",
"away_team": "Hawthorn (W)",
"commence_time": "2026-10-01T09:15:00Z",
"books": {
"tab": {
"h2h": {
"home_price": 1.6,
"draw_price": null,
"away_price": 2.3,
"home_point": null,
"away_point": null,
"recorded_at": "2026-10-01T09:06:12Z"
},
"spreads": {
"home_price": 1.9,
"draw_price": null,
"away_price": 1.9,
"home_point": -6.5,
"away_point": 6.5,
"recorded_at": "2026-10-01T09:06:12Z"
}
},
"sportsbet": {
"h2h": {
"home_price": 1.62,
"draw_price": null,
"away_price": 2.25,
"home_point": null,
"away_point": null,
"recorded_at": "2026-10-01T09:06:12Z"
},
"spreads": {
"home_price": 1.88,
"draw_price": null,
"away_price": 1.88,
"home_point": -6.5,
"away_point": 6.5,
"recorded_at": "2026-10-01T09:06:12Z"
}
},
"pointsbetau": {
"h2h": {
"home_price": 1.65,
"draw_price": null,
"away_price": 2.2,
"home_point": null,
"away_point": null,
"recorded_at": "2026-10-01T09:06:12Z"
},
"spreads": {
"home_price": 1.88,
"draw_price": null,
"away_price": 1.88,
"home_point": -7.5,
"away_point": 7.5,
"recorded_at": "2026-10-01T09:06:12Z"
},
"totals": {
"home_price": 1.88,
"draw_price": null,
"away_price": 1.88,
"home_point": 88.5,
"away_point": 88.5,
"recorded_at": "2026-10-01T09:06:12Z"
}
}
},
"consensus": {
"h2h": {
"books": 3,
"home_price": 1.62,
"draw_price": null,
"away_price": 2.25
},
"spreads": {
"books": 3,
"home_point": -6.5,
"away_point": 6.5,
"home_price": 1.89,
"away_price": 1.89,
"books_on_line": 2
},
"totals": {
"books": 1,
"home_point": 88.5,
"away_point": 88.5,
"home_price": 1.88,
"away_price": 1.88,
"books_on_line": 1
}
}
}
]
GET /v1/sports — List available sportsGET /v1/sports/{sport_key}/odds — Get odds by sportGET /v1/sports/{sport_key}/odds/history — Historical odds snapshotsGET /v1/sports/{sport_key}/odds/movements — Price movement feedThe free tier needs no credit card, and the sandbox endpoints need no key at all.
Get a free API key Quickstart