horseracingapi.co.uk

A race's analysis

Live, Archive and Complete

Market shape and what the course and distance usually produce.

GEThttps://api.horseracingapi.co.uk/v1/races/{race_id}/analysis
Try itruns against the real API with your key
Get a free key
GET /v1/races/{race_id}/analysis
Examplea real answer from 2026-10-29
{
    "data": {
        "race_id": "rc_0aa1c4st",
        "course": "Abu Dhabi",
        "date": "2026-10-29",
        "conditions": {
            "run_type": "Flat",
            "distance": "6f",
            "going": "Good",
            "surface": "TURF",
            "class": null,
            "handicap": true,
            "runners": 12
        },
        "market": {
            "book_percentage": 133.36,
            "shape": {
                "shortest": 2.75,
                "longest": 26,
                "median": 10.25,
                "spread": 9.5,
                "priced": 12
            },
            "favourites": [
                {
                    "horse_id": "hs_ngjpqrbn",
                    "horse": "Es Khairiyah",
                    "sp": "7/4",
                    "position": 4
                }
            ],
            "movers": []
        },
        "at_this_course_and_distance": {
            "races": 4,
            "typical_field": 12.8,
            "typical_book": 134.7,
            "favourite_runs": 4,
            "favourite_wins": 1,
            "favourite_strike": 0.25
        },
        "note": "Context for one race. For statistics across the archive see /v1/analysis/angles and the course endpoints."
    },
    "meta": {
        "request_id": "8c77b0ee699154b5",
        "plan": "complete",
        "window": "January 2017 to the next 3 days",
        "data_as_of": "2026-10-30T09:35:33+00:00"
    }
}
  

Parameters

NameInTypeRequiredWhat it does
race_idpathidyesOur id for the race, as other answers give it (rc_ and eight characters).

Returns

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

FieldTypeHolds
race_idstringOur id for the race.
coursestringThe course name.
datestringThe UK racing day, YYYY-MM-DD.
conditionsobject
conditions.run_typestringFlat, Hurdle, Chase or NH Flat.
conditions.distancestringThe race distance as published, for example 2m 87y.
conditions.goingstringThe going as declared; null until it is.
conditions.surfacestringTurf or the all-weather surface.
conditions.classnull or valueThe race class.
conditions.handicapbooleanWhether the race is a handicap.
conditions.runnersintegerThe runners, or how many there were.
marketobject
market.book_percentagenumberThe total of the market's implied chances. Null on the free key.
market.shapeobject
market.favouritesarray
market.moversarray
at_this_course_and_distanceobject
at_this_course_and_distance.racesintegerThe races, or how many there have been.
at_this_course_and_distance.typical_fieldnumber
at_this_course_and_distance.typical_booknumber
at_this_course_and_distance.favourite_runsinteger
at_this_course_and_distance.favourite_winsinteger
at_this_course_and_distance.favourite_strikenumber
notestring

Errors

CodeStatusWhen
unauthorized401No key was sent, or the key is not one of ours.
upgrade_required403Your plan does not reach this endpoint. The answer names the plans that do.
outside_plan_window403The day asked for is outside what your plan reads. The answer gives your window and the day you asked for.
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.