Professional is free while the API is in beta.Get a key
We're testing with a handful of major leagues right now. More leagues and competitions are coming soon.

Football predictions your code can read

We pull as much as we can get on every match from professional football data feeds: form, head-to-head, standings, odds, injuries, confirmed line-ups. We publish the whole of it, because a prediction is worth exactly what went into it. Then a top-end model reads all of it, the expensive kind, and writes up what it concluded: a match summary, every market with a probability, a confidence and a justification behind the pick, four graded bets from safe to value, plus the one it would actually take. You get all of that as JSON.

Pull today's fixtures, send one id back, and that is the whole call. The data it read comes out of the same key, in every competition we cover. Or let an agent do it over MCP.

Start free. No card required.

While we're in beta that key runs on the Professional limits, free.

The Daily Ticket

Every day the AI builds one ticket: one to three legs it rates highest across the day's fixtures, with the reasoning behind each one. You get today's next to the response your own code would read, then the last 30 days settled leg by leg. Each leg carries its kick-off time and, once the match starts, the score and the minute, so you can follow the ticket as it plays out. Free, and these are probabilities, not sure things.

Free tip · Today21 Jul

Combined odds 2.21

  • Man City vs Arsenal
    Pending

    Live1 – 067'

    Double Chance · Man City or Draw1.30

    City unbeaten at home this season; the draw cover absorbs a cagey top-of-table game.

  • Bayern vs Dortmund
    Pending

    07:45 PM

    Goals Over/Under · Over 2.51.70

    Six of the last seven Klassikers cleared 2.5; both attacks in strong scoring form.

Two short, well-covered legs. City rarely drop points at home to a rival, and the Klassiker runs high on goals. Combined, they land in a sensible band without stretching.

example response
{
  "get": "/daily-ticket/2026-07-21",
  "parameters": {
    "date": "2026-07-21"
  },
  "errors": [],
  "results": 1,
  "response": [
    {
      "ticketDate": "2026-07-21",
      "status": "PENDING",
      "combinedOdds": 2.21,
      "reasoning": "Two short, well-covered legs. City rarely drop points at home to a rival, and the Klassiker runs high on goals. Combined, they land in a sensible band without stretching.",
      "settledAt": null,
      "selections": [
        {
          "fixtureId": 101,
          "match": "Man City vs Arsenal",
          "market": "Double Chance",
          "pick": "Man City or Draw",
          "odd": 1.3,
          "justification": "City unbeaten at home this season; the draw cover absorbs a cagey top-of-table game.",
          "kickoff": "2026-07-21T17:00:00",
          "kickoffTimestamp": 1784653200,
          "status": "2H",
          "statusLong": "Second Half",
          "elapsed": 67,
          "homeGoals": 1,
          "awayGoals": 0,
          "result": null
        },
        {
          "fixtureId": 102,
          "match": "Bayern vs Dortmund",
          "market": "Goals Over/Under",
          "pick": "Over 2.5",
          "odd": 1.7,
          "justification": "Six of the last seven Klassikers cleared 2.5; both attacks in strong scoring form.",
          "kickoff": "2026-07-21T19:45:00",
          "kickoffTimestamp": 1784663100,
          "status": "NS",
          "statusLong": "Not Started",
          "elapsed": null,
          "homeGoals": null,
          "awayGoals": null,
          "result": null
        }
      ]
    }
  ]
}

Made-up matches. The fields, and the whole envelope, are what /daily-ticket sends back.

Previous tickets

Lost12 Jul

Combined odds 2.90

  • Chelsea vs Newcastle
    Lost

    0 – 1Full time

    Double Chance · Chelsea or Draw1.40

    Home edge on paper, but Newcastle nicked it on the counter.

  • Villarreal vs Betis
    Won

    2 – 2Full time

    Both Teams to Score · Yes1.55

    Both attacking sides; goals at each end as expected.

Ambitious three-leg ticket; two landed, one slipped.

Won13 Jul

Combined odds 1.72

  • Man Utd vs Everton
    Won

    2 – 1Full time

    Goals Over/Under · Over 1.51.30

    Almost always cleared by this fixture; both attacks in form.

Single-leg goals line with a wide data edge.

Won14 Jul

Combined odds 2.40

  • Juventus vs Fiorentina
    Won

    2 – 1Full time

    Double Chance · Juventus or Draw1.35

    Strong defensive base at home; unlikely to lose outright.

  • Sporting vs Braga
    Won

    2 – 1Full time

    Both Teams to Score · Yes1.78

    Both sides scoring freely; open end-to-end history.

A balanced two-leg ticket across two leagues.

Won15 Jul

Combined odds 1.95

  • Liverpool vs Brentford
    Won

    3 – 1Full time

    Double Chance · Liverpool or Draw1.20

    Rarely beaten at Anfield; the draw absorbs an off day.

  • Sevilla vs Cadiz
    Won

    1 – 0Full time

    Goals Over/Under · Under 3.51.62

    Low-tempo derby profile; goals scarce between these two.

