horseracingapi.co.uk

One course

Every plan, free key includedMCP: course_details

One course: what is raced there and the distances.

GEThttps://api.horseracingapi.co.uk/v1/courses/{course_id}
Try itruns against the real API with your key
Get a free key
GET /v1/courses/{course_id}
Examplea real answer from 2026-10-29, trimmed to a few rows
{
    "data": {
        "course_id": "cr_239y20yw",
        "name": "Abu Dhabi",
        "shortcode": null,
        "country": "UAE",
        "region": "UAE",
        "races": 22,
        "meetings": 3,
        "first_meeting": "2025-04-12",
        "last_meeting": "2026-10-29",
        "town": null,
        "county": null,
        "nation": null,
        "lat": null,
        "lng": null,
        "direction": null,
        "kinds": [],
        "run_types": [
            {
                "run_type": "Flat",
                "surface": "TURF",
                "races": 21,
                "first": "2025-04-12",
                "last": "2026-10-29"
            },
            {
                "run_type": null,
                "surface": "TURF",
                "races": 1,
                "first": "2025-04-12",
                "last": "2025-04-12"
            }
        ],
        "distances": [
            {
                "distance": "1m 3f",
                "races": 7
            },
            {
                "distance": "1m",
                "races": 6
            },
            {
                "distance": "7f",
                "races": 5
            }
        ]
    },
    "meta": {
        "request_id": "e7934fe3e2b0a40f",
        "plan": "complete",
        "window": "January 2017 to the next 3 days",
        "data_as_of": "2026-10-30T10:08:33+00:00"
    }
}
  

Parameters

NameInTypeRequiredWhat it does
course_idpathidyesOur id for the course, as other answers give it (cr_ and eight characters).

Returns

One record in data. Every answer carries meta: request_id, plan, window and data_as_of.

FieldTypeHolds
course_idstringOur id for the course.
namestringThe name, as raced: the race title on a race.
shortcodenull or valueThe course's short code, where it has one.
countrystringENG, Scot, Wale or Nort.
regionstringGB, or NORT for Northern Ireland.
racesintegerThe races, or how many there have been.
meetingsintegerThe meetings.
first_meetingstringThe first meeting we hold, a UK day.
last_meetingstringThe latest meeting we hold, a UK day.
townnull or valueThe town or nearest town.
countynull or valueThe county, or council area in Scotland and Wales.
nationnull or valueEngland, Scotland, Wales or Northern Ireland.
latnull or valueLatitude of the course, four decimals.
lngnull or valueLongitude of the course, four decimals.
directionnull or valueWhich way round it runs: left, right or figure of eight.
kindsarrayThe kinds of racing held there.
run_typesarrayThe kinds of racing held there, with counts.
run_types[].run_typestringFlat, Hurdle, Chase or NH Flat.
run_types[].surfacestringTurf or the all-weather surface.
run_types[].racesintegerThe races, or how many there have been.
run_types[].firststringHow many won.
run_types[].laststring
distancesarrayThe distances raced there, with counts.
distances[].distancestringThe race distance as published, for example 2m 87y.
distances[].racesintegerThe races, or how many there have been.

Errors

CodeStatusWhen
unauthorized401No key was sent, or the key is not one of ours.
bad_request400A value is the wrong shape: a date that is not YYYY-MM-DD, a cursor that is not ours, or a key sent in the address.
unknown_parameter422A parameter this endpoint does not take. The answer lists the ones it does.
not_found404No record has that id, or it is not British or Northern Irish racing.
rate_limited429Too many calls this minute for your plan.
quota_exceeded429Your plan's calls for the month are used. The answer says when they reset.