Documentation / Racecards

Today's racecards

GET/v1/racecards/today

Available on Live Live Plus

Every greyhound racecard scheduled today in Great Britain and Australia, resolved per track-local calendar day, with runners, traps, grades and start times.

Authenticate with your key in the X-API-Key header — see Authentication. Works with sandbox keys inside the sandbox data window.

Parameters

NameInTypeRequiredDescription
region query string no Filter by region code: GB or AU.
track_id query integer no Filter to a single track. Track IDs come from List tracks.
grade query string no Filter by composed grade, e.g. A2, S1, D3, OR.
distance_m query integer no Filter by race distance in metres.
cursor query string no Opaque pagination cursor from the previous response's meta.next_cursor.
limit query integer no Page size, 1–200. Defaults to 50.
page query integer no Page number (1-based) — a simpler alternative to cursor. When set, the response also returns meta.page, meta.per_page, meta.total, meta.total_pages, meta.next_page and meta.prev_page. The first page carries these even without page. Prefer cursor for large bulk exports; use page for browsing or bounded (date-filtered) queries.

Request

curl "https://api.greyhoundapi.com/v1/racecards/today?region=GB" \
  -H "X-API-Key: $GAPI_KEY"
<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/racecards/today?region=GB');
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/racecards/today?region=GB', {
  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/racecards/today?region=GB', {
      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/racecards/today?region=GB",
    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",
        "count": 1,
        "next_cursor": "eyJzIjoiMjAyNi0wNy0wOFQyMDo0NjowMFoifQ",
        "page": 1,
        "per_page": 50,
        "total": 1287,
        "total_pages": 26,
        "next_page": 2,
        "prev_page": null
    },
    "data": [
        {
            "race_id": 1229082,
            "meeting_id": 449422,
            "region": "GB",
            "track": {
                "track_id": 14,
                "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
            },
            "runners": [
                {
                    "trap": 1,
                    "dog_id": 655044,
                    "dog_name": "Full Monty",
                    "sex": "d",
                    "colour": "bebd",
                    "born": "2024-04-01",
                    "age_months": 27,
                    "sire": "Ballymac Anton",
                    "dam": "Ballymac Notoyou",
                    "trainer": {
                        "trainer_id": 118,
                        "name": "P W Young"
                    },
                    "owner": {
                        "owner_id": 2231,
                        "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/racecards/today

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

"Today" is evaluated in each track's own timezone, so an Australian evening card and a British afternoon card can both be "today" at the same moment. See Timezones & dates.