horseracingapi.co.uk

Search race reports

Complete

Written UK race reports since 2020. British and Northern Irish racing only.

GEThttps://api.horseracingapi.co.uk/v1/reports
Try itruns against the real API with your key
Get a free key
GET /v1/reports
Examplea real answer from 2026-10-29
{
    "data": [],
    "meta": {
        "request_id": "cffe99c91baff1e4",
        "plan": "complete",
        "window": "January 2017 to the next 3 days",
        "data_as_of": "2026-10-30T08:11:33+00:00",
        "count": 0
    }
}
  

Parameters

NameInTypeRequiredWhat it does
date_fromquerydatenoFrom this UK day, YYYY-MM-DD. Held to your plan's window; meta.searched says what was used.
date_toquerydatenoTo this UK day, YYYY-MM-DD. Held to your plan's window.
course_idqueryidnoOur id for the course, as other answers give it (cr_ and eight characters).
limitqueryintegernoHow many rows in one answer, 1 to 100. Default 25.
cursorquerystringnonext_cursor from the previous answer, to read the next rows. Never build one.

Returns

A list in data, one row each, with meta.count. Every answer carries meta: request_id, plan, window and data_as_of.

Each field is listed here, read from the example answer, once the data feed is connected.

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.