DEVELOPERS

Football Prediction API — 1X2, Over/Under 2.5 & BTTS | Footalytics

Free football prediction API: win/draw/loss, over/under 2.5 and BTTS probabilities with confidence tiers for the Premier League, La Liga, Bundesliga, Serie A, Ligue 1 and the Champions League. JSON responses, 5 free calls and an MCP server for AI assistants.

A free football (soccer) prediction API for developers and AI assistants: JSON responses with win/draw/loss probabilities, over/under 2.5, both-teams-to-score, confidence tiers and team ratings for the Premier League, La Liga, Bundesliga, Serie A, Ligue 1, the Champions League and more. The same predictions are graded on our public accuracy ledger. Four endpoints cover the whole flow — predict a match, browse fixtures, look up team ratings, and read settled results.

  • 5 free API calls per account — no card required.
  • JSON in, probabilities out: 1X2, over/under 2.5, BTTS, likely scorelines and confidence tiers.
  • MCP server included — AI assistants plug straight in.
  • Every prediction graded in public with Brier scores.

Quick start

  1. Create a free key on the API keys page — every new account starts with 5 free API calls.
  2. Call the endpoint with your key:
    curl "https://footalytics.farvor.com/api/v1/predictions?home=Chelsea&away=Manchester%20United" \
      -H "Authorization: Bearer fxk_your_key"
  3. Read the prediction:
    {
      "provider": "Footalytics",
      "match": {
        "id": "ESPN-401879248", "home": "Chelsea", "away": "Manchester United",
        "league": "Premier League", "kickoff_utc": "2026-10-31T12:30:00Z", "status": "pending"
      },
      "prediction": {
        "outcome": { "home": 0.474, "draw": 0.267, "away": 0.259, "pick": "home" },
        "confidence": "medium",
        "xg": { "home": 1.61, "away": 1.13 },
        "top_scores": [{ "score": "1-1", "p": 0.127 }, { "score": "2-1", "p": 0.094 }],
        "over_2_5": 0.55, "btts": 0.52
      },
      "result": null,
      "links": {
        "match_page": "/match/401879248-chelsea-vs-manchester-united",
        "share": "https://footalytics.farvor.com/p/x4affkwufz2c",
        "accuracy": "https://footalytics.farvor.com/accuracy"
      }
    }

Authentication

Send your key as a bearer token on every request. The raw key is shown once at creation — store it safely and never commit it to source control. Revoke and re-create any time on the API keys page.

Authorization: Bearer fxk_your_key

GET /api/v1/predictions

One successful call costs 1 unit. Failed lookups cost nothing.

ParameterDescription
home + awayThe easy way. Team names, e.g. home=Chelsea&away=Manchester United (URL-encode spaces as %20). Resolved through the live 14-day fixture window; if several matches match, the one with a published prediction is served.
fixtureThe precise way, when you already know the id — any of 401879248, ESPN-401879248 or ESPN-eng.1-401879248. It is the only way to reach matches that already kicked off.
dateOptional, YYYY-MM-DD (UTC) — disambiguates rematches.
{
  "provider": "Footalytics",
  "match": {
    "id": "ESPN-401879248", "home": "Chelsea", "away": "Manchester United",
    "league": "Premier League", "kickoff_utc": "2026-10-31T12:30:00Z", "status": "pending"
  },
  "prediction": {
    "outcome": { "home": 0.474, "draw": 0.267, "away": 0.259, "pick": "home" },
    "confidence": "medium",
    "xg": { "home": 1.61, "away": 1.13 },
    "top_scores": [{ "score": "1-1", "p": 0.127 }, { "score": "2-1", "p": 0.094 }],
    "over_2_5": 0.55, "btts": 0.52
  },
  "result": null,
  "links": {
    "match_page": "/match/401879248-chelsea-vs-manchester-united",
    "share": "https://footalytics.farvor.com/p/x4affkwufz2c",
    "accuracy": "https://footalytics.farvor.com/accuracy"
  }
}

Coverage: official predictions are published up to 48 hours before kick-off. Every Premier League, La Liga, Bundesliga, Serie A, Ligue 1 and Champions League fixture is covered, plus the strongest pairings from other leagues. Team-name lookup covers matches still ahead in the live fixture window — for matches that already kicked off, pass the fixture id.

GET /api/v1/fixtures

Upcoming fixtures with their fixture ids — the discovery half of the flow: find the match here (has_prediction tells you whether a prediction is already published), then call predictions. Billed exactly like predictions.

ParameterDescription
teamTeam-name substring, e.g. team=Arsenal — matches home or away.
leagueESPN key (eng.1) or league slug (premier-league).
dateOptional, YYYY-MM-DD (UTC).
limitOptional, default 20, max 50.

At least one of team / league is required.

curl "https://footalytics.farvor.com/api/v1/fixtures?league=eng.1&limit=3" \
  -H "Authorization: Bearer fxk_your_key"
Response:
{
  "provider": "Footalytics",
  "fixtures": [
    {
      "fixture": "ESPN-401879251", "home": "AFC Bournemouth", "away": "Leeds United",
      "competition": "Premier League", "kickoff_utc": "2026-10-31T15:00Z",
      "has_prediction": false,
      "links": { "match_page": "/match/401879251-afc-bournemouth-vs-leeds-united" }
    }
  ]
}

GET /api/v1/teams

Team profiles from our ratings table: the Elo-style rating behind every prediction.

ParameterDescription
nameTeam-name substring, min 2 characters, e.g. name=arsenal.
leagueOptional filter, ESPN key or slug.
limitOptional, default 20, max 50.

