Documentation / Results
Yesterday's results
Yesterday's results, every meeting. Covers the UK, Ireland and Australia.
GEThttps://api.greyhoundracingapi.com/v1/results/yesterdayTry it
No key yet? The free key is made in a moment and filled in here for you. Get a free key
GET https://api.greyhoundracingapi.com/v1/results/yesterdayRun works once the API is live; the code below works now with the login.
Parameters
| Name | Type | What it does | |
|---|---|---|---|
country | string | Leave out for all three countries. GBIEAU | |
track | string | A track id from Tracks, such as romford. | |
page | integer | Page number, from 1. 50 races a page. | |
cursor | string | The meta.next_cursor from your last call, for the next page. | |
format | string | The answer format. Adding .csv to the path does the same as csv.jsoncsv |
Returns
A list of races in data and paging in meta: count, page, per_page, total, total_pages and next_cursor. A field we do not have for a race is null, never left out. See Pagination.
| Field | Type | What it holds |
|---|---|---|
race_id | string | Our id for the race. Stable, safe to store. |
track | string | Track id, as in Tracks. |
track_name | string | Track name for display. |
country | string | GB, IE or AU. |
no | integer | Race number at the meeting. |
off | time | Scheduled start, local to the track, HH:MM. |
off_utc | datetime | Scheduled start in UTC. |
distance_m | integer | Distance in metres. |
grade | string | Race grade, where one is given. |
settled_at | datetime | When the result arrived, UTC. Use it with since. |
result_status | string | provisional until confirmed, then final. |
result[].pos | integer | Finishing position. |
result[].trap | integer | Trap, 1 to 6 (1 to 8 in Australia). |
result[].runner | string | Greyhound name. |
result[].runner_id | string | Our id for the greyhound. Stable, safe to store. |
result[].trainer | string | Trainer name. |
result[].time | number | Run time in seconds. |
result[].sp | string | Starting price as given: fractional where there is one. |
result[].sp_decimal | number | Starting price in decimal odds. |
Example answer
A real answer from 6 October 2026, 13:10 UTC, trimmed to one race and three runners.
{
"data": [
{
"race_id": "rc_y7t67w4m",
"track": "enniscorthy",
"track_name": "Enniscorthy",
"country": "IE",
"no": 8,
"off": "21:39",
"off_utc": "2026-10-05T20:39:00Z",
"distance_m": 480,
"grade": "A2",
"settled_at": "2026-10-05T21:05:00Z",
"result_status": "final",
"result": [
{
"pos": 1,
"trap": 3,
"runner": "Ballinabola Wild",
"runner_id": "rn_y5ychzap",
"trainer": "Liam Butler (snr.)",
"time": 29.07,
"sp": "4",
"sp_decimal": 4
},
{
"pos": 2,
"trap": 2,
"runner": "Blackhill Jack",
"runner_id": "rn_wfh24r03",
"trainer": "Anton Butler",
"time": 29.24,
"sp": "3",
"sp_decimal": 3
},
{
"pos": 3,
"trap": 1,
"runner": "Karlow Blaze",
"runner_id": "rn_k0zm6ba6",
"trainer": "J-m-h-syndicate",
"time": 29.45,
"sp": "3.5",
"sp_decimal": 3.5
}
]
}
],
"meta": {
"count": 50,
"page": 1,
"per_page": 50,
"total": 202,
"total_pages": 5,
"next_cursor": "cDI",
"took_ms": 194
}
}Errors
| Status | Code | What to do |
|---|---|---|
| 400 | bad_request | A value is not valid, a date is before 2020, or the key was put in the address. The message says which. |
| 401 | unauthorized | No key, or the key is wrong, revoked or expired. Check the header. |
| 422 | unknown_parameter | A parameter this endpoint does not take. The message lists the ones it does. |
| 429 | rate_limited | Too many calls this minute. Wait for Retry-After. |
| 429 | quota_exceeded | Today's allowance is used. It resets at 00:00 UTC. |
| 503 | server_error | Our side. Not counted against you. Try again shortly, and see status. |