Documentation / Guides
What a race carries
Forty four fields, in the order they become known.
A race accumulates information in stages, and knowing which stage a field arrives at explains most of the nulls you will see. Nothing here is missing; it either has not happened yet or was never published.
When it is declared
Known days before the race. The shape of the contest.
course,date,race_time,distance,run_type,surfaceclass,handicap,age_band,prize- Per runner:
horse,trainer,jockey,owner,weight,draw,headgear,official_rating,form
draw is null in jumps racing by design. There is no stall, so
there is no draw, and returning a zero would be worse than a null.
On the morning
goingandweather, which belong to the meeting rather than the race and are returned once- Non-runners removed from the field
price_path.opening, where the jurisdiction published an opening price
At the off
spandsp_decimalon every runnerbook_percentageon the race, being those prices summedfavouriteandmarket_position, both derived by us from the prices, because the source leaves them empty on a settled raceprice_path.touchedandprice_path.drift
Once it has run
positionon each runner, or null where the jurisdiction publishes only placingscasualtywhere a runner did not complete: PulledUp, Fell, UnseatedRider, BroughtDown, RefusedToRace or RanOutwinning_time,dividends,prizesresult_availableflips true
Later still
Two things arrive on a separate pass behind the results crawl, because they live on the horse profile rather than on the race.
sire,damanddamsirebeaten_distanceper runner
A null in either means the pass has not reached that horse yet, not that the value is unknown. Coverage climbs daily.
How to tell three kinds of null apart
This is the whole point of the guide.
| You see | It means | How to confirm |
|---|---|---|
position null, casualty set |
The horse did not complete | The casualty reason is the confirmation |
position null, casualty null, race settled |
The jurisdiction published placings only | /v1/countries position_pct for that region |
position null, result_available false |
Not run or not settled yet | The race status |
official_rating null |
Not published there, or outside 0–200 and dropped as a sentinel | Coverage |
price_path.opening null |
No opening price published | price_path.source says which kind you have |
sire null |
Pedigree pass has not reached this horse | Re-fetch later; it will fill in |
Fields we derive
Stated so you know what is ours rather than the source's.
sp_decimal, computed once at load so you are not parsing fractions per rowimplied, one over the decimal pricebook_percentage, those summed across the fieldfavouriteandmarket_position, ranked on price with joint favourites sharing rank onedays_since_previouson a form lineexpectedon the statistics endpoints, which isimpliednormalised so a field sums to one rather than to the book percentage