horseracingapi.co.uk

A race's result

Every plan, free key included

Finishing order, casualties, dividends and prize money.

GEThttps://api.horseracingapi.co.uk/v1/races/{race_id}/result
Try itruns against the real API with your key
Get a free key
GET /v1/races/{race_id}/result
Examplea real answer from 2026-10-29, trimmed to a few rows
{
    "data": {
        "race_id": "rc_0aa1c4st",
        "course": "Abu Dhabi",
        "date": "2026-10-29",
        "off_time": "13:01:21",
        "winning_time": "1m 16.55s",
        "weather": null,
        "class_figure": null,
        "speed_figure": null,
        "book_percentage": 133.36,
        "placed": 3,
        "dividends": {
            "currency": "AED",
            "straight_forecast": 85.59
        },
        "prizes": [
            {
                "position": 1,
                "prize": 39601
            },
            {
                "position": 2,
                "prize": 13202
            },
            {
                "position": 3,
                "prize": 7259
            }
        ],
        "result": [
            {
                "position": 1,
                "cloth": 6,
                "horse_id": "hs_x73ps4xh",
                "horse": "Af Saqara",
                "sp": "7/1",
                "sp_decimal": 8,
                "beaten_distance": null,
                "casualty": null,
                "run_status": "ran",
                "speed_figure": null,
                "jockey": "Bernardo Pinheiro",
                "trainer": "Ernst Oertel"
            },
            {
                "position": 2,
                "cloth": 11,
                "horse_id": "hs_des8z34q",
                "horse": "Af Marmuq",
                "sp": "10/1",
                "sp_decimal": 11,
                "beaten_distance": "3/4 length",
                "casualty": null,
                "run_status": "ran",
                "speed_figure": null,
                "jockey": "M Rodrigues",
                "trainer": "Ernst Oertel"
            },
            {
                "position": 3,
                "cloth": 5,
                "horse_id": "hs_5nzbfr73",
                "horse": "Ezzah",
                "sp": "8/1",
                "sp_decimal": 9,
                "beaten_distance": "1 3/4 length",
                "casualty": null,
                "run_status": "ran",
                "speed_figure": null,
                "jockey": "Ray Dawson",
                "trainer": "I Hadhrami"
            }
        ],
        "unplaced": [
            {
                "position": null,
                "cloth": 12,
                "horse_id": "hs_n11js1na",
                "horse": "Khattaf Wrsan",
                "sp": "25/1",
                "sp_decimal": 26,
                "beaten_distance": null,
                "casualty": null,
                "run_status": "non_runner",
                "speed_figure": null,
                "jockey": "Non Runner",
                "trainer": "J Salman"
            }
        ]
    },
    "meta": {
        "request_id": "1882fec20696a4c6",
        "plan": "complete",
        "window": "January 2017 to the next 3 days",
        "data_as_of": "2026-10-30T11:05:06+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.
off_timestringWhen the race actually went off, by the racecourse clock; null until it has.
winning_timestringThe winner's time.
weathernull or valueThe weather on the day, where published.
class_figurenull or valueA figure for the class of the race, where held.
speed_figurenull or valueA speed figure, where held.
book_percentagenumberThe total of the market's implied chances. Null on the free key.
placedintegerHow many places the race pays.
dividendsobjectTote returns, in pounds. Null on the free key.
dividends.currencystring
dividends.straight_forecastnumber
prizesarrayPrize money by place, in pounds.
prizes[].positionintegerWhere it finished; null for a non-finisher.
prizes[].prizeintegerThe prize to the winner, in pounds.
resultarray
result[].positionintegerWhere it finished; null for a non-finisher.
result[].clothintegerThe saddle cloth number.
result[].horse_idstringOur id for the horse.
result[].horsestringThe horse's name.
result[].spstringStarting price, fractional. Null on the free key.
result[].sp_decimalintegerStarting price, decimal. Null on the free key.
result[].beaten_distancenull or valueHow far behind the winner, in lengths.
result[].casualtynull or valueWhy it did not finish, if it did not.
result[].run_statusstringran, or why not.
result[].speed_figurenull or valueA speed figure, where held.
result[].jockeystringThe jockey's name.
result[].trainerstringThe trainer's name.
unplacedarrayThe runners who were not placed.
unplaced[].positionnull or valueWhere it finished; null for a non-finisher.
unplaced[].clothintegerThe saddle cloth number.
unplaced[].horse_idstringOur id for the horse.
unplaced[].horsestringThe horse's name.
unplaced[].spstringStarting price, fractional. Null on the free key.
unplaced[].sp_decimalintegerStarting price, decimal. Null on the free key.
unplaced[].beaten_distancenull or valueHow far behind the winner, in lengths.
unplaced[].casualtynull or valueWhy it did not finish, if it did not.
unplaced[].run_statusstringran, or why not.
unplaced[].speed_figurenull or valueA speed figure, where held.
unplaced[].jockeystringThe jockey's name.
unplaced[].trainerstringThe trainer's name.

Errors

CodeStatusWhen
unauthorized401No key was sent, or the key is not one of ours.
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.