SportStatsAPI · Schema
dto.BasketballMatchResponse
Sports DataWidgetsWordPressInsightsArtificial IntelligenceMCP
Properties
| Name | Type | Description |
|---|---|---|
| away_rankings | array | |
| away_team | object | |
| file_group | string | |
| freshness | object | Freshness: when the data was last fetched and changed, and whether a live match may be behind (docs/freshness.md); sport match endpoints only. |
| home_rankings | array | NCAA (/matches/{id}): each team's AP and NET places before the game |
| home_team | object | |
| id | integer | |
| league_gid | integer | |
| league_id | integer | |
| league_name | string | |
| live | object | Live: the in-play state, only while status_code is live, halftime or intermission. |
| match_id | integer | |
| periods | array | Periods: the period scores in game order, one shape for every sport ({period, label, home, away}). |
| quarter_scores | object | |
| 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 | |
| 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 |
| timer | string | |
| updated_at | string | UpdatedAt: when this match row last changed (RFC 3339, UTC). |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/sportstatsapi/json-schema/sportstatsapi-dto-basketball-match-response-schema.json",
"title": "dto.BasketballMatchResponse",
"x-generated": "2026-11-08",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/sportstatsapi-openapi.json#/components/schemas/dto.BasketballMatchResponse",
"properties": {
"away_rankings": {
"items": {
"$ref": "#/$defs/dto.TeamRankResponse"
},
"type": "array"
},
"away_team": {
"$ref": "#/$defs/dto.TeamInfo"
},
"file_group": {
"type": "string"
},
"freshness": {
"allOf": [
{
"$ref": "#/$defs/dto.Freshness"
}
],
"description": "Freshness: when the data was last fetched and changed, and whether a\nlive match may be behind (docs/freshness.md); sport match endpoints only."
},
"home_rankings": {
"description": "NCAA (/matches/{id}): each team's AP and NET places before the game",
"items": {
"$ref": "#/$defs/dto.TeamRankResponse"
},
"type": "array"
},
"home_team": {
"$ref": "#/$defs/dto.TeamInfo"
},
"id": {
"type": "integer"
},
"league_gid": {
"type": "integer"
},
"league_id": {
"type": "integer"
},
"league_name": {
"type": "string"
},
"live": {
"allOf": [
{
"$ref": "#/$defs/dto.ClockLive"
}
],
"description": "Live: the in-play state, only while status_code is live, halftime or intermission."
},
"match_id": {
"type": "integer"
},
"periods": {
"description": "Periods: the period scores in game order, one shape for every sport ({period, label, home, away}).",
"items": {
"$ref": "#/$defs/dto.Period"
},
"type": "array"
},
"quarter_scores": {
"$ref": "#/$defs/dto.QuarterScores"
},
"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"
},
"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"
},
"timer": {
"type": "string"
},
"updated_at": {
"description": "UpdatedAt: when this match row last changed (RFC 3339, UTC).",
"type": "string"
}
},
"type": "object",
"$defs": {
"dto.ClockLive": {
"properties": {
"clock": {
"description": "Clock: time left in the period at the latest play-by-play play.",
"type": "string"
},
"clock_source": {
"enum": [
"play_by_play"
],
"type": "string"
},
"clock_updated_at": {
"type": "string"
},
"down_distance": {
"type": "string"
},
"period": {
"description": "Period: basketball \"1\"..\"4\" (NCAA halves \"1\", \"2\"), \"OT\" for every\novertime (not numbered by the feed); hockey \"1\"..\"3\", \"OT\", \"OT2\"...,\n\"SO\"; american football \"1\"..\"4\", \"OT\". From the status when the\nlatest play is of an earlier period (no clock then).",
"type": "string"
},
"possession": {
"description": "American football, after the latest play: the team with the ball\n(home or away; from the play, else its drive) and the next down\n(\"3rd & 10 at 50\"; NFL only).",
"enum": [
"home",
"away"
],
"type": "string"
},
"snap_down_distance": {
"description": "SnapDownDistance: american football without down_distance (FBS): the\ndown at the snap of the latest play, before it was run (\"3rd & 9 at\nUL 47\"), not the next down.",
"type": "string"
}
},
"type": "object"
},
"dto.Freshness": {
"properties": {
"last_fetch_at": {
"description": "LastFetchAt: the last good fetch of the sport's live feed (the sync's\nlive refresh of the provider's today feed, every sport's matches in one file).",
"type": "string"
},
"stale": {
"description": "Stale: the match is live and its data may be behind; StaleReason says why.",
"type": "boolean"
},
"stale_reason": {
"description": "feed_not_fetched, state_unchanged, clock_unchanged",
"type": "string"
},
"state_changed_at": {
"description": "StateChangedAt: the status or the score last changed (null for rows\nnot written since 2026-10-28).",
"type": "string"
},
"updated_at": {
"description": "UpdatedAt: the row last changed (any field: score, clock, line scores).",
"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.QuarterScores": {
"properties": {
"ot": {
"allOf": [
{
"$ref": "#/$defs/dto.ScorePair"
}
],
"description": "OT: every overtime together, as the OT period (after 2OT+ the final minus the regular periods)."
},
"q1": {
"$ref": "#/$defs/dto.ScorePair"
},
"q2": {
"$ref": "#/$defs/dto.ScorePair"
},
"q3": {
"$ref": "#/$defs/dto.ScorePair"
},
"q4": {
"$ref": "#/$defs/dto.ScorePair"
}
},
"type": "object"
},
"dto.ScorePair": {
"properties": {
"away": {
"type": "integer"
},
"home": {
"type": "integer"
}
},
"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"
},
"dto.TeamRankResponse": {
"properties": {
"as_of": {
"type": "string"
},
"poll": {
"type": "string"
},
"rank": {
"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-basketball-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.