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
View JSON Schema on GitHub

JSON Schema

sportstatsapi-dto-soccer-match-response-schema.json Raw ↑
{
  "$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.
All 92 tools →

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.