Documentation / Dogs

Search dogs

GET/v1/dogs/search

Available 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

NameInTypeRequiredDescription
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

200 OKapplication/json
{
    "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.

GET/v1/dogs/search

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.