Event
One play/incident row from `/v1/matches/{id}/events`. The ordering key is `sequence_number`, and there is no per-event `id` or `match_id`: the match is the one in the path. Until 2026-09-18 this schema required `id`, `match_id` and `sequence`, none of which is returned.
Properties
| Name | Type | Description |
|---|---|---|
| sequence_number | integer | Ordering key within the match. |
| elapsed | integer | Soccer minute from the live adapter. |
| elapsed_extra | integernull | |
| team | stringnull | |
| player_name | stringnull | |
| player_id | stringnull | |
| headshot_url | stringnull | |
| assist_name | stringnull | |
| assist_id | stringnull | |
| assist_headshot_url | stringnull | |
| event_type | stringnull | |
| event_detail | stringnull | |
| card_class | stringnull | Football only. Whether a dismissal was a SECOND YELLOW or a DIRECT (straight) RED, derived from the player's card sequence in this match, because the upstream feed labels every card either `Yellow Car |
| period | integernull | |
| period_display | stringnull | |
| clock | object | Null on feeds that carry no clock; 8 of 8 sampled baseball events were null. |
| type | string | |
| team_id | object | |
| related_player_id | object | |
| description | string | |
| scoring_play | boolean | |
| score_value | integernull | Points/runs this event added. |
| home_score | integernull | Running home score AFTER this event. |
| away_score | integernull | Running away score AFTER this event. |
| coordinate_x | object | Soccer shot location: the SHOOTER's position on a 0-100 normalised pitch. `null` on non-shot events and on any event from a feed that carries no positions. |
| coordinate_y | object | |
| xg | object | Expected goals for a shot, 0-1. `null` means the source does not model xG for this event, never "zero chance". |
| xgot | object | Expected goals on target. Present only for shots that were on target; `null` for misses and blocks by design. |
| down | object | NFL down; null for plays without a down and for non-NFL events. |
| distance | object | NFL yards to gain; null for non-NFL events. |
| yards_to_endzone | object | NFL field position measured in yards from the opponent end zone. |
| yards_gained | object | NFL yards gained on the play; null for non-NFL events. |
| epa | object | NFL expected points added; null when unavailable or on non-NFL events. |
| win_probability | object | NFL possession-team win probability after the play. |
| defending_team_id | object | Canonical defending-team UUID on NFL rows; null otherwise. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/bigballsdata-com/json-schema/bigballsdata-com-event-schema.json",
"title": "Event",
"description": "One play/incident row from `/v1/matches/{id}/events`. The ordering key is `sequence_number`, and there is no per-event `id` or `match_id`: the match is the one in the path. Until 2026-09-18 this schema required `id`, `match_id` and `sequence`, none of which is returned.",
"x-generated": "2026-10-30",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/_original/bigballsdata-com-api-openapi.json#/components/schemas/Event",
"type": "object",
"properties": {
"sequence_number": {
"type": "integer",
"minimum": 1,
"description": "Ordering key within the match."
},
"elapsed": {
"type": "integer",
"minimum": 0,
"description": "Soccer minute from the live adapter."
},
"elapsed_extra": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"team": {
"type": [
"string",
"null"
]
},
"player_name": {
"type": [
"string",
"null"
]
},
"player_id": {
"type": [
"string",
"null"
]
},
"headshot_url": {
"type": [
"string",
"null"
],
"format": "uri"
},
"assist_name": {
"type": [
"string",
"null"
]
},
"assist_id": {
"type": [
"string",
"null"
]
},
"assist_headshot_url": {
"type": [
"string",
"null"
],
"format": "uri"
},
"event_type": {
"type": [
"string",
"null"
]
},
"event_detail": {
"type": [
"string",
"null"
]
},
"card_class": {
"type": [
"string",
"null"
],
"enum": [
"second_yellow",
"straight_red",
"yellow",
null
],
"description": "Football only. Whether a dismissal was a SECOND YELLOW or a DIRECT (straight) RED, derived from the player's card sequence in this match, because the upstream feed labels every card either `Yellow Card` or `Red Card` and states nothing more. `event_detail` is unchanged and still carries the upstream label verbatim. Definitions, applied consistently: `second_yellow` means the player has exactly two yellows and exactly one red in this match; `straight_red` means exactly one red and no yellow; `yellow` is any booking. `null` means WE WILL NOT SAY, and for a red card that is a deliberate verdict rather than missing data: it covers a red following exactly one booking (which cannot be told apart from a second yellow with a missing first booking), any player-match where VAR reviewed, upgraded or cancelled a card, more than one dismissal for one player, and events whose player cannot be identified. An unlabelled red is still returned in full."
},
"period": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"period_display": {
"type": [
"string",
"null"
]
},
"clock": {
"oneOf": [
{
"$ref": "#/$defs/Clock"
},
{
"type": "null"
}
],
"description": "Null on feeds that carry no clock; 8 of 8 sampled baseball events were null."
},
"type": {
"type": "string"
},
"team_id": {
"$ref": "#/$defs/StoredId"
},
"related_player_id": {
"$ref": "#/$defs/StoredId"
},
"description": {
"type": "string"
},
"scoring_play": {
"type": "boolean"
},
"score_value": {
"type": [
"integer",
"null"
],
"description": "Points/runs this event added."
},
"home_score": {
"type": [
"integer",
"null"
],
"description": "Running home score AFTER this event."
},
"away_score": {
"type": [
"integer",
"null"
],
"description": "Running away score AFTER this event."
},
"coordinate_x": {
"oneOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Soccer shot location: the SHOOTER's position on a 0-100 normalised pitch. `null` on non-shot events and on any event from a feed that carries no positions."
},
"coordinate_y": {
"oneOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"xg": {
"oneOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Expected goals for a shot, 0-1. `null` means the source does not model xG for this event, never \"zero chance\"."
},
"xgot": {
"oneOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Expected goals on target. Present only for shots that were on target; `null` for misses and blocks by design."
},
"down": {
"oneOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 4
},
{
"type": "null"
}
],
"description": "NFL down; null for plays without a down and for non-NFL events."
},
"distance": {
"oneOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "NFL yards to gain; null for non-NFL events."
},
"yards_to_endzone": {
"oneOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "NFL field position measured in yards from the opponent end zone."
},
"yards_gained": {
"oneOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "NFL yards gained on the play; null for non-NFL events."
},
"epa": {
"oneOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "NFL expected points added; null when unavailable or on non-NFL events."
},
"win_probability": {
"oneOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1
},
{
"type": "null"
}
],
"description": "NFL possession-team win probability after the play."
},
"defending_team_id": {
"oneOf": [
{
"$ref": "#/$defs/StoredId"
},
{
"type": "null"
}
],
"description": "Canonical defending-team UUID on NFL rows; null otherwise."
}
},
"$defs": {
"Clock": {
"type": "object",
"required": [
"elapsed_seconds",
"period"
],
"properties": {
"elapsed_seconds": {
"type": "integer",
"minimum": 0
},
"period": {
"type": "integer",
"minimum": 0,
"maximum": 20
},
"added_seconds": {
"type": "integer",
"minimum": 0
}
}
},
"StoredId": {
"type": "string",
"format": "uuid",
"description": "A stored BigBalls id. This is the identifier every match, team, player and league endpoint returns, and the one every `{id}` path segment accepts. Take it from the `id` field of the corresponding list endpoint and use it as-is."
}
}
}
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
curl "https://apis.io/api/v1/json-schemas/bigballsdata-com-event"
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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.