🔒
The API is a paid add-on

The full reference is below, examples and all — and the same key opens the MCP server. Calling either needs a key: sign in with Google, create one in your account, and start on 10 free points. 1 call = 1 point = 1 cent.

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 11 all GET
Rate limit 120/min per key
Format JSON UTF-8
Endpoints 11
/v1/predictor GET

Teams ranked by draw likelihood, most "due" a draw first. Filters subset which teams are listed; the score and rank are global and never change with them.

request
curl -sS "https://fdb4.io/v1/predictor?type=club&limit=25" \
  -H "Authorization: Bearer $FDB_API_KEY" \
  -H "Accept: application/json"
example response

Illustrative shape — a couple of rows, not live data.

{
    "data": [
        {
            "rank": 1,
            "score": 0.81244,
            "team": {
                "id": 431,
                "slug": "arsenal",
                "name": "Arsenal",
                "type": "club"
            },
            "signals": {
                "played": 4820,
                "draws": 1204,
                "draw_pct": 0.2498,
                "current_no_draw_streak": 11,
                "max_no_draw_streak": 63,
                "avg_top_no_draw_streak": 28.4,
                "p50": 0.22,
                "p100": 0.24,
                "p_weighted": 0.232,
                "draw_debt": 2.55
            },
            "last_match_date": "2026-04-12"
        }
    ]
}
parameters
Name Type Description
type string national_team or club. Omit to rank both together.
recent boolean Only teams with a match in the last few months. Default true.
wc2026 boolean Restrict to the World Cup 2026 team group. Default false.
limit integer How many ranked teams to return, max 500. Default 100.
MCP server 10 tools · same key

The whole database as an MCP server, so Claude, Cursor and any other AI client can query it directly — no client code to write. Endpoint https://fdb4.io/mcp, streamable HTTP, authenticated with Authorization: Bearer <key>.

Same key, same balance, same rate limit. One key opens both doors and they draw on one account: an MCP tool call costs 1 point exactly like a REST request. Connecting and listing the tools are free — you are only charged when a tool actually answers something.

Claude Code
claude mcp add --transport http footdb https://fdb4.io/mcp \
  --header "Authorization: Bearer YOUR_KEY"
Claude Desktop / Cursor / anything with an mcpServers block
{
  "mcpServers": {
    "footdb": {
      "type": "http",
      "url": "https://fdb4.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}
curl — list the tools (free, no points charged)
curl -X POST https://fdb4.io/mcp \
  -H "Authorization: Bearer $FDB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Tool What it answers Arguments
predict_draws Rank teams by how overdue a draw is — the question this database exists to answer. type, recent, wc2026, limit
get_team_prediction How overdue a draw one named team is, plus the results that made it so. team*, recent, wc2026
top_streaks The all-time leaderboard of no-draw runs — the longest any team has gone without drawing. min, team_id, type, limit, page
get_team_streaks Every no-draw run one team has ever had, plus the one it is on now. team*
list_teams Find a team and its id — the lookup every other team tool depends on. q, type, letter, limit
get_team One team's profile and its all-time draw statistics. team*
list_tournaments Every competition covered — leagues, domestic cups, continental cups, World Cups — with how many matches and how many draws each one holds. tournament, limit
list_countries Every country in the database, with its FIFA code and id. q, limit
search_results Search the match archive: finished matches, newest first, with scores. team_id, competition_id, competition_item_id, outcome, type, from, to, limit, page
head_to_head The complete record between two teams, and every match they have ever played. a*, b*, type, item

* required. List tools return 25 rows by default with the full total beside them; each page of a paginated call costs its own point.

One deviation from the MCP spec, stated up front: its authorization section expects OAuth 2.1 with dynamic client registration. FOOTDB uses the same static bearer keys as the REST API instead — simpler, and how the API is already sold. Every client that can send a custom header works; a client that speaks only OAuth will not connect. Tell us if you need it.

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 the MCP server alike. 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.