Netkeiba APIrace.netkeiba.com ↗
Access JRA race listings, race cards with runners/jockeys/weights, and official results with lap splits, payouts, and finishing order from netkeiba.com.
What is the Netkeiba API?
The race.netkeiba.com API exposes 3 endpoints covering JRA thoroughbred racing data from netkeiba.com. Use list_races to retrieve every race held on a given date grouped by meeting, get_race_card to pull declared runners with frame numbers, weights, equipment codes, and prize money for any 12-digit race_id, and get_race_result to fetch official finishing order, times, margins, lap splits, corner passing order, and pari-mutuel payouts for completed races.
curl -X GET 'https://api.parse.bot/scraper/48ae249f-a709-4c04-aaa5-71fafae286ae/list_races?date=2026-09-06' \ -H 'X-API-Key: $PARSE_API_KEY'
Lists every JRA race held on one calendar date, grouped by meeting (racecourse day). Each meeting carries its venue, meeting round/day, weather code and turf/dirt track conditions; each race carries its 12-digit race_id (the key accepted by get_race_card and get_race_result), race number, name, grade, start time, surface, distance and declared field size. A date with no racing returns an empty meetings list (race_count 0), which is a valid result. One request per call; no pagination.
| Param | Type | Description |
|---|---|---|
| daterequired | string | Calendar date of the racing day as an ISO date YYYY-MM-DD. JRA races are normally held on Saturdays, Sundays and holidays. |
{
"type": "object",
"fields": {
"date": "the requested ISO date",
"meetings": "array of meetings held that day; each has kaisai_id, meeting (site label), venue, meeting_round, meeting_day, weather_code (site weather icon code), turf_condition, dirt_condition and races",
"race_count": "total number of races across all meetings",
"meetings[].races": "array of races: race_id (12-digit key for get_race_card / get_race_result), race_number, race_name, grade (G1/G2/G3/OP or null), grade_code (raw site grade icon code, null for ordinary races), start_time (HH:MM), surface (turf/dirt/jump), distance_m, headcount, has_result (true when the site already links a result page)"
},
"sample": {
"data": {
"date": "2026-09-06",
"meetings": [
{
"races": [
{
"grade": null,
"race_id": "202606040201",
"surface": "jump",
"headcount": 7,
"race_name": "3歳以上障害未勝利",
"distance_m": 2880,
"grade_code": null,
"has_result": true,
"start_time": "10:05",
"race_number": 1
},
{
"grade": "G2",
"race_id": "202606040211",
"surface": "turf",
"headcount": 11,
"race_name": "紫苑S",
"distance_m": 2000,
"grade_code": "2",
"has_result": true,
"start_time": "15:45",
"race_number": 11
}
],
"venue": "中山",
"meeting": "4回 中山 2日目",
"kaisai_id": "2026060402",
"meeting_day": 2,
"weather_code": "03",
"meeting_round": 4,
"dirt_condition": "不",
"turf_condition": "重"
}
],
"race_count": 36
},
"status": "success"
}
}About the Netkeiba API
Race Listings by Date
list_races takes a single date parameter in ISO YYYY-MM-DD format and returns all JRA meetings scheduled that day. Each meeting object includes venue, meeting_round, meeting_day, weather_code, and separate track-condition codes for turf and dirt. Nested inside each meeting is an array of races, each carrying a race_id (the 12-digit key used by the other two endpoints), race_number, race_name, grade designation (G1/G2/G3/OP or null), and distance. The top-level race_count field gives the total across all meetings that day. JRA races run primarily on Saturdays and Sundays, so requests for weekday dates will typically return empty meeting arrays.
Race Cards (Shutuba)
get_race_card accepts a race_id and returns a full pre-race entry list. The race header includes surface (turf, dirt, or jump), distance_m, weather, grade, venue, meeting, headcount, and prize_money. Each row in the runners array covers frame_number, horse_number, horse_id, horse_name, horse marks (e.g. 地/外 for domestic/international), equipment (array of codes — B indicates blinkers), jockey_id, jockey_name, trainer_id, trainer_name, age, sex, weight_carried_kg, and the horse's declared weight_kg. Weather and track condition fields may be null before race day.
Race Results
get_race_result returns the official outcome for a completed race. The results array is ordered by finish_position (integer) and also carries finish_status — the site's raw Japanese text, which covers non-finishers such as 取消 (scratch), 除外 (exclusion), and 中止 (withdrawal). Per-runner fields include time, margin, popularity (market rank at race time), and winner_odds. The payouts array lists each bet type with bet_type_code, bet_type label, and per-combination numbers, payout_yen, and popularity. Lap timing is in lap_times, which contains a pace label (S/M/H — null for jump races) and a splits array of objects with distance_m, cumulative_time, and lap_time. Corner passing order is also included. Jump races omit lap splits.
The Netkeiba API is a managed, monitored endpoint for race.netkeiba.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when race.netkeiba.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 race.netkeiba.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 JRA race-day dashboard showing all meetings, venues, and graded races for a given date using list_races
- Populate a horse racing form guide with jockey, trainer, weight, and equipment data from get_race_card
- Analyse pace scenarios by processing lap_times.splits and pace labels from get_race_result
- Calculate historical payout distributions across bet types (win, place, exacta, trio) using the payouts array
- Track jockey or trainer performance by aggregating finish_position and winner_odds across multiple race results
- Detect non-finishers and scratches by filtering finish_status values such as 取消 and 中止 in result rows
- Cross-reference pre-race market rank (popularity) with actual finishing position to study market efficiency
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.