Documentation / Races

Early pace

GET/v1/races/{race_id}/pace

Available on Live Plus only

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

Each runner's measured early split from past runs at this track over this exact distance, with the number of runs behind every figure and the runners we have no data for named rather than omitted.

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
race_id path integer yes The race identifier.

Request

curl "https://api.greyhoundapi.com/v1/races/3959843903/pace" \
  -H "X-API-Key: $GAPI_KEY"
<?php
$ch = curl_init('https://api.greyhoundapi.com/v1/races/3959843903/pace');
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/races/3959843903/pace', {
  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/races/3959843903/pace', {
      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/races/3959843903/pace",
    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": {
        "race_id": 1229082445,
        "track": {
            "track_id": 1400000014,
            "name": "Romford",
            "region": "GB",
            "timezone": "Europe/London"
        },
        "distance_m": 400,
        "grade": "A3",
        "is_handicap": false,
        "early_pace": [
            {
                "trap": 1,
                "dog_id": 1655044329,
                "dog_name": "Full Monty",
                "avg_first_split_s": 3.84,
                "best_s": 3.79,
                "runs": 4,
                "vs_field_s": -0.01
            },
            {
                "trap": 3,
                "dog_id": 1654595188,
                "dog_name": "Miami Yeats",
                "avg_first_split_s": 3.7,
                "best_s": 3.66,
                "runs": 5,
                "vs_field_s": -0.15
            },
            {
                "trap": 5,
                "dog_id": 1657712904,
                "dog_name": "Headford Eimear",
                "avg_first_split_s": 3.95,
                "best_s": 3.88,
                "runs": 3,
                "vs_field_s": 0.1
            }
        ],
        "field": {
            "avg_first_split_s": 3.85,
            "spread_s": 0.25,
            "with_data": 3,
            "without_data": [
                {
                    "trap": 4,
                    "dog_id": 1640101557,
                    "dog_name": "Savana Ruby",
                    "runs": 2,
                    "reason": "2 timed runs \u2014 below the 3 needed"
                },
                {
                    "trap": 6,
                    "dog_id": 1229081338,
                    "dog_name": "Ballyroe Bach",
                    "runs": 0,
                    "reason": "no timed runs at this track and distance"
                }
            ]
        },
        "scope": {
            "window": "last 18 months",
            "same_track": true,
            "same_distance": true,
            "handicaps": "excluded",
            "min_runs": 3,
            "note": null
        },
        "note": "Measured early splits from past runs at this track and distance. Nothing here rates a runner or forecasts this race."
    }
}

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/races/{race_id}/pace

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.