Free Football Fair-Odds API
The devigged fair odds of every match we track, plus our live bookmaker margin index — as clean JSON, free, no registration. Attribution (a link) required.
Endpoints
No key, no sign-up, HTTPS only. CORS is enabled on every /api/v1 endpoint (predictions, margins and badge): responses carry Access-Control-Allow-Origin: *, so you can call the API straight from a browser.
Example
curl https://tipsaudit.com/api/v1/predictions
{
"source": "tipsaudit.com — fair odds = sharpest market, devigged (margin removed)",
"license": "Free with attribution (link to tipsaudit.com)",
"docs": "https://tipsaudit.com/api",
"generated_at": "2026-10-15T04:45:36+00:00",
"methodology_version": "2.0",
"count": 501,
"counts_by_status": {"actionable": 63, "monitor": 52, "expired": 141,
"unconfirmed": 20, "none": 225},
"predictions": [{
"id": 9302,
"league": "Brazil Serie A",
"home": "Botafogo", "away": "Chapecoense-sc",
"kickoff_utc": "2026-10-17T21:00:00+00:00",
"fair_odds": {"home": 1.37, "draw": 6.08, "away": 9.58},
"fair_probabilities": {"home": 0.7311, "draw": 0.1645, "away": 0.1044},
"fair_source": "live",
"fair_read_at": "2026-10-15T03:34:39+00:00",
"status": "actionable",
"value": {"selection": "1", "best_soft_odds": 1.42, "bookmaker": "GTbets",
"fair_odds": 1.37, "price_gap": 0.0382, "edge": 0.0382},
"detected": {"selection": "1", "odds": 1.43, "price_gap": 0.017, "edge": 0.017,
"at": "2026-10-12T23:30:02+00:00", "origin": "live"},
"benchmark_read_at": "2026-10-15T03:34:39+00:00",
"url": "https://tipsaudit.com/match/9302/botafogo-vs-chapecoense-sc-2026-10-17"
}]
}
Fields
value.price_gapdetected.price_gap
How far the best soft-bookmaker price is above the margin-free fair price, worked out before the odds are rounded: 0.07 means 7% above fair. The value block uses the current prices; the detected block, the prices when the flag was recorded. It compares two prices; it is not expected profit.
value.edgedetected.edge
The same number as price_gap, under its old name. It stays so existing integrations keep working; new code should read price_gap.
status
Where the price gap on the match stands now, with the same states as on the site:
actionable — a gap of at least 1.5% at the current prices
monitor — gap under 1.5%, monitor only
expired — a gap we flagged earlier that the market has since closed
unconfirmed — A gap was seen on a price older than 90 minutes; we only flag prices we have re-read recently.
none — no value
Embeddable badge
Show our live record on your site or forum with two lines of HTML: value flags recorded when shown and sealed before kick-off, with their average CLV. The badge updates itself and links to the public track record — that link is the only attribution we ask for.
<script src="https://tipsaudit.com/widget.js" async></script> <div data-tipsaudit-badge></div>
Terms
Free for any use, including commercial, with visible attribution: link to tipsaudit.com wherever the data is displayed. Rate limit: 60 requests/minute. Data updates every ~5 minutes for predictions, every hour for margins. No warranty — see how the numbers are computed in our methodology. Methodology →