Match
Match identity: public identifier, competition, UTC kickoff, teams, and final score when applicable.
Fields
| Field | Type | Description |
|---|---|---|
id | string | Foresportia public identifier matching fsm:v1:<64 lowercase hex>. |
competition | object | Competition id (catalog code), name, and country. |
kickoff | string | ISO 8601 UTC timestamp ending in Z. |
teams | object | home and away objects, each with id (nullable) and name. |
final_score | object|null | Null for a future match; for a historical match, contains verified home and away final scores. |
Example
The match-detail route and every successful bulk result share the same top-level Core Analytics shape: schema_version, match, as_of, versions, provenance, statistics, streaks, standings, ratings, forecast, probabilities, context, and quality.
{
"schema_version": "analytics-starter-payload-v2",
"match": {
"id": "fsm:v1:a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1",
"competition": {
"id": "FIN",
"name": "Veikkausliiga",
"country": "Finland"
},
"kickoff": "2026-10-17T16:00:00Z",
"teams": {
"home": {
"id": "example-team-riverton",
"name": "Riverton FC"
},
"away": {
"id": "example-team-northbridge",
"name": "Northbridge United"
}
},
"final_score": null
},
"as_of": "2026-10-16T12:00:00Z",
"versions": {
"feature": "features-v1",
"flags": "flags-v1",
"model": "model-v1",
"calibration": "calibration-v1"
},
"provenance": {
"temporal_class": "published_pre_match_verified",
"source_kind": "analytics_published_release",
"source_match_id": "example-source-match-001",
"source_release_id": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"source_snapshot_id": null,
"source_data_cutoff_utc": "2026-10-16T11:59:59Z",
"source_payload_sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"source_promotion_receipt_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"publication_policy_version": "starter-publication-policy-v1",
"transformation_version": "analytics-to-starter-transform-v2"
},
"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
},
"ratings": {
"elo_home": 1682.0,
"elo_away": 1544.0,
"elo_difference": 138.0,
"elo_reliable": true
},
"forecast": {
"home_goals": 1.72,
"away_goals": 0.94,
"total_goals": 2.66
},
"probabilities": {
"one_x_two": {
"home": 0.58,
"draw": 0.25,
"away": 0.17
},
"btts": {
"yes": 0.49,
"no": 0.51
},
"over_under_2_5": {
"over": 0.56,
"under": 0.44
},
"double_chance": {
"home_or_draw": 0.83,
"away_or_draw": 0.42,
"home_or_away": 0.75
},
"draw_no_bet": {
"home": 0.773333,
"away": 0.226667
},
"probable_scores": [
{
"home": 2,
"away": 0,
"probability": 0.13
},
{
"home": 1,
"away": 0,
"probability": 0.12
}
],
"confidence": 0.72,
"entropy_bits": 1.39
},
"context": {
"friendly": false,
"knockout": false,
"group_stage": false,
"first_leg": false,
"second_leg": false,
"final": false,
"neutral_venue": false,
"stage": "Regular season"
},
"quality": {
"warnings": [
"example_recent_lineup_data_incomplete"
],
"historical_class": "future",
"versions": {
"feature": "features-v1",
"flags": "flags-v1",
"model": "model-v1",
"calibration": "calibration-v1"
}
}
}
How to read it. kickoff is UTC; competition.id is the catalog code you pass to the league routes. final_score is null for scheduled matches and populated for verified historical matches.
Verified historical match
The analytics and probabilities remain the frozen pre-match snapshot. The verified result is joined separately after the match; it does not alter the pre-match features.
{
"match": {
"id": "fsm:v1:c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3",
"competition": {
"id": "CHN",
"name": "Chinese Super League",
"country": "China"
},
"kickoff": "2026-07-12T11:35:00Z",
"teams": {
"home": {
"id": "example-team-harbor",
"name": "Harbor Athletic"
},
"away": {
"id": "example-team-riverton",
"name": "Riverton FC"
}
},
"final_score": {
"home": 3,
"away": 2
}
},
"quality": {
"historical_class": "past"
}
}
Related
Returned by GET /v1/matches/{match_id} and POST /v1/matches/bulk. Optional values can be missing — see Data quality.