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.

62REST endpoints
17On the free key
20Live Plus only
22Paginated

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

21

Read these before the reference — they are the difference between a call that works and an integration that behaves.

Changelog Australian prize money and tote dividends 2026-10-08 · 48 entries, newest first Read the changelog

Racecards

2

Upcoming greyhound racecards for Great Britain and Australia — every scheduled race with runners, traps, grades, distances and track-local start times, resolved per calendar day.

Races

12

Search 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.

GET /v1/races
Search races

Search the full greyhound race archive by date range, region, track, grade, distance, handicap flag and lifecycle status, with cursor pagination.

Free key Paged
GET /v1/races/{race_id}
Get a race

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.

Free key
GET /v1/races/{race_id}/runners
Race runners

Just the runners for one race: trap draws, dogs, breeding, trainers, owners, weights — and positions, times and prices once the result is in.

Free key
GET /v1/races/{race_id}/result
Get a race result

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

GET /v1/races/{race_id}/status
Race status & freshness

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.

GET /v1/races/{race_id}/precedents
Race 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.

Live Plus
GET /v1/races/{race_id}/field
The field

The whole field in one call: record here, grade record, layoff and the draw, per runner.

Live Plus
GET /v1/races/{race_id}/analysis
Race 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.

Live Plus
GET /v1/races/{race_id}/pace
Early 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.

Live Plus
GET /v1/races/{race_id}/conditions
Race 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.

Live Plus
GET /v1/races/{race_id}/form
Race card with 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.

Live Plus
GET /v1/races/{race_id}/market
Race market summary

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

4

Greyhound racing results as they arrive: finishing order, starting prices, winning times, sectionals, beaten distances and forecast/tricast dividends, searchable across the full historical archive.

Weather

1

The 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

5

How 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.

Meetings

5

Greyhound 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.

Dogs

10

Individual greyhound records: identity, breeding, seasonality, career statistics, complete race-by-race form, upcoming entries, price history and head-to-head comparisons.

GET /v1/dogs/{dog_id}/layoff
Layoff record

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.

Live Plus
GET /v1/dogs/{dog_id}/trend
Performance 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.

Live Plus
GET /v1/dogs/search
Search dogs

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.

Paged
GET /v1/dogs/{dog_id}
Get a dog

A greyhound's full profile: identity, colour, breeding, seasonality and career statistics including per-grade record and days since last run.

GET /v1/dogs/{dog_id}/form
Dog form

A greyhound's complete race-by-race history, newest first: track, grade, distance, trap, position, price, sectional, run time, weight and run comment.

Paged
GET /v1/dogs/{dog_id}/entries
Dog upcoming entries

A greyhound's declared upcoming runs: race, track, grade, distance, trap draw and track-local start time.

GET /v1/dogs/{dog_id}/prices
Dog price history

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.

Paged
GET /v1/dogs/{dog_id}/head-to-head/{rival_id}
Head-to-head

Compare two greyhounds directly: shared races, who finished ahead and how often, plus each dog's career record — the factual rivalry view.

GET /v1/dogs/{dog_id}/pace
Dog pace profile

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.

Live Plus
GET /v1/dogs/{dog_id}/stats
Dog statistics

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.

Live Plus

Trainers

5

Greyhound trainer profiles with factual career aggregates, upcoming declared runners and full historical results.

Owners

3

Greyhound owner and syndicate records: registered dogs, upcoming entries and the results achieved under each ownership.

Tracks

4

Every 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.

Breeding

6

Sire 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.

Platform & reference

5

Operational 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.

Nothing matches that. Try a shorter word, or clear the tier filters.

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.