Documentation / Dogs

Layoff record

GET/v1/dogs/{dog_id}/layoff

Available on Live Plus only

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

How a greyhound has run after different lengths of time off, shown beside how greyhounds generally run after the same break — because most dogs race weekly and have very few runs after a long one.

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
dog_id path integer yes The dog identifier.

Request

curl "https://api.greyhoundapi.com/v1/dogs/3514967427/layoff" \
  -H "X-API-Key: $GAPI_KEY"
<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/dogs/3514967427/layoff');
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/layoff', {
  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/layoff', {
      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/layoff",
    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"
    },
    "data": {
        "dog_id": 1655044329,
        "name": "Full Monty",
        "region": "GB",
        "buckets": [
            {
                "days": "0-7",
                "description": "a week or less",
                "dog": {
                    "runs": 18,
                    "wins": 4,
                    "places": 11,
                    "win_pct": 22.22,
                    "place_pct": 61.11,
                    "avg_vs_par_s": 0.084,
                    "note": null
                },
                "all_dogs": {
                    "runs": 320294,
                    "win_pct": 18.5,
                    "place_pct": 55.64,
                    "avg_vs_par_s": 0.315,
                    "pace": {
                        "avg_split_vs_par_s": 0.0002,
                        "avg_closing_vs_par_s": -0.0177,
                        "runs_with_sectional": 92497
                    }
                }
            },
            {
                "days": "29-60",
                "description": "one to two months",
                "dog": {
                    "runs": 3,
                    "wins": 0,
                    "places": 1,
                    "win_pct": null,
                    "place_pct": null,
                    "avg_vs_par_s": null,
                    "note": "3 runs \u2014 too few for a rate, counts only."
                },
                "all_dogs": {
                    "runs": 11496,
                    "win_pct": 15.13,
                    "place_pct": 46.2,
                    "avg_vs_par_s": 0.344,
                    "pace": {
                        "avg_split_vs_par_s": 0,
                        "avg_closing_vs_par_s": 0.0903,
                        "runs_with_sectional": 7648
                    }
                }
            }
        ],
        "scope": {
            "min_runs_for_rate": 5,
            "population_window": "last 24 months, GB racing",
            "note": "Most greyhounds race weekly, so a dog has few runs after a long break. Its counts are shown regardless; the rate is suppressed below 5 runs and the population figures beside it give the comparison."
        },
        "note": "How this greyhound has run after different breaks, beside how greyhounds generally run after the same break. avg_vs_par_s is measured against the average winning time for each course, so it is not distorted by which tracks were run. Nothing here rates this greyhound or forecasts a future run."
    }
}

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/{dog_id}/layoff

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.