{
"id": "gg.postmatch.rocketleague.defs",
"defs": {
"side": {
"enum": [
"blue",
"orange"
],
"type": "string",
"description": "An intrinsic Rocket League team side."
},
"team": {
"type": "object",
"required": [
"side",
"score"
],
"properties": {
"side": {
"ref": "#side",
"type": "ref"
},
"score": {
"type": "integer",
"minimum": 0,
"description": "Final observed team score."
}
},
"description": "Final score for one intrinsic Rocket League side."
},
"player": {
"type": "object",
"required": [
"matchPlayerKey",
"alias",
"side",
"stats"
],
"properties": {
"side": {
"ref": "#side",
"type": "ref",
"description": "Intrinsic blue or orange side assigned to this player in the observed match."
},
"alias": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Public in-game display name observed on the final scoreboard.",
"maxGraphemes": 32
},
"stats": {
"ref": "#playerStats",
"type": "ref"
},
"matchPlayerKey": {
"type": "integer",
"minimum": 0,
"description": "Rocket League Shortcut value; unique only within this report and never a durable account identifier."
}
},
"description": "A public final-scoreboard row identified only within this observed match."
},
"liveCapture": {
"type": "object",
"required": [
"source",
"transport",
"collectorVersion",
"endEvidence",
"finalSnapshot"
],
"properties": {
"source": {
"type": "string",
"const": "rocket-league-game-data-api",
"description": "Source API used for this observation."
},
"transport": {
"type": "string",
"const": "websocket",
"description": "Transport used to receive the live frames."
},
"endEvidence": {
"enum": [
"match-ended-event",
"score-derived"
],
"type": "string",
"description": "Evidence used to decide that the match was complete. match-ended-event means Rocket League emitted MatchEnded. score-derived means teardown arrived without MatchEnded and the collector inferred completion only from a decisive overtime score or a non-tied regulation score at zero seconds."
},
"finalSnapshot": {
"enum": [
"after-match-ended",
"before-match-ended"
],
"type": "string",
"description": "Where the final scoreboard snapshot sat relative to an observed MatchEnded event. after-match-ended is the usual case. before-match-ended means the accumulated last in-match snapshot was used; endEvidence says whether MatchEnded was observed or completion was score-derived."
},
"collectorVersion": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Version of the Postmatch collector that assembled this report."
}
},
"description": "Provenance for a complete report produced from Rocket League's live Game Data API."
},
"playerStats": {
"type": "object",
"required": [
"score",
"goals",
"shots",
"assists",
"saves",
"demos",
"touches"
],
"properties": {
"demos": {
"type": "integer",
"minimum": 0
},
"goals": {
"type": "integer",
"minimum": 0
},
"saves": {
"type": "integer",
"minimum": 0
},
"score": {
"type": "integer",
"minimum": 0,
"description": "In-game scoreboard points, not goals."
},
"shots": {
"type": "integer",
"minimum": 0
},
"assists": {
"type": "integer",
"minimum": 0
},
"touches": {
"type": "integer",
"minimum": 0,
"description": "Ball touches; car-to-car contact is not included."
}
},
"description": "Final Rocket League scoreboard totals for one match player."
},
"reportingPlayer": {
"type": "object",
"required": [
"matchPlayerKey"
],
"properties": {
"matchPlayerKey": {
"type": "integer",
"minimum": 0,
"description": "Must resolve to exactly one player row in this report."
}
},
"description": "Identifies which match-scoped scoreboard row represents the author of this repository record."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "Reusable definitions for complete Rocket League matches observed by the Postmatch live collector."
}