Search dogs
/v1/dogs/searchAvailable on Live Live Plus
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.
Authenticate with your key in the X-API-Key header —
see Authentication. Works with sandbox keys
inside the sandbox data window.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
name |
query | string | no | Name to match. Prefix and close-match lookups both work. |
sire |
query | string | no | Filter by sire name. |
dam |
query | string | no | Filter by dam name. |
sex |
query | string | no | d (dog) or b (bitch). |
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/dogs/search?name=Full%20Monty" \
-H "X-API-Key: $GAPI_KEY"<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/dogs/search?name=Full%20Monty');
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/search?name=Full%20Monty', {
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/search?name=Full%20Monty', {
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/search?name=Full%20Monty",
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
{
"meta": {
"request_id": "req_8f2ac1",
"data_as_of": "2026-07-08T13:05:12Z",
"count": 1,
"next_cursor": "eyJzIjoiMjAyNi0wNy0wOFQyMDo0NjowMFoifQ"
},
"data": [
{
"dog_id": 655044,
"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.