APIHorseRacing OCT26Calendar148 so far

Horse racing calendar

Every fixture. Every day. 25 countries.

Every meeting in the archive by course and day for the last 30 days, and the days ahead as carded. This is the coverage itself, not a description of it, so you can see exactly which courses we carry and how often they race before you build anything.

301courses
883fixtures
6,987races

8 fixtures are carded for the days ahead, already in the API with runners, draws and weights. Bars are races per day; brass is ahead.

The grid

Thirty days run, the week ahead.

One row per course, one column per day. A number is the races that course staged; a blank is no racing. Dates are the course's own local date, so an evening card in Korea or a night meeting at Happy Valley sits on the day it ran.

Country
Code
Day
One fixtureTwo or moreCarded aheadAbandonedToday

One call

Thirty days, one request.

The grid is one call to the calendar endpoint, not thirty to the meetings endpoint. It reads a rollup rebuilt every hour, so it answers in milliseconds. A day with no racing is absent: the gap is the answer.


      
200/v1/meetings/calendar
{ "meta": { "count": 412, "date_from": "2026-09-26", "date_to": "2026-10-28" },
  "data": [
    { "date": "2026-10-18", "course_id": "cr_7Kq2mX", "course": "Ascot",
      "country": "GB", "code": "flat", "fixtures": 1, "races": 7,
      "status": "run" },
    { "date": "2026-10-25", "course": "Sha Tin", "country": "HK",
      "races": 10, "status": "carded" }
  ] }

How it fits

A fixture is a card, not a race.

The calendar tells you where to look. Three calls take you from a day on the grid to every runner in it.

1

The fixture

A course's card on one day: going, and its races in order of the off.

GET /v1/meetings/{date}
2

The race

Conditions, distance, class and prize money, then the result, the dividends and the market.

GET /v1/races/{race_id}/result
3

The runner

Draw, weight, jockey, trainer, breeding and the price path, and the form behind each horse.

GET /v1/races/{race_id}/runners

Getting it

Poll it, or have it pushed.

The calendar shows what exists. These are the ways to take it as it lands.

REST

Cards before the day, results within minutes of the weigh-in, the whole archive behind them.

/v1/meetings/v1/races

Webhooks

A signed call to your server the moment a result arrives, so nothing has to poll.

result.received

The calendar

Thirty days of fixtures in one request, to plan a backfill or check a course before you rely on it.

/v1/meetings/calendar

What the grid covers

  • United States, Australia, Great Britain, France, Ireland, Korea and 19 more: every course we carry in each, 25 countries in all.
  • Every fixture shown carries its results and starting prices and, where the country publishes them, tote dividends.
  • An abandoned fixture stays on the grid, shaded, so a missing day reads as the weather and not as a gap in the data.
  • See what we cover for the fields each country carries, and status for how fresh each feed is.

Built from the archive

  • Rebuilt every hour from the races the API serves, last at 19:07 UTC, so a card published this morning is on the grid this morning.
  • Grouped by each course's own calendar date, never the UTC date.
  • The figures above the grid are the same rows, summed, so the page and the endpoint can never disagree.

Every course here is on every plan.

Start on the free key with yesterday's results, then pick the window you need.