BloodHorse APIbloodhorse.com ↗
Access race results, stakes entries, horse profiles, racing leaders, and news from BloodHorse.com via a structured JSON API with 8 endpoints.
What is the BloodHorse API?
The BloodHorse API provides structured access to horse racing data across 8 endpoints, covering everything from dated race results and runner details to stakes entries and annual racing leaders. The get_race_results_list endpoint returns paginated race summaries with top-3 finishers, race type, distance, and purse for both North American and international races, making it a direct line into the data BloodHorse.com publishes for thoroughbred racing.
curl -X GET 'https://api.parse.bot/scraper/a86c6f40-0178-4067-bea8-c80c3648ea82/get_race_results_list?page=1®ion=region-america&end_date=07%2F11%2F2026&start_date=07%2F08%2F2026' \ -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 bloodhorse-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.
from parse_apis.bloodhorse_api import BloodHorse, Region, LeaderCategory
client = BloodHorse()
# List today's race results for North America
for race in client.races.list(region=Region.AMERICA):
print(race.title, race.subtitle)
# Get full race detail with all runners
detail = race.detail()
for runner in detail.runners:
print(runner.Pos, runner.Horse, runner.Earnings, runner.Jockey)
break
# Get racing leaders for horses
for leader in client.leaders.list(category=LeaderCategory.HORSES, year="2026"):
print(leader.rank, leader.name, leader.Earnings, leader.win_pct)
# Search for articles
for result in client.searchresults.search(query="Belmont Stakes"):
print(result.title, result.link)
# Get latest news and read full article text
for article in client.newsarticles.list():
print(article.title, article.summary)
full = article.full_text()
print(full.title, full.subtitle)
break
# List upcoming stakes entries
for entry in client.stakesentries.list():
print(entry.Race, entry.Track, entry.Distance, entry.Purse)
Retrieve a paginated list of race results for a given date range and region. Returns races with titles, links, properties (race type, distance, purse), and top 3 finishers. Defaults to today's date if no dates are provided.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| region | string | Region filter. Accepted values: 'region-america', 'region-intl'. |
| end_date | string | End date in MM/DD/YYYY format. Defaults to today's date. |
| start_date | string | Start date in MM/DD/YYYY format. Defaults to today's date. |
{
"type": "object",
"fields": {
"page": "string indicating current page number",
"races": "array of race summary objects with title, link, subtitle, properties, and top_3 fields"
},
"sample": {
"data": {
"page": "1",
"races": [
{
"link": "https://www.bloodhorse.com/horse-racing/race/usa/cd/2026/6/10/8",
"title": "Churchill Downs, Race 8, AOC",
"top_3": [
"Touchy",
"Rothko",
"Bullard"
],
"subtitle": "Churchill Downs, Wednesday, June 10, 2026, Race 8",
"properties": [
"AOC",
"1 mile",
"$134,000",
"3 yo's & up",
"Dirt",
"FT"
]
}
]
},
"status": "success"
}
}About the BloodHorse API
Race Results and Runner Details
The get_race_results_list endpoint accepts start_date and end_date parameters in MM/DD/YYYY format and an optional region filter (region-america or region-intl). It returns a paginated array of race summaries, each with a title, subtitle, properties (race type, distance, purse), and a top_3 field listing the leading finishers. To drill into a specific race, pass the race's link field to get_race_detail, which returns all runners with their finishing Pos, Earnings, Jockey, Trainer, Owner, and Breeder.
Stakes Entries and Racing Leaders
The get_stakes_entries endpoint returns upcoming North American stakes races with Date, Race, Track, Grade, Distance, Surface, and Purse fields — useful for tracking graded stakes schedules without filtering parameters. The get_racing_leaders endpoint accepts a year and a category (horses, owners, trainers, or jockeys) and returns a ranked table with stats like Starts, Wins, Places, Shows, Earnings, and Win%. Horse entries in those rankings include a Horse_link field that can be fed directly into get_horse_profile.
Horse Profiles and News
get_horse_profile takes a full profile URL and returns the horse's name, owner, jockey, trainer, breeder, and a properties array covering attributes like color and birth year. On the editorial side, get_latest_news returns an array of articles with title, link, and summary fields; get_article_detail accepts an article URL and returns the full text, title, and subtitle. A general search_site endpoint accepts a keyword query and returns matching results across articles, races, and horses.
The BloodHorse API is a managed, monitored endpoint for bloodhorse.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bloodhorse.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 bloodhorse.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?+
- Track daily thoroughbred race results by date range and region using
get_race_results_listwithstart_date/end_datefilters. - Build a graded stakes calendar by pulling
get_stakes_entriesdata includingGrade,Surface,Distance, andPursefor upcoming North American races. - Compile jockey or trainer performance tables using
get_racing_leaderswithcategoryset tojockeysortrainersand a specificyear. - Enrich horse records with pedigree and ownership details by chaining
get_racing_leadersresults intoget_horse_profilevia theHorse_linkfield. - Monitor full race-day breakdowns including every runner's earnings, jockey, and breeder using
get_race_detailfor a given race URL. - Aggregate BloodHorse editorial coverage for a topic by searching with
search_siteand then fetching full article text viaget_article_detail.
| 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 BloodHorse have an official public developer API?+
What does `get_race_results_list` return and how do I filter by region?+
title, subtitle, properties array (covering race type, distance, and purse), and a top_3 field. Pass region-america or region-intl to the region parameter to restrict results. Use start_date and end_date in MM/DD/YYYY format to set the date window; both default to today if omitted.Does the API cover historical racing leaders beyond the current year?+
get_racing_leaders endpoint accepts an optional year parameter, so you can request leader tables for prior years across all four categories: horses, owners, trainers, and jockeys.Does the API return past performances or speed figures for individual horses?+
get_horse_profile returns ownership, pedigree properties, and connections. get_race_detail provides per-race finishing positions and earnings. Past performance charts and speed figures are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting that data if it appears on a horse's detail page.Are international race results available, and how complete is the coverage?+
get_race_results_list endpoint supports an region-intl filter for international races alongside the North American region-america filter. The get_stakes_entries endpoint covers North American stakes only and does not include international entries. You can fork the API on Parse and revise it to add a dedicated international stakes entries endpoint.