Docs› Coverage› Pricing› Status› Support›
  1. Home
  2. Documentation
  3. Today's results

Greyhound racing API: Today's results

Today's results

Today's results as each race settles. UK, Ireland and Australia.

Documentation / Results

Today's results

Race PassArchive PassMCP tool todays_results

Today's results as each race settles. Covers the UK, Ireland and Australia.

GEThttps://api.greyhoundracingapi.com/v1/results/today

Try 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/today
Run works once the API is live; the code below works now with the login.

Parameters

NameTypeWhat it does
countrystringLeave out for all three countries.
GBIEAU
trackstringA track id from Tracks, such as romford.
raceintegerOne race number at that track.
sincetimeOnly races settled after this time, UTC HH:MM. For polling.
pageintegerPage number, from 1. 50 races a page.
cursorstringThe meta.next_cursor from your last call, for the next page.
formatstringThe 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.

FieldTypeWhat it holds
race_idstringOur id for the race. Stable, safe to store.
trackstringTrack id, as in Tracks.
track_namestringTrack name for display.
countrystringGB, IE or AU.
nointegerRace number at the meeting.
offtimeScheduled start, local to the track, HH:MM.
off_utcdatetimeScheduled start in UTC.
distance_mintegerDistance in metres.
gradestringRace grade, where one is given.
settled_atdatetimeWhen the result arrived, UTC. Use it with since.
result_statusstringprovisional until confirmed, then final.
result[].posintegerFinishing position.
result[].trapintegerTrap, 1 to 6 (1 to 8 in Australia).
result[].runnerstringGreyhound name.
result[].runner_idstringOur id for the greyhound. Stable, safe to store.
result[].trainerstringTrainer name.
result[].timenumberRun time in seconds.
result[].spstringStarting price as given: fractional where there is one.
result[].sp_decimalnumberStarting 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_edqppwn9",
            "track": "newcastle",
            "track_name": "Newcastle",
            "country": "GB",
            "no": 11,
            "off": "13:59",
            "off_utc": "2026-10-06T12:59:00Z",
            "distance_m": 480,
            "grade": "A5",
            "settled_at": "2026-10-06T13:05:01Z",
            "result_status": "final",
            "result": [
                {
                    "pos": 1,
                    "trap": 2,
                    "runner": "Canny Stunner",
                    "runner_id": "rn_j12sbcg5",
                    "trainer": "P Rutherford",
                    "time": null,
                    "sp": "6/4",
                    "sp_decimal": 2.5
                },
                {
                    "pos": 2,
                    "trap": 3,
                    "runner": "Blackhousereggie",
                    "runner_id": "rn_vh11cd4b",
                    "trainer": "S Ray",
                    "time": null,
                    "sp": "4/1",
                    "sp_decimal": 5
                },
                {
                    "pos": 3,
                    "trap": 5,
                    "runner": "Don Pawblo",
                    "runner_id": "rn_fgq2ws0y",
                    "trainer": "J J Fenwick",
                    "time": null,
                    "sp": "11/4",
                    "sp_decimal": 3.75
                }
            ]
        }
    ],
    "meta": {
        "count": 31,
        "page": 1,
        "per_page": 50,
        "total": 31,
        "total_pages": 1,
        "next_cursor": null,
        "took_ms": 122
    }
}

Errors

StatusCodeWhat to do
400bad_requestA value is not valid, a date is before 2020, or the key was put in the address. The message says which.
401unauthorizedNo key, or the key is wrong, revoked or expired. Check the header.
403upgrade_requiredYour plan does not include this endpoint. plan names the one that does.
422unknown_parameterA parameter this endpoint does not take. The message lists the ones it does.
429rate_limitedToo many calls this minute. Wait for Retry-After.
429quota_exceededToday's allowance is used. It resets at 00:00 UTC.
503server_errorOur side. Not counted against you. Try again shortly, and see status.

Polling for new results

Call every minute or two with since set to the newest settled_at you hold. You only get races settled after it, so each call is small.