Documentation / Races

Get a race

GET/v1/races/{race_id}

Available on Free Live Live Plus

Full detail for one greyhound race: track, grade, distance, going, scheduled and official off-times, lifecycle status, freshness metadata and the complete runner line-up.

Authenticate with your key in the X-API-Key header, or ?key= if your tool cannot set one — see Authentication. Works with sandbox keys inside the sandbox data window.

Parameters

NameInTypeRequiredDescription
race_id path integer yes The race identifier.

Request

curl "https://api.greyhoundapi.com/v1/races/3959843903" \
  -H "X-API-Key: $GAPI_KEY"
<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/races/3959843903');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['X-API-Key: ' . getenv('GAPI_KEY')],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response['data']);
const res = await fetch('https://api.greyhoundapi.com/v1/races/3959843903', {
  headers: { 'X-API-Key': process.env.GAPI_KEY }
});
if (!res.ok) throw new Error(`GreyhoundAPI ${res.status}`);
const { meta, data } = await res.json();
console.log(meta.data_as_of, data);
import { useEffect, useState } from 'react';

export default function Example() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch('https://api.greyhoundapi.com/v1/races/3959843903', {
      headers: { 'X-API-Key': import.meta.env.VITE_GAPI_KEY }
    })
      .then((r) => r.json())
      .then((body) => setData(body.data));
  }, []);

  if (!data) return <p>Loading…</p>;
  return <pre>{JSON.stringify(data, null, 2)}</pre>;
}

Browser code exposes whatever key it ships with — use a sandbox key for prototypes and proxy live keys through your own server in production.

import os
import requests

r = requests.get(
    "https://api.greyhoundapi.com/v1/races/3959843903",
    headers={"X-API-Key": os.environ["GAPI_KEY"]},
    timeout=10,
)
r.raise_for_status()
body = r.json()
print(body["meta"]["data_as_of"], body["data"])

Response

200 OKapplication/json
{
    "meta": {
        "request_id": "req_8f2ac1",
        "data_as_of": "2026-07-08T13:05:12Z"
    },
    "data": {
        "race_id": 1229082445,
        "meeting_id": 1449422077,
        "region": "GB",
        "track": {
            "track_id": 1400000014,
            "name": "Romford",
            "region": "GB",
            "timezone": "Europe/London"
        },
        "race_number": 12,
        "grade": "S1",
        "class_letter": "S",
        "class_number": 1,
        "distance_m": 575,
        "race_type": "Flat",
        "is_handicap": false,
        "going": null,
        "field_size": 6,
        "scheduled_start": {
            "utc": "2026-07-08T20:46:00Z",
            "local": "2026-07-08T21:46:00+01:00"
        },
        "status": "scheduled",
        "off": null,
        "freshness": {
            "first_seen": "2026-07-07T05:12:10Z",
            "results_received": null,
            "results_delay_s": null
        },
        "weather": {
            "hour_utc": "2026-07-08T20:00:00Z",
            "temp_c": 15.2,
            "humidity_pct": 81,
            "wind_kph": 19.5,
            "gust_kph": 42.8,
            "wind_from": "W",
            "wind_deg": 271,
            "precip_mm": 0.3,
            "conditions": "light drizzle",
            "before_race": {
                "rain_6h_mm": 1.6,
                "rain_24h_mm": 2,
                "wind_avg_6h_kph": 21.4
            },
            "source": "archive"
        },
        "runners": [
            {
                "trap": 1,
                "dog_id": 1655044329,
                "dog_name": "Full Monty",
                "sex": "d",
                "colour": "bebd",
                "born": "2024-04-01",
                "age_months": 27,
                "sire": "Ballymac Anton",
                "dam": "Ballymac Notoyou",
                "trainer": {
                    "trainer_id": 1180000118,
                    "name": "P W Young"
                },
                "owner": {
                    "owner_id": 2231000223,
                    "name": "Mr G D R Bowmer, Mr G J Bowmer"
                },
                "weight_kg": 36.6,
                "handicap_metres": null,
                "sp": null,
                "position": null,
                "runner_status": "runner"
            }
        ]
    }
}

Run it live

A real request from your browser straight to api.greyhoundapi.com with your own key — nothing is proxied or logged by this page.

GET/v1/races/{race_id}

Held in this tab only, sent only to the API host. No key yet? Create a free sandbox key — it runs every endpoint against the sandbox data window.

Notes

Fetching more than one? Do not call this in a loop — /v1/races?ids=A-B-C returns up to 50 races in a single request, and counts as one against your rate limit. See batch requests. Note this endpoint also returns runners, and the full result once it settles, which the list form does not. This is the workhorse endpoint. Once the race completes, the same call also carries the result block shown in Get a race result. Irish off times are the carded time. An Irish result is published without a clock, so the time on these races is read from the racecard for that meeting: when the race was due rather than the moment the traps opened. A few hundred races out of 123,000 have no card to read and keep off as null.