Opono
Skip to content
Documentation menu Opono Expected Lineup ▾

API reference

Opono Expected Lineup

Copy as Markdown

Opono Expected Lineup

GET /v1/fixtures/{fixture_id}/expected-lineup

Read Opono Robin's expected XI, bench, formation and player start probabilities for 1 credit per match, covering both sides, cached or fresh. Re-reading the same fixture data_version within your organisation is a free replay. After announcement, official_lineups_announced is true; this remains the model's expectation.

Authentication: Bearer API key with data.read; active Plus or Pro plan required.

Parameters

Path parameters

NameTypeRequiredDescription
fixture_idintegerYesUse a returned fixture ID instead of home, away, and date; minimum: 1.

Query parameters

NameTypeRequiredDescription
———None.

Body parameters

NameTypeRequiredDescription
———None.

Example request

bash
curl 'https://api.opono.com/v1/fixtures/19609874/expected-lineup' \
  --header "Authorization: Bearer $OPONO_API_KEY"

Response

FieldTypeDescription
objectstringexpected_lineup.
fixture_idintegerSelected fixture.
as_ofstringInput watermark in ISO 8601 UTC.
data_versionstringInput version; the same organisation and version replay for free.
squad_versionstringSquad version when present.
official_lineups_announcedbooleanTrue after announcement; the returned XI remains the model's expectation.
home / awayobjectEach side's team, expected xi, bench and expected_formation.
home.team / away.teamobjectTeam ID and name.
home.xi / away.xiarrayExpected starting eleven.
home.bench / away.bencharrayExpected substitutes.
home.expected_formation / away.expected_formationstring or nullExpected formation, when available.
home.xi[].player_id / name / positioninteger / string / string or nullPlayer labels; the same fields apply to both sides and benches.
home.xi[].p_startnumberOpono Robin's start probability from 0 to 1; also included for away and bench players.
model.public_namestringOpono Robin.
model.versionstringModel release when present.
credits_chargednumberOne credit on first live delivery; zero for a same-version replay or test key.
replaybooleanWhether this is a previously delivered version.
livemodebooleanFalse for synthetic test output, when present.
receiptobjectCredit receipt on live delivery or replay when present.

Example response

200 synthetic test response; zero credits. Includes model outputs and player labels only.

json
{
  "object": "expected_lineup",
  "fixture_id": 19609874,
  "as_of": "2026-10-17T09:00:00Z",
  "data_version": "example-input-version",
  "squad_version": "sq1:example",
  "official_lineups_announced": false,
  "home": {
    "team": {
      "team_id": 1,
      "name": "Home"
    },
    "expected_formation": "4-3-3",
    "xi": [
      {
        "player_id": 101,
        "name": "Home player 1",
        "position": "goalkeeper",
        "p_start": 0.8
      },
      {
        "player_id": 102,
        "name": "Home player 2",
        "position": "defender",
        "p_start": 0.8
      },
      {
        "player_id": 103,
        "name": "Home player 3",
        "position": "defender",
        "p_start": 0.8
      },
      {
        "player_id": 104,
        "name": "Home player 4",
        "position": "defender",
        "p_start": 0.8
      },
      {
        "player_id": 105,
        "name": "Home player 5",
        "position": "defender",
        "p_start": 0.8
      },
      {
        "player_id": 106,
        "name": "Home player 6",
        "position": "midfielder",
        "p_start": 0.8
      },
      {
        "player_id": 107,
        "name": "Home player 7",
        "position": "midfielder",
        "p_start": 0.8
      },
      {
        "player_id": 108,
        "name": "Home player 8",
        "position": "midfielder",
        "p_start": 0.8
      },
      {
        "player_id": 109,
        "name": "Home player 9",
        "position": "attacker",
        "p_start": 0.8
      },
      {
        "player_id": 110,
        "name": "Home player 10",
        "position": "attacker",
        "p_start": 0.8
      },
      {
        "player_id": 111,
        "name": "Home player 11",
        "position": "attacker",
        "p_start": 0.8
      }
    ],
    "bench": []
  },
  "away": {
    "team": {
      "team_id": 2,
      "name": "Away"
    },
    "expected_formation": "4-3-3",
    "xi": [
      {
        "player_id": 201,
        "name": "Away player 1",
        "position": "goalkeeper",
        "p_start": 0.8
      },
      {
        "player_id": 202,
        "name": "Away player 2",
        "position": "defender",
        "p_start": 0.8
      },
      {
        "player_id": 203,
        "name": "Away player 3",
        "position": "defender",
        "p_start": 0.8
      },
      {
        "player_id": 204,
        "name": "Away player 4",
        "position": "defender",
        "p_start": 0.8
      },
      {
        "player_id": 205,
        "name": "Away player 5",
        "position": "defender",
        "p_start": 0.8
      },
      {
        "player_id": 206,
        "name": "Away player 6",
        "position": "midfielder",
        "p_start": 0.8
      },
      {
        "player_id": 207,
        "name": "Away player 7",
        "position": "midfielder",
        "p_start": 0.8
      },
      {
        "player_id": 208,
        "name": "Away player 8",
        "position": "midfielder",
        "p_start": 0.8
      },
      {
        "player_id": 209,
        "name": "Away player 9",
        "position": "attacker",
        "p_start": 0.8
      },
      {
        "player_id": 210,
        "name": "Away player 10",
        "position": "attacker",
        "p_start": 0.8
      },
      {
        "player_id": 211,
        "name": "Away player 11",
        "position": "attacker",
        "p_start": 0.8
      }
    ],
    "bench": []
  },
  "model": {
    "public_name": "Opono Robin"
  },
  "credits_charged": 0,
  "replay": false,
  "livemode": false
}

Errors

StatusCodeMeaning
400parameter_invalidA parameter has an invalid value.
401invalid_api_keyThe credential cannot authenticate.
401key_revokedThe API key has been revoked.
401key_expiredThe API key has expired.
403scope_missingThe key lacks the required scope.
403tier_restrictedThe organisation plan does not include this operation.
403org_suspendedYour account is suspended.
403ip_not_allowedThe caller is outside the key's IP allowlist.
429rate_limitedA request or authentication rate limit was exceeded.
503dependency_unavailableRequest admission is unavailable.
503maintenanceThe API is paused for maintenance.
402balance_too_lowYour available balance cannot cover the request.
404fixture_not_foundNo matching simulation fixture exists.
400fixture_not_coveredThe requested fixture is not available for simulation.
503refreshingThe request can't be checked right now.