Odds movement history

Odds movement history

GET /v1/fixtures/{id}/odds/history

The full pre-match and in-play tick history for one market — every recorded price/line change with the score at that moment. Bet365 (the default) carries thirteen markets: 1X2, Asian handicap, goal line and corner line (each full-time and half-time), plus corner Asian handicap, card line, card Asian handicap, both-teams-to-score and the fixed goal lines ladder (goalline_fixed — the response groups the page's ticks per line under lines instead of ticks; ?line=2.5 narrows to one line). Any other bookmaker (?bookmaker=, one at a time) carries 1x2, asian, goalline and corner. The whole endpoint requires the Ultra plan or above — Free and Pro keys get a 403 insufficient_plan.

See what every bookmaker carries, per market →

Worked example: What Is the First Goal Worth? — 347 Premier League first goals measured from this tick history →

Parameters

id required Fixture id.
bookmaker optional One bookmaker slug, default bet365 (see GET /v1/bookmakers). Slugs other than bet365 support only market=1x2 | asian | goalline | corner — any other market value returns a 400 invalid_market.
market required 1x2 | asian | goalline | goalline_fixed | corner | 1x2_half | asian_half | goalline_half | corner_half | corner_asian | cards | cards_asian | btts.
line optional goalline_fixed only: one fixed line (0.5, 1.5 … 9.5), e.g. line=2.5. Default is the whole ladder in one call.
page, per_page optional Pagination (per_page default 100, max 500; goalline_fixed default and max 1000, which takes a whole match in one call). Ticks are ordered oldest first; goalline_fixed pages the same stream and groups each page per line, so in the rare case a line continues on the next page, append by line.

Example

GET /v1/fixtures/{id}/odds/history
curl https://api.5dollarfootballapi.com/v1/fixtures/{id}/odds/history
  -H "Authorization: Bearer fb_live_your_key"
{
  "success": 1,
  "data": {
    "fixture_id": 481163241,
    "bookmaker": { "name": "Bet 365", "slug": "bet365" },
    "market": "asian",
    "ticks": [
      { "minute": null, "line": -0.75, "home": 1.8,   "away": 2.05,  "score": { "home": null, "away": null }, "recorded_at": "2025-06-21T01:33:14+00:00" },
      { "minute": null, "line": -1.0,  "home": 2.05,  "away": 1.8,   "score": { "home": null, "away": null }, "recorded_at": "2025-08-16T13:06:03+00:00" },
      { "minute": null, "line": -0.75, "home": 1.925, "away": 1.925, "score": { "home": null, "away": null }, "recorded_at": "2025-08-17T09:15:01+00:00" },
      { "minute": null, "line": -0.75, "home": 1.875, "away": 1.975, "score": { "home": null, "away": null }, "recorded_at": "2025-08-17T11:34:08+00:00" },
      { "minute": 0,    "line": -0.5,  "home": 1.825, "away": 2.025, "score": { "home": 0, "away": 0 },       "recorded_at": "2025-08-17T13:01:27+00:00" },
      { "minute": 1,    "line": -0.5,  "home": 1.85,  "away": 2.0,   "score": { "home": 0, "away": 0 },       "recorded_at": "2025-08-17T13:02:05+00:00" },
      { "minute": 2,    "line": -0.5,  "home": 1.825, "away": 2.025, "score": { "home": 0, "away": 0 },       "recorded_at": "2025-08-17T13:03:11+00:00" },
      { "minute": 3,    "line": -0.75, "home": 2.025, "away": 1.825, "score": { "home": 0, "away": 0 },       "recorded_at": "2025-08-17T13:04:51+00:00" },
      { "minute": 8,    "line": -0.75, "home": 2.05,  "away": 1.8,   "score": { "home": 0, "away": 0 },       "recorded_at": "2025-08-17T13:09:26+00:00" },
      { "minute": 8,    "line": -0.5,  "home": 1.825, "away": 2.025, "score": { "home": 0, "away": 0 },       "recorded_at": "2025-08-17T13:09:29+00:00" }
    ]
  },
  "pagination": { "page": 1, "per_page": 10, "count": 10, "has_more": true }
}

// Shortened with ?per_page=10 — this is the first page, not the whole match.
// A typical Premier League fixture carries around 190 ticks on this market:
// roughly 18 pre-match and 170 in-play. Pre-match quotes begin weeks before
// kickoff (the first row above is 57 days out), and in-play ticks land as often
// as the book moves — seconds apart around goals, corners and cards.
//
// market=goalline_fixed replaces "ticks" with "lines", one group per line:
// "lines": [
//   { "line": 0.5, "ticks": [ { "minute": null, "over": 1.05, "under": 11.0, "recorded_at": "2026-09-26T07:46:20+00:00" } ] },
//   { "line": 2.5, "ticks": [
//       { "minute": null, "over": 1.8,  "under": 2.0,  "recorded_at": "2026-09-26T07:46:20+00:00" },
//       { "minute": null, "over": 1.85, "under": 1.95, "recorded_at": "2026-09-26T07:58:41+00:00" },
//       { "minute": 25,   "over": 2.63, "under": 1.44, "recorded_at": "2026-09-26T08:29:44+00:00" } ] },
//   { "line": 3.5, "ticks": [
//       { "minute": null, "over": 2.75, "under": 1.4,  "recorded_at": "2026-09-26T07:46:20+00:00" },
//       { "minute": null, "over": null, "under": null, "recorded_at": "2026-09-26T07:58:41+00:00" } ] }
// ]
// over and under both null = Bet365 withdrew that line at that moment. No score
// on these ticks: the ladder feed records prices only. History starts 26 September 2026.
//
// Other bookmakers mark the moments they stop quoting in play — suspended around
// a goal, or closed for good — with a tick whose line and prices are null and
// which carries "suspended": true (the flag appears on those ticks only):
// { "minute": 31, "line": null, "home": null, "away": null, "suspended": true, "score": { "home": 0, "away": 0 }, "recorded_at": "2026-09-19T14:31:47+00:00" }
// /v1/fixtures/{id}/odds skips them: each stage is the last tick with a price.

Need a key? Create a free account — a working key is issued instantly, no card required.