/v1/predictionsPredictions
Machine-learning-generated win and place probabilities for every runner in a race. An independent, quantitative view of each runner's chances based on form, class, pace, connections, and dozens of other factors.
Beta feature
What This Is (and Isn't)
This is not tips. It's a quantitative probability model. A runner with a 28% win probability in a 12-horse field is being rated well above the ~8% base rate, but that still means they lose roughly 7 times out of 10.
The value is in comparing these probabilities across the field and against market odds — not in treating the top-ranked runner as a guaranteed winner. The winProb values across all runners in a race sum to approximately 1.0 — they're probabilities, not arbitrary scores. While predictions are in beta their calibration is still being tuned, and the percentages can be flatter than they should be.
Pro only
Parameters
datestringYYYY-MM-DD format. Accepts dates within the last 30 days up to 7 days ahead. Requests outside this window return a 400.trackstringraceintegerrace_codestringgallopsgallops, harness, or greyhounds.countrystringauau, nz, hk, gb, us, and more.Code Examples
const response = await fetch(
'https://api.formfav.com/v1/predictions?' +
new URLSearchParams({
date: '2026-01-24',
track: 'randwick',
race: '8'
}),
{
headers: { 'X-API-Key': 'your_api_key_here' }
}
);
const data = await response.json();
// Find value: compare model probability to implied market odds
data.predictions.forEach(p => {
console.log(`${p.name}: ${(p.winProb * 100).toFixed(1)}% win`);
});Response Fields
datestringtrackstringraceNumberintegermodelVersionstringconfidencestringhigh, medium, or lowpredictionsarraypredictions[].numberintegerpredictions[].namestringpredictions[].winProbfloat (0-1)predictions[].placeProbfloat (0-1)placeProb sums to the number of places paid.predictions[].modelRankintegerConfidence Levels
The race-level confidence field indicates how decisive the model's assessment is:
| Level | What It Means |
|---|---|
high | Clear separation between runners — the model has a strong view on this race |
medium | Reasonable separation — the model can differentiate but there's uncertainty |
low | Tight, competitive field — probabilities are bunched and hard to separate |
A low confidence race isn't a bad prediction — it's an honest signal that the race is genuinely open.
What the Model Considers
Inputs
- •Recent form and consistency
- •Track and distance record
- •Class level and race fit
- •Running style and predicted race pace
- •Barrier position
- •Jockey and trainer performance
- •Weight carried
- •Condition and surface suitability
- •Fitness indicators
Deliberately Excluded
- •Live market odds — excluded to produce a fully independent view
- •Private information — only publicly available data is used
- •Post-generation changes — late scratchings, barrier changes, or track condition downgrades after predictions are generated are not factored in
Coverage
- •Thoroughbred, harness and greyhound racing
- •Predictions require sufficient historical data — debut runners or those with very limited form may have reduced signal
- •Predictions are generated after form data is loaded and are typically available before race day
Example Response
{
"date": "2026-01-24",
"track": "Randwick",
"raceNumber": 8,
"modelVersion": "v2.1.0",
"confidence": "medium",
"predictions": [
{
"number": 4,
"name": "Star Runner",
"winProb": 0.2834,
"placeProb": 0.7215,
"modelRank": 1
},
{
"number": 7,
"name": "Fast Track",
"winProb": 0.1923,
"placeProb": 0.5841,
"modelRank": 2
},
{
"number": 1,
"name": "Lucky Strike",
"winProb": 0.1247,
"placeProb": 0.4103,
"modelRank": 3
}
]
}