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
| Name | Type | Required | Description |
|---|---|---|---|
fixture_id | integer | Yes | Use a returned fixture ID instead of home, away, and date; minimum: 1. |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| — | — | — | None. |
Body parameters
| Name | Type | Required | Description |
|---|---|---|---|
| — | — | — | None. |
Example request
bash
curl 'https://api.opono.com/v1/fixtures/19609874/expected-lineup' \
--header "Authorization: Bearer $OPONO_API_KEY"Response
| Field | Type | Description |
|---|---|---|
object | string | expected_lineup. |
fixture_id | integer | Selected fixture. |
as_of | string | Input watermark in ISO 8601 UTC. |
data_version | string | Input version; the same organisation and version replay for free. |
squad_version | string | Squad version when present. |
official_lineups_announced | boolean | True after announcement; the returned XI remains the model's expectation. |
home / away | object | Each side's team, expected xi, bench and expected_formation. |
home.team / away.team | object | Team ID and name. |
home.xi / away.xi | array | Expected starting eleven. |
home.bench / away.bench | array | Expected substitutes. |
home.expected_formation / away.expected_formation | string or null | Expected formation, when available. |
home.xi[].player_id / name / position | integer / string / string or null | Player labels; the same fields apply to both sides and benches. |
home.xi[].p_start | number | Opono Robin's start probability from 0 to 1; also included for away and bench players. |
model.public_name | string | Opono Robin. |
model.version | string | Model release when present. |
credits_charged | number | One credit on first live delivery; zero for a same-version replay or test key. |
replay | boolean | Whether this is a previously delivered version. |
livemode | boolean | False for synthetic test output, when present. |
receipt | object | Credit 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
| Status | Code | Meaning |
|---|---|---|
| 400 | parameter_invalid | A parameter has an invalid value. |
| 401 | invalid_api_key | The credential cannot authenticate. |
| 401 | key_revoked | The API key has been revoked. |
| 401 | key_expired | The API key has expired. |
| 403 | scope_missing | The key lacks the required scope. |
| 403 | tier_restricted | The organisation plan does not include this operation. |
| 403 | org_suspended | Your account is suspended. |
| 403 | ip_not_allowed | The caller is outside the key's IP allowlist. |
| 429 | rate_limited | A request or authentication rate limit was exceeded. |
| 503 | dependency_unavailable | Request admission is unavailable. |
| 503 | maintenance | The API is paused for maintenance. |
| 402 | balance_too_low | Your available balance cannot cover the request. |
| 404 | fixture_not_found | No matching simulation fixture exists. |
| 400 | fixture_not_covered | The requested fixture is not available for simulation. |
| 503 | refreshing | The request can't be checked right now. |