Dams
/v1/damsAvailable on Live Live Plus
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.
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
name |
query | string | no | Part of the dam's name, two characters or more. Case, spacing and a country suffix are ignored. |
sort |
query | string | no | What to sort by, highest first: runs (the default), offspring, active_offspring, wins, win_pct, place_pct, actual_vs_expected, early_pace_pct, debut_win_pct or last_run. name sorts A to Z. A dam whose figure could not be measured sorts last. |
min_runs |
query | integer | no | Only dams whose offspring have at least this many runs. Defaults to 100; 0 lists everyone. |
active |
query | boolean | no | true for dams with offspring that have raced in the last 90 days. |
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. |
Request
curl "https://api.greyhoundapi.com/v1/dams?sort=actual_vs_expected&min_runs=1000" \
-H "X-API-Key: $GAPI_KEY"<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/dams?sort=actual_vs_expected&min_runs=1000');
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/dams?sort=actual_vs_expected&min_runs=1000', {
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/dams?sort=actual_vs_expected&min_runs=1000', {
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/dams?sort=actual_vs_expected&min_runs=1000",
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"])curl "https://api.greyhoundapi.com/v1/dams?sort=actual_vs_expected&min_runs=1000&key=$GAPI_KEY"<?php
$url = 'https://api.greyhoundapi.com/v1/dams?sort=actual_vs_expected&min_runs=1000' . (str_contains('https://api.greyhoundapi.com/v1/dams?sort=actual_vs_expected&min_runs=1000', '?') ? '&' : '?') . 'key=' . getenv('GAPI_KEY');
$ch = curl_init($url);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response['data']);const res = await fetch(`https://api.greyhoundapi.com/v1/dams?sort=actual_vs_expected&min_runs=1000&key=$GAPI_KEY`.replace('$GAPI_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/dams?sort=actual_vs_expected&min_runs=1000&key=$GAPI_KEY`.replace('$GAPI_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/dams?sort=actual_vs_expected&min_runs=1000",
params={"key": os.environ["GAPI_KEY"]},
timeout=10,
)
r.raise_for_status()
body = r.json()
print(body["meta"]["data_as_of"], body["data"])A key in the URL appears in server logs, browser history and anything the link is pasted into. Convenient for a spreadsheet or a quick look; the header is safer everywhere else.
Response
{
"meta": {
"request_id": "req_8f2ac1",
"data_as_of": "2026-07-08T13:05:12Z",
"count": 2,
"next_cursor": "eyJzIjoiMjAyNi0wNy0wOFQyMDo0NjowMFoifQ",
"total": 1180,
"filter": {
"name": null,
"sort": "runs",
"min_runs": 100,
"active": false
},
"coverage": {
"counted": [
{
"region": "GB",
"years": [
2018,
2019,
2020,
2021,
2022,
2023,
2024,
2025,
2026
]
},
{
"region": "IE",
"years": [
2026
]
}
],
"not_counted": [
{
"region": "AU",
"years": [
2022,
2023,
2024,
2025,
2026
],
"known_pct": {
"2022": 0,
"2023": 0,
"2024": 0,
"2025": 0,
"2026": 0
},
"reason": "No sire or dam is held for these dogs."
},
{
"region": "IE",
"years": [
2019,
2020,
2021,
2022,
2023,
2024,
2025
],
"known_pct": {
"2019": 0,
"2020": 0,
"2021": 0.2,
"2022": 1.6,
"2023": 7.1,
"2024": 22.6,
"2025": 60.3
},
"reason": "Breeding is on record for only part of these fields."
}
],
"rule": "A region's year is counted once breeding is on record for 95% of its runs. It is measured again at every build, so a year joins by itself.",
"built_at": "2026-09-22T08:56:36+00:00",
"rebuilt": "weekly"
}
},
"data": [
{
"dam_id": 3187649021,
"name": "Ballymac Notoyou",
"offspring": 17,
"active_offspring": 6,
"first_run": "2021-05-12",
"last_run": "2026-09-19",
"runs": 1244,
"wins": 268,
"win_pct": 21.54,
"places": 713,
"place_pct": 57.32,
"priced_runs": 1240,
"priced_wins": 267,
"expected_wins": 245,
"actual_vs_expected": 1.09,
"timed_runs": 1001,
"early_pace_pct": 21.6,
"debut_runs": 16,
"debut_wins": 5,
"debut_win_pct": 31.25
},
{
"dam_id": 2250931774,
"name": "Droopys Blossom",
"offspring": 14,
"active_offspring": 5,
"first_run": "2020-10-02",
"last_run": "2026-09-20",
"runs": 1107,
"wins": 214,
"win_pct": 19.33,
"places": 610,
"place_pct": 55.1,
"priced_runs": 1103,
"priced_wins": 213,
"expected_wins": 210.9,
"actual_vs_expected": 1.01,
"timed_runs": 882,
"early_pace_pct": 18.4,
"debut_runs": 14,
"debut_wins": 3,
"debut_win_pct": 21.43
}
]
}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.
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
Rebuilt weekly from the archive, so a race run today reaches these figures at the next rebuild; meta.coverage.built_at says when the current figures were made. meta.total is the number of dams matching the filters.