One confident cover on a clear home favourite.

Lost16 Jul

Combined odds 2.05

  • PSG vs Nice
    Lost

    1 – 2Full time

    Match Winner · PSG1.40

    Dominant home record, but a red card flipped the game.

  • Inter vs Torino
    Won

    1 – 1Full time

    Double Chance · Inter or Draw1.47

    Solid at home; the draw cover kept the leg safe.

Favourite cover that ran into a shock result.

Won17 Jul

Combined odds 2.60

  • Napoli vs Atalanta
    Won

    3 – 1Full time

    Goals Over/Under · Over 2.51.60

    Both among the league's most open sides; high combined xG.

  • Leverkusen vs Freiburg
    Won

    2 – 1Full time

    Both Teams to Score · Yes1.62

    Leverkusen leaky at the back lately; Freiburg scoring on the road.

Two goals-market legs the numbers agreed on.

Won18 Jul

Combined odds 1.85

  • Real Madrid vs Getafe
    Won

    2 – 0Full time

    Draw No Bet · Real Madrid1.85

    Heavy quality gap at home; stake returned even if Getafe steal a draw.

Single strong leg. The model preferred it over forcing a combo.

Lost19 Jul

Combined odds 3.46

  • Ajax vs PSV
    Lost

    1 – 2Full time

    Match Winner · Ajax2.10

    Home form and expected-goals edge favoured Ajax, but PSV nicked it late.

  • Roma vs Lazio
    Won

    2 – 1Full time

    Both Teams to Score · Yes1.65

    Both derby sides carrying scoring threat; shaky at set pieces.

Higher-variance ticket: a home pick against a live underdog plus a both-teams-to-score leg.

Won20 Jul

Combined odds 2.24

  • Belgium vs Iran
    Won

    3 – 0Full time

    Double Chance · Belgium or Draw1.28

    Clear gap in squad quality; even a flat Belgium performance covers the draw.

  • Porto vs Benfica
    Won

    2 – 2Full time

    Goals Over/Under · Over 2.51.75

    Open derby profile, both sides pressing high, expected goals above the line.

A safe favourite cover paired with a goals line the data leaned toward.

Example tickets, not real results. The real one for today is published here every day.

What you get

Top divisions and the cups that go with them, and every one of them carries the same data. What the plan mostly changes is how many calls you get in a day. Only the whole-day call and the daily ticket need a paid key.

competitions
countries
Footballand nothing else

Every competition gets the same data and the same analysis. See the list before you pay for anything.

The window is today, the 2 days before and the 6 days after. We keep no history behind it, so this is not an archive to backtest a system on.

Match data

  • Fixtures and results
  • Head-to-head
  • Leagues and competitions
  • League standings
  • Betting odds
  • Teams
  • Team statistics
  • Team comparison
  • Squad lists
  • Player statistics
  • Starting line-ups and formations
  • Injuries

AI analysis

  • AI match analysis
  • Market probabilities
  • Bet picks
  • Every analysis for today, in one call

Daily ticket

  • Daily ticket
  • Daily ticket track record

Every field, and the competitions each one covers, is on the coverage page.

What you get in one prediction call

You send a fixture id with your key in the x-api-key header. What comes back is the full read of the match, not a single number.

The fields

lineupUsed
Whether this analysis was built after the starting line-ups were confirmed. The pass that has it true is the one to trust.
matchSummary
What the fixture is, in prose: what is at stake and what shape the two sides arrive in.
formAnalysis
Recent form read against the opponent, home and away split, not a single league position.
keyInsights
Five separate findings, key1 to key5. One idea each, no filler entries.
injuryImpact
Who is missing and what it actually costs the side, rather than a list of names.
riskAssessment
What could turn the read over: a rotated squad, a dead rubber, a referee who gives a lot of cards.
marketProbabilities[]
Per market: every selection with its odd and a 0 to 100 probability, a HIGH, MEDIUM or LOW confidence on the market, the recommended pick, and the justification for it.
safeBet, balancedBet, boldBet, valueBet
Four graded picks, each with its market, pick, odd, confidence and reasoning. Each one is null when the match does not support it, and valueBet only fills in where the odds look wrong.
recommendedBet
The one call, in the same shape as the four above. This is the only pick that is never null.

The call

terminal
curl -H "x-api-key: $AISPAPI_KEY" \
  "https://api.aisportspredictionsapi.com/predict?fixture=1035123"

The response

