🔒
The API is a paid add-on — the MCP server has a free tier

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.

Sign in & get a key
API — REST JSON v1 · read-only

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.

Base URL fdb4.io v1
Endpoints 12 all GET
Rate limit 120/min per key
Format JSON UTF-8
MCP server — a separate page, and a free tier 11 tools · 6 free

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.

MCP server & free tools ›
Endpoints 12
/v1/draw-model GET

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.

request
curl -sS "https://fdb4.io/v1/draw-model?team=arsenal" \
  -H "Authorization: Bearer $FDB_API_KEY" \
  -H "Accept: application/json"
example response

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."
        ]
    }
}
parameters
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.
Getting a key
  1. Sign in with Google — no password, no form, nothing to wait for.
  2. Create a key in your account. It is shown once, so store it somewhere safe.
  3. Send it on every request as Authorization: Bearer <key> — to https://fdb4.io/v1 or to https://fdb4.io/mcp.
On sign-up 10 pts free, no card
Every month +2 pts if you sign in
Per call 1 pt = 1 cent
Referrals 10% of every point

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.

Errors 3
401 No valid key

The bearer token is missing, unknown, revoked or expired.

402 Out of points

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
    }
}
429 Rate limited

Over the per-minute limit. The response carries a Retry-After header; a throttled request costs no points.