Statistics and streaks
Team form: season aggregates, home/away splits, Last 5 and Last 10 windows, plus simple streaks.
Fields
| Field | Type | Description |
|---|---|---|
statistics.home / .away | object | Per team: season, venue (home/away split), last_5 and last_10 blocks. |
statistics.*.season | object | matches, wins, draws, losses, goals_for, goals_against, clean_sheets, failed_to_score, btts, over_1_5, over_2_5, over_3_5, win_rate, draw_rate, loss_rate. |
statistics.*.venue | object | Same fields, restricted to the team's home matches (home team) or away matches (away team). |
statistics.*.last_5 / .last_10 | object | Same fields over the last 5 and last 10 matches. |
streaks.home / .away | object | winning, losing, unbeaten, winless counters. |
standings.home / .away | object | position, source, as_of, reliable. |
standings.position_difference | number | Home position minus away position. Negative means the home team ranks higher. |
standings.freshness_seconds | number | Age of the standings snapshot, in seconds. |
Example
Real values, taken from the same published payload the API returns (GET /v1/matches/{match_id}):
{
"statistics": {
"home": {
"season": {
"matches": 18,
"wins": 11,
"draws": 4,
"losses": 3,
"goals_for": 34,
"goals_against": 18,
"clean_sheets": 7,
"failed_to_score": 2,
"btts": 9,
"over_1_5": 14,
"over_2_5": 10,
"over_3_5": 5,
"win_rate": 0.611111,
"draw_rate": 0.222222,
"loss_rate": 0.166667
},
"venue": {
"matches": 9,
"wins": 7,
"draws": 1,
"losses": 1,
"goals_for": 20,
"goals_against": 7,
"clean_sheets": 5,
"failed_to_score": 1,
"btts": 4,
"over_1_5": 7,
"over_2_5": 5,
"over_3_5": 2,
"win_rate": 0.777778,
"draw_rate": 0.111111,
"loss_rate": 0.111111
},
"last_5": {
"matches": 5,
"wins": 3,
"draws": 1,
"losses": 1,
"goals_for": 9,
"goals_against": 5,
"clean_sheets": 2,
"failed_to_score": 0,
"btts": 3,
"over_1_5": 4,
"over_2_5": 3,
"over_3_5": 1,
"win_rate": 0.6,
"draw_rate": 0.2,
"loss_rate": 0.2
},
"last_10": {
"matches": 10,
"wins": 6,
"draws": 2,
"losses": 2,
"goals_for": 17,
"goals_against": 10,
"clean_sheets": 4,
"failed_to_score": 1,
"btts": 5,
"over_1_5": 8,
"over_2_5": 5,
"over_3_5": 2,
"win_rate": 0.6,
"draw_rate": 0.2,
"loss_rate": 0.2
}
},
"away": {
"season": {
"matches": 18,
"wins": 6,
"draws": 5,
"losses": 7,
"goals_for": 22,
"goals_against": 25,
"clean_sheets": 4,
"failed_to_score": 5,
"btts": 10,
"over_1_5": 13,
"over_2_5": 8,
"over_3_5": 3,
"win_rate": 0.333333,
"draw_rate": 0.277778,
"loss_rate": 0.388889
},
"venue": {
"matches": 9,
"wins": 2,
"draws": 3,
"losses": 4,
"goals_for": 9,
"goals_against": 14,
"clean_sheets": 1,
"failed_to_score": 3,
"btts": 5,
"over_1_5": 7,
"over_2_5": 4,
"over_3_5": 1,
"win_rate": 0.222222,
"draw_rate": 0.333333,
"loss_rate": 0.444445
},
"last_5": {
"matches": 5,
"wins": 1,
"draws": 2,
"losses": 2,
"goals_for": 5,
"goals_against": 7,
"clean_sheets": 1,
"failed_to_score": 2,
"btts": 3,
"over_1_5": 4,
"over_2_5": 2,
"over_3_5": 1,
"win_rate": 0.2,
"draw_rate": 0.4,
"loss_rate": 0.4
},
"last_10": {
"matches": 10,
"wins": 3,
"draws": 3,
"losses": 4,
"goals_for": 11,
"goals_against": 14,
"clean_sheets": 2,
"failed_to_score": 3,
"btts": 6,
"over_1_5": 8,
"over_2_5": 5,
"over_3_5": 2,
"win_rate": 0.3,
"draw_rate": 0.3,
"loss_rate": 0.4
}
}
},
"streaks": {
"home": {
"winning": 2,
"losing": 0,
"unbeaten": 5,
"winless": 0
},
"away": {
"winning": 0,
"losing": 1,
"unbeaten": 0,
"winless": 2
}
},
"standings": {
"home": {
"position": 2,
"source": "example-table",
"as_of": "2026-10-16T11:00:00Z",
"reliable": true
},
"away": {
"position": 9,
"source": "example-table",
"as_of": "2026-10-16T11:00:00Z",
"reliable": true
},
"position_difference": -7,
"freshness_seconds": 3600
}
}
How to read it. The home team is 2nd and unbeaten in 5; the away team is 9th and winless in 2. position_difference (-7) and the rate fields (win_rate, over_2_5) are already normalised, so they make better model features than the raw counters.
Related
Returned by GET /v1/matches/{match_id} and POST /v1/matches/bulk. Optional values can be missing — see Data quality.