Horse Racing API#
The Horse Racing API covers UK and Ireland racing: tracks, daily meetings, races with runners, multi-bookmaker decimal odds per runner, plus horse, jockey and trainer profiles.
Base URL: https://sports.bzzoiro.com/horseracing/api/v2/
Access#
Requires the Sports Addon ($5/month) — it unlocks the tennis, CS2, darts, hockey, basketball and horse racing APIs plus their MCP servers. Get it at /addons/. You also need a free account token from /register/.
Authorization: Token YOUR_API_KEY
Without a token you get 401:
{"error": "authentication required", "code": "authentication_required",
"detail": "Send Authorization: Token <YOUR_TOKEN> on every request.",
"register": "https://sports.bzzoiro.com/register/"}
With a token but no addon you get 402:
{"error": "Sports Addon required", "code": "addon_required",
"detail": "Tennis, CS:GO, darts, hockey, basketball and horse racing APIs require the Sports Addon ($5/mo).",
"pricing_url": "https://sports.bzzoiro.com/pricing/"}
List endpoints paginate with limit (default 50, max 200) and offset, and
return {count, next, previous, results}.
Endpoints#
| Endpoint | Description |
|---|---|
GET /horseracing/api/v2/tracks/ |
List race tracks |
GET /horseracing/api/v2/tracks/{id}/ |
Track detail |
GET /horseracing/api/v2/meetings/ |
List meetings (a day of racing at a track) |
GET /horseracing/api/v2/meetings/{id}/ |
Meeting detail with its races |
GET /horseracing/api/v2/races/ |
List races |
GET /horseracing/api/v2/races/live/ |
Races currently in progress |
GET /horseracing/api/v2/races/next-to-jump/ |
Races starting in the next 30 minutes |
GET /horseracing/api/v2/races/{id}/ |
Race detail with runners |
GET /horseracing/api/v2/runners/ |
List runners |
GET /horseracing/api/v2/runners/{id}/ |
Runner detail |
GET /horseracing/api/v2/runners/{id}/odds/ |
All bookmaker odds for a runner |
GET /horseracing/api/v2/horses/ |
Search horses |
GET /horseracing/api/v2/horses/{id}/ |
Horse profile |
GET /horseracing/api/v2/jockeys/ |
Search jockeys |
GET /horseracing/api/v2/jockeys/{id}/ |
Jockey profile |
GET /horseracing/api/v2/trainers/ |
Search trainers |
GET /horseracing/api/v2/trainers/{id}/ |
Trainer profile |
Tracks and meetings#
Tracks query parameters: search, country, limit, offset.
Meetings query parameters
| Param | Type | Description |
|---|---|---|
date |
date | One day (YYYY-MM-DD) |
date_from / date_to |
date | Date range |
country |
string | ISO country code (GB, IE) |
track |
int | Filter by track id |
limit / offset |
int | Pagination |
curl -H "Authorization: Token YOUR_API_KEY" \
"https://sports.bzzoiro.com/horseracing/api/v2/meetings/?date=2026-08-02&country=GB"
{"count": 5, "results": [
{"id": 1207, "track": {"id": 31, "name": "Goodwood", "country": "GB"},
"date": "2026-08-02", "races_count": 7, "going": "Good"}
]}
Races#
Query parameters
| Param | Type | Description |
|---|---|---|
meeting |
int | Filter by meeting id |
track |
int | Filter by track id |
status |
string | upcoming, live, finished |
surface |
string | e.g. turf, all-weather |
date_from / date_to |
date | YYYY-MM-DD |
limit / offset |
int | Pagination |
GET /races/next-to-jump/ is the quickest way to build a "next races" widget
— it returns races going off within 30 minutes, soonest first.
GET /races/live/ is cached 30 seconds.
GET /races/{id}/ includes the runner list:
{"id": 88412, "meeting_id": 1207, "name": "Sussex Stakes",
"off_time": "2026-08-02T14:35:00+00:00", "status": "upcoming",
"distance": "1m", "surface": "turf", "runners_count": 9,
"runners": [
{"id": 774201, "number": 1, "horse": {"id": 55310, "name": "Field Of Gold"},
"jockey": {"id": 2210, "name": "K. Stott"},
"trainer": {"id": 981, "name": "J. & T. Gosden"},
"best_odds": 2.10}
]}
Runners and odds#
Runners query parameters: race, horse, jockey, trainer, limit,
offset.
GET /runners/{id}/odds/ returns every bookmaker's current decimal price for
that runner:
{"runner_id": 774201, "odds": [
{"bookmaker": "bet365", "decimal_odds": 2.10, "updated_at": "2026-08-02T13:58:12+00:00"},
{"bookmaker": "williamhill", "decimal_odds": 2.05, "updated_at": "2026-08-02T13:57:40+00:00"}
]}
Horses, jockeys and trainers#
All three follow the same pattern: a search list (query, limit, offset)
plus a detail endpoint with career form.
curl -H "Authorization: Token YOUR_API_KEY" \
"https://sports.bzzoiro.com/horseracing/api/v2/jockeys/?query=stott"
{"count": 1, "results": [
{"id": 2210, "name": "K. Stott", "wins_this_season": 61, "win_rate": 0.19}
]}