Get a dog
/v1/dogs/{dog_id}Available on Live Live Plus
A greyhound's full profile: identity, colour, breeding, seasonality and career statistics including per-grade record and days since last run.
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 |
|---|---|---|---|---|
dog_id |
path | integer | yes | The dog identifier. |
Request
curl "https://api.greyhoundapi.com/v1/dogs/3514967427" \
-H "X-API-Key: $GAPI_KEY"<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/dogs/3514967427');
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/dogs/3514967427', {
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/dogs/3514967427', {
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/dogs/3514967427",
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/dogs/3514967427?key=$GAPI_KEY"<?php
$url = 'https://api.greyhoundapi.com/v1/dogs/3514967427' . (str_contains('https://api.greyhoundapi.com/v1/dogs/3514967427', '?') ? '&' : '?') . '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/dogs/3514967427?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/dogs/3514967427?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/dogs/3514967427",
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"
},
"data": {
"dog_id": 1655044329,
"name": "Full Monty",
"born": "2024-04-01",
"age_months": 27,
"sex": "d",
"colour": "bebd",
"season": null,
"sire": "Ballymac Anton",
"dam": "Ballymac Notoyou",
"career": {
"total_races": 12,
"total_wins": 5,
"win_pct": 41.67,
"by_grade": [
{
"grade": "S1",
"races": 3,
"wins": 1
},
{
"grade": "A2",
"races": 9,
"wins": 4
}
],
"first_run": "2025-09-14",
"last_run": "2026-06-30",
"days_since_last_run": 8
}
}
}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
Fetching more than one? Do not call this in a loop — /v1/dogs/search?ids=A-B-C returns up to 50 dogs in a single request, and counts as one against your rate limit. See batch requests. Note this endpoint also returns career aggregates and breeding, which the list form does not. For bitches, season carries the recorded seasonality value as published (a date, Suppressed, Unknown, or null).