SportStatsAPI · Schema
dto.SoccerMatchResponse
Sports DataWidgetsWordPressInsightsArtificial IntelligenceMCP
Properties
| Name | Type | Description |
|---|---|---|
| added_time | object | commentaries feed (top leagues) |
| attendance | integer | commentaries feed (top leagues) or an official source |
| attribution | string | Attribution: the licence notice of a score taken from Wikipedia (goalgate score-fill); absent otherwise. |
| away_team | object | |
| club_details | array | ClubDetails: what a club that manages its own page entered for its side (scorers, cards, line-up), shown at once. The club's data wins: a score it corrected is in the scores (sources.result "club") an |
| events | array | |
| extra_time_score | string | |
| fixture_id | integer | season fixtures feed id |
| full_time_score | string | 90 minutes |
| half_time_score | string | |
| highlights | string | Highlights video (YouTube) once posted, and the TV channels showing the match, by country (from our media data source). Every sport's match answers carry them (middleware.MatchMedia); listed here for |
| home_team | object | |
| id | integer | |
| key_facts | array | |
| league_gid | integer | |
| league_id | integer | |
| league_name | string | |
| match_id | integer | |
| minute | integer | Minute: the minute of play while the feed gives one (status "67" or "45+2" is 67 or 45; the added minutes stay in status); null otherwise (before kick-off, at HT, in a shoot-out, after the match). |
| penalty_score | string | shoot-out |
| periods | array | Periods: 1st half, FT and ET (cumulative: the score after 90 and 120 minutes) and the shoot-out, parsed from the score strings above; no 2nd half (it is not stored). |
| referee | string | commentaries feed (top leagues) or an official source |
| referee_stats | object | RefereeStats: the referee's season in this league (match detail only; absent without a referee or computed statistics). |
| round | string | |
| season | string | |
| sources | object | Sources names the official source of fields it supplied (e.g. {"result": "dfb", "events": "dfb"}); absent when all data is the provider's. |
| sport | string | |
| start_at | string | StartAt: start_date and start_time as one RFC 3339 UTC time; null when the time is unknown. |
| start_date | string | |
| start_time | string | |
| static_id | integer | The data provider's id shared by livescore and season feeds; the stable key |
| status | string | |
| status_code | string | StatusCode: the status in one vocabulary for every sport (raw word in status). awaiting_result: still not started with no score, Unknown or stuck in play well after the start (per sport: soccer and ha |
| summary | string | The website match page's sentences, from our data only (English; not with ?lang): summary (paragraphs), key_facts before kick-off, what_it_means after the result, summary_as_of when they were written. |
| summary_as_of | string | |
| timeline | array | Timeline: the events normalised (kind goal, penalty, own_goal, missed_penalty, yellow, second_yellow, red, substitution, var), from the commentary summary (top leagues) or else the events above. Match |
| tv | array | |
| updated_at | string | UpdatedAt: when this match row last changed (RFC 3339, UTC). |
| venue | string | |
| what_it_means | array |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/sportstatsapi/json-schema/sportstatsapi-dto-soccer-match-response-schema.json",
"title": "dto.SoccerMatchResponse",
"x-generated": "2026-11-08",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/sportstatsapi-openapi.json#/components/schemas/dto.SoccerMatchResponse",
"properties": {
"added_time": {
"allOf": [
{
"$ref": "#/$defs/dto.AddedTime"
}
],
"description": "commentaries feed (top leagues)"
},
"attendance": {
"description": "commentaries feed (top leagues) or an official source",
"type": "integer"
},
"attribution": {
"description": "Attribution: the licence notice of a score taken from Wikipedia\n(goalgate score-fill); absent otherwise.",
"type": "string"
},
"away_team": {
"$ref": "#/$defs/dto.TeamInfo"
},
"club_details": {
"description": "ClubDetails: what a club that manages its own page entered for its\nside (scorers, cards, line-up), shown at once. The club's data wins:\na score it corrected is in the scores (sources.result \"club\") and its\ngoals and cards replace ours for its side in the timeline. A match the\nclub moved has its date and time in start_date and start_time\n(sources.kickoff \"club\").",
"items": {
"$ref": "#/$defs/dto.ClubMatchSide"
},
"type": "array"
},
"events": {
"items": {
"type": "object"
},
"type": "array"
},
"extra_time_score": {
"type": "string"
},
"fixture_id": {
"description": "season fixtures feed id",
"type": "integer"
},
"full_time_score": {
"description": "90 minutes",
"type": "string"
},
"half_time_score": {
"type": "string"
},
"highlights": {
"description": "Highlights video (YouTube) once posted, and the TV channels showing the\nmatch, by country (from our media data source). Every sport's match answers carry them\n(middleware.MatchMedia); listed here for the API docs.",
"type": "string"
},
"home_team": {
"$ref": "#/$defs/dto.TeamInfo"
},
"id": {
"type": "integer"
},
"key_facts": {
"items": {
"type": "string"
},
"type": "array"
},
"league_gid": {
"type": "integer"
},
"league_id": {
"type": "integer"
},
"league_name": {
"type": "string"
},
"match_id": {
"type": "integer"
},
"minute": {
"description": "Minute: the minute of play while the feed gives one (status \"67\" or\n\"45+2\" is 67 or 45; the added minutes stay in status); null otherwise\n(before kick-off, at HT, in a shoot-out, after the match).",
"type": "integer"
},
"penalty_score": {
"description": "shoot-out",
"type": "string"
},
"periods": {
"description": "Periods: 1st half, FT and ET (cumulative: the score after 90 and 120\nminutes) and the shoot-out, parsed from the score strings above; no\n2nd half (it is not stored).",
"items": {
"$ref": "#/$defs/dto.Period"
},
"type": "array"
},
"referee": {
"description": "commentaries feed (top leagues) or an official source",
"type": "string"
},
"referee_stats": {
"allOf": [
{
"$ref": "#/$defs/dto.RefereeResponse"
}
],
"description": "RefereeStats: the referee's season in this league (match detail only;\nabsent without a referee or computed statistics)."
},
"round": {
"type": "string"
},
"season": {
"type": "string"
},
"sources": {
"additionalProperties": {
"type": "string"
},
"description": "Sources names the official source of fields it supplied (e.g.\n{\"result\": \"dfb\", \"events\": \"dfb\"}); absent when all data is the provider's.",
"type": "object"
},
"sport": {
"type": "string"
},
"start_at": {
"description": "StartAt: start_date and start_time as one RFC 3339 UTC time; null when the time is unknown.",
"type": "string"
},
"start_date": {
"type": "string"
},
"start_time": {
"type": "string"
},
"static_id": {
"description": "The data provider's id shared by livescore and season feeds; the stable key",
"type": "integer"
},
"status": {
"type": "string"
},
"status_code": {
"description": "StatusCode: the status in one vocabulary for every sport (raw word in status).\nawaiting_result: still not started with no score, Unknown or stuck in\nplay well after the start (per sport: soccer and handball 3 hours,\nbasketball, hockey and volleyball 4, american-football 5, baseball 6,\ntennis 24, cricket 12 after the start on its last day; in play: 24 at\nleast): the feed never gave a result; it may still come. Derived when\nanswering: status stays as stored.",
"enum": [
"scheduled",
"live",
"halftime",
"intermission",
"final",
"final_overtime",
"final_penalties",
"postponed",
"delayed",
"suspended",
"abandoned",
"cancelled",
"unknown",
"awaiting_result"
],
"type": "string"
},
"summary": {
"description": "The website match page's sentences, from our data only (English; not\nwith ?lang): summary (paragraphs), key_facts before kick-off,\nwhat_it_means after the result, summary_as_of when they were written.\n/{sport}/matches/{id} of a match with a website page (soccer, basketball,\nhockey, tennis, volleyball, handball, baseball, American football,\ncricket; the site's competitions), until kick-off and once finished\n(middleware.MatchMedia); listed here for the API docs.",
"type": "string"
},
"summary_as_of": {
"type": "string"
},
"timeline": {
"description": "Timeline: the events normalised (kind goal, penalty, own_goal,\nmissed_penalty, yellow, second_yellow, red, substitution, var), from\nthe commentary summary (top leagues) or else the events above. Match\ndetail only; absent when no event is known.",
"items": {
"$ref": "#/$defs/database.MatchEvent"
},
"type": "array"
},
"tv": {
"items": {
"$ref": "#/$defs/database.TVChannel"
},
"type": "array"
},
"updated_at": {
"description": "UpdatedAt: when this match row last changed (RFC 3339, UTC).",
"type": "string"
},
"venue": {
"type": "string"
},
"what_it_means": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object",
"$defs": {
"database.EventPlayer": {
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"type": "object"
},
"database.MatchEvent": {
"properties": {
"assist": {
"$ref": "#/$defs/database.EventPlayer"
},
"detail": {
"description": "Detail: a card's reason, \"injury\" for an injury substitution, a VAR\nreview's outcome (\"Goal cancelled\").",
"type": "string"
},
"extra_minute": {
"type": "integer"
},
"kind": {
"type": "string"
},
"minute": {
"description": "null: the feed gave no minute",
"type": "integer"
},
"on_field_decision": {
"description": "VAR: the referee's decision reviewed",
"type": "string"
},
"player": {
"$ref": "#/$defs/database.EventPlayer"
},
"player_in": {
"$ref": "#/$defs/database.EventPlayer"
},
"player_out": {
"$ref": "#/$defs/database.EventPlayer"
},
"team": {
"description": "home or away",
"type": "string"
},
"team_id": {
"type": "integer"
}
},
"type": "object"
},
"database.TVChannel": {
"properties": {
"channel": {
"type": "string"
},
"country": {
"type": "string"
}
},
"type": "object"
},
"dto.AddedTime": {
"properties": {
"first_half": {
"type": "integer"
},
"second_half": {
"type": "integer"
}
},
"type": "object"
},
"dto.ClubMatchEvent": {
"properties": {
"card": {
"description": "cards: yellow or red",
"type": "string"
},
"minute": {
"type": "integer"
},
"player": {
"type": "string"
}
},
"type": "object"
},
"dto.ClubMatchPlayer": {
"properties": {
"name": {
"type": "string"
},
"number": {
"type": "string"
},
"position": {
"description": "G, D, M, A",
"type": "string"
},
"sub": {
"type": "boolean"
}
},
"type": "object"
},
"dto.ClubMatchSide": {
"properties": {
"cards": {
"items": {
"$ref": "#/$defs/dto.ClubMatchEvent"
},
"type": "array"
},
"goals": {
"items": {
"$ref": "#/$defs/dto.ClubMatchEvent"
},
"type": "array"
},
"lineup": {
"description": "the starters, then the substitutes",
"items": {
"$ref": "#/$defs/dto.ClubMatchPlayer"
},
"type": "array"
},
"side": {
"description": "home or away",
"type": "string"
}
},
"type": "object"
},
"dto.Period": {
"properties": {
"away": {
"type": "integer"
},
"cumulative": {
"description": "Cumulative: soccer FT and ET only: the score after 90 or 120 minutes\n(all goals so far), not the goals scored in that period.",
"type": "boolean"
},
"home": {
"description": "Home, Away: null when that side is not stored.",
"type": "integer"
},
"label": {
"type": "string"
},
"period": {
"description": "Period: OT (basketball, hockey, american football) is every overtime\ntogether, so the periods add up to the final after 2OT+.",
"type": "string"
}
},
"type": "object"
},
"dto.RefereeResponse": {
"properties": {
"country": {
"type": "string"
},
"first_match_date": {
"type": "string"
},
"games": {
"type": "integer"
},
"last_match_date": {
"type": "string"
},
"league_id": {
"type": "integer"
},
"league_matches_played": {
"type": "integer"
},
"league_matches_with_referee": {
"type": "integer"
},
"league_matches_with_stats": {
"type": "integer"
},
"league_name": {
"type": "string"
},
"name": {
"type": "string"
},
"penalties": {
"type": "integer"
},
"penalties_per_game": {
"type": "number"
},
"red_cards": {
"type": "integer"
},
"red_per_game": {
"type": "number"
},
"season": {
"type": "string"
},
"second_yellows": {
"type": "integer"
},
"slug": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"yellow_cards": {
"type": "integer"
},
"yellow_per_game": {
"type": "number"
}
},
"type": "object"
},
"dto.TeamInfo": {
"properties": {
"display_name": {
"description": "DisplayName: the name to show (accents and case from official sources; a managed club's own name), else name. name stays the data provider's: filters match on it.",
"type": "string"
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"score": {
"type": "integer"
}
},
"type": "object"
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/sportstatsapi-dto-soccer-match-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.