Equibase APIequibase.com ↗
Access horse profiles, race results, track entries, speed figures, and leader stats from Equibase.com via a structured JSON API.
What is the Equibase API?
The Equibase API covers 7 endpoints that return horse racing data from Equibase.com, including horse profiles with career statistics and race history, past race results with exotic wager payoffs, upcoming track entries, E-Speed figure leaders, and earnings-ranked leaderboards for horses, jockeys, trainers, and owners. The get_horse_profile endpoint alone returns year-by-year starts, wins, earnings, and speed figures alongside a full historical race log.
curl -X GET 'https://api.parse.bot/scraper/aade7361-953e-4363-895f-0a2b28352de5/search_horse?name=Authentic&breed_type=TB' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace equibase-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Equibase Horse Racing SDK — search, profile, results, entries, leaders."""
from parse_apis.equibase_horse_racing_api import (
Equibase, LeaderType, Timeframe, BreedType, Track, Country, ResourceNotFound
)
client = Equibase()
# Search for a horse by name — limit caps total items returned.
for horse in client.horses.search(name="Authentic", breed_type=BreedType.TB, limit=3):
print(horse.horse_name, horse.yob, horse.sire_name)
# Drill-down: take the first match and fetch its full profile.
match = client.horses.search(name="Authentic", limit=1).first()
if match:
profile = client.horseprofiles.get(ref_no=str(match.ref_no))
print(profile.horse_name, profile.basic_info)
# Track entries: upcoming race cards.
for entry in client.trackentries.list(track=Track.CD, date="06/10/2026", limit=3):
print(entry.race_number, entry.race_type, entry.details)
# Race results: finishers and payoffs for a completed race.
result = client.raceresults.get(track=Track.CD, date="06/07/2026", race_num="1")
for finisher in result.finishers:
print(finisher.horse, finisher.win, finisher.place)
# Leaders: top jockeys by earnings this year.
for leader in client.leaders.list(type=LeaderType.JOCKEY, timeframe=Timeframe.YEAR, limit=3):
print(leader.rank, leader.earnings, leader.win_percentage)
# Typed error handling for a missing horse profile.
try:
client.horseprofiles.get(ref_no="99999999")
except ResourceNotFound as exc:
print(f"Horse not found: {exc}")
print("exercised: horses.search / horseprofiles.get / trackentries.list / raceresults.get / leaders.list")
Search for horses by name. Returns matching horses with reference numbers, sire/dam lineage, year of birth, sex, color, and registry information. Multiple matches are common for popular names; use ref_no from results to fetch full profiles.
| Param | Type | Description |
|---|---|---|
| namerequired | string | Horse name to search for |
| breed_type | string | Breed type filter. Accepted values: TB (Thoroughbred), QH (Quarter Horse). |
{
"type": "object",
"fields": {
"items": "array of horse objects with fields: horseName, refNo, sireName, damName, yob, sex, colorDesc, registry, breedType, areaId"
},
"sample": {
"data": {
"items": [
{
"sex": "H",
"yob": 2017,
"refNo": 10286142,
"areaId": "KY ",
"damName": "Flawless",
"registry": "T",
"sireName": "Into Mischief",
"breedType": "TB",
"colorDesc": "Bay",
"horseName": "Authentic"
}
]
},
"status": "success"
}
}About the Equibase API
Horse Search and Profiles
Use search_horse to find horses by name, optionally filtering by breed_type (TB for Thoroughbred, QH for Quarter Horse). Results include refNo, sire and dam names, year of birth, sex, color, and registry. Popular names often return multiple matches, so the refNo field is the key to pass into get_horse_profile. That endpoint returns two data structures: a stats array with per-year Starts, Firsts, Seconds, Thirds, Highest speed figure, and Earnings; and a history array of individual race records showing track, date, race type, finish position, and E-Speed figure.
Race Results and Track Entries
get_race_results takes a date (MM/DD/YYYY), a track abbreviation (e.g. CD for Churchill Downs, AQU for Aqueduct), and a race_num. It returns a finishers array with win/place/show payoffs per horse, a payoffs array covering exotic wager types and winning combinations, and a race_info string describing purse, distance, surface, and conditions. Results are available for past race days only. get_track_entries targets future or current race cards: it returns a races array with race number, race type, purse, distance, surface, post time, and number of starters — entries typically appear 1–2 days before the race date.
Leaders and Speed Figures
get_leaders returns earnings-ranked statistics for horses, jockeys, trainers, or owners controlled by type, breed, and timeframe (year or meet). Each record in stats includes rank, earnings, starts, win, place, show, winPercentage, topThreePercentage, and perStart. get_speed_figures returns the current-year E-Speed figure leaderboard with horseName, speedFigure, earnings, starts, win, and sireName for each entry.
Foal Crop Data
get_foals_scheduled surfaces foal crop statistics ranked by earnings. Each record includes horseName, sireName, sireReferenceNumber, speedFigure, earnings, starts, and win. Neither get_foals_scheduled nor get_speed_figures accept filter parameters in the current API — they return full datasets that you can sort or filter client-side.
The Equibase API is a managed, monitored endpoint for equibase.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when equibase.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official equibase.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a horse form guide by pulling career stats and race history via
get_horse_profileusingref_nofromsearch_horse. - Track exotic wager payoffs (exacta, trifecta, superfecta) for past races using the
payoffsarray fromget_race_results. - Display upcoming race cards with purse, distance, and post time for a given track using
get_track_entries. - Rank jockeys or trainers by win percentage and earnings for a current meet using
get_leaderswithtimeframe=meet. - Identify peak-performing horses by E-Speed figure for the current year using
get_speed_figures. - Compare foal crop earnings and speed figures by sire line using data from
get_foals_scheduled. - Power a handicapping tool that correlates a horse's highest annual speed figure with its earnings across years.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Equibase have an official developer API?+
What does `get_race_results` return beyond finish positions?+
get_race_results returns a finishers array with each horse's program number and win/place/show payoffs, a payoffs array listing exotic wager types, winning combinations, and payoff amounts, and a race_info string covering race type, purse, distance, surface, and eligibility conditions. It does not return individual fractional times or jockey/trainer assignments for finishers.Are individual horse entries (jockey, weight, morning-line odds) available for upcoming races?+
get_track_entries returns race-level data — race number, race type, purse, distance, surface, post time, and number of starters — but does not break out individual horse entries within each race. You can fork this API on Parse and revise it to add per-horse entry details for each race.How fresh is the data from `get_track_entries` and `get_race_results`?+
Can `get_leaders` be filtered by a specific track or state?+
get_leaders endpoint filters by type (horse, jockey, trainer, owner), breed (TB or QH), and timeframe (year or meet), but does not accept a track or state parameter. Results reflect national standings. You can fork this API on Parse and revise it to add track-level leader filtering.