example response
{
  "get": "predict",
  "parameters": { "fixture": "1035123" },
  "errors": [],
  "results": 1,
  "response": [
    {
      "fixture": {
        "id": 1035123,
        "referee": null,
        "timezone": "UTC",
        "date": "2026-08-07T19:00:00+00:00",
        "timestamp": 1786129200,
        "venue": { "id": 707, "name": "Johan Cruijff ArenA", "city": "Amsterdam" },
        "status": { "long": "Not Started", "short": "NS", "elapsed": null, "extra": null }
      },
      "league": {
        "id": 88,
        "name": "Eredivisie",
        "country": "Netherlands",
        "logo": "...",
        "flag": "...",
        "season": 2026,
        "round": "Regular Season - 3",
        "standings": true
      },
      "teams": {
        "home": { "id": 194, "name": "Ajax", "logo": "...", "winner": null },
        "away": { "id": 197, "name": "PSV", "logo": "...", "winner": null }
      },
      "goals": { "home": null, "away": null },
      "score": {
        "halftime": { "home": null, "away": null },
        "fulltime": { "home": null, "away": null },
        "extratime": { "home": null, "away": null },
        "penalty": { "home": null, "away": null }
      },
      "analysis": {
        "lineupUsed": true,
        "matchSummary": "...",
        "formAnalysis": "...",
        "keyInsights": { "key1": "...", "key2": "...", "key3": "...", "key4": "...", "key5": "..." },
        "injuryImpact": "...",
        "riskAssessment": "...",
        "marketProbabilities": [
          {
            "market": "Goals Over/Under",
            "confidence": "HIGH",
            "options": [
              { "pick": "Over 2.5", "odd": 1.72, "probability": 64 },
              { "pick": "Under 2.5", "odd": 2.10, "probability": 36 }
            ],
            "recommended": "Over 2.5",
            "justification": "..."
          },
          {
            "market": "Match Winner",
            "confidence": "MEDIUM",
            "options": [
              { "pick": "Ajax", "odd": 2.05, "probability": 45 },
              { "pick": "Draw", "odd": 3.60, "probability": 26 },
              { "pick": "PSV", "odd": 3.20, "probability": 29 }
            ],
            "recommended": "Ajax",
            "justification": "..."
          }
        ],
        "safeBet": {
          "market": "Goals Over/Under",
          "pick": "Over 2.5",
          "odd": 1.72,
          "confidence": "HIGH",
          "justification": "...",
          "note": "..."
        },
        "balancedBet": {
          "market": "Match Winner",
          "pick": "Ajax",
          "odd": 2.05,
          "confidence": "MEDIUM",
          "justification": "...",
          "note": "..."
        },
        "boldBet": {
          "market": "Match Winner",
          "pick": "PSV",
          "odd": 3.20,
          "confidence": "LOW",
          "justification": "...",
          "note": "..."
        },
        "valueBet": {
          "market": "Match Winner",
          "pick": "Draw",
          "odd": 3.60,
          "confidence": "LOW",
          "justification": "...",
          "note": "..."
        },
        "recommendedBet": {
          "market": "Goals Over/Under",
          "pick": "Over 2.5",
          "odd": 1.72,
          "confidence": "HIGH",
          "justification": "...",
          "note": "..."
        }
      }
    }
  ]
}

Made-up fixture, made-up odds. Every other field, and the full shape, is what /predict actually sends back.

Or skip the client

The same API is an MCP server. Point Claude, Cursor or an agent of your own at it, and you ask about football in plain words while your assistant picks the tools and calls them.

terminal
claude mcp add --transport http aispapi https://api.aisportspredictionsapi.com/mcp --header "x-api-key: YOUR_KEY"

Then you just ask:

  • "What's today's daily ticket?"
  • "Give me the analysis for tonight's Arsenal match."
  • "Who plays today in the Premier League?"

One tool call is one request, out of the same daily allowance as a REST call. There is no second quota for MCP. All the tools and how to connect.

An agent can also read the whole API reference as one plain text file: /llms.txt

How you start, and what it costs

  1. Create an account

    An email and a password. No card, nothing to cancel.

  2. Generate a key

    One click in your dashboard. The key is shown once, so copy it then.

  3. Call the API

    Send it in the x-api-key header, over REST or from your MCP client.

Start free

Compare the plans in full. Every limit, and what each one includes.

Before you sign up

What date range does the API cover?

Today, the two days before it and the six days after. We keep no history behind that window, so this is a feed to build on rather than an archive to backtest a system against.

How often is the analysis refreshed?

Every time fresher data lands for a fixture, and once more after the starting line-ups are confirmed. There is no fixed schedule to wait for. Every response carries lineupUsed, so you always know which pass you are reading. The one after confirmed line-ups is the one to trust.

Where does the data come from?

From professional football data feeds, normalised and stored on our side. That is the point of the middle layer: one consistent shape across every competition we cover, instead of a different schema per source, and an AI read on top of it that you would otherwise have to build yourself.

Does the MCP server have its own quota?

No. One tool call is one request, out of the same daily allowance as a REST call. There is no second quota to keep track of, and no separate key.

Do you cover other sports?

No, football only, and that is deliberate. Every competition we list gets the same data and the same analysis, rather than a thin version of five sports.

Can I cancel?

Any time, from your account, without writing to anyone. You keep the plan until the end of the period you have already paid for, and it does not renew after that.