The full reference is below, examples and all. Every /v1 call needs a key: sign in with Google, create one in your account, and start on 10 free points. 1 call = 1 point = 1 cent. The same key opens the MCP server, where the reference tools and the last week of results answer with no key at all.
Read-only access to the whole database — the same queries the site runs, as JSON. Base URL https://fdb4.io. Authenticate with Authorization: Bearer <key>. Every endpoint is GET; nothing here writes.
The same database spoken to AI clients over the Model Context Protocol, at https://fdb4.io/mcp. It is priced differently from this page, which is why it has one of its own: 6 of its 11 tools answer with no key at all — the country, competition and team lookups, the no-draw run a team is on, and the last few days of results — while the draw models, the all-time leaderboard, head-to-head records and the archive behind that week cost a point each, from this same balance. Nothing on /v1 is free.
Every draw reading held for one fixture: the goals model, the draw rate at its Elo gap, the published blend, the logistic model with its 95% band, and the market price where one exists. Identify the match by id, or by team plus an optional date.
curl -sS "https://fdb4.io/v1/draw-model?team=arsenal" \ -H "Authorization: Bearer $FDB_API_KEY" \ -H "Accept: application/json"
Illustrative shape — a couple of rows, not live data.
{
"data": {
"match": {
"id": 91244,
"date": "2026-04-12",
"status": "SCHEDULED",
"home_team": {
"id": 431,
"slug": "arsenal",
"name": "Arsenal"
},
"away_team": {
"id": 447,
"slug": "chelsea",
"name": "Chelsea"
},
"competition": {
"id": 12,
"name": "Premier League",
"edition_id": 208
},
"score": {
"home": null,
"away": null
},
"is_draw": false
},
"goals_model": {
"p_draw": 0.2614,
"p_home": 0.4488,
"p_away": 0.2898,
"expected_goals": {
"home": 1.512,
"away": 1.204
}
},
"elo": {
"home_rating": 1902.4,
"away_rating": 1874.1,
"gap": 93.3,
"pool": "club",
"band": "75–99",
"band_matches": 48211,
"historical_draw_rate": 0.2419,
"is_pre_kickoff": false
},
"blend": {
"p_draw": 0.2573,
"goals_model_share": 80,
"elo_gap_share": 20
},
"logistic": {
"p_draw": 0.2641,
"p_uncalibrated": 0.2638,
"confidence_95": {
"low": 0.2619,
"high": 0.2664
},
"is_forecast": true
},
"market": {
"draw_odds": 3.75,
"source": "PSD",
"is_closing": false,
"implied_p_draw": 0.26667
},
"fit": {
"fitted_at": "2026-09-21 22:14:07",
"trained_from": "1871-11-11",
"trained_until": "2026-09-20",
"matches": 544576,
"isotonic_knots": 184,
"coefficients": [
{
"feature": "intercept",
"coefficient": 1.41029,
"std_error": 0.02935,
"z": 48.1
}
]
},
"caveats": [
"Descriptive statistics over historical results, not betting advice."
]
}
}
| Name | Type | Description |
|---|---|---|
| match | integer | Match id. Required unless team is given. |
| team | string | Team id or slug. Required unless match is given. |
| date | date | With team: the match date (YYYY-MM-DD). Omit for that team's next fixture. |
- Sign in with Google — no password, no form, nothing to wait for.
- Create a key in your account. It is shown once, so store it somewhere safe.
- Send it on every request as
Authorization: Bearer <key>— tohttps://fdb4.io/v1or tohttps://fdb4.io/mcp.
1 call = 1 point = 1 cent, on the API and on the paid half of the MCP server — the free MCP tools cost nothing whether or not you hold a key. Out of points? Top up — you pick the amount, there are no packages and no subscription. Bring someone with you and earn 10% of every point they are ever credited. No refunds, ever: the product is data, and data cannot be returned.
Existing keys not attached to an account are not charged until migrated.
The bearer token is missing, unknown, revoked or expired.
The account behind the key has fewer than one point left. 1 call = 1 point = 1 cent. New accounts get 10 free points and +2 every month you sign in. Existing keys not attached to an account are not charged until migrated.
{
"error": {
"code": "insufficient_balance",
"balance": 0,
"top_up_url": "https://fdb4.io/account/balance",
"monthly_grant": 2
}
}
Over the per-minute limit. The response carries a Retry-After header; a throttled request costs no points.