At least one of name / league is required.

curl "https://footalytics.farvor.com/api/v1/teams?name=arsenal" \
  -H "Authorization: Bearer fxk_your_key"
Response:
{
  "provider": "Footalytics",
  "teams": [
    {
      "id": "359", "name": "Arsenal", "league": "eng.1", "league_name": "Premier League",
      "rating": 1971, "games": 27, "ratings_updated_at": "2026-10-28T13:00:23Z"
    }
  ]
}

GET /api/v1/results

The settled record: real scores next to what our model predicted, graded market by market — the same rows the public accuracy ledger is built on.

ParameterDescription
teamTeam-name filter, e.g. team=Chelsea.
leagueESPN key or slug.
fixtureSingle fixture id.
limitOptional, default 10, max 20.

At least one of team / league / fixture is required.

curl "https://footalytics.farvor.com/api/v1/results?team=Chelsea&limit=3" \
  -H "Authorization: Bearer fxk_your_key"
Response:
{
  "provider": "Footalytics",
  "results": [
    {
      "fixture": "ESPN-401878764", "home": "Sunderland", "away": "Leeds United",
      "competition": "Premier League", "kickoff_utc": "2026-10-25T16:30:00Z",
      "result": { "home_goals": 0, "away_goals": 0 },
      "our_prediction": {
        "outcome": { "home": 0.398, "draw": 0.277, "away": 0.326, "pick": "home" },
        "confidence": "low", "actual": "draw",
        "hit_1x2": false, "hit_over_2_5": false, "hit_btts": false, "brier": 0.787
      },
      "links": {
        "match_page": "/match/401878764-sunderland-vs-leeds-united",
        "share": "https://footalytics.farvor.com/p/vny7wa2tabh4"
      }
    }
  ]
}

Credits & rate limits

The API has its own free allowance: 5 calls on any endpoint — predictions, fixtures, teams, results — granted once per account. After that, credits (the same purchased credits used in site chat) bill every successful call; failed lookups cost nothing. The site's free prediction credits are separate and only work in site chat. Every response carries x-credits-remaining and x-credits-used so callers can watch the balance.

Rate limit: 30 calls per minute per key. When the balance runs out the API answers 402 pointing at top-up:

{
  "error": {
    "code": "E_INSUFFICIENT_CREDITS",
    "message": "You've used all 5 free API calls and your credits.",
    "get_more": [ { "method": "purchase", "url": "https://footalytics.farvor.com/pricing" } ]
  }
}

Errors

HTTPcodeMeaning
401E_INVALID_API_KEYUnknown or revoked key.
402E_INSUFFICIENT_CREDITSFree allowance and credits exhausted — see get_more.
403E_KEY_SCOPEKeys only work on the four API endpoints.
404E_PREDICTION_UNAVAILABLENo official prediction for this match (see coverage above).
404E_TEAM_NOT_FOUNDNo rated team matches the query.
404E_RESULT_NOT_FOUNDNo settled results match yet — official predictions are graded after full time.
422E_AMBIGUOUS_MATCHTeam names matched several fixtures — add date or fixture.
429E_RATE_LIMITEDRate limit hit — retry after the pause in Retry-After.

MCP — connect AI assistants

AI assistants (Claude, ChatGPT, Cursor, …) can call the same predictions through the Model Context Protocol. Point any MCP client at:

https://footalytics.farvor.com/mcp
Connect with an API key as the bearer token, or via OAuth one-click authorization — the client registers itself and asks for consent in the browser. Tools: get_match_prediction, list_fixtures, get_team, list_results (all share the same allowance) and get_account_credits (free).

Skill — Claude Code & agents

Prefer a file over a connector? Install the Agent-Skills-compatible skill and your agent calls the same four endpoints itself — same key, same allowance. Download straight from us (no GitHub needed):

mkdir -p ~/.claude/skills/footalytics && cd ~/.claude/skills/footalytics
for f in SKILL.md README.md README.zh-CN.md; do
  curl -fsSL "https://footalytics.farvor.com/skill/$f" -o "$f"
done
…or one file if your agent only needs the contract:
curl -fsSL https://footalytics.farvor.com/skill/SKILL.md -o SKILL.md
One-click download (zip, same files):footalytics-skill.zip

Let your AI install it

Copy this prompt and send it to your AI assistant — it will install the skill for you:

Install the "Footalytics" skill for me.

1. Download these three files from https://footalytics.farvor.com/skill/ and save them in
   ~/.claude/skills/footalytics/ (create the folder if needed):
   - SKILL.md
   - README.md
   - README.zh-CN.md
   Use curl or any fetch tool, e.g.:
   curl -fsSL https://footalytics.farvor.com/skill/SKILL.md -o SKILL.md
2. Read the installed SKILL.md and follow its Setup section: check whether the
   FOOTALYTICS_API_KEY environment variable is set. If it is not, ask me to create
   a free key at https://footalytics.farvor.com/api-keys and help me set it
   (e.g. export FOOTALYTICS_API_KEY="fxk_...").
3. When done, confirm what you installed and ask me for a football match to
   predict as a test. Do NOT invent match probabilities yourself - always use
   the Footalytics API per the skill.

The prompt tells your assistant to fetch the skill from this page's host, place it in the right folder and ask you for the API key. Nothing else is executed.

Attribution

When you share or display results, keep “Predictions by Footalytics” with a link to the site. Predictions are statistical probabilities, not certainties.