Documentation / Breeding

Dam statistics

GET/v1/dams/{dam_id}/stats

Available on Live Plus only

A Live key reaches the other 42 endpoints and receives 403 upgrade_required here. Compare plans

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.

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
dam_id path integer yes The dam identifier. It is the dam_id on every row of Dams, and it stays the same from one weekly rebuild to the next.

Request

curl "https://api.greyhoundapi.com/v1/dams/1424708384/stats" \
  -H "X-API-Key: $GAPI_KEY"
<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/dams/1424708384/stats');
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/1424708384/stats', {
  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/1424708384/stats', {
      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/1424708384/stats",
    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",
        "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",
        "kind": "dam",
        "offspring": 17,
        "active_offspring": 6,
        "first_run": "2021-05-12",
        "last_run": "2026-09-19",
        "overall": {
            "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
        },
        "by_region": [
            {
                "region": "GB",
                "runs": 1198,
                "wins": 259,
                "win_pct": 21.62,
                "places": 687,
                "place_pct": 57.35,
                "priced_runs": 1194,
                "priced_wins": 258,
                "expected_wins": 234.5,
                "actual_vs_expected": 1.1,
                "timed_runs": 961,
                "early_pace_pct": 21.9,
                "debut_runs": 15,
                "debut_wins": 5,
                "debut_win_pct": 33.33
            },
            {
                "region": "IE",
                "runs": 46,
                "wins": 9,
                "win_pct": 19.57,
                "places": 26,
                "place_pct": 56.52,
                "priced_runs": 46,
                "priced_wins": 9,
                "expected_wins": 9.2,
                "actual_vs_expected": 0.98,
                "timed_runs": 40,
                "early_pace_pct": 15,
                "debut_runs": 1,
                "debut_wins": 0,
                "debut_win_pct": 0
            }
        ],
        "by_distance": [
            {
                "band": "standard",
                "metres": "350 to 574",
                "runs": 1032,
                "wins": 227,
                "win_pct": 22,
                "places": 596,
                "place_pct": 57.75,
                "priced_runs": 1029,
                "priced_wins": 226,
                "expected_wins": 203.6,
                "actual_vs_expected": 1.11,
                "timed_runs": 830,
                "early_pace_pct": 22.4,
                "debut_runs": 14,
                "debut_wins": 5,
                "debut_win_pct": 35.71
            },
            {
                "band": "staying",
                "metres": "575 to 749",
                "runs": 151,
                "wins": 28,
                "win_pct": 18.54,
                "places": 82,
                "place_pct": 54.3,
                "priced_runs": 150,
                "priced_wins": 28,
                "expected_wins": 27.5,
                "actual_vs_expected": 1.02,
                "timed_runs": 121,
                "early_pace_pct": 14.9,
                "debut_runs": 0,
                "debut_wins": 0,
                "debut_win_pct": null
            }
        ],
        "by_trap": [
            {
                "traps": "1-2",
                "runs": 452,
                "wins": 104,
                "win_pct": 23.01,
                "places": 267,
                "place_pct": 59.07,
                "priced_runs": 451,
                "priced_wins": 104,
                "expected_wins": 92.9,
                "actual_vs_expected": 1.12,
                "timed_runs": 363,
                "early_pace_pct": 27.3,
                "debut_runs": 6,
                "debut_wins": 3,
                "debut_win_pct": 50
            }
        ],
        "by_age": [
            {
                "age": "under-2",
                "label": "under 2 years",
                "runs": 201,
                "wins": 49,
                "win_pct": 24.38,
                "places": 118,
                "place_pct": 58.71,
                "priced_runs": 200,
                "priced_wins": 49,
                "expected_wins": 42.6,
                "actual_vs_expected": 1.15,
                "timed_runs": 160,
                "early_pace_pct": 23.1,
                "debut_runs": 13,
                "debut_wins": 5,
                "debut_win_pct": 38.46
            }
        ],
        "by_track": [
            {
                "track": "Towcester",
                "runs": 301,
                "wins": 66,
                "win_pct": 21.93,
                "places": 170,
                "place_pct": 56.48,
                "priced_runs": 300,
                "priced_wins": 66,
                "expected_wins": 60,
                "actual_vs_expected": 1.1,
                "timed_runs": 241,
                "early_pace_pct": 22.8,
                "debut_runs": 5,
                "debut_wins": 2,
                "debut_win_pct": 40
            }
        ],
        "top_offspring": [
            {
                "dog_id": 1655044329,
                "name": "Full Monty",
                "runs": 64,
                "wins": 21,
                "win_pct": 32.81,
                "places": 44,
                "first_run": "2024-03-11",
                "last_run": "2026-09-19"
            },
            {
                "dog_id": 2893016637,
                "name": "Ballymac Notnow",
                "runs": 88,
                "wins": 19,
                "win_pct": 21.59,
                "places": 51,
                "first_run": "2023-06-02",
                "last_run": "2026-08-30"
            }
        ]
    }
}

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/dams/{dam_id}/stats

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.

Common uses

First-time runners

A dog on debut has no form of its own. Its dam's debut_win_pct, with the number of debuts behind it, is as close as the record gets to that dog, and the sire's sits beside it.

Pedigree features for a model

Each split is a feature a model can use directly: the staying record for a dog stepping up in trip, the trap 1-2 record for a railer drawn inside. Every rate carries its counts, so thin evidence can be weighted down rather than trusted.

Breeding and sales research

actual_vs_expected separates offspring that win often from offspring that win more often than the market expects, which is the question behind a stud fee or a sale price. active_offspring and last_run show whether the record is current.

Notes

Rebuilt weekly from the archive; meta.coverage.built_at says when. Each split adds up to the overall figures, except that a run with no trap or no birth date on record is left out of by_trap or by_age. A dam not in the figures answers 404 not_found, with a message naming what is covered.