Documentation / Races

Get a race result

GET/v1/races/{race_id}/result

Available on Live Live Plus

The result view of a race: finishing order, starting prices, sectionals, run times, beaten distances, dividends and the exact off and receipt times.

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/result" \
  -H "X-API-Key: $GAPI_KEY"
<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/races/3959843903/result');
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/result', {
  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/result', {
      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/result",
    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": "complete",
        "off": {
            "utc": "2026-07-08T20:47:12Z",
            "delay_s": 72
        },
        "freshness": {
            "first_seen": "2026-07-07T05:12:10Z",
            "results_received": "2026-07-08T21:03:40Z",
            "results_delay_s": 1060
        },
        "result": {
            "positions": [
                {
                    "position": 1,
                    "trap": 3,
                    "dog_id": 1654595188,
                    "dog_name": "Miami Yeats",
                    "trainer": {
                        "trainer_id": 1210000121,
                        "name": "M E Wiley"
                    },
                    "sp": {
                        "fraction": "5/2",
                        "decimal": 3.5
                    },
                    "sectional_s": 4.31,
                    "run_time_s": 35.42,
                    "adjusted_time_s": 35.42,
                    "weight_kg": 34.4,
                    "betfair": {
                        "selection_id": 84512233,
                        "back_price": 3.55,
                        "lay_price": 3.6,
                        "last_update": "2026-07-08T20:41:02Z"
                    }
                }
            ],
            "forecast_dividend": "12.40",
            "tricast_dividend": "48.12",
            "off": {
                "utc": "2026-07-08T20:47:12Z",
                "delay_s": 72
            },
            "received": {
                "utc": "2026-07-08T21:03:40Z",
                "delay_s": 1060
            },
            "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"
            }
        }
    }
}

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}/result

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

A race we have confirmed will never have a result — abandoned or void — returns 200 with the race, no positions, and meta.result_available: false. That is a definitive answer: stop asking. If the race has no result but is not confirmed dead, the endpoint returns 409 with error code result_not_available, the race's current status, and a boolean retry. 404 is reserved for a race ID that does not exist, so "wrong ID" and "no result" are never the same response. Changed 7 September 2026: this case previously returned 404, which said the race was missing when it was simply not settled. retry: true means the race has not run yet and polling will eventually succeed; retry: false means it ran and was abandoned, voided or never settled, so no amount of polling will produce a result.Irish races before September 2026 have no off time. The source publishes those results with a date and no clock, so scheduled_start is midnight UTC on the race date and off is null. It is not a gap in our ingest and there is nothing to wait for. Irish racing from this month onward, and all GB and AU racing, carries a real time.