HORSERACINGAPI --:--:-- UTC Sign inFree key

Documentation / Results

Results by date

Every result for any day since 1 January 2022, meeting by meeting.

GET/v1/results/{date}
Try itRuns against the real API with your key
No key yet? The free key is made the moment you sign in, and appears here by itself.Get a free key
required
optional
optional
optional
https://api.horseracingapi.org/v1/results/2026-10-20?country=FR&per_page=1

Press Run to see the live answer here.

curl "https://api.horseracingapi.org/v1/results/2026-10-20?country=FR&per_page=1" \
  -H "X-API-Key: hra_live_…"

Parameters

NameIn · typeRequiredWhat it is
datepath · dateYesThe day, YYYY-MM-DD, from 2022-01-01.
countryquery · stringNoOnly this nation: USA, GB, IRE, FR or RSA.USAGBIREFRRSA
per_pagequery · integerNoHow many to a page, 1 to 25. Default 10.
pagequery · integerNoWhich page, from 1.

Returns

FieldTypeWhat it holds
meeting_idstringOur own id for the meeting.
course_idstringThe course.
coursestringThe course name.
countrystringUSA, GB, IRE, FR or RSA.
datestringThe course's own calendar day.
goingstringThe going for the meeting.
surfacestringTurf, Dirt or All Weather.
racesarrayEvery race at the meeting in full, with its finishing order.

Example answer

{
  "data": [
    {
      "meeting_id": "mt_31tcke0x",
      "course_id": "cr_t6pv23df",
      "course": "Bordeaux Le Bouscat",
      "country": "FR",
      "date": "2026-10-20",
      "going": "Soft",
      "surface": "Turf",
      "races": [
        {
          "race_id": "rc_9c9cmvvp",
          "meeting_id": "mt_31tcke0x",
          "course_id": "cr_t6pv23df",
          "course": "Bordeaux Le Bouscat",
          "country": "FR",
          "date": "2026-10-20",
          "time": "09:20",
          "off_time": "09:20:42",
          "name": "Prix De Suffren Stakes",
          "race_type": "Flat",
          "class": null,
          "distance": "1m 1f 97y",
          "going": "Soft",
          "surface": "Turf",
          "handicap": false,
          "runners": 6,
          "result_available": true,
          "winning_time": "2:09.51",
          "finishing_order": [
            {
              "position": 1,
              "status": "finished",
              "distance_beaten": null,
              "cloth": 3,
              "draw": 1,
              "horse_id": "hs_yrjp3fkv",
              "horse": "Drumard",
              "age": 5,
              "weight": "9-2",
              "jockey_id": "jk_3k4knfq5",
              "jockey": "I Mendizabal",
              "trainer_id": "tr_aawg032s",
              "trainer": "E Libaud",
              "owner_id": "ow_8d2tqgw5",
              "owner": "Hyperion Sarl"
            },
            {
              "position": 2,
              "status": "finished",
              "distance_beaten": "Head",
              "cloth": 1,
              "draw": 4,
              "horse_id": "hs_gv4m13aa",
              "horse": "Reach The Sky",
              "age": 4,
              "weight": "9-6",
              "jockey_id": "jk_2k91gz18",
              "jockey": "H Besnier",
              "trainer_id": "tr_e9xaq4z5",
              "trainer": "P Cottier",
              "owner_id": "ow_wk8mjvgp",
              "owner": "Gousserie Racing/ec D'haspel"
            },
            "… 4 more"
          ]
        },
        "… 7 more"
      ]
    }
  ],
  "meta": {
    "plan": "results",
    "window": "2022-01-01 to now",
    "data_as_of": "2026-10-21T21:19:06Z",
    "date": "2026-10-20",
    "count": 1,
    "page": 1,
    "per_page": 1,
    "total": 3,
    "total_pages": 3,
    "next_page": 2,
    "prev_page": null,
    "next_cursor": null
  }
}

Errors

StatusCodeWhen
400bad_requestA value is the wrong shape, or the key was sent in the address.
401unauthorizedNo key, or one we do not know.
403upgrade_requiredYour plan does not open this endpoint. It is on the Results plan.
404not_foundA date before 1 January 2022.
422unknown_parameterA parameter this endpoint does not take.
429rate_limitedOver your calls a minute. Retry after the seconds given.
429quota_exceededYour allowance is used. The answer says when it comes back.
503server_errorOn our side. Try again in a minute.