API reference
GreyhoundAPI documentation
Sixty-two REST endpoints and a WebSocket stream over greyhound racing in Great Britain and Australia: racecards, runners, results, sectionals, starting prices, Betfair market summaries, dogs, trainers, owners, tracks and breeding. Race data only — no predictions, no ratings, no betting advice.
Machine-readable: OpenAPI 3.1 spec · Postman collection · generated from the same registry as these pages · Changelog. Every endpoint page has a Run it live console — bring a key.
Quickstart
Base URL https://api.greyhoundapi.com/v1, key in the X-API-Key
header, JSON in a meta/data envelope. First call:
curl "https://api.greyhoundapi.com/v1/racecards/today?region=GB&summary=true" \
-H "X-API-Key: $GAPI_KEY"<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/racecards/today?region=GB&summary=true');
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&summary=true', {
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&summary=true', {
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&summary=true",
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"])New here? Read Getting started, then Timezones & dates and Data freshness — the two guides that make a GB + AU racing consumer behave correctly.
Guides
21Read these before the reference — they are the difference between a call that works and an integration that behaves.
Start here8
Coverage & integrity4
Reading a response5
Limits & delivery4
Racecards
2Upcoming greyhound racecards for Great Britain and Australia — every scheduled race with runners, traps, grades, distances and track-local start times, resolved per calendar day.
/v1/racecards/today
Every greyhound racecard scheduled today in Great Britain and Australia, resolved per track-local calendar day, with runners, traps, grades and start times.
/v1/racecards/upcoming
A rolling window of the next greyhound races to jump across GB, AU and IE, from the next hour up to the next 48, ordered by scheduled start time.
Races
12Search and retrieve individual greyhound races: full runner line-ups, grades, going, off-times, lifecycle status, results and starting-price and Betfair market summaries for any race in the archive.
/v1/races
Search the full greyhound race archive by date range, region, track, grade, distance, handicap flag and lifecycle status, with cursor pagination.
/v1/races/{race_id}
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.
/v1/races/{race_id}/runners
Just the runners for one race: trap draws, dogs, breeding, trainers, owners, weights — and positions, times and prices once the result is in.
/v1/races/{race_id}/result
The result view of a race: finishing order, starting prices, sectionals, run times, beaten distances, dividends and the exact off and receipt times.
/v1/races/{race_id}/status
The lifecycle and freshness record of a race: current status, official off delay, when results arrived and how far behind the scheduled start they were.
/v1/races/{race_id}/precedents
Races from the archive that ran under matching conditions at this track and distance, with what actually happened in them — and an explicit list of what each one matched on and where it differs.
/v1/races/{race_id}/field
The whole field in one call: record here, grade record, layoff and the draw, per runner.
/v1/races/{race_id}/analysis
Conditions and measured early pace for one race in a single request, joined per runner — the trap record at this track and distance, typical winning times, field experience, and each runner's early split with the sample behind it.
/v1/races/{race_id}/pace
Each runner's measured early split from past runs at this track over this exact distance, with the number of runs behind every figure and the runners we have no data for named rather than omitted.
/v1/races/{race_id}/conditions
The context one race runs in: how each trap has performed at this track over this exact distance, what a winning time looks like here, and how experienced the field is — every figure with the sample it is drawn from.
/v1/races/{race_id}/form
The full race card with every runner's recent form attached — the race and its dogs' form lines in a single call instead of one request per runner.
/v1/races/{race_id}/market
Factual market data for a race: each runner's starting price plus the best Betfair back and lay prices captured seconds before the off, with the exchange selection id and the time they were taken.
Results
4Greyhound racing results as they arrive: finishing order, starting prices, winning times, sectionals, beaten distances and forecast/tricast dividends, searchable across the full historical archive.
/v1/results/today
Every greyhound race completed today across GB, AU and IE, most recent first, with finishing order, prices, times and dividends.
/v1/results/yesterday
Every greyhound race completed yesterday across GB, AU and IE, most recent first, with finishing order, prices, times and dividends.
/v1/results
Search historical greyhound results across the whole archive by date range, region, track, grade, distance, dog, trainer or owner.
/v1/results/latest
Results ordered by the moment they reached the pipeline — the polling companion to the WebSocket stream, with a since cursor for gapless catch-up.
Weather
1The conditions every greyhound race ran in: temperature, wind speed and direction, gusts and rainfall at the track for the hour of the off, with the rain and wind over the hours leading up to it.
Race commentary
5How each greyhound ran, rewritten in plain English with the bend or point of the race each event happened at, and a written preview and report for each race. For Australian racing, the view before the off, as a verdict and the traits behind it. Live Plus.
/v1/races/{race_id}/comments
How each runner ran, as structured events and a one-line summary, or for Australian racing the view before the off.
/v1/races/{race_id}/writeup
A written preview and report for one race, with a line on every runner, written from the records.
/v1/writeups/upcoming
Previews for the races about to run, written from the field and its form before the off, over the next 1 to 48 hours.
/v1/writeups/results
Full write-ups for races already run, with the preview, the report and a line on every runner, over the last hours or for one date.
/v1/comments/vocabulary
Every event, place, verdict and trait the comments endpoint can return, with its wording.
Meetings
5Greyhound race meetings grouped by fixture: every race staged at a track on a given day, with per-meeting summaries for GB, AU and IE fixtures.
/v1/meetings
Find greyhound meetings by track-local date, region and track — each with a summary of the races staged at the fixture.
/v1/meetings/today
Today's greyhound fixtures across GB, AU and IE, each meeting with its full race list, resolved per track-local calendar day.
/v1/meetings/calendar
Which tracks raced on which days: one row per track per day with the number of meetings and races on each. Coverage as data, in a single call instead of one per day.
/v1/meetings/{meeting_id}/analysis
A whole card as one unit: how fast the track actually ran, measured against the average winning time for each distance, and whether the published going agreed with it.
/v1/meetings/{meeting_id}
One meeting in full: the track, the track-local date and every race staged at the fixture with grade, distance, start time and status.
Dogs
10Individual greyhound records: identity, breeding, seasonality, career statistics, complete race-by-race form, upcoming entries, price history and head-to-head comparisons.
/v1/dogs/{dog_id}/layoff
How a greyhound has run after different lengths of time off, shown beside how greyhounds generally run after the same break — because most dogs race weekly and have very few runs after a long one.
/v1/dogs/{dog_id}/trend
Whether a greyhound is running quicker or slower over its recent races, each run measured against par for that track and distance, and the change reported beside the dog's own run-to-run variation so you can tell a trend from noise.
/v1/dogs/search
Find greyhounds by name, sire, dam or sex — the entry point for dog IDs used across the form, entries, prices and head-to-head endpoints.
/v1/dogs/{dog_id}
A greyhound's full profile: identity, colour, breeding, seasonality and career statistics including per-grade record and days since last run.
/v1/dogs/{dog_id}/form
A greyhound's complete race-by-race history, newest first: track, grade, distance, trap, position, price, sectional, run time, weight and run comment.
/v1/dogs/{dog_id}/entries
A greyhound's declared upcoming runs: race, track, grade, distance, trap draw and track-local start time.
/v1/dogs/{dog_id}/prices
Every historical run for a greyhound with its starting price and the Betfair back and lay prices taken just before the off — factual market data across the dog's whole career.
/v1/dogs/{dog_id}/head-to-head/{rival_id}
Compare two greyhounds directly: shared races, who finished ahead and how often, plus each dog's career record — the factual rivalry view.
/v1/dogs/{dog_id}/pace
How a greyhound RUNS a race rather than how fast: its average rank at the first bend, its average finish, and the gap between them. Positive means it passes runners, negative means it comes back to the field. Rebuilt nightly from every timed run.
/v1/dogs/{dog_id}/stats
Career splits for one greyhound: strike rate by distance, trap, track, grade, going and trainer, with best and average winning times in each — what tends to happen, rather than what happened. Narrow every split to one track and distance with track_id and distance_m.
Trainers
5Greyhound trainer profiles with factual career aggregates, upcoming declared runners and full historical results.
/v1/trainers/search
Find greyhound trainers by name and get the trainer IDs used across the profile, runners and results endpoints.
/v1/trainers/{trainer_id}
A trainer's profile with factual aggregates: runners and wins over the last 12 months, strike rate and the per-track breakdown.
/v1/trainers/{trainer_id}/runners
Every upcoming declared runner for a trainer across GB, AU and IE, with race, trap, grade, distance and track-local start time.
/v1/trainers/{trainer_id}/results
A trainer's historical results, newest first: every runner with race, position, price and time, filterable by date range.
/v1/trainers/{trainer_id}/stats
Strike rate for one trainer split by track, distance, trap and grade over a rolling window — answering how a yard performs AT A GIVEN TRACK, which a flat results list cannot.
Owners
3Greyhound owner and syndicate records: registered dogs, upcoming entries and the results achieved under each ownership.
/v1/owners/search
Find greyhound owners and syndicates by name — the entry point for owner IDs used on the owner profile endpoint.
/v1/owners/{owner_id}
An owner or syndicate in full: registered greyhounds, upcoming entries and the results achieved under the ownership.
/v1/owners/{owner_id}/stats
Strike rate for one ownership by track, distance, trap and grade — and by trainer, the question only an owner can answer: which yards is this ownership actually winning with.
Tracks
4Every GB, AU and IE greyhound track with its timezone, distances raced, trap-by-trap win statistics and track records, all recomputed nightly from published results.
/v1/tracks
Every GB, AU and IE greyhound track that has raced in the last two weeks (courses currently running, not the all-time roster) with its region, IANA timezone, active flag, the distances raced there and the grades it has actually carded in the last four weeks.
/v1/tracks/{track_id}
One track's record: name, region, timezone, active status, every distance raced there and the grades carded in the last four weeks.
/v1/tracks/{track_id}/races
Racecards and results at one track, filterable by track-local date range and lifecycle status.
/v1/tracks/{track_id}/stats
Descriptive statistics for a track: trap-by-trap win counts and percentages per distance, and the track record at each distance — recomputed nightly from results.
Breeding
6Sire and dam statistics for Great Britain and Ireland: how each parent's offspring run by distance, trap, age and track, against the market and from the first bend, plus every recorded offspring. Australian dogs carry no breeding.
/v1/sires
Every sire we hold figures for, searchable by name and sortable by runs, strike rate, wins against the market, early pace or debut wins. Great Britain and Ireland.
/v1/sires/{sire_id}/stats
How a sire's offspring run: strike rate, wins against the market, early pace and debut wins, whole and split by region, distance, trap, age and track.
/v1/sires/{sire_id}/progeny
Every recorded offspring of a sire with each dog's career aggregates — the pedigree view for greyhound breeding research.
/v1/dams
Every dam we hold figures for, searchable by name and sortable by runs, strike rate, wins against the market, early pace or debut wins. Great Britain and Ireland.
/v1/dams/{dam_id}/stats
How a dam's offspring run: strike rate, wins against the market, early pace and debut wins, whole and split by region, distance, trap, age and track.
/v1/dams/{dam_id}/progeny
Every recorded offspring of a dam with each dog's career aggregates, mirroring the sire progeny endpoint.
Platform & reference
5Operational endpoints: the size of the dataset, live data-pipeline freshness, your own key usage and limits, and decode tables for grades, going codes and runner statuses.
/v1/status
Live health of the data pipeline: last sync per region, races currently awaiting results, and 24-hour delay statistics — the same numbers shown on the public status page.
/v1/coverage
Every track and day: races carded, run, resulted and abandoned, checked against Betfair's own market list for anything we never received. On every key.
/v1/usage
Your own API key's consumption: requests today and this billing month, your plan's limits, and when each window resets.
/v1/archive
The size of the dataset, counted rather than claimed: how many dogs, trainers, owners and tracks exist, how many runs and meetings, how many pace profiles and trap tables have been built, and races by track and distance with the earliest and latest date and how many carry starting prices, exchange prices and sectionals.
/v1/reference
Decode tables for the whole API: race grades, regions and timezones, going descriptions and runner statuses.
WebSocket stream
Results and status changes pushed the moment they reach the
pipeline, over wss://greyhoundapi.com/v1/stream. Channels,
replay and limits are covered in the
WebSocket guide.