HTTP v1 reference
Generated from the exact bundled OpenAPI contract. Every operation requires a private bearer token. See Integration for process lifetime, Requests for identity/roster selection and Controls for lease/precondition rules. JSON schemas below define the exact field domains; runtime capability and precondition checks still apply.
GET /v1/session
Capabilities and versions
{
"summary": "Capabilities and versions",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/health
Source freshness
{
"summary": "Source freshness",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/results
Durable result outbox
{
"summary": "Durable result outbox",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ResultPage"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"parameters": [
{
"name": "consumer_id",
"in": "query",
"schema": {
"type": "string"
}
}
]
}
GET /v1/matches/{id}
Managed match
{
"summary": "Managed match",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Match"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
}
]
}
GET /v1/snapshot
Latest observed snapshot
{
"summary": "Latest observed snapshot",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Snapshot"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/events
Durable observation replay
{
"summary": "Durable observation replay",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EventPage"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"parameters": [
{
"name": "after",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "string"
}
}
]
}
GET /v1/commands/{id}
Command receipt
{
"summary": "Command receipt",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Receipt"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
}
]
}
POST /v1/matches
Bind current playing roster
{
"summary": "Bind current playing roster",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Bind"
}
}
}
}
}
POST /v1/matches/{id}/resume
Explicit timeline continuation
{
"summary": "Explicit timeline continuation",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Resume"
}
}
}
}
}
POST /v1/matches/{id}/abandon
Abandon incomplete match
{
"summary": "Abandon incomplete match",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Abandon"
}
}
}
}
}
POST /v1/control/lease
Acquire or renew exclusive lease
{
"summary": "Acquire or renew exclusive lease",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Lease"
}
}
}
}
}
POST /v1/control/release
Release lease
{
"summary": "Release lease",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Release"
}
}
}
}
}
POST /v1/commands
Guarded native settings, preparation, launch and owned-session commands
{
"summary": "Guarded native settings, preparation, launch and owned-session commands",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Command"
}
}
}
}
}
POST /v1/results/ack
Acknowledge consumer result
{
"summary": "Acknowledge consumer result",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Ack"
}
}
}
}
}
GET /v1/stream
SSE observation replay; reconnect after25 seconds
{
"summary": "SSE observation replay; reconnect after25 seconds",
"responses": {
"200": {
"description": "Success",
"content": {
"text/event-stream": {
"schema": {
"type": "string"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"parameters": [
{
"name": "after",
"in": "query",
"schema": {
"type": "string"
}
}
]
}
GET /v1/settings
Observed native settings, coaching and per-opponent defensive configuration
{
"summary": "Observed native settings, coaching and per-opponent defensive configuration",
"responses": {
"200": {
"description": "Current settings",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SettingsResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/preparation
Current pre-simulation exhibition configuration and loaded arena/playbook choices
{
"summary": "Current pre-simulation exhibition configuration and loaded arena/playbook choices",
"responses": {
"200": {
"description": "Current exhibition preparation and loaded choices",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PreparationResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/preparation/catalog
Read a page of team or uniform rows on the game thread (ABI15)
{
"summary": "Read a page of team or uniform rows on the game thread (ABI15)",
"parameters": [
{
"name": "kind",
"in": "query",
"required": true,
"schema": {
"enum": [
"teams",
"uniforms"
]
}
},
{
"name": "start",
"in": "query",
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 65535,
"default": 0
}
},
{
"name": "catalog_id",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "A page from the current loaded roster catalog",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PreparationCatalogResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/launch
Current native startup/load/Start context (ABI16)
{
"summary": "Current native startup/load/Start context (ABI16)",
"responses": {
"200": {
"description": "Current native startup/load/Start context (ABI16)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LaunchResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
POST /v1/rosters
Import a hash-bound local standalone ROS without loading it
{
"summary": "Import a hash-bound local standalone ROS without loading it",
"responses": {
"200": {
"description": "Import a hash-bound local standalone ROS without loading it",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterMetadata"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterImport"
}
}
}
}
}
GET /v1/rosters/{sha256}
Read admitted immutable roster metadata; not a native-load assertion
{
"summary": "Read admitted immutable roster metadata; not a native-load assertion",
"responses": {
"200": {
"description": "Read admitted immutable roster metadata; not a native-load assertion",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterMetadata"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
PUT /v1/rosters/{sha256}
Upload a stock/expanded standalone ROS with exact SHA256; source bytes remain unchanged
{
"summary": "Upload a stock/expanded standalone ROS with exact SHA256; source bytes remain unchanged",
"responses": {
"200": {
"description": "Upload a stock/expanded standalone ROS with exact SHA256; source bytes remain unchanged",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterMetadata"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary",
"description": "Exactly 2672672 or 16777248 bytes; one Content-Length, no Transfer-Encoding"
}
}
}
}
}
GET /v1/lifecycle
Inspect ownership and lifetime of the broker-launched game
{
"summary": "Inspect ownership and lifetime of the broker-launched game",
"responses": {
"200": {
"description": "Owned process observation; attached games have no stop authority",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Lifecycle"
}
}
}
}
}
}
GET /v1/launch/settings
Named startup preset catalog and original-setter readback status (ABI19)
{
"summary": "Named startup preset catalog and original-setter readback status (ABI19)",
"responses": {
"200": {
"description": "Runtime preset contract, no device/team assignment",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StartupSettingsResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/roster-tools
Optional shared writer availability and named table inventory
{
"summary": "Optional shared writer availability and named table inventory",
"responses": {
"200": {
"description": "RosterTools",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterTools"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/roster-tools/fields
Paged named roster fields without binary layout offsets
{
"summary": "Paged named roster fields without binary layout offsets",
"parameters": [
{
"name": "table",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "start",
"in": "query",
"schema": {
"type": "integer",
"minimum": 0
}
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 256
}
}
],
"responses": {
"200": {
"description": "RosterFieldPage",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterFieldPage"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
POST /v1/rosters/query
Read named fields from an immutable registered ROS
{
"summary": "Read named fields from an immutable registered ROS",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterQueryRequest"
}
}
}
},
"responses": {
"200": {
"description": "RosterQueryResponse",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterQueryResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
POST /v1/rosters/edit
Write named field edits to a new registered ROS; no game mutation
{
"summary": "Write named field edits to a new registered ROS; no game mutation",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterEditRequest"
}
}
}
},
"responses": {
"200": {
"description": "RosterAuthoringReceipt",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterAuthoringReceipt"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
POST /v1/rosters/prepare
Prepare roster order, starters and native minute preferences in a new ROS
{
"summary": "Prepare roster order, starters and native minute preferences in a new ROS",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterPreparationRequest"
}
}
}
},
"responses": {
"200": {
"description": "RosterAuthoringReceipt",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterAuthoringReceipt"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/launch/request
Current or named durable match-request receipt; no automatic restart/replay
{
"summary": "Current or named durable match-request receipt; no automatic restart/replay",
"parameters": [
{
"name": "request_id",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Request progress and confirmed or unknown native outcome",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MatchRequestResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/rosters/{sha256}/content
Download verified immutable standalone ROS bytes
{
"summary": "Download verified immutable standalone ROS bytes",
"description": "Authenticated existing registered hash only. No arbitrary path, query, game mutation or partial transfer contract. ETag contains the exact SHA256.",
"parameters": [
{
"name": "sha256",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
}
}
],
"responses": {
"200": {
"description": "Exact registered ROS content",
"headers": {
"ETag": {
"schema": {
"type": "string"
}
},
"Content-Disposition": {
"schema": {
"type": "string"
}
}
},
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
}
},
"400": {
"description": "Invalid identity or stored content"
},
"401": {
"description": "Authentication required"
},
"404": {
"description": "Roster not registered"
}
}
}
GET /v1/substitutions/requests
Read durable substitution request observations
{
"summary": "Read durable substitution request observations",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubstitutionRequestPage"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/substitutions/requests/{id}
Read durable substitution request observations
{
"summary": "Read durable substitution request observations",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubstitutionRequest"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
}
]
}
GET /v1/input-devices
Connected native input slots and control-record observations
{
"summary": "Connected native input slots and control-record observations",
"responses": {
"200": {
"description": "Process-local input catalog",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"run_id": {
"type": [
"string",
"null"
]
},
"health": {
"type": "string"
},
"catalog": {
"oneOf": [
{
"$ref": "#/components/schemas/InputDevices"
},
{
"type": "null"
}
]
}
},
"required": [
"run_id",
"health",
"catalog"
],
"additionalProperties": false
}
}
}
}
}
}
GET /v1/rotations/plans
Durable rotation schedule observations, newest100
{
"summary": "Durable rotation schedule observations, newest100",
"responses": {
"200": {
"description": "Durable plan history",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"plans": {
"type": "array",
"maxItems": 100,
"items": {
"$ref": "#/components/schemas/RotationPlanObservation"
}
},
"limit": {
"const": 100
}
},
"required": [
"plans",
"limit"
],
"additionalProperties": false
}
}
}
}
}
}
POST /v1/roster-metadata
Admit an immutable hash-bound local companion
{
"summary": "Admit an immutable hash-bound local companion",
"responses": {
"200": {
"description": "Admit an immutable hash-bound local companion",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterCompanionInfo"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterImport"
}
}
}
}
}
GET /v1/roster-metadata/{sha256}
Read the descriptor of an immutable companion
{
"summary": "Read the descriptor of an immutable companion",
"responses": {
"200": {
"description": "Read the descriptor of an immutable companion",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterCompanionInfo"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
PUT /v1/roster-metadata/{sha256}
Upload a1–16MiB exact companion JSON; roster must already be registered
{
"summary": "Upload a1\u201316MiB exact companion JSON; roster must already be registered",
"responses": {
"200": {
"description": "Upload a stock/expanded standalone ROS with exact SHA256; source bytes remain unchanged",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterCompanionInfo"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterCompanion"
}
}
}
}
}
GET /v1/roster-metadata/{sha256}/content
Download verified companion bytes with SHA256 ETag
{
"summary": "Download verified companion bytes with SHA256 ETag",
"responses": {
"200": {
"description": "Download verified companion bytes with SHA256 ETag",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterCompanion"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
POST /v1/roster-metadata/query
Page all companion scopes without guessing native effects
{
"summary": "Page all companion scopes without guessing native effects",
"responses": {
"200": {
"description": "Page all companion scopes without guessing native effects",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterMetadataPage"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterMetadataQuery"
}
}
}
}
}
POST /v1/roster-metadata/resolve
Validate selection, source rows and effective overrides before native Start
{
"summary": "Validate selection, source rows and effective overrides before native Start",
"responses": {
"200": {
"description": "Validate selection, source rows and effective overrides before native Start",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterContextSpec"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RosterMetadataResolve"
}
}
}
}
}
GET /v1/roster-metadata/catalog
Read the standard optional college vocabulary
{
"summary": "Read the standard optional college vocabulary",
"responses": {
"200": {
"description": "Read the standard optional college vocabulary",
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "Exact version1 openhoops.college.fields catalog with91 optional definitions and scopes."
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/rules
Rule extension capabilities, frozen configuration and integrity
{
"summary": "Rule extension capabilities, frozen configuration and integrity",
"responses": {
"200": {
"description": "Rule extension capabilities, frozen configuration and integrity",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RuleRuntimeResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/ball-state
Per-field engine-committed ball state
{
"summary": "Per-field engine-committed ball state",
"responses": {
"200": {
"description": "Per-field engine-committed ball state",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LegalBallResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
GET /v1/platform
{
"responses": {
"200": {
"description": "Checked platform data",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NativePlatformResponse"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
POST /v1/asset-packages
{
"responses": {
"200": {
"description": "Checked platform data",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetPackageDescriptor"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"path",
"sha256"
],
"additionalProperties": false
}
}
}
}
}
POST /v1/asset-packages/selection
{
"responses": {
"200": {
"description": "Checked platform data",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetOverlay"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^asset-package:[a-f0-9]{64}$"
},
"maxItems": 8,
"minItems": 1,
"uniqueItems": true
}
},
"required": [
"ids"
],
"additionalProperties": false
}
}
}
}
}
GET /v1/asset-packages/{sha256}
{
"responses": {
"200": {
"description": "Checked platform data",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetPackageDescriptor"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"parameters": [
{
"name": "sha256",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
}
]
}
PUT /v1/asset-packages/{sha256}
{
"responses": {
"200": {
"description": "Checked platform data",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetPackageDescriptor"
}
}
}
},
"default": {
"description": "Structured failure (400/401/403/404/409/413/415/422/500/503)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
},
"requestBody": {
"required": true,
"content": {
"application/zip": {
"schema": {
"type": "string",
"format": "binary"
}
}
}
},
"parameters": [
{
"name": "sha256",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
}
]
}
POST /v1/compatibility
Read-only static match preflight. Scratch validation never reserves a request or starts a game; a pass does not establish live readiness.
{
"description": "Read-only static match preflight. Scratch validation never reserves a request or starts a game; a pass does not establish live readiness.",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CompatibilityRequest"
}
}
}
},
"responses": {
"200": {
"description": "Static compatibility report, including explicit failures/unknowns.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CompatibilityReport"
}
}
}
},
"default": {
"description": "HTTP contract error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
Schema: Stats
{
"type": "object",
"properties": {
"points": {
"type": "integer"
},
"ftm": {
"type": "integer"
},
"fta": {
"type": "integer"
},
"two_made": {
"type": "integer"
},
"two_attempts": {
"type": "integer"
},
"three_made": {
"type": "integer"
},
"three_attempts": {
"type": "integer"
},
"offensive_rebounds": {
"type": "integer"
},
"defensive_rebounds": {
"type": "integer"
},
"assists": {
"type": "integer"
},
"steals": {
"type": "integer"
},
"blocks": {
"type": "integer"
},
"turnovers": {
"type": "integer"
},
"fouls": {
"type": "integer"
},
"fgm": {
"type": "integer"
},
"fga": {
"type": "integer"
},
"total_rebounds": {
"type": "integer"
},
"plus_minus": {
"type": "integer"
},
"seconds_played": {
"type": [
"number",
"null"
]
}
},
"required": [
"points",
"ftm",
"fta",
"two_made",
"two_attempts",
"three_made",
"three_attempts",
"offensive_rebounds",
"defensive_rebounds",
"assists",
"steals",
"blocks",
"turnovers",
"fouls",
"fgm",
"fga",
"total_rebounds"
],
"additionalProperties": true
}
Schema: Player
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"side": {
"enum": [
"home",
"away"
]
},
"slot": {
"type": "integer"
},
"name": {
"type": "string"
},
"on_court": {
"type": "boolean"
},
"stats": {
"$ref": "#/components/schemas/Stats"
},
"position": {
"type": [
"array",
"null"
],
"items": {
"type": [
"number",
"null"
]
},
"minItems": 3,
"maxItems": 3
},
"court_contact_samples": {
"type": "object",
"description": "Four original geometry samples plus original boundary projection; not authoritative shot/violation adjudication.",
"properties": {
"points": {
"type": "array",
"minItems": 4,
"maxItems": 4,
"items": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"items": {
"type": "number"
}
}
},
"boundary_projection": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"items": {
"type": "number"
}
},
"boundary_projection_predicate_result": {
"type": "integer"
},
"any_sample_on_or_beyond_boundary": {
"type": "boolean"
},
"coordinate_space": {
"const": "game_world_centimeters"
},
"authority": {
"const": "original_four_point_transform_and_boundary_projection"
},
"legal_out_of_bounds_event_inferred": {
"const": false
},
"shot_value_inferred": {
"const": false
}
},
"required": [
"points",
"boundary_projection",
"boundary_projection_predicate_result",
"any_sample_on_or_beyond_boundary",
"coordinate_space",
"authority",
"legal_out_of_bounds_event_inferred",
"shot_value_inferred"
],
"additionalProperties": false
}
},
"required": [
"key",
"side",
"slot",
"name",
"on_court",
"stats",
"position"
],
"additionalProperties": true
}
Schema: Team
{
"type": "object",
"properties": {
"stats": {
"$ref": "#/components/schemas/Stats"
},
"box_score_team_fouls": {
"type": "integer"
},
"team_only_turnovers": {
"type": "integer"
},
"scoring_buckets": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"regulation": {
"type": "array",
"items": {
"type": "integer"
},
"minItems": 4,
"maxItems": 4
},
"overtime_combined": {
"type": "integer"
},
"regulation_periods": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"enum": [
"half",
"overtime"
]
},
"number": {
"type": "integer",
"minimum": 1
},
"raw_period": {
"type": "integer",
"minimum": 1
},
"points": {
"type": "integer",
"minimum": 0
}
},
"required": [
"type",
"number",
"raw_period",
"points"
],
"additionalProperties": false
}
}
},
"required": [
"total",
"regulation",
"overtime_combined"
],
"additionalProperties": true
},
"qualifying_fouls": {
"type": "integer"
},
"last_two_minutes_qualifying_fouls": {
"type": "integer"
},
"bonus_threshold_reached": {
"type": "boolean"
},
"timeouts": {
"type": "object",
"properties": {
"full": {
"type": "integer"
},
"short": {
"type": "integer"
}
},
"required": [
"full",
"short"
],
"additionalProperties": true
},
"bonus": {
"type": "object",
"properties": {
"against_team": {
"enum": [
"none",
"one_and_one",
"double_bonus"
]
},
"qualifying_fouls": {
"type": "integer"
},
"one_and_one_threshold": {
"type": "integer",
"minimum": 1,
"maximum": 2147483647
},
"double_bonus_threshold": {
"type": "integer",
"minimum": 1,
"maximum": 2147483647
},
"authority": {
"const": "qualifying_foul_counter"
},
"individual_foul_eligibility_inferred": {
"const": false
}
},
"required": [
"against_team",
"qualifying_fouls",
"one_and_one_threshold",
"double_bonus_threshold",
"authority",
"individual_foul_eligibility_inferred"
],
"additionalProperties": false
}
},
"required": [
"stats",
"box_score_team_fouls",
"team_only_turnovers",
"scoring_buckets",
"qualifying_fouls",
"last_two_minutes_qualifying_fouls",
"bonus_threshold_reached",
"timeouts"
],
"additionalProperties": true
}
Schema: Snapshot
{
"type": "object",
"properties": {
"run_id": {
"type": "string"
},
"source_sequence": {
"type": "integer"
},
"source_tick_ms": {
"type": "integer"
},
"adapter_errors": {
"type": "integer"
},
"valid": {
"type": "boolean"
},
"boundary": {
"type": "string"
},
"coherence": {
"type": "string"
},
"phase_code": {
"type": "integer"
},
"raw_period": {
"type": "integer"
},
"finished": {
"type": "boolean"
},
"winner": {
"enum": [
"home",
"away",
null
]
},
"clocks": {
"type": "object",
"properties": {
"game_seconds": {
"type": [
"number",
"null"
]
},
"shot_seconds": {
"type": [
"number",
"null"
]
},
"backcourt_seconds": {
"type": [
"number",
"null"
]
},
"game_timer_flags": {
"type": "integer"
},
"shot_timer_flags": {
"type": "integer"
},
"paused": {
"type": [
"boolean",
"null"
]
},
"replay_active": {
"type": [
"boolean",
"null"
]
}
},
"required": [
"game_seconds",
"shot_seconds",
"backcourt_seconds",
"game_timer_flags",
"shot_timer_flags",
"paused",
"replay_active"
],
"additionalProperties": true
},
"ball": {
"type": "object",
"properties": {
"attached_player_key": {
"type": [
"string",
"null"
]
},
"legal_possession": {
"type": "null"
},
"live": {
"type": "null"
},
"holder": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"player_key": {
"type": "string"
},
"team": {
"enum": [
"home",
"away"
]
},
"authority": {
"const": "physical_ball_attachment"
}
},
"required": [
"player_key",
"team",
"authority"
],
"additionalProperties": false
}
],
"description": "Current on-court roster attachment only. Null is not a possession change."
}
},
"required": [
"attached_player_key",
"legal_possession",
"live"
],
"additionalProperties": true
},
"rules": {
"type": "object",
"properties": {
"bonus_selector": {
"type": "integer"
},
"parameters": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"authority": {
"const": "engine_parameter_snapshot"
},
"three_point_selector": {
"type": "integer",
"minimum": 0
},
"backcourt_selector": {
"type": "integer",
"minimum": 0
},
"period_duration_seconds": {
"type": [
"number",
"null"
]
},
"full_shot_clock_seconds": {
"type": [
"number",
"null"
]
},
"conditional_shot_clock_minimum_seconds": {
"type": [
"number",
"null"
]
},
"three_point_geometry": {
"type": "object",
"additionalProperties": false,
"properties": {
"units": {
"const": "game_units"
},
"arc_radius": {
"type": [
"number",
"null"
]
},
"corner_half_width": {
"type": [
"number",
"null"
]
},
"corner_start_oriented_z": {
"type": [
"number",
"null"
]
},
"basket_oriented_z": {
"type": [
"number",
"null"
]
}
},
"required": [
"units",
"arc_radius",
"corner_half_width",
"corner_start_oriented_z",
"basket_oriented_z"
]
},
"backcourt_duration_seconds": {
"type": "number",
"minimum": 1,
"maximum": 120
}
},
"required": [
"authority",
"three_point_selector",
"backcourt_selector",
"period_duration_seconds",
"full_shot_clock_seconds",
"conditional_shot_clock_minimum_seconds",
"three_point_geometry"
]
}
]
},
"profile": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/RuleProfile"
}
]
},
"period": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"type": {
"enum": [
"half",
"overtime"
]
},
"number": {
"type": "integer",
"minimum": 1
},
"raw_period": {
"type": "integer",
"minimum": 1
},
"at_boundary": {
"type": "boolean"
},
"authority": {
"const": "adapter_period_mapping"
}
},
"required": [
"type",
"number",
"raw_period",
"at_boundary",
"authority"
],
"additionalProperties": false
}
]
},
"media_timeouts": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/MediaTimeouts"
}
]
},
"court": {
"type": "object",
"description": "NCAA court definition with adapter parameter alignment and explicit verification limits. Present only for college profile revision3+.",
"additionalProperties": true,
"properties": {
"definition_id": {
"const": "ncaa_mens_2026_27"
},
"definition_revision": {
"type": "integer",
"enum": [
2,
3
]
},
"units": {
"const": "centimeters"
},
"geometry": {
"type": "object"
},
"alignment": {
"type": "object"
},
"texture_mapping": {
"type": "object"
}
},
"required": [
"definition_id",
"definition_revision",
"units",
"geometry",
"alignment",
"texture_mapping"
]
},
"court_observation": {
"type": "object",
"description": "Actual runtime court boundaries, physical basket reference and offensive direction; ABI14+.",
"properties": {
"units": {
"const": "centimeters"
},
"boundary_half_width": {
"type": "number"
},
"boundary_half_length": {
"type": "number"
},
"legacy_basket_reference_oriented_z": {
"type": [
"number",
"null"
]
},
"offensive_direction": {
"enum": [
-1,
1,
null
]
},
"authority": {
"const": "original_geometry_routines_on_game_thread"
}
},
"required": [
"units",
"boundary_half_width",
"boundary_half_length",
"legacy_basket_reference_oriented_z",
"offensive_direction",
"authority"
],
"additionalProperties": false
}
},
"required": [
"bonus_selector"
],
"additionalProperties": true,
"description": "Recovered parameters, declared profile/logical period, media ownership and court observations where available. Full-rulebook and legal-ball-state certification are not implied."
},
"free_throws": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"remaining": {
"type": "integer"
},
"award": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"kind_code": {
"type": "integer",
"minimum": 0
},
"kind_name": {
"enum": [
"shooting",
"non_shooting_bonus",
null,
"one_and_one",
"double_bonus"
]
},
"shooter_player_key": {
"type": [
"string",
"null"
]
},
"authority": {
"const": "engine_free_throw_schedule"
}
},
"required": [
"kind_code",
"kind_name",
"shooter_player_key",
"authority"
],
"additionalProperties": false
}
]
}
},
"required": [
"total",
"remaining"
],
"additionalProperties": true
},
"teams": {
"type": "object",
"properties": {
"home": {
"$ref": "#/components/schemas/Team"
},
"away": {
"$ref": "#/components/schemas/Team"
}
},
"required": [
"home",
"away"
],
"additionalProperties": true
},
"players": {
"type": "array",
"maxItems": 40,
"items": {
"$ref": "#/components/schemas/Player"
}
},
"roster_fingerprint": {
"type": "string"
},
"health": {
"type": "string"
},
"age_seconds": {
"type": [
"number",
"null"
]
},
"match_id": {
"type": [
"string",
"null"
]
},
"timeline_revision": {
"type": [
"integer",
"null"
]
},
"engine_event_boundary": {
"type": [
"object",
"null"
],
"properties": {
"sequence": {
"type": "integer",
"minimum": 0
},
"faults": {
"type": "integer",
"minimum": 0
}
},
"required": [
"sequence",
"faults"
],
"additionalProperties": false,
"description": "ABI v3 ordered record watermark copied with this frame; null on older adapters."
},
"adapter_abi_version": {
"type": "integer",
"minimum": 1,
"description": "Private producer layout revision, used for capability negotiation; not a cross-platform public ABI promise."
},
"presentation": {
"type": "object",
"properties": {
"state": {
"enum": [
"pregame",
"inbound",
"play",
"period_ending",
"halftime",
"between_periods",
"free_throw",
"stoppage",
"postgame",
"timeout",
null
]
},
"authority": {
"const": "observed_engine_phase"
},
"scope": {
"enum": [
"four_quarter_exhibition",
"college_research_exhibition"
]
},
"legal_ball_state": {
"const": false
}
},
"required": [
"state",
"authority",
"scope",
"legal_ball_state"
],
"additionalProperties": false,
"description": "Observed presentation cue, including timeout. Unknown phases remain null; pause/replay are independent; not legal ball state."
},
"settings": {
"$ref": "#/components/schemas/GameSettings"
},
"options": {
"$ref": "#/components/schemas/GameOptions"
},
"controllers": {
"$ref": "#/components/schemas/ControllerSettings"
},
"cameras": {
"anyOf": [
{
"$ref": "#/components/schemas/CameraState"
},
{
"type": "null"
}
]
},
"timeout": {
"anyOf": [
{
"$ref": "#/components/schemas/TimeoutContext"
},
{
"type": "null"
}
]
},
"launch": {
"$ref": "#/components/schemas/LaunchState"
},
"startup": {
"$ref": "#/components/schemas/StartupState"
},
"launch_rules": {
"anyOf": [
{
"$ref": "#/components/schemas/LaunchRules"
},
{
"type": "null"
}
]
},
"startup_settings": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/StartupSettingsState"
}
]
},
"startup_camera": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/StartupCameraState"
}
]
},
"participation": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ParticipationState"
}
]
},
"coaching": {
"anyOf": [
{
"$ref": "#/components/schemas/CoachingState"
},
{
"type": "null"
}
]
},
"defense": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/DefenseState"
}
]
},
"simulation_control": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/SimulationControl"
}
]
},
"substitutions": {
"anyOf": [
{
"$ref": "#/components/schemas/Substitutions"
},
{
"type": "null"
}
]
},
"timeout_control": {
"oneOf": [
{
"$ref": "#/components/schemas/TimeoutControl"
},
{
"type": "null"
}
]
},
"rotations": {
"oneOf": [
{
"$ref": "#/components/schemas/Rotations"
},
{
"type": "null"
}
]
},
"input_devices": {
"oneOf": [
{
"$ref": "#/components/schemas/InputDevices"
},
{
"type": "null"
}
]
},
"roster_context": {
"$ref": "#/components/schemas/RosterContextReference"
},
"legal_ball": {
"$ref": "#/components/schemas/LegalBallState"
},
"rule_runtime": {
"$ref": "#/components/schemas/RuleRuntime"
},
"extension_platform": {
"anyOf": [
{
"$ref": "#/components/schemas/NativePlatform"
},
{
"type": "null"
}
]
}
},
"required": [
"run_id",
"source_sequence",
"source_tick_ms",
"adapter_errors",
"valid",
"boundary",
"coherence",
"phase_code",
"raw_period",
"finished",
"winner",
"clocks",
"ball",
"rules",
"free_throws",
"teams",
"players",
"roster_fingerprint",
"health",
"age_seconds",
"match_id",
"timeline_revision"
],
"additionalProperties": true
}
Schema: Bind
{
"type": "object",
"properties": {
"match_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"run_id": {
"type": "string"
},
"roster_fingerprint": {
"type": "string"
},
"teams": {
"type": "object",
"properties": {
"home": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"away": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
},
"required": [
"home",
"away"
],
"additionalProperties": true
},
"players": {
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
},
"ruleset": {
"type": "object"
},
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"expected_names": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"roster_context": {
"$ref": "#/components/schemas/RosterContextSpec"
}
},
"required": [
"match_id",
"client_id",
"run_id",
"roster_fingerprint",
"teams",
"players",
"ruleset"
],
"additionalProperties": true
}
Schema: Resume
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"run_id": {
"type": "string"
},
"expected_revision": {
"type": "integer"
}
},
"required": [
"client_id",
"run_id",
"expected_revision"
],
"additionalProperties": true
}
Schema: Abandon
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
},
"required": [
"client_id"
],
"additionalProperties": true
}
Schema: Lease
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"ttl_seconds": {
"type": "number",
"minimum": 1,
"maximum": 60,
"default": 30
},
"lease_token": {
"type": "string"
}
},
"required": [
"client_id"
],
"additionalProperties": true
}
Schema: Release
{
"type": "object",
"properties": {
"lease_token": {
"type": "string"
}
},
"required": [
"lease_token"
],
"additionalProperties": true
}
Schema: Ack
{
"type": "object",
"properties": {
"consumer_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"match_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"revision": {
"type": "integer",
"minimum": 1
}
},
"required": [
"consumer_id",
"match_id",
"revision"
],
"additionalProperties": true
}
Schema: Command
{
"oneOf": [
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"type": {
"enum": [
"clock.set",
"shot_clock.set",
"slider.set",
"option.set",
"controller.set",
"camera.select",
"camera.set",
"preparation.set"
]
},
"expected_period": {
"type": "integer"
},
"expected_value": {
"oneOf": [
{
"type": "number",
"minimum": 0,
"maximum": 3600
},
{
"type": "string",
"pattern": "^(arena|playbook|team-row|uniform-row):[0-9]+$"
}
]
},
"value": {
"oneOf": [
{
"type": "number",
"minimum": 0,
"maximum": 3600
},
{
"type": "string",
"pattern": "^(arena|playbook|team-row|uniform-row):[0-9]+$"
}
]
},
"setting_id": {
"type": "string"
},
"side": {
"enum": [
"user",
"cpu"
]
},
"player_slot": {
"type": "integer",
"minimum": 0,
"maximum": 9,
"description": "Stored controller preference slot, not a roster player or connection state."
},
"camera_id": {
"enum": [
"broadcast_stadium",
"broadcast_generic",
"beluba",
"parametric",
"press",
"2k",
"player_lock",
"turbo",
"action",
"action_2",
"nosebleeds",
"skybox",
"side",
"drive",
"showtime",
"wire",
"high",
"iso",
"dunk_cam",
"coach_view",
"broadcast_dynamic",
"drill_high",
"drill_2k",
"bench",
"horse",
"training_camp"
]
},
"expected_camera_id": {
"enum": [
"broadcast_stadium",
"broadcast_generic",
"beluba",
"parametric",
"press",
"2k",
"player_lock",
"turbo",
"action",
"action_2",
"nosebleeds",
"skybox",
"side",
"drive",
"showtime",
"wire",
"high",
"iso",
"dunk_cam",
"coach_view",
"broadcast_dynamic",
"drill_high",
"drill_2k",
"bench",
"horse",
"training_camp"
]
},
"expected_revision": {
"type": "integer",
"minimum": 1
}
},
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"type"
],
"additionalProperties": true,
"allOf": [
{
"if": {
"properties": {
"type": {
"const": "slider.set"
}
},
"required": [
"type"
]
},
"then": {
"required": [
"setting_id",
"side"
],
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
}
}
},
{
"if": {
"properties": {
"type": {
"const": "option.set"
}
},
"required": [
"type"
]
},
"then": {
"required": [
"setting_id"
],
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
}
}
},
{
"if": {
"properties": {
"type": {
"const": "controller.set"
}
},
"required": [
"type"
]
},
"then": {
"required": [
"setting_id",
"player_slot"
],
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
}
}
},
{
"if": {
"properties": {
"type": {
"const": "camera.select"
}
}
},
"then": {
"required": [
"camera_id",
"expected_camera_id"
]
},
"else": {
"required": [
"value",
"expected_value"
]
}
},
{
"if": {
"properties": {
"type": {
"const": "camera.set"
}
}
},
"then": {
"required": [
"camera_id",
"setting_id"
],
"properties": {
"setting_id": {
"enum": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
]
},
"value": {
"type": "integer",
"minimum": 0,
"maximum": 10
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 10
}
}
}
},
{
"if": {
"properties": {
"type": {
"const": "preparation.set"
}
}
},
"then": {
"required": [
"expected_revision",
"setting_id",
"value",
"expected_value"
],
"properties": {
"setting_id": {
"enum": [
"difficulty",
"game_speed",
"quarter_length_minutes",
"fatigue",
"injuries",
"arena",
"home_playbook",
"away_playbook",
"game_style",
"home_team",
"away_team",
"home_uniform",
"away_uniform"
]
}
}
},
"else": {
"required": [
"expected_period"
],
"properties": {
"value": {
"type": "number",
"minimum": 0,
"maximum": 3600
},
"expected_value": {
"type": "number",
"minimum": 0,
"maximum": 3600
}
}
}
}
]
},
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"type": {
"enum": [
"roster.load",
"match.start"
]
},
"expected_revision": {
"type": "integer",
"minimum": 1
},
"expected_launch_revision": {
"type": "integer",
"minimum": 1
},
"catalog_id": {
"type": "string"
},
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
}
},
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"type",
"expected_revision",
"expected_launch_revision",
"catalog_id",
"roster_id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "session.stop"
},
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"match_id": {
"type": [
"string",
"null"
]
},
"reason": {
"enum": [
"cancelled",
"finished"
]
}
},
"required": [
"type",
"command_id",
"client_id",
"lease_token",
"run_id",
"match_id",
"reason"
],
"additionalProperties": false
},
{
"$ref": "#/components/schemas/CoachingCommand"
},
{
"$ref": "#/components/schemas/DefensiveCommand"
},
{
"$ref": "#/components/schemas/SimulationCommand"
},
{
"$ref": "#/components/schemas/SubstitutionCommand"
},
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"expected_period": {
"type": "integer",
"minimum": 1,
"maximum": 36
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"type": {
"const": "timeout.call"
},
"side": {
"const": "home"
},
"kind": {
"enum": [
"short",
"full"
]
},
"expected_remaining": {
"type": "integer",
"minimum": 1,
"maximum": 64
}
},
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"expected_period",
"expected_revision",
"type",
"side",
"kind",
"expected_remaining"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"kind": {
"const": "full"
}
}
},
"then": {
"properties": {
"expected_remaining": {
"maximum": 32
}
}
}
}
]
},
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"expected_period": {
"type": "integer",
"minimum": 1,
"maximum": 36
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"type": {
"const": "timeout.call"
},
"side": {
"const": "away"
},
"kind": {
"enum": [
"short",
"full"
]
},
"expected_remaining": {
"type": "integer",
"minimum": 1,
"maximum": 64
}
},
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"expected_period",
"expected_revision",
"type",
"side",
"kind",
"expected_remaining"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"kind": {
"const": "full"
}
}
},
"then": {
"properties": {
"expected_remaining": {
"maximum": 32
}
}
}
}
]
},
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"expected_period": {
"type": "integer",
"minimum": 1,
"maximum": 36
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"type": {
"const": "rotations.replace"
},
"entries": {
"$ref": "#/components/schemas/RotationPlan"
}
},
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"expected_period",
"expected_revision",
"type",
"entries"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"expected_period": {
"type": "integer",
"minimum": 1,
"maximum": 36
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"type": {
"const": "rotations.cancel"
}
},
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"expected_period",
"expected_revision",
"type"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"type": {
"const": "participation.assign"
},
"expected_launch_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"expected_input_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"assignments": {
"type": "array",
"minItems": 0,
"maxItems": 10,
"items": {
"$ref": "#/components/schemas/InputAssignment"
}
}
},
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"type",
"expected_launch_revision",
"expected_input_revision",
"assignments"
],
"additionalProperties": false
}
]
}
Schema: Error
{
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"details": {}
},
"required": [
"code",
"message",
"details"
],
"additionalProperties": true
}
},
"required": [
"error"
],
"additionalProperties": true
}
Schema: Event
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"run_id": {
"type": [
"string",
"null"
]
},
"observed_at": {
"type": "number"
},
"payload": {
"type": "object"
},
"sequence": {
"type": "integer"
},
"event_id": {
"type": "string"
}
},
"required": [
"type",
"run_id",
"observed_at",
"payload",
"sequence",
"event_id"
],
"additionalProperties": true,
"allOf": [
{
"if": {
"properties": {
"type": {
"enum": [
"engine.record_stored",
"engine.record_capture_failed",
"stats.counter_changed",
"stats.counter_unchanged",
"stats.counter_unavailable",
"game.phase_changed",
"game.phase_reentered",
"stats.team_counter_changed",
"stats.team_counter_unchanged",
"stats.team_counter_unavailable"
]
}
}
},
"then": {
"properties": {
"payload": {
"$ref": "#/components/schemas/EngineRecordPayload"
}
}
}
},
{
"if": {
"properties": {
"type": {
"const": "substitution.request_changed"
}
}
},
"then": {
"properties": {
"payload": {
"$ref": "#/components/schemas/SubstitutionRequest"
}
}
}
},
{
"if": {
"properties": {
"type": {
"const": "rotations.plan_changed"
}
}
},
"then": {
"properties": {
"payload": {
"$ref": "#/components/schemas/RotationPlanObservation"
}
}
}
},
{
"if": {
"properties": {
"type": {
"enum": [
"rules.ball_state",
"rules.decision",
"rules.lifecycle",
"rules.observation_context"
]
}
}
},
"then": {
"properties": {
"payload": {
"$ref": "#/components/schemas/RuleEvent"
}
}
}
}
]
}
Schema: EngineActor
{
"type": "object",
"properties": {
"side": {
"enum": [
"home",
"away"
]
},
"slot": {
"type": "integer",
"minimum": 0,
"maximum": 19
},
"player_key": {
"type": "string"
},
"external_player_id": {
"type": [
"string",
"null"
]
},
"external_team_id": {
"type": [
"string",
"null"
]
}
},
"required": [
"side",
"slot",
"player_key"
],
"additionalProperties": true
}
Schema: CounterChange
{
"type": "object",
"properties": {
"stat": {
"enum": [
"offensive_rebounds",
"defensive_rebounds",
"blocks",
"assists",
"steals",
"personal_fouls",
"turnovers",
"free_throws_made",
"three_pointers_made",
"three_pointers_attempted",
"two_pointers_made",
"two_pointers_attempted",
"free_throws_attempted",
"points"
]
},
"operation": {
"enum": [
"credit",
"retract"
]
},
"player": {
"anyOf": [
{
"$ref": "#/components/schemas/EngineActor"
},
{
"type": "null"
}
]
},
"before": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 4294967295
},
"after": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 4294967295
},
"delta": {
"type": [
"integer",
"null"
]
},
"changed": {
"type": [
"boolean",
"null"
]
},
"wrapped": {
"type": [
"boolean",
"null"
]
},
"correction_of_event_id": {
"type": [
"string",
"null"
],
"description": "Retained durable public event ID of the original counter credit, when established by the original engine path. Null when absent or expired; not inferred by proximity."
},
"correction_of_record_id": {
"type": [
"string",
"null"
],
"description": "Original engine rebound-context source record selected by the observed correction path. This is not the original stat-credit event ID; may predate the current binding."
},
"correction_of_stat_record_id": {
"type": [
"string",
"null"
],
"description": "Run-scoped source record ID of an original rebound or block counter credit, established by the instrumented engine owner and correction context. May predate binding or retained public history."
}
},
"required": [
"stat",
"operation",
"player",
"before",
"after",
"delta",
"changed",
"wrapped",
"correction_of_event_id"
],
"additionalProperties": true
}
Schema: EngineRecordPayload
{
"type": "object",
"properties": {
"source_event_id": {
"type": "string"
},
"source_event_sequence": {
"type": "integer"
},
"source_tick_ms": {
"type": "integer"
},
"category_code": {
"type": [
"integer",
"null"
]
},
"checkpoint_index": {
"type": "integer"
},
"raw_period": {
"type": "integer"
},
"phase_code": {
"type": "integer"
},
"game_seconds": {
"type": [
"number",
"null"
]
},
"shot_seconds": {
"type": [
"number",
"null"
]
},
"engine_time": {
"type": [
"number",
"null"
]
},
"engine_time_secondary": {
"type": [
"number",
"null"
]
},
"capture_flags": {
"type": "integer"
},
"authority": {
"enum": [
"engine_record_storage_completed",
"player_counter_write_completed",
"game_phase_transition_completed",
"team_counter_write_completed"
]
},
"basketball_meaning": {
"type": [
"string",
"null"
]
},
"stat_change": {
"$ref": "#/components/schemas/CounterChange"
},
"violation_record": {
"type": "object",
"properties": {
"kind_code": {
"type": "integer"
},
"actors": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/EngineActor"
},
{
"type": "null"
}
]
}
},
"position": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"items": {
"type": [
"number",
"null"
]
}
},
"offensive_direction": {
"type": [
"number",
"null"
]
},
"kind_name": {
"enum": [
"eight_second_backcourt_violation",
"ten_second_backcourt_violation",
"double_dribble_violation",
"out_of_bounds",
"five_second_inbound_violation",
"shot_clock_violation",
"kicked_ball_violation",
"reach_in_foul",
"blocking_foul",
"shooting_foul",
null
]
},
"actor_roles": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"enum": [
"violating_player",
"foul_committer",
"fouled_player",
null
]
}
},
"role_authority": {
"enum": [
"original_handler_credit_arguments",
"unresolved"
]
},
"detection_authority": {
"const": "original_game_detection_not_independently_certified"
}
},
"required": [
"kind_code",
"actors",
"position",
"offensive_direction"
],
"additionalProperties": true
},
"phase_transition": {
"type": "object",
"properties": {
"before": {
"type": "integer"
},
"after": {
"type": "integer"
},
"initialized": {
"type": "boolean"
},
"changed": {
"type": "boolean"
}
},
"required": [
"before",
"after",
"initialized",
"changed"
],
"additionalProperties": true
},
"team_stat_change": {
"$ref": "#/components/schemas/TeamCounterChange"
},
"context": {
"type": "object",
"properties": {
"status": {
"enum": [
"bound",
"unbound"
]
},
"match_id": {
"type": [
"string",
"null"
]
},
"timeline_revision": {
"type": [
"integer",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"authority": {
"const": "snapshot_bracketed_binding"
}
},
"required": [
"status",
"match_id",
"timeline_revision",
"reason",
"authority"
],
"additionalProperties": false
},
"rebound_record": {
"type": "object",
"properties": {
"player": {
"anyOf": [
{
"$ref": "#/components/schemas/EngineActor"
},
{
"type": "null"
}
]
},
"offensive": {
"type": "boolean"
},
"position": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"items": {
"type": [
"number",
"null"
]
}
},
"offensive_direction": {
"type": [
"number",
"null"
]
},
"credit_source_event_id": {
"type": [
"string",
"null"
],
"description": "Run-scoped source record ID of the counter credit associated by the original rebound-credit owner. Absent when linkage is unavailable; not a public HTTP cursor."
}
},
"required": [
"player",
"offensive",
"position",
"offensive_direction"
],
"additionalProperties": false
}
},
"required": [
"source_event_id",
"source_event_sequence",
"source_tick_ms",
"category_code",
"checkpoint_index",
"raw_period",
"phase_code",
"game_seconds",
"shot_seconds",
"engine_time",
"engine_time_secondary",
"capture_flags",
"authority",
"basketball_meaning"
],
"additionalProperties": true
}
Schema: EventPage
{
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Event"
}
},
"next_cursor": {
"type": "string"
},
"latest_cursor": {
"type": "string"
}
},
"required": [
"events",
"next_cursor",
"latest_cursor"
],
"additionalProperties": true
}
Schema: Receipt
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"status": {
"enum": [
"accepted",
"applied",
"rejected",
"indeterminate"
]
},
"type": {
"type": "string"
},
"run_id": {
"type": "string"
},
"observed_camera_id": {
"enum": [
"broadcast_stadium",
"broadcast_generic",
"beluba",
"parametric",
"press",
"2k",
"player_lock",
"turbo",
"action",
"action_2",
"nosebleeds",
"skybox",
"side",
"drive",
"showtime",
"wire",
"high",
"iso",
"dunk_cam",
"coach_view",
"broadcast_dynamic",
"drill_high",
"drill_2k",
"bench",
"horse",
"training_camp",
null
]
},
"observed_pending_player_key": {
"type": [
"string",
"null"
]
},
"observed_pending_known": {
"type": "boolean"
},
"completed": {
"type": "boolean"
},
"meaning": {
"type": "string"
}
},
"required": [
"command_id",
"status",
"type",
"run_id"
],
"additionalProperties": true
}
Schema: Result
{
"type": "object",
"properties": {
"match_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"timeline_revision": {
"type": "integer"
},
"run_id": {
"type": "string"
},
"winner": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"teams": {
"type": "object",
"properties": {
"home": {
"$ref": "#/components/schemas/Team"
},
"away": {
"$ref": "#/components/schemas/Team"
}
},
"required": [
"home",
"away"
],
"additionalProperties": true
},
"players": {
"type": "array",
"items": {
"type": "object",
"properties": {
"external_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"side": {
"enum": [
"home",
"away"
]
},
"stats": {
"$ref": "#/components/schemas/Stats"
}
},
"required": [
"external_id",
"side",
"stats"
],
"additionalProperties": true
}
},
"ruleset": {
"type": "object"
},
"source_executable_sha256": {
"type": "string"
},
"completeness": {
"type": "object",
"properties": {
"points_reconciled": {
"type": "boolean"
},
"whole_match_events": {
"type": "boolean"
},
"separate_overtime_periods": {
"type": "boolean"
},
"started_mid_match": {
"type": "boolean"
},
"rule_profile_verified": {
"type": "boolean",
"description": "Historical field name: follows the captured profile final_exports_verified (or original_game default). It describes reference export-profile evidence, not full basketball-rule or attached-binary certification. Read engine_rule_profile.full_rulebook_verified separately; inspect this result scoring_ledger and reconciliation flags."
},
"requested_rule_contract_intact": {
"type": "boolean"
}
},
"required": [
"points_reconciled",
"whole_match_events",
"separate_overtime_periods",
"started_mid_match"
],
"additionalProperties": true
},
"finalization_reason": {
"type": "string"
},
"result_revision": {
"type": "integer"
},
"idempotency_key": {
"type": "string"
},
"scoring_ledger": {
"$ref": "#/components/schemas/ScoringLedger"
},
"engine_rule_profile": {
"$ref": "#/components/schemas/RuleProfile",
"description": "Profile declaration captured at finalization. Immutable historical result metadata is not rewritten when the broker evidence ledger changes. Use completeness and scoring_ledger to assess this result independently."
},
"metadata": {
"type": "object"
},
"roster_context": {
"$ref": "#/components/schemas/RosterContext"
},
"rule_extensions": {
"$ref": "#/components/schemas/RuleResultContext"
},
"native_context": {
"$ref": "#/components/schemas/NativeContextReceipt"
},
"match_assets": {
"$ref": "#/components/schemas/NativeAssetStatus"
}
},
"required": [
"match_id",
"timeline_revision",
"run_id",
"winner",
"teams",
"players",
"ruleset",
"source_executable_sha256",
"completeness",
"finalization_reason",
"result_revision",
"idempotency_key"
],
"additionalProperties": true
}
Schema: ResultPage
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Result"
}
}
},
"required": [
"results"
],
"additionalProperties": true
}
Schema: Match
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"status": {
"enum": [
"active",
"finalized",
"review_required",
"abandoned"
]
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"run_id": {
"type": "string"
},
"roster_fingerprint": {
"type": "string"
},
"teams": {
"type": "object",
"properties": {
"home": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"away": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
},
"required": [
"home",
"away"
],
"additionalProperties": true
},
"players": {
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
},
"ruleset": {
"type": "object"
},
"timeline_revision": {
"type": "integer"
},
"binding_request": {
"$ref": "#/components/schemas/Bind"
},
"event_binding_boundary": {
"type": [
"integer",
"null"
],
"description": "Snapshot event watermark at bind/resume; does not claim whole-match history."
},
"scoring_ledger": {
"$ref": "#/components/schemas/ScoringLedger"
},
"metadata": {
"type": "object"
},
"binding_phase_code": {
"enum": [
4,
10
]
},
"started_before_opening_play": {
"type": "boolean"
},
"roster_context": {
"$ref": "#/components/schemas/RosterContext"
},
"binding_start_command": {
"$ref": "#/components/schemas/RosterContextIdentifier"
},
"rule_epoch": {
"type": "integer",
"minimum": 0
},
"native_context": {
"$ref": "#/components/schemas/NativeContextReceipt"
},
"match_assets": {
"$ref": "#/components/schemas/NativeAssetStatus"
}
},
"required": [
"id",
"status",
"client_id",
"run_id",
"roster_fingerprint",
"teams",
"players",
"ruleset",
"timeline_revision",
"binding_request"
],
"additionalProperties": true
}
Schema: TeamCounterChange
{
"type": "object",
"properties": {
"stat": {
"const": "team_only_turnovers"
},
"operation": {
"const": "credit"
},
"before": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 4294967295
},
"after": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 4294967295
},
"delta": {
"type": [
"integer",
"null"
]
},
"changed": {
"type": [
"boolean",
"null"
]
},
"wrapped": {
"type": [
"boolean",
"null"
]
},
"team": {
"enum": [
"home",
"away",
null
]
},
"external_team_id": {
"type": [
"string",
"null"
]
}
},
"required": [
"stat",
"operation",
"before",
"after",
"delta",
"changed",
"wrapped",
"team"
],
"additionalProperties": true
}
Schema: ScoringLedger
{
"type": [
"object",
"null"
],
"description": "Observed per-period scoring. Reconciled means continuous captured counter chains match all player points and engine regulation/combined OT buckets; not authoritative legal scoring. Partial ledgers must not be used as complete period exports.",
"properties": {
"status": {
"enum": [
"capturing",
"partial",
"reconciled"
]
},
"authority": {
"const": "captured_point_counter_writes"
},
"timeline_revision": {
"type": "integer",
"minimum": 1
},
"baseline_complete": {
"type": "boolean"
},
"separate_overtime_periods_reconciled": {
"type": "boolean"
},
"record_count": {
"type": "integer",
"minimum": 0
},
"issues": {
"type": "array",
"items": {
"type": "string"
}
},
"periods": {
"type": "object",
"additionalProperties": {
"type": "object",
"required": [
"home",
"away"
],
"properties": {
"home": {
"type": "integer"
},
"away": {
"type": "integer"
}
},
"additionalProperties": false
}
},
"baseline_points": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"current_points": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"logical_periods": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"enum": [
"half",
"overtime"
]
},
"number": {
"type": "integer",
"minimum": 1
},
"raw_period": {
"type": "integer",
"minimum": 1
},
"home": {
"type": "integer",
"minimum": 0
},
"away": {
"type": "integer",
"minimum": 0
}
},
"required": [
"type",
"number",
"raw_period",
"home",
"away"
],
"additionalProperties": false
}
}
},
"additionalProperties": false,
"required": [
"status",
"authority",
"timeline_revision",
"baseline_complete",
"record_count",
"issues",
"periods",
"baseline_points",
"current_points"
]
}
Schema: SliderValues
{
"type": "object",
"additionalProperties": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 100
}
}
Schema: GameSettings
{
"type": [
"object",
"null"
],
"properties": {
"authority": {
"const": "original_slider_profile"
},
"preset_code": {
"type": "integer"
},
"persistence": {
"type": "string"
},
"values": {
"type": "object",
"properties": {
"user": {
"$ref": "#/components/schemas/SliderValues"
},
"cpu": {
"$ref": "#/components/schemas/SliderValues"
}
},
"required": [
"user",
"cpu"
],
"additionalProperties": false
}
},
"required": [
"authority",
"preset_code",
"persistence",
"values"
],
"additionalProperties": false
}
Schema: SettingsResponse
{
"type": "object",
"properties": {
"run_id": {
"type": "string"
},
"health": {
"type": "string"
},
"settings": {
"$ref": "#/components/schemas/GameSettings"
},
"catalog": {
"type": "array",
"items": {
"type": "object"
}
},
"options": {
"$ref": "#/components/schemas/GameOptions"
},
"options_catalog": {
"type": "array",
"items": {
"type": "object"
}
},
"controllers": {
"$ref": "#/components/schemas/ControllerSettings"
},
"controllers_catalog": {
"type": "array",
"items": {
"type": "object"
}
},
"cameras_catalog": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CameraDescriptor"
},
"minItems": 26,
"maxItems": 26
},
"cameras": {
"anyOf": [
{
"$ref": "#/components/schemas/CameraState"
},
{
"type": "null"
}
]
},
"coaching": {
"anyOf": [
{
"$ref": "#/components/schemas/CoachingState"
},
{
"type": "null"
}
]
},
"coaching_catalog": {
"type": "array",
"maxItems": 9,
"items": {
"type": "object"
}
},
"defense": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/DefenseState"
}
]
},
"defense_catalog": {
"type": "array",
"maxItems": 6,
"items": {
"type": "object"
}
},
"simulation_control": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/SimulationControl"
}
]
},
"simulation_control_catalog": {
"type": "object"
},
"substitutions": {
"anyOf": [
{
"$ref": "#/components/schemas/Substitutions"
},
{
"type": "null"
}
]
},
"substitution_catalog": {
"type": "object"
},
"timeout_control": {
"oneOf": [
{
"$ref": "#/components/schemas/TimeoutControl"
},
{
"type": "null"
}
]
},
"rotations": {
"oneOf": [
{
"$ref": "#/components/schemas/Rotations"
},
{
"type": "null"
}
]
},
"timeout_catalog": {
"type": "object"
},
"rotation_catalog": {
"type": "object"
}
},
"required": [
"run_id",
"health",
"settings",
"catalog"
],
"additionalProperties": false
}
Schema: GameOptions
{
"type": [
"object",
"null"
],
"properties": {
"authority": {
"const": "engine_active_game_settings"
},
"persistence": {
"const": "current_game_only"
},
"values": {
"type": "object",
"additionalProperties": {
"type": [
"integer",
"null"
]
}
}
},
"required": [
"authority",
"persistence",
"values"
],
"additionalProperties": false
}
Schema: ControllerSettings
{
"type": [
"object",
"null"
],
"properties": {
"authority": {
"const": "engine_controller_profile"
},
"persistence": {
"type": "string"
},
"slots": {
"type": "array",
"items": {
"type": "object",
"required": [
"player_slot",
"values"
],
"properties": {
"player_slot": {
"type": "integer",
"minimum": 0,
"maximum": 9,
"description": "Stored controller preference slot, not a roster player or connection state."
},
"values": {
"type": "object",
"additionalProperties": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 100
}
}
},
"additionalProperties": false
},
"minItems": 10,
"maxItems": 10
}
},
"required": [
"authority",
"persistence",
"slots"
],
"additionalProperties": false
}
Schema: CameraDescriptor
{
"type": "object",
"required": [
"id",
"label",
"observed_in_exhibition_menu",
"activation_supported",
"activation_verification",
"controls",
"verification"
],
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"observed_in_exhibition_menu": {
"type": "boolean"
},
"activation_supported": {
"type": "boolean"
},
"activation_verification": {
"type": "string"
},
"verification": {
"type": "string"
},
"controls": {
"type": "array",
"minItems": 6,
"maxItems": 6,
"items": {
"type": "object",
"required": [
"id",
"minimum",
"maximum",
"step",
"default",
"engine_configurable"
],
"properties": {
"id": {
"enum": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
]
},
"minimum": {
"type": "integer"
},
"maximum": {
"type": "integer"
},
"step": {
"const": 1
},
"default": {
"type": "integer"
},
"engine_configurable": {
"type": "boolean"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
Schema: CameraState
{
"type": "object",
"properties": {
"active_camera_id": {
"enum": [
"broadcast_stadium",
"broadcast_generic",
"beluba",
"parametric",
"press",
"2k",
"player_lock",
"turbo",
"action",
"action_2",
"nosebleeds",
"skybox",
"side",
"drive",
"showtime",
"wire",
"high",
"iso",
"dunk_cam",
"coach_view",
"broadcast_dynamic",
"drill_high",
"drill_2k",
"bench",
"horse",
"training_camp",
null
]
},
"menu_open": {
"type": "boolean"
},
"values": {
"type": "object",
"properties": {
"broadcast_stadium": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"broadcast_generic": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"beluba": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"parametric": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"press": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"2k": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"player_lock": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"turbo": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"action": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"action_2": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"nosebleeds": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"skybox": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"side": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"drive": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"showtime": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"wire": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"high": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"iso": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"dunk_cam": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"coach_view": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"broadcast_dynamic": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"drill_high": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"drill_2k": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"bench": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"horse": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
},
"training_camp": {
"type": "object",
"properties": {
"zoom": {
"type": "integer"
},
"height": {
"type": "integer"
},
"key_zoom": {
"type": "integer"
},
"reverse_angle": {
"type": "integer"
},
"auto_flip": {
"type": "integer"
},
"fixed_height": {
"type": "integer"
}
},
"required": [
"zoom",
"height",
"key_zoom",
"reverse_angle",
"auto_flip",
"fixed_height"
],
"additionalProperties": false
}
},
"required": [
"broadcast_stadium",
"broadcast_generic",
"beluba",
"parametric",
"press",
"2k",
"player_lock",
"turbo",
"action",
"action_2",
"nosebleeds",
"skybox",
"side",
"drive",
"showtime",
"wire",
"high",
"iso",
"dunk_cam",
"coach_view",
"broadcast_dynamic",
"drill_high",
"drill_2k",
"bench",
"horse",
"training_camp"
],
"additionalProperties": false
},
"authority": {
"const": "engine_camera_configuration"
},
"persistence": {
"const": "runtime_only"
}
},
"required": [
"active_camera_id",
"menu_open",
"values",
"authority",
"persistence"
],
"additionalProperties": false
}
Schema: TimeoutContext
{
"type": "object",
"properties": {
"team": {
"enum": [
"home",
"away",
null
]
},
"kind": {
"enum": [
"short",
"full",
null
]
},
"seconds_remaining": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 180
},
"authority": {
"const": "engine_timeout_context"
}
},
"required": [
"team",
"kind",
"seconds_remaining",
"authority"
],
"additionalProperties": false
}
Schema: PreparationResponse
{
"type": "object",
"properties": {
"run_id": {
"type": [
"string",
"null"
]
},
"health": {
"enum": [
"ready",
"unavailable",
"stale"
]
},
"configuration": {
"oneOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"revision": {
"type": "integer"
},
"values": {
"type": "object",
"properties": {
"difficulty": {
"type": "integer"
},
"game_speed": {
"type": "integer"
},
"quarter_length_minutes": {
"type": "integer"
},
"fatigue": {
"type": "integer"
},
"injuries": {
"type": "integer"
},
"arena": {
"type": "string"
},
"home_playbook": {
"type": "string"
},
"away_playbook": {
"type": "string"
},
"game_style": {
"type": "integer",
"minimum": 0,
"maximum": 3
},
"home_team": {
"type": "string",
"pattern": "^team-row:[0-9]+$"
},
"away_team": {
"type": "string",
"pattern": "^team-row:[0-9]+$"
},
"home_uniform": {
"type": "string",
"pattern": "^uniform-row:[0-9]+$"
},
"away_uniform": {
"type": "string",
"pattern": "^uniform-row:[0-9]+$"
}
},
"required": [
"difficulty",
"game_speed",
"quarter_length_minutes",
"fatigue",
"injuries",
"arena",
"home_playbook",
"away_playbook"
],
"additionalProperties": true
},
"game_style_code": {
"type": "integer",
"description": "Legacy raw options-profile code; not the Game Style menu selection. Use values.game_style on ABI15."
},
"teams": {
"type": "object",
"properties": {
"home": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"id",
"name"
],
"additionalProperties": true
},
"away": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"id",
"name"
],
"additionalProperties": true
}
},
"required": [
"home",
"away"
],
"additionalProperties": true
},
"arenas": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"writable": {
"type": "boolean"
}
},
"required": [
"id",
"label",
"writable"
],
"additionalProperties": true
}
},
"playbooks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"writable": {
"type": "boolean"
}
},
"required": [
"id",
"label",
"writable"
],
"additionalProperties": true
}
},
"catalog_id": {
"type": "string"
},
"scope": {
"const": "exhibition_configuration_before_simulation"
},
"persistence": {
"const": "runtime_only"
},
"launch_supported": {
"type": "boolean",
"description": "ABI16 native Start available; inspect /v1/launch for current eligibility"
},
"catalog_revision": {
"type": "integer",
"minimum": 1
},
"team_count": {
"type": "integer",
"minimum": 1
},
"uniform_count": {
"type": "integer",
"minimum": 1
},
"team_graphics_ids": {
"type": "object",
"properties": {
"home": {
"type": "integer",
"minimum": 0,
"maximum": 65535
},
"away": {
"type": "integer",
"minimum": 0,
"maximum": 65535
}
},
"required": [
"home",
"away"
],
"additionalProperties": false
}
},
"required": [
"revision",
"values",
"game_style_code",
"teams",
"arenas",
"playbooks",
"catalog_id",
"scope",
"persistence",
"launch_supported"
],
"additionalProperties": true
}
]
},
"catalog": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"minimum": {
"type": "integer"
},
"maximum": {
"type": "integer"
},
"step": {
"type": "integer"
}
},
"required": [
"id",
"label",
"minimum",
"maximum",
"step"
],
"additionalProperties": true
}
}
},
"required": [
"run_id",
"health",
"configuration",
"catalog"
],
"additionalProperties": true
}
Schema: RuleProfile
{
"type": "object",
"properties": {
"id": {
"enum": [
"original_game",
"openhoops_college_research"
]
},
"revision": {
"enum": [
1,
2,
3,
4
]
},
"authority": {
"const": "adapter_configuration"
},
"status": {
"const": "experimental"
},
"regulation_periods": {
"const": 2
},
"regulation_period_type": {
"const": "half"
},
"regulation_raw_periods": {
"const": [
1,
3
]
},
"half_duration_seconds": {
"type": "number",
"minimum": 60,
"maximum": 1200
},
"overtime_duration_seconds": {
"enum": [
60,
120,
180,
240,
300
]
},
"overtime_policy": {
"enum": [
"ceil_half_minutes_divided_by_four",
"extension_frozen"
]
},
"elapsed_seconds": {
"type": "number"
},
"full_rulebook_verified": {
"const": false,
"description": "Always false: the scoped OpenHoops college mode and user exclusions are not certification of the complete NCAA rulebook."
},
"final_exports_verified": {
"type": "boolean",
"description": "Reference export-scenario evidence for this profile revision in the current broker. True for newly decoded revision4 after natural36ct OT/player-team/ledger/independent-consumer checks. Does not certify the attached DLL or a particular match, whole-match events, or all rules. Stored revision4 recordings/results with false remain valid and immutable; revisions1\u20133 remain false."
},
"incomplete": {
"type": "array",
"items": {
"type": "string"
},
"description": "Verification limits rather than a list of wholly unimplemented features. Revision4 lists rare live injury/rim recovery/held-ball checks, exhaustive airborne/boundary semantics and the deferred uninstrumented-production full-match smoke. Earlier revisions preserve their historical coarse labels. These strings are descriptive, not capability IDs."
},
"configuration_variant": {
"const": "extension_modified"
},
"extension_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"extension_integrity": {
"enum": [
"applied",
"degraded"
]
}
},
"required": [
"id",
"revision",
"authority"
],
"additionalProperties": false,
"description": "Adapter configuration, not a ruleset command or full NCAA certification. Absent on ABI1\u201311; null when unavailable. Current college revision4 has verified reference regulation/OT export scenarios. Historical stored results retain their original declarations.",
"allOf": [
{
"if": {
"properties": {
"id": {
"const": "original_game"
}
},
"required": [
"id"
]
},
"then": {
"properties": {
"revision": {
"const": 1
}
}
}
},
{
"if": {
"properties": {
"id": {
"const": "openhoops_college_research"
},
"revision": {
"enum": [
1,
2,
3
]
}
},
"required": [
"id",
"revision"
]
},
"then": {
"properties": {
"final_exports_verified": {
"const": false
}
}
}
}
]
}
Schema: MediaTimeouts
{
"type": "object",
"additionalProperties": false,
"properties": {
"authority": {
"const": "openhoops_media_scheduler"
},
"status": {
"const": "experimental"
},
"enabled": {
"type": "boolean"
},
"scheduled_breaks_per_half": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"marks_seconds_remaining": {
"type": "array",
"items": {
"type": "number",
"minimum": 0
},
"maxItems": 4
},
"shortened_half_policy": {
"enum": [
"proportional_spacing",
"fixed_clock_marks"
]
},
"duration_seconds": {
"const": 60
},
"state_raw_period": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 64
},
"served_mark_numbers": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 4
},
"uniqueItems": true
},
"active_break": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"reason": {
"enum": [
"scheduled_mark",
"first_team_timeout",
"injury_timeout"
]
},
"scheduled_mark_number": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 4
},
"counts_against_team_allowance": {
"type": "boolean"
},
"seconds_remaining": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 180
}
},
"required": [
"reason",
"scheduled_mark_number",
"counts_against_team_allowance",
"seconds_remaining"
]
}
]
},
"complete_rulebook_verified": {
"const": false
},
"full_length_breaks_per_half": {
"enum": [
0,
3,
4
]
}
},
"required": [
"authority",
"status",
"enabled",
"scheduled_breaks_per_half",
"marks_seconds_remaining",
"shortened_half_policy",
"duration_seconds",
"state_raw_period",
"served_mark_numbers",
"active_break",
"complete_rulebook_verified"
]
}
Schema: PreparationCatalogResponse
{
"type": "object",
"properties": {
"run_id": {
"type": "string"
},
"revision": {
"type": "integer",
"minimum": 1
},
"catalog_id": {
"type": "string"
},
"kind": {
"enum": [
"teams",
"uniforms"
]
},
"start": {
"type": "integer",
"minimum": 0
},
"total": {
"type": "integer",
"minimum": 0
},
"items": {
"type": "array",
"maxItems": 64,
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"row": {
"type": "integer",
"minimum": 0
},
"record_id": {
"type": "integer"
},
"graphics_id": {
"type": "integer"
},
"writable": {
"type": "boolean"
},
"away": {
"type": [
"boolean",
"null"
]
},
"label": {
"type": "string"
},
"resource": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"id",
"row",
"record_id",
"graphics_id",
"writable",
"away",
"label",
"resource"
]
}
},
"next_start": {
"type": [
"integer",
"null"
],
"minimum": 0
}
},
"required": [
"run_id",
"revision",
"catalog_id",
"kind",
"start",
"total",
"items",
"next_start"
],
"additionalProperties": false
}
Schema: RosterMetadata
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"bytes": {
"enum": [
2672672,
16777248
]
},
"schema": {
"const": "nba2k14_pc_ros"
},
"expanded": {
"type": "boolean"
},
"teams": {
"type": "integer",
"minimum": 2,
"maximum": 2048
},
"players": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"uniforms": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"arenas": {
"type": "integer",
"minimum": 1,
"maximum": 128
},
"playbooks": {
"type": "integer",
"minimum": 1,
"maximum": 128
},
"native_loaded": {
"const": false
}
},
"required": [
"id",
"sha256",
"bytes",
"schema",
"expanded",
"teams",
"players",
"uniforms",
"arenas",
"playbooks",
"native_loaded"
],
"additionalProperties": false
}
Schema: RosterImport
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute local Windows ROS path, read without modifying the source"
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
}
},
"required": [
"path",
"sha256"
],
"additionalProperties": false
}
Schema: LaunchState
{
"type": "object",
"properties": {
"available": {
"type": "boolean"
},
"revision": {
"type": "integer",
"minimum": 0
},
"phase": {
"enum": [
"unavailable",
"ready",
"loading",
"active",
"other_menu",
"startup",
"unknown"
]
},
"menu": {
"enum": [
"home",
"team_selection",
null
]
},
"catalog_revision": {
"type": "integer",
"minimum": 0
},
"team_count": {
"type": "integer",
"minimum": 0,
"maximum": 2048
},
"player_count": {
"type": "integer",
"minimum": 0,
"maximum": 65535
},
"uniform_count": {
"type": "integer",
"minimum": 0,
"maximum": 65535
},
"roster_id": {
"anyOf": [
{
"type": "null"
},
{
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
}
]
}
},
"required": [
"available",
"revision",
"phase",
"menu",
"catalog_revision",
"team_count",
"player_count",
"uniform_count",
"roster_id"
],
"additionalProperties": false
}
Schema: LaunchResponse
{
"type": "object",
"properties": {
"run_id": {
"type": [
"string",
"null"
]
},
"health": {
"enum": [
"ready",
"unavailable",
"stale"
]
},
"state": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/LaunchState"
}
]
},
"bootstrap": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"status": {
"enum": [
"starting",
"ready",
"failed"
]
},
"game_pid": {
"type": "integer"
},
"acknowledgements": {
"type": "integer",
"minimum": 0
},
"reason": {
"type": "string"
},
"mode": {
"enum": [
"native_managed"
]
}
},
"required": [
"status",
"game_pid",
"acknowledgements"
],
"additionalProperties": false
}
]
},
"startup": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/StartupState"
}
]
},
"configuration": {
"type": "object",
"properties": {
"requested": {
"anyOf": [
{
"$ref": "#/components/schemas/LaunchConfiguration"
},
{
"type": "null"
}
]
},
"effective": {
"anyOf": [
{
"$ref": "#/components/schemas/LaunchRules"
},
{
"type": "null"
}
]
},
"verified": {
"type": [
"boolean",
"null"
]
}
},
"required": [
"requested",
"effective",
"verified"
],
"additionalProperties": false
},
"startup_settings": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/StartupSettingsState"
}
]
},
"startup_camera": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/StartupCameraState"
}
]
},
"participation": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ParticipationState"
}
]
},
"rotations": {
"oneOf": [
{
"$ref": "#/components/schemas/Rotations"
},
{
"type": "null"
}
]
},
"rule_runtime": {
"anyOf": [
{
"$ref": "#/components/schemas/RuleRuntime"
},
{
"type": "null"
}
]
},
"extension_platform": {
"anyOf": [
{
"$ref": "#/components/schemas/NativePlatform"
},
{
"type": "null"
}
]
}
},
"required": [
"run_id",
"health",
"state",
"bootstrap"
],
"additionalProperties": false
}
Schema: StartupState
{
"type": "object",
"properties": {
"available": {
"type": "boolean"
},
"managed": {
"type": "boolean"
},
"loading_presented": {
"type": "boolean"
},
"match_revealed": {
"type": "boolean"
}
},
"required": [
"available",
"managed",
"loading_presented",
"match_revealed"
],
"additionalProperties": false
}
Schema: LoadingScreenConfiguration
{
"type": "object",
"properties": {
"version": {
"type": "integer",
"const": 1
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"subtitle": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"background_color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"text_color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"muted_color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"accent_color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"logo_path": {
"type": "string",
"description": "Absolute local PNG, JPEG or BMP path, at most 16 MiB. Private immutable copy; decoded dimensions at most 8192 by 4320."
},
"background_path": {
"type": "string",
"description": "Absolute local PNG, JPEG or BMP path, at most 16 MiB. Private immutable copy; decoded dimensions at most 8192 by 4320."
}
},
"additionalProperties": false,
"description": "Optional version1 JSON file passed through broker --loading-screen. Neutral defaults are used for omitted fields."
}
Schema: LaunchRules
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"profile": {
"enum": [
"original",
"college"
]
},
"half_length_minutes": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 20
},
"overtime_seconds": {
"enum": [
60,
120,
180,
240,
300
]
},
"media_timeouts": {
"enum": [
0,
3,
4
]
},
"authority": {
"const": "adapter_startup_configuration"
}
},
"required": [
"version",
"profile",
"half_length_minutes",
"overtime_seconds",
"media_timeouts",
"authority"
],
"additionalProperties": false
}
Schema: LaunchConfiguration
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"rules": {
"oneOf": [
{
"type": "object",
"properties": {
"profile": {
"const": "original"
}
},
"required": [
"profile"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"profile": {
"const": "college"
},
"half_length_minutes": {
"type": "integer",
"minimum": 1,
"maximum": 20
},
"media_timeouts": {
"enum": [
0,
3,
4
]
},
"overtime_policy": {
"const": "scaled"
}
},
"required": [
"profile"
],
"additionalProperties": false
}
]
},
"settings": {
"$ref": "#/components/schemas/StartupSettingsPlan"
},
"participation": {
"$ref": "#/components/schemas/ParticipationPlan"
},
"rotations": {
"$ref": "#/components/schemas/RotationPlan"
},
"extensions": {
"type": "array",
"maxItems": 8,
"items": {
"$ref": "#/components/schemas/RuleExtensionRequest"
}
},
"native_metadata": {
"type": "boolean"
},
"assets": {
"type": "array",
"items": {
"type": "string",
"pattern": "^asset-package:[a-f0-9]{64}$"
},
"maxItems": 8,
"minItems": 1,
"uniqueItems": true
}
},
"required": [
"version",
"rules"
],
"additionalProperties": false
}
Schema: MatchIdentityPlan
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"match_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"teams": {
"type": "object",
"properties": {
"home": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"away": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
},
"required": [
"home",
"away"
],
"additionalProperties": false
},
"players": {
"type": "object",
"minProperties": 2,
"maxProperties": 40,
"propertyNames": {
"pattern": "^(home|away):([0-9]|1[0-9])$"
},
"additionalProperties": {
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
}
},
"ruleset": {
"type": "object"
},
"metadata": {
"type": "object"
}
},
"required": [
"version",
"match_id",
"teams",
"players",
"ruleset"
],
"additionalProperties": false
}
Schema: Lifecycle
{
"type": "object",
"properties": {
"available": {
"type": "boolean"
},
"run_id": {
"type": [
"string",
"null"
]
},
"match_id": {
"type": [
"string",
"null"
]
},
"game_pid": {
"type": [
"integer",
"null"
]
},
"game_running": {
"type": [
"boolean",
"null"
]
},
"scope": {
"const": "broker_owned_process_only"
}
},
"required": [
"available",
"run_id",
"match_id",
"game_pid",
"game_running",
"scope"
],
"additionalProperties": false
}
Schema: StartupSettingsPlan
{
"type": "object",
"properties": {
"options": {
"type": "object",
"properties": {
"shooting_type": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"ft_shooting_type": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"ft_difficulty": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"multipleOf": 5
},
"commentary_volume": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"multipleOf": 5
},
"pa_volume": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"multipleOf": 5
},
"sound_effects_volume": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"multipleOf": 5
},
"crowd_volume": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"multipleOf": 5
},
"player_chatter_volume": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"multipleOf": 5
},
"in_game_music_volume": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"multipleOf": 5
},
"action_replays": {
"type": "integer",
"minimum": 0,
"maximum": 2,
"multipleOf": 1
},
"after_basket_camera_cuts": {
"type": "integer",
"minimum": 0,
"maximum": 2,
"multipleOf": 1
},
"ball_handler_text": {
"type": "integer",
"minimum": 0,
"maximum": 3,
"multipleOf": 1
},
"free_throw_help": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"free_throw_routines": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"shot_feedback": {
"type": "integer",
"minimum": 0,
"maximum": 3,
"multipleOf": 1
},
"pick_and_roll_overlay": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
}
},
"required": [],
"additionalProperties": false
},
"sliders": {
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"stealing": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"blocking": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"speed": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"ball_handling": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"dunking_ability": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"offensive_awareness": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"defensive_awareness": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"offensive_rebounding": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"defensive_rebounding": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"strength": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"quickness": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"hustle": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"consistency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"durability": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"stamina": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"hands": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"vertical": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"on_ball_defense": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"alley_oop_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"contact_shot_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"inside_shot_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"close_shot_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"mid_range_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"3pt_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"layup_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"dunk_in_traffic_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"dunk_in_traffic_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"backdoor_cuts": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"pass_accuracy": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"steal_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"driving_contact_shot_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"inside_contact_shot_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"layup_defense_strength_takeoff": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"layup_defense_strength_release": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"jump_shot_defense_strength_gather": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"jump_shot_defense_strength_release": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"over_the_back_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"charging_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"blocking_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"reaching_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"shooting_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"loose_ball_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"injury_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"injury_severity": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"fatigue_rate": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"attempt_dunks": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"attempt_putbacks": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"play_passing_lanes": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"go_for_on_ball_steals": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"contest_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"post_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"help_defense_strength": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"take_inside_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"take_close_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"take_mid_range_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"take_3pt_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"attack_the_basket": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"look_for_post_players": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"throw_alley_oops": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
},
"required": [],
"additionalProperties": false
},
"cpu": {
"type": "object",
"properties": {
"stealing": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"blocking": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"speed": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"ball_handling": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"dunking_ability": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"offensive_awareness": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"defensive_awareness": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"offensive_rebounding": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"defensive_rebounding": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"strength": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"quickness": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"hustle": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"consistency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"durability": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"stamina": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"hands": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"vertical": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"on_ball_defense": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"alley_oop_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"contact_shot_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"inside_shot_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"close_shot_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"mid_range_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"3pt_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"layup_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"dunk_in_traffic_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"dunk_in_traffic_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"backdoor_cuts": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"pass_accuracy": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"steal_success": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"driving_contact_shot_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"inside_contact_shot_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"layup_defense_strength_takeoff": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"layup_defense_strength_release": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"jump_shot_defense_strength_gather": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"jump_shot_defense_strength_release": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"over_the_back_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"charging_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"blocking_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"reaching_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"shooting_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"loose_ball_foul_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"injury_frequency": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"injury_severity": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"fatigue_rate": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"attempt_dunks": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"attempt_putbacks": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"play_passing_lanes": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"go_for_on_ball_steals": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"contest_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"post_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"help_defense_strength": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"take_inside_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"take_close_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"take_mid_range_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"take_3pt_shots": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"attack_the_basket": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"look_for_post_players": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"throw_alley_oops": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
},
"required": [],
"additionalProperties": false
}
},
"required": [],
"additionalProperties": false
},
"controllers": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"properties": {
"player_slot": {
"type": "integer",
"minimum": 0,
"maximum": 9
},
"values": {
"type": "object",
"properties": {
"preferred_position": {
"type": "integer",
"minimum": 0,
"maximum": 5,
"multipleOf": 1
},
"vibration": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"pro_stick": {
"type": "integer",
"minimum": 0,
"maximum": 2,
"multipleOf": 1
},
"pro_stick_orientation": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"offball_freelance": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"passing_icons": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"icon_lead_passing": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"right_stick_passing": {
"type": "integer",
"minimum": 0,
"maximum": 2,
"multipleOf": 1
},
"right_stick_defense": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"defensive_icons": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"who_to_guard": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"multipleOf": 1
},
"automatic_shot_contest": {
"type": "integer",
"minimum": 0,
"maximum": 2,
"multipleOf": 1
},
"defensive_assist_strength": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"multipleOf": 5
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"player_slot",
"values"
],
"additionalProperties": false
}
},
"camera": {
"oneOf": [
{
"type": "object",
"properties": {
"id": {
"const": "broadcast_stadium"
},
"values": {
"type": "object",
"properties": {
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "broadcast_generic"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "beluba"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "parametric"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "press"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "2k"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"auto_flip": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"fixed_height": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "player_lock"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"fixed_height": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "action"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "action_2"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "nosebleeds"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "skybox"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "side"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "drive"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"auto_flip": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "wire"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "high"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"auto_flip": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "iso"
},
"values": {
"type": "object",
"properties": {
"zoom": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"key_zoom": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"reverse_angle": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"const": "coach_view"
},
"values": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
}
]
},
"coaching": {
"type": "object",
"additionalProperties": false,
"properties": {
"home": {
"$ref": "#/components/schemas/CoachingPlanValues"
},
"away": {
"$ref": "#/components/schemas/CoachingPlanValues"
}
}
},
"defense": {
"$ref": "#/components/schemas/StartupDefensePlan"
}
},
"required": [],
"additionalProperties": false
}
Schema: StartupSettingsState
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"requested_count": {
"type": "integer",
"minimum": 0,
"maximum": 426
},
"applied_count": {
"type": "integer",
"minimum": 0,
"maximum": 426
},
"attempted": {
"type": "boolean"
},
"failed": {
"type": "boolean"
},
"ready": {
"type": "boolean"
},
"failed_index": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 263
},
"failure_reason": {
"enum": [
null,
"opening_boundary_missed",
"native_settings_unavailable",
"native_setter_exception",
"readback_mismatch"
]
},
"authority": {
"const": "original_setters_with_readback"
}
},
"required": [
"version",
"requested_count",
"applied_count",
"attempted",
"failed",
"ready",
"failed_index",
"failure_reason",
"authority"
],
"additionalProperties": false
}
Schema: StartupSettingsResponse
{
"type": "object",
"properties": {
"run_id": {
"type": [
"string",
"null"
]
},
"status": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/StartupSettingsState"
}
]
},
"catalog": {
"type": "object"
},
"requested": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/StartupSettingsPlan"
}
]
},
"camera_status": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/StartupCameraState"
}
]
}
},
"required": [
"run_id",
"status",
"catalog",
"requested"
],
"additionalProperties": false
}
Schema: RosterTools
{
"type": "object",
"properties": {
"available": {
"type": "boolean"
},
"backend_version": {
"type": [
"string",
"null"
]
},
"backend_fingerprint": {
"type": [
"string",
"null"
]
},
"tables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"fields": {
"type": "integer",
"minimum": 0
}
},
"required": [
"id",
"fields"
],
"additionalProperties": false
}
},
"maximum_edit_cells": {
"const": 512
},
"maximum_query_rows": {
"const": 128
},
"maximum_query_fields": {
"const": 32
},
"maximum_query_text_characters": {
"const": 4096
},
"native_loaded": {
"const": false
},
"scope": {
"type": "string"
}
},
"required": [
"available",
"backend_version",
"backend_fingerprint",
"tables",
"maximum_edit_cells",
"maximum_query_rows",
"maximum_query_fields",
"maximum_query_text_characters",
"native_loaded",
"scope"
],
"additionalProperties": false
}
Schema: RosterFieldPage
{
"type": "object",
"properties": {
"table": {
"type": "string"
},
"total": {
"type": "integer",
"minimum": 0
},
"start": {
"type": "integer",
"minimum": 0
},
"fields": {
"type": "array",
"maxItems": 256,
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"reference_table": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"type",
"reference_table"
],
"additionalProperties": true
}
}
},
"required": [
"table",
"total",
"start",
"fields"
],
"additionalProperties": false
}
Schema: RosterQueryRequest
{
"type": "object",
"properties": {
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"table": {
"type": "string"
},
"start": {
"type": "integer",
"minimum": 0
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 128
},
"fields": {
"type": "array",
"minItems": 1,
"maxItems": 32,
"uniqueItems": true,
"items": {
"type": "string"
}
}
},
"required": [
"roster_id",
"table"
],
"additionalProperties": false
}
Schema: RosterQueryResponse
{
"type": "object",
"properties": {
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"table": {
"type": "string"
},
"total": {
"type": "integer",
"minimum": 0
},
"start": {
"type": "integer",
"minimum": 0
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"rows": {
"type": "array",
"maxItems": 128,
"items": {
"type": "object",
"properties": {
"row": {
"type": "integer",
"minimum": 0
},
"values": {
"type": "object"
},
"errors": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"row",
"values",
"errors"
],
"additionalProperties": false
}
},
"native_loaded": {
"const": false
}
},
"required": [
"roster_id",
"table",
"total",
"start",
"fields",
"rows",
"native_loaded"
],
"additionalProperties": false
}
Schema: RosterEditRequest
{
"type": "object",
"properties": {
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"changes": {
"type": "array",
"minItems": 1,
"maxItems": 512,
"items": {
"type": "object",
"properties": {
"table": {
"type": "string"
},
"row": {
"type": "integer",
"minimum": 0
},
"field": {
"type": "string"
},
"value": {
"type": [
"string",
"number",
"boolean",
"null"
]
}
},
"required": [
"table",
"row",
"field",
"value"
],
"additionalProperties": false
}
},
"metadata_id": {
"type": "string",
"pattern": "^roster-metadata:[0-9a-f]{64}$"
}
},
"required": [
"roster_id",
"changes"
],
"additionalProperties": false
}
Schema: RosterPreparationRequest
{
"type": "object",
"properties": {
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"teams": {
"type": "object",
"properties": {
"home": {
"type": "object",
"properties": {
"team_row": {
"type": "integer",
"minimum": 0,
"maximum": 2047
},
"roster_order": {
"type": "array",
"minItems": 5,
"maxItems": 20,
"uniqueItems": true,
"items": {
"type": "integer",
"minimum": 0,
"maximum": 65534
}
},
"minutes": {
"type": "array",
"maxItems": 20,
"items": {
"type": "object",
"properties": {
"player_row": {
"type": "integer",
"minimum": 0,
"maximum": 65534
},
"value": {
"type": "integer",
"minimum": 0,
"maximum": 48
}
},
"required": [
"player_row",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"team_row"
],
"additionalProperties": false
},
"away": {
"type": "object",
"properties": {
"team_row": {
"type": "integer",
"minimum": 0,
"maximum": 2047
},
"roster_order": {
"type": "array",
"minItems": 5,
"maxItems": 20,
"uniqueItems": true,
"items": {
"type": "integer",
"minimum": 0,
"maximum": 65534
}
},
"minutes": {
"type": "array",
"maxItems": 20,
"items": {
"type": "object",
"properties": {
"player_row": {
"type": "integer",
"minimum": 0,
"maximum": 65534
},
"value": {
"type": "integer",
"minimum": 0,
"maximum": 48
}
},
"required": [
"player_row",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"team_row"
],
"additionalProperties": false
}
},
"required": [
"home",
"away"
],
"additionalProperties": false
},
"metadata_id": {
"type": "string",
"pattern": "^roster-metadata:[0-9a-f]{64}$"
}
},
"required": [
"roster_id",
"teams"
],
"additionalProperties": false
}
Schema: RosterAuthoringReceipt
{
"type": "object",
"properties": {
"receipt_id": {
"type": "string",
"pattern": "^roster-authoring:[0-9a-f]{64}$"
},
"operation": {
"enum": [
"edit",
"prepare"
]
},
"source_roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"roster": {
"$ref": "#/components/schemas/RosterMetadata"
},
"backend_version": {
"type": "string"
},
"backend_fingerprint": {
"type": "string"
},
"native_loaded": {
"const": false
},
"scope": {
"type": "string"
},
"edited_cells": {
"type": "integer",
"minimum": 1,
"maximum": 512
},
"teams": {
"type": "array"
},
"roster_metadata": {
"$ref": "#/components/schemas/RosterCompanionInfo"
}
},
"required": [
"receipt_id",
"operation",
"source_roster_id",
"roster",
"backend_version",
"backend_fingerprint",
"native_loaded",
"scope"
],
"additionalProperties": false
}
Schema: MatchRequest
{
"type": "object",
"properties": {
"format": {
"const": "openhoops.match_request"
},
"version": {
"const": 1
},
"request_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"roster": {
"oneOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"path": {
"type": "string"
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
}
},
"required": [
"path",
"sha256"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"archive_path": {
"type": "string",
"minLength": 1
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
}
},
"required": [
"archive_path",
"sha256"
],
"additionalProperties": false
}
]
},
"launch_configuration": {
"$ref": "#/components/schemas/LaunchConfiguration"
},
"preparation": {
"type": "object",
"description": "Documented preparation IDs; row/choice membership is checked against loaded ROS"
},
"identity": {
"$ref": "#/components/schemas/MatchIdentityPlan"
},
"roster_edits": {
"type": "array",
"minItems": 0,
"maxItems": 512,
"items": {
"type": "object",
"properties": {
"table": {
"type": "string"
},
"row": {
"type": "integer",
"minimum": 0
},
"field": {
"type": "string"
},
"value": {
"type": [
"string",
"number",
"boolean",
"null"
]
}
},
"required": [
"table",
"row",
"field",
"value"
],
"additionalProperties": false
}
},
"roster_preparation": {
"type": "object",
"properties": {
"home": {
"type": "object",
"properties": {
"team_row": {
"type": "integer",
"minimum": 0,
"maximum": 2047
},
"roster_order": {
"type": "array",
"minItems": 5,
"maxItems": 20,
"uniqueItems": true,
"items": {
"type": "integer",
"minimum": 0,
"maximum": 65534
}
},
"minutes": {
"type": "array",
"maxItems": 20,
"items": {
"type": "object",
"properties": {
"player_row": {
"type": "integer",
"minimum": 0,
"maximum": 65534
},
"value": {
"type": "integer",
"minimum": 0,
"maximum": 48
}
},
"required": [
"player_row",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"team_row"
],
"additionalProperties": false
},
"away": {
"type": "object",
"properties": {
"team_row": {
"type": "integer",
"minimum": 0,
"maximum": 2047
},
"roster_order": {
"type": "array",
"minItems": 5,
"maxItems": 20,
"uniqueItems": true,
"items": {
"type": "integer",
"minimum": 0,
"maximum": 65534
}
},
"minutes": {
"type": "array",
"maxItems": 20,
"items": {
"type": "object",
"properties": {
"player_row": {
"type": "integer",
"minimum": 0,
"maximum": 65534
},
"value": {
"type": "integer",
"minimum": 0,
"maximum": 48
}
},
"required": [
"player_row",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"team_row"
],
"additionalProperties": false
}
},
"required": [
"home",
"away"
],
"additionalProperties": false
},
"loading_screen": {
"$ref": "#/components/schemas/LoadingScreenConfiguration"
},
"roster_metadata": {
"$ref": "#/components/schemas/RosterMetadataSelection"
},
"asset_packages": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^asset-package:[a-f0-9]{64}$"
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"path": {
"type": "string"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"path",
"sha256"
],
"additionalProperties": false
}
]
},
"maxItems": 8,
"minItems": 1
}
},
"required": [
"format",
"version",
"request_id",
"client_id",
"roster",
"launch_configuration",
"preparation",
"identity"
],
"additionalProperties": false
}
Schema: MatchRequestStatus
{
"type": "object",
"properties": {
"request_id": {
"type": "string"
},
"request_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"status": {
"enum": [
"accepted",
"preparing",
"starting",
"started",
"failed"
]
},
"started": {
"type": [
"boolean",
"null"
],
"description": "Null preserves an unknown native Start outcome; inspect saved command IDs before retrying"
},
"result": {
"type": "object"
},
"error": {
"type": "string"
},
"receipts": {
"type": "array",
"items": {
"type": "object"
}
},
"authoring_receipts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RosterAuthoringReceipt"
}
}
},
"required": [
"request_id",
"request_sha256",
"status",
"started"
],
"additionalProperties": false
}
Schema: MatchRequestResponse
{
"type": "object",
"properties": {
"available": {
"type": "boolean"
},
"request": {
"anyOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/MatchRequestStatus"
}
]
}
},
"required": [
"available",
"request"
],
"additionalProperties": false
}
Schema: StartupCameraState
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"requested": {
"type": "boolean"
},
"camera_id": {
"type": [
"string",
"null"
]
},
"attempted": {
"type": "boolean"
},
"failed": {
"type": "boolean"
},
"ready": {
"type": "boolean"
},
"failure_reason": {
"enum": [
null,
"opening_boundary_missed",
"native_camera_unavailable",
"native_setter_exception",
"readback_mismatch"
]
},
"authority": {
"const": "original_camera_selection_with_descriptor_readback"
}
},
"required": [
"version",
"requested",
"camera_id",
"attempted",
"failed",
"ready",
"failure_reason",
"authority"
],
"additionalProperties": false
}
Schema: ParticipationPlan
{
"oneOf": [
{
"type": "object",
"properties": {
"mode": {
"enum": [
"cpu_vs_cpu",
"primary_home",
"primary_away"
]
}
},
"required": [
"mode"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"mode": {
"const": "assigned"
},
"assignments": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"$ref": "#/components/schemas/InputAssignment"
}
}
},
"required": [
"mode",
"assignments"
],
"additionalProperties": false
}
]
}
Schema: ParticipationState
{
"type": "object",
"properties": {
"version": {
"enum": [
1,
2
]
},
"requested": {
"type": "boolean"
},
"mode": {
"enum": [
"cpu_vs_cpu",
"primary_home",
"primary_away",
null,
"assigned"
]
},
"primary_input_slot": {
"enum": [
0,
null
]
},
"attempted": {
"type": "boolean"
},
"failed": {
"type": "boolean"
},
"ready": {
"type": "boolean"
},
"committed": {
"type": "boolean"
},
"failure_reason": {
"enum": [
null,
"opening_boundary_missed",
"native_input_unavailable",
"native_setter_exception",
"control_record_mismatch",
"other_participants_present"
]
},
"authority": {
"const": "native_picker_and_game_control_commit_readback"
},
"scope": {
"type": "string"
}
},
"required": [
"version",
"requested",
"mode",
"primary_input_slot",
"attempted",
"failed",
"ready",
"committed",
"failure_reason",
"authority",
"scope"
],
"additionalProperties": false
}
Schema: CoachingPlanValues
{
"type": "object",
"additionalProperties": false,
"properties": {
"timeouts": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"substitutions": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"substitution_method": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"playvision": {
"type": "integer",
"minimum": 0,
"maximum": 2
},
"playvision_display": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"playcall_messages": {
"type": "integer",
"minimum": 0,
"maximum": 2
},
"offense_playcalling": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"defense_playcalling": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"late_game_fouling": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
}
}
Schema: CoachingValues
{
"type": "object",
"additionalProperties": false,
"required": [
"timeouts",
"substitutions",
"substitution_method",
"playvision",
"playvision_display",
"playcall_messages",
"offense_playcalling",
"defense_playcalling",
"late_game_fouling"
],
"properties": {
"timeouts": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1
},
{
"type": "null"
}
]
},
"substitutions": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1
},
{
"type": "null"
}
]
},
"substitution_method": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1
},
{
"type": "null"
}
]
},
"playvision": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 2
},
{
"type": "null"
}
]
},
"playvision_display": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1
},
{
"type": "null"
}
]
},
"playcall_messages": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 2
},
{
"type": "null"
}
]
},
"offense_playcalling": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1
},
{
"type": "null"
}
]
},
"defense_playcalling": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1
},
{
"type": "null"
}
]
},
"late_game_fouling": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1
},
{
"type": "null"
}
]
}
}
}
Schema: CoachingState
{
"type": "object",
"additionalProperties": false,
"required": [
"authority",
"persistence",
"teams"
],
"properties": {
"authority": {
"const": "native_team_coaching_settings"
},
"persistence": {
"const": "current_match_only"
},
"teams": {
"type": "object",
"additionalProperties": false,
"required": [
"home",
"away"
],
"properties": {
"home": {
"$ref": "#/components/schemas/CoachingValues"
},
"away": {
"$ref": "#/components/schemas/CoachingValues"
}
}
},
"revision": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 4294967295
}
}
}
Schema: DefensiveSettings
{
"type": "object",
"additionalProperties": false,
"required": [
"on_ball_pressure",
"off_ball_pressure",
"double_team",
"screen_defense",
"hedge"
],
"properties": {
"on_ball_pressure": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 3
},
"off_ball_pressure": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 4
},
"double_team": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 4
},
"screen_defense": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 3
},
"hedge": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 4
}
}
}
Schema: DefensiveOpponent
{
"type": "object",
"additionalProperties": false,
"required": [
"opponent_player_key",
"settings",
"preferred_defender_player_key",
"preferred_defender_known"
],
"properties": {
"opponent_player_key": {
"type": "string",
"pattern": "^(home|away):([0-9]|1[01])$"
},
"settings": {
"$ref": "#/components/schemas/DefensiveSettings"
},
"preferred_defender_player_key": {
"type": [
"string",
"null"
],
"pattern": "^(home|away):([0-9]|1[01])$"
},
"preferred_defender_known": {
"type": "boolean"
}
}
}
Schema: DefenseState
{
"type": "object",
"additionalProperties": false,
"required": [
"authority",
"revision",
"persistence",
"teams",
"actual_guarding_assignments_observed"
],
"properties": {
"authority": {
"const": "native_defensive_configuration"
},
"revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"persistence": {
"const": "current_match_only"
},
"teams": {
"type": "object",
"additionalProperties": false,
"required": [
"home",
"away"
],
"properties": {
"home": {
"type": "object",
"additionalProperties": false,
"required": [
"opponents",
"eligible_defender_player_keys"
],
"properties": {
"opponents": {
"type": "array",
"maxItems": 12,
"items": {
"$ref": "#/components/schemas/DefensiveOpponent"
}
},
"eligible_defender_player_keys": {
"type": "array",
"maxItems": 12,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^(home|away):([0-9]|1[01])$"
}
}
}
},
"away": {
"type": "object",
"additionalProperties": false,
"required": [
"opponents",
"eligible_defender_player_keys"
],
"properties": {
"opponents": {
"type": "array",
"maxItems": 12,
"items": {
"$ref": "#/components/schemas/DefensiveOpponent"
}
},
"eligible_defender_player_keys": {
"type": "array",
"maxItems": 12,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^(home|away):([0-9]|1[01])$"
}
}
}
}
}
},
"actual_guarding_assignments_observed": {
"const": false
}
}
}
Schema: CoachingCommand
{
"type": "object",
"additionalProperties": false,
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"expected_period",
"expected_revision",
"side",
"type",
"setting_id",
"value",
"expected_value"
],
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"expected_period": {
"type": "integer"
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"side": {
"enum": [
"home",
"away"
]
},
"type": {
"const": "coaching.set"
},
"setting_id": {
"enum": [
"timeouts",
"substitutions",
"substitution_method",
"playvision",
"playvision_display",
"playcall_messages",
"offense_playcalling",
"defense_playcalling",
"late_game_fouling"
]
},
"value": {},
"expected_value": {}
},
"allOf": [
{
"if": {
"properties": {
"setting_id": {
"const": "timeouts"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "substitutions"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "substitution_method"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "playvision"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 2
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 2
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "playvision_display"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "playcall_messages"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 2
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 2
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "offense_playcalling"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "defense_playcalling"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "late_game_fouling"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
}
}
}
]
}
Schema: DefensiveCommand
{
"type": "object",
"additionalProperties": false,
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"expected_period",
"expected_revision",
"side",
"type",
"setting_id",
"value",
"expected_value",
"opponent_player_key"
],
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"expected_period": {
"type": "integer"
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"side": {
"enum": [
"home",
"away"
]
},
"type": {
"const": "defense.set"
},
"setting_id": {
"enum": [
"on_ball_pressure",
"off_ball_pressure",
"double_team",
"screen_defense",
"hedge",
"preferred_defender"
]
},
"value": {},
"expected_value": {},
"opponent_player_key": {
"type": "string",
"pattern": "^(home|away):([0-9]|1[01])$"
}
},
"allOf": [
{
"if": {
"properties": {
"setting_id": {
"const": "on_ball_pressure"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 3
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 3
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "off_ball_pressure"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 4
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "double_team"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 4
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "screen_defense"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 3
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 3
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "hedge"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"expected_value": {
"type": "integer",
"minimum": 0,
"maximum": 4
}
}
}
},
{
"if": {
"properties": {
"setting_id": {
"const": "preferred_defender"
}
},
"required": [
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": [
"string",
"null"
],
"pattern": "^(home|away):([0-9]|1[01])$"
},
"expected_value": {
"type": [
"string",
"null"
],
"pattern": "^(home|away):([0-9]|1[01])$"
}
}
}
},
{
"if": {
"properties": {
"side": {
"const": "home"
}
},
"required": [
"side"
]
},
"then": {
"properties": {
"opponent_player_key": {
"type": "string",
"pattern": "^away:([0-9]|1[01])$"
}
}
}
},
{
"if": {
"properties": {
"side": {
"const": "home"
},
"setting_id": {
"const": "preferred_defender"
}
},
"required": [
"side",
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": [
"string",
"null"
],
"pattern": "^home:([0-9]|1[01])$"
},
"expected_value": {
"type": [
"string",
"null"
],
"pattern": "^home:([0-9]|1[01])$"
}
}
}
},
{
"if": {
"properties": {
"side": {
"const": "away"
}
},
"required": [
"side"
]
},
"then": {
"properties": {
"opponent_player_key": {
"type": "string",
"pattern": "^home:([0-9]|1[01])$"
}
}
}
},
{
"if": {
"properties": {
"side": {
"const": "away"
},
"setting_id": {
"const": "preferred_defender"
}
},
"required": [
"side",
"setting_id"
]
},
"then": {
"properties": {
"value": {
"type": [
"string",
"null"
],
"pattern": "^away:([0-9]|1[01])$"
},
"expected_value": {
"type": [
"string",
"null"
],
"pattern": "^away:([0-9]|1[01])$"
}
}
}
}
]
}
Schema: SimulationControl
{
"type": "object",
"additionalProperties": false,
"required": [
"authority",
"adapter_owned",
"expires_in_seconds",
"maximum_duration_seconds",
"native_pause_layers_cleared"
],
"properties": {
"authority": {
"const": "adapter_owned_native_pause_layer"
},
"adapter_owned": {
"type": "boolean"
},
"expires_in_seconds": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 60
},
"maximum_duration_seconds": {
"const": 60
},
"native_pause_layers_cleared": {
"const": false
}
}
}
Schema: SimulationCommand
{
"type": "object",
"additionalProperties": false,
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"expected_period",
"expected_revision",
"type",
"expected_owned"
],
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"expected_period": {
"type": "integer"
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"type": {
"enum": [
"simulation.pause",
"simulation.resume"
]
},
"expected_owned": {
"type": "boolean"
},
"duration_seconds": {
"type": "integer",
"minimum": 1,
"maximum": 60
}
},
"allOf": [
{
"if": {
"properties": {
"type": {
"const": "simulation.pause"
}
}
},
"then": {
"required": [
"duration_seconds"
]
}
},
{
"if": {
"properties": {
"type": {
"const": "simulation.resume"
}
}
},
"then": {
"not": {
"required": [
"duration_seconds"
]
}
}
}
]
}
Schema: Substitutions
{
"type": "object",
"properties": {
"authority": {
"const": "native_team_position_array_and_pending_queue"
},
"revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"teams": {
"type": "object",
"properties": {
"home": {
"type": "object",
"properties": {
"positions": {
"type": "array",
"minItems": 5,
"maxItems": 5,
"items": {
"type": "object",
"properties": {
"position": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"player_key": {
"type": "string"
},
"pending_player_key": {
"type": [
"string",
"null"
]
}
},
"required": [
"position",
"player_key",
"pending_player_key"
],
"additionalProperties": false
}
},
"eligible_bench_player_keys": {
"type": "array",
"maxItems": 7,
"uniqueItems": true,
"items": {
"type": "string"
}
},
"pending_count": {
"type": "integer",
"minimum": 0,
"maximum": 5
},
"native_queue_editable": {
"type": "boolean"
},
"user_requested": {
"type": "boolean"
}
},
"required": [
"positions",
"eligible_bench_player_keys",
"pending_count",
"native_queue_editable",
"user_requested"
],
"additionalProperties": false
},
"away": {
"type": "object",
"properties": {
"positions": {
"type": "array",
"minItems": 5,
"maxItems": 5,
"items": {
"type": "object",
"properties": {
"position": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"player_key": {
"type": "string"
},
"pending_player_key": {
"type": [
"string",
"null"
]
}
},
"required": [
"position",
"player_key",
"pending_player_key"
],
"additionalProperties": false
}
},
"eligible_bench_player_keys": {
"type": "array",
"maxItems": 7,
"uniqueItems": true,
"items": {
"type": "string"
}
},
"pending_count": {
"type": "integer",
"minimum": 0,
"maximum": 5
},
"native_queue_editable": {
"type": "boolean"
},
"user_requested": {
"type": "boolean"
}
},
"required": [
"positions",
"eligible_bench_player_keys",
"pending_count",
"native_queue_editable",
"user_requested"
],
"additionalProperties": false
}
},
"required": [
"home",
"away"
],
"additionalProperties": false
},
"acceptance_is_not_completion": {
"const": true
},
"legal_substitution_window_inferred": {
"const": false
}
},
"required": [
"authority",
"revision",
"teams",
"acceptance_is_not_completion",
"legal_substitution_window_inferred"
],
"additionalProperties": false
}
Schema: SubstitutionCommand
{
"oneOf": [
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"expected_period": {
"type": "integer"
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"side": {
"enum": [
"home",
"away"
]
},
"outgoing_player_key": {
"type": "string"
},
"expected_pending_player_key": {
"type": "null"
},
"type": {
"const": "substitution.queue"
},
"incoming_player_key": {
"type": "string"
}
},
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"expected_period",
"expected_revision",
"side",
"outgoing_player_key",
"expected_pending_player_key",
"type",
"incoming_player_key"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"side": {
"const": "home"
}
}
},
"then": {
"properties": {
"outgoing_player_key": {
"type": "string",
"pattern": "^home:([0-9]|1[01])$"
},
"incoming_player_key": {
"type": "string",
"pattern": "^home:([0-9]|1[01])$"
}
}
}
},
{
"if": {
"properties": {
"side": {
"const": "away"
}
}
},
"then": {
"properties": {
"outgoing_player_key": {
"type": "string",
"pattern": "^away:([0-9]|1[01])$"
},
"incoming_player_key": {
"type": "string",
"pattern": "^away:([0-9]|1[01])$"
}
}
}
}
]
},
{
"type": "object",
"properties": {
"command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"lease_token": {
"type": "string"
},
"run_id": {
"type": "string"
},
"expected_period": {
"type": "integer"
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"side": {
"enum": [
"home",
"away"
]
},
"outgoing_player_key": {
"type": "string"
},
"expected_pending_player_key": {
"type": "string"
},
"type": {
"const": "substitution.cancel"
}
},
"required": [
"command_id",
"client_id",
"lease_token",
"run_id",
"expected_period",
"expected_revision",
"side",
"outgoing_player_key",
"expected_pending_player_key",
"type"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"side": {
"const": "home"
}
}
},
"then": {
"properties": {
"outgoing_player_key": {
"type": "string",
"pattern": "^home:([0-9]|1[01])$"
},
"expected_pending_player_key": {
"type": "string",
"pattern": "^home:([0-9]|1[01])$"
}
}
}
},
{
"if": {
"properties": {
"side": {
"const": "away"
}
}
},
"then": {
"properties": {
"outgoing_player_key": {
"type": "string",
"pattern": "^away:([0-9]|1[01])$"
},
"expected_pending_player_key": {
"type": "string",
"pattern": "^away:([0-9]|1[01])$"
}
}
}
}
]
}
]
}
Schema: SubstitutionRequest
{
"type": "object",
"properties": {
"request_command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"client_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"run_id": {
"type": "string"
},
"roster_fingerprint": {
"type": "string"
},
"side": {
"enum": [
"home",
"away"
]
},
"outgoing_player_key": {
"type": "string"
},
"incoming_player_key": {
"type": "string"
},
"reason": {
"type": "string"
},
"match_id": {
"type": [
"string",
"null"
]
},
"position": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"status": {
"enum": [
"pending",
"awaiting_entry",
"removed",
"superseded",
"observed_in_lineup",
"cancelled",
"context_changed",
"ended_before_entry"
]
},
"accepted_source_sequence": {
"type": "integer",
"minimum": 0
},
"observed_source_sequence": {
"type": "integer",
"minimum": 0
},
"completion_authority": {
"const": "observed_native_position_and_on_court_transition"
},
"cancel_command_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"pending_observed": {
"type": "boolean"
}
},
"required": [
"request_command_id",
"client_id",
"run_id",
"roster_fingerprint",
"side",
"outgoing_player_key",
"incoming_player_key",
"reason",
"match_id",
"position",
"status",
"accepted_source_sequence",
"observed_source_sequence",
"completion_authority"
],
"additionalProperties": false
}
Schema: SubstitutionRequestPage
{
"type": "object",
"properties": {
"requests": {
"type": "array",
"maxItems": 100,
"items": {
"$ref": "#/components/schemas/SubstitutionRequest"
}
},
"limit": {
"const": 100
}
},
"required": [
"requests",
"limit"
],
"additionalProperties": false
}
Schema: StartupDefensePlan
{
"type": "object",
"properties": {
"home": {
"type": "object",
"maxProperties": 12,
"patternProperties": {
"^away:([0-9]|1[01])$": {
"type": "object",
"properties": {
"on_ball_pressure": {
"type": "integer",
"minimum": 0,
"maximum": 3
},
"off_ball_pressure": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"double_team": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"screen_defense": {
"type": "integer",
"minimum": 0,
"maximum": 3
},
"hedge": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"preferred_defender": {
"anyOf": [
{
"type": "string",
"pattern": "^home:([0-9]|1[01])$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"away": {
"type": "object",
"maxProperties": 12,
"patternProperties": {
"^home:([0-9]|1[01])$": {
"type": "object",
"properties": {
"on_ball_pressure": {
"type": "integer",
"minimum": 0,
"maximum": 3
},
"off_ball_pressure": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"double_team": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"screen_defense": {
"type": "integer",
"minimum": 0,
"maximum": 3
},
"hedge": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"preferred_defender": {
"anyOf": [
{
"type": "string",
"pattern": "^away:([0-9]|1[01])$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
Schema: TimeoutControl
{
"type": "object",
"properties": {
"revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"authority": {
"const": "original_timeout_eligibility_predicate"
},
"teams": {
"type": "object",
"properties": {
"home": {
"type": "object",
"properties": {
"native_eligible": {
"type": "boolean"
},
"full": {
"type": "integer",
"minimum": 0,
"maximum": 32
},
"short": {
"type": "integer",
"minimum": 0,
"maximum": 64
}
},
"required": [
"native_eligible",
"full",
"short"
],
"additionalProperties": false
},
"away": {
"type": "object",
"properties": {
"native_eligible": {
"type": "boolean"
},
"full": {
"type": "integer",
"minimum": 0,
"maximum": 32
},
"short": {
"type": "integer",
"minimum": 0,
"maximum": 64
}
},
"required": [
"native_eligible",
"full",
"short"
],
"additionalProperties": false
}
},
"required": [
"home",
"away"
],
"additionalProperties": false
}
},
"required": [
"revision",
"authority",
"teams"
],
"additionalProperties": false
}
Schema: RotationPlanEntry
{
"oneOf": [
{
"type": "object",
"properties": {
"side": {
"const": "home"
},
"period": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"const": "half"
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 2
}
},
"required": [
"type",
"number"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "quarter"
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 4
}
},
"required": [
"type",
"number"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "overtime"
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 32
}
},
"required": [
"type",
"number"
],
"additionalProperties": false
}
]
},
"game_seconds": {
"type": "number",
"minimum": 0,
"maximum": 3600
},
"lineup": {
"type": "array",
"minItems": 5,
"maxItems": 5,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^home:(?:[0-9]|1[01])$"
}
}
},
"required": [
"side",
"period",
"game_seconds",
"lineup"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"side": {
"const": "away"
},
"period": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"const": "half"
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 2
}
},
"required": [
"type",
"number"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "quarter"
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 4
}
},
"required": [
"type",
"number"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "overtime"
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 32
}
},
"required": [
"type",
"number"
],
"additionalProperties": false
}
]
},
"game_seconds": {
"type": "number",
"minimum": 0,
"maximum": 3600
},
"lineup": {
"type": "array",
"minItems": 5,
"maxItems": 5,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^away:(?:[0-9]|1[01])$"
}
}
},
"required": [
"side",
"period",
"game_seconds",
"lineup"
],
"additionalProperties": false
}
]
}
Schema: RotationPlan
{
"type": "array",
"maxItems": 64,
"items": {
"$ref": "#/components/schemas/RotationPlanEntry"
}
}
Schema: RotationEntryObservation
{
"type": "object",
"properties": {
"index": {
"type": "integer",
"minimum": 0,
"maximum": 63
},
"side": {
"enum": [
"home",
"away"
]
},
"raw_period": {
"type": "integer",
"minimum": 1,
"maximum": 36
},
"game_seconds": {
"type": "number",
"minimum": 0,
"maximum": 3600
},
"lineup": {
"type": "array",
"minItems": 5,
"maxItems": 5,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^(home|away):(?:[0-9]|1[01])$"
}
},
"status": {
"enum": [
"scheduled",
"due",
"queued",
"observed_in_lineup",
"missed",
"blocked",
"cancelled",
"fault",
"superseded"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"due_game_seconds": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 3600
},
"queued_game_seconds": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 3600
},
"observed_game_seconds": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 3600
}
},
"required": [
"index",
"side",
"raw_period",
"game_seconds",
"lineup",
"status",
"reason",
"due_game_seconds",
"queued_game_seconds",
"observed_game_seconds"
],
"additionalProperties": false
}
Schema: Rotations
{
"type": "object",
"properties": {
"revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"entries": {
"type": "array",
"maxItems": 64,
"items": {
"$ref": "#/components/schemas/RotationEntryObservation"
}
},
"startup_requested": {
"type": "boolean"
},
"startup_ready": {
"type": "boolean"
},
"startup_failed": {
"type": "boolean"
},
"authority": {
"type": "string"
},
"completed_at_requested_clock_guaranteed": {
"const": false
}
},
"required": [
"revision",
"entries",
"startup_requested",
"startup_ready",
"startup_failed",
"authority",
"completed_at_requested_clock_guaranteed"
],
"additionalProperties": false
}
Schema: InputAssignment
{
"type": "object",
"properties": {
"input_id": {
"type": "string",
"pattern": "^native-input:[0-9]$"
},
"kind": {
"enum": [
"keyboard",
"game_controller"
]
},
"side": {
"enum": [
"home",
"away"
]
}
},
"required": [
"input_id",
"kind",
"side"
],
"additionalProperties": false
}
Schema: InputDevices
{
"type": "object",
"properties": {
"revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"devices": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"properties": {
"input_id": {
"type": "string",
"pattern": "^native-input:[0-9]$"
},
"kind": {
"enum": [
"keyboard",
"game_controller",
"unsupported_native"
]
},
"native_type": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"label": {
"type": "string"
},
"current_side": {
"enum": [
null,
"home",
"away"
]
},
"saved_side": {
"enum": [
null,
"home",
"away"
]
},
"control_record_present": {
"type": "boolean"
},
"requested_side": {
"enum": [
null,
"home",
"away"
]
},
"assignment_supported": {
"type": "boolean"
}
},
"required": [
"input_id",
"kind",
"native_type",
"label",
"current_side",
"saved_side",
"control_record_present",
"requested_side"
],
"additionalProperties": false
}
},
"authority": {
"type": "string"
},
"identity_scope": {
"type": "string"
},
"physical_multicontroller_verified": {
"const": false
}
},
"required": [
"revision",
"devices",
"authority",
"identity_scope",
"physical_multicontroller_verified"
],
"additionalProperties": false
}
Schema: RotationPlanObservation
{
"type": "object",
"properties": {
"revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
"entries": {
"type": "array",
"maxItems": 64,
"items": {
"$ref": "#/components/schemas/RotationEntryObservation"
}
},
"startup_requested": {
"type": "boolean"
},
"startup_ready": {
"type": "boolean"
},
"startup_failed": {
"type": "boolean"
},
"authority": {
"type": "string"
},
"completed_at_requested_clock_guaranteed": {
"const": false
},
"plan_id": {
"type": "string"
},
"run_id": {
"type": "string"
},
"match_id": {
"type": [
"string",
"null"
]
},
"superseded_by_revision": {
"type": "integer",
"minimum": 1,
"maximum": 4294967295
}
},
"required": [
"revision",
"entries",
"startup_requested",
"startup_ready",
"startup_failed",
"authority",
"completed_at_requested_clock_guaranteed",
"plan_id",
"run_id",
"match_id"
],
"additionalProperties": false
}
Schema: RosterExtraFields
{
"type": "object",
"maxProperties": 256,
"propertyNames": {
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*){2,7}$",
"maxLength": 160
},
"additionalProperties": {
"oneOf": [
{
"type": "string",
"maxLength": 16384
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "number",
"not": {
"type": "integer"
}
},
{
"type": "boolean"
},
{
"type": "null"
}
]
}
}
Schema: RosterCompanion
{
"type": "object",
"properties": {
"format": {
"const": "openhoops.roster.extensions"
},
"version": {
"const": 1
},
"roster_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"roster_bytes": {
"enum": [
2672672,
16777248
]
},
"fields": {
"$ref": "#/components/schemas/RosterExtraFields"
},
"records": {
"type": "array",
"maxItems": 100000,
"items": {
"type": "object",
"properties": {
"section": {
"type": "integer",
"enum": [
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
45
]
},
"row": {
"type": "integer",
"minimum": 0,
"maximum": 65534
},
"fields": {
"$ref": "#/components/schemas/RosterExtraFields"
}
},
"required": [
"section",
"row",
"fields"
],
"additionalProperties": false
}
}
},
"required": [
"format",
"version",
"roster_sha256",
"roster_bytes",
"fields",
"records"
],
"additionalProperties": false
}
Schema: RosterCompanionInfo
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^roster-metadata:[0-9a-f]{64}$"
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"bytes": {
"type": "integer",
"minimum": 1,
"maximum": 16777216
},
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"format": {
"const": "openhoops.roster.extensions"
},
"version": {
"const": 1
},
"records": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"native_effects": {
"const": false
}
},
"required": [
"id",
"sha256",
"bytes",
"roster_id",
"format",
"version",
"records",
"native_effects"
],
"additionalProperties": false
}
Schema: RosterMetadataPatch
{
"type": "object",
"properties": {
"fields": {
"$ref": "#/components/schemas/RosterExtraFields"
},
"unset": {
"type": "array",
"uniqueItems": true,
"maxItems": 256,
"items": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*){2,7}$",
"maxLength": 160
}
}
},
"required": [],
"additionalProperties": false
}
Schema: RosterMetadataOverrides
{
"type": "object",
"properties": {
"roster": {
"$ref": "#/components/schemas/RosterMetadataPatch"
},
"teams": {
"type": "object",
"properties": {
"home": {
"$ref": "#/components/schemas/RosterMetadataPatch"
},
"away": {
"$ref": "#/components/schemas/RosterMetadataPatch"
}
},
"additionalProperties": false
},
"players": {
"type": "object",
"maxProperties": 40,
"patternProperties": {
"^(home|away):([0-9]|1[0-9])$": {
"$ref": "#/components/schemas/RosterMetadataPatch"
}
},
"additionalProperties": false
},
"arena": {
"$ref": "#/components/schemas/RosterMetadataPatch"
},
"uniforms": {
"type": "object",
"properties": {
"home": {
"$ref": "#/components/schemas/RosterMetadataPatch"
},
"away": {
"$ref": "#/components/schemas/RosterMetadataPatch"
}
},
"additionalProperties": false
}
},
"required": [],
"additionalProperties": false
}
Schema: RosterContextSpec
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"metadata_id": {
"type": "string",
"pattern": "^roster-metadata:[0-9a-f]{64}$"
},
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"selection": {
"type": "object",
"properties": {
"home_team": {
"type": "string",
"pattern": "^team-row:(0|[1-9][0-9]{0,4})$"
},
"away_team": {
"type": "string",
"pattern": "^team-row:(0|[1-9][0-9]{0,4})$"
},
"home_uniform": {
"type": "string",
"pattern": "^uniform-row:(0|[1-9][0-9]{0,4})$"
},
"away_uniform": {
"type": "string",
"pattern": "^uniform-row:(0|[1-9][0-9]{0,4})$"
},
"arena": {
"type": "string",
"pattern": "^arena:(0|[1-9][0-9]{0,4})$"
}
},
"required": [
"home_team",
"away_team",
"home_uniform",
"away_uniform",
"arena"
],
"additionalProperties": false
},
"player_rows": {
"type": "object",
"maxProperties": 40,
"patternProperties": {
"^(home|away):([0-9]|1[0-9])$": {
"type": "integer",
"minimum": 0,
"maximum": 65534
}
},
"additionalProperties": false
},
"player_ids": {
"type": "object",
"maxProperties": 40,
"patternProperties": {
"^(home|away):([0-9]|1[0-9])$": {
"$ref": "#/components/schemas/RosterContextIdentifier"
}
},
"additionalProperties": false
},
"overrides": {
"$ref": "#/components/schemas/RosterMetadataOverrides"
},
"mapping_authority": {
"enum": [
"explicit_client_rows",
"unique_name_within_selected_roster_team"
]
}
},
"required": [
"version",
"metadata_id",
"roster_id",
"selection",
"player_rows",
"player_ids",
"overrides",
"mapping_authority"
],
"additionalProperties": false
}
Schema: RosterContextEntity
{
"type": "object",
"properties": {
"fields": {
"$ref": "#/components/schemas/RosterExtraFields"
},
"field_sources": {
"type": "object",
"additionalProperties": {
"enum": [
"roster_companion",
"match_override"
]
}
},
"section": {
"type": "integer"
},
"row": {
"type": "integer",
"minimum": 0,
"maximum": 65534
},
"external_id": {
"$ref": "#/components/schemas/RosterContextIdentifier"
}
},
"required": [
"fields",
"field_sources"
],
"additionalProperties": false
}
Schema: RosterContext
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"metadata": {
"$ref": "#/components/schemas/RosterCompanionInfo"
},
"mapping_authority": {
"enum": [
"explicit_client_rows",
"unique_name_within_selected_roster_team"
]
},
"native_effects": {
"const": false
},
"native_save_policy": {
"const": "frozen_source_context_no_automatic_rebind"
},
"roster": {
"$ref": "#/components/schemas/RosterContextEntity"
},
"teams": {
"type": "object",
"properties": {
"home": {
"$ref": "#/components/schemas/RosterContextEntity"
},
"away": {
"$ref": "#/components/schemas/RosterContextEntity"
}
},
"additionalProperties": false
},
"players": {
"type": "object",
"maxProperties": 40,
"patternProperties": {
"^(home|away):([0-9]|1[0-9])$": {
"$ref": "#/components/schemas/RosterContextEntity"
}
},
"additionalProperties": false
},
"uninstantiated_players": {
"type": "object",
"maxProperties": 40,
"patternProperties": {
"^(home|away):([0-9]|1[0-9])$": {
"$ref": "#/components/schemas/RosterContextEntity"
}
},
"additionalProperties": false
},
"uniforms": {
"type": "object",
"properties": {
"home": {
"$ref": "#/components/schemas/RosterContextEntity"
},
"away": {
"$ref": "#/components/schemas/RosterContextEntity"
}
},
"additionalProperties": false
},
"arena": {
"$ref": "#/components/schemas/RosterContextEntity"
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
}
},
"required": [
"version",
"roster_id",
"metadata",
"mapping_authority",
"native_effects",
"native_save_policy",
"roster",
"teams",
"players",
"uninstantiated_players",
"uniforms",
"arena",
"sha256"
],
"additionalProperties": false
}
Schema: RosterContextReference
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"metadata_id": {
"type": "string",
"pattern": "^roster-metadata:[0-9a-f]{64}$"
},
"match_id": {
"$ref": "#/components/schemas/RosterContextIdentifier"
},
"frozen": {
"const": true
}
},
"required": [
"version",
"sha256",
"roster_id",
"metadata_id",
"match_id",
"frozen"
],
"additionalProperties": false
}
Schema: RosterMetadataSelection
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^roster-metadata:[0-9a-f]{64}$"
},
"path": {
"type": "string",
"minLength": 1
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"overrides": {
"$ref": "#/components/schemas/RosterMetadataOverrides"
},
"player_rows": {
"type": "object",
"maxProperties": 40,
"patternProperties": {
"^(home|away):([0-9]|1[0-9])$": {
"type": "integer",
"minimum": 0,
"maximum": 65534
}
},
"additionalProperties": false
}
},
"required": [],
"additionalProperties": false,
"allOf": [
{
"not": {
"required": [
"id",
"path"
]
}
},
{
"not": {
"required": [
"id",
"sha256"
]
}
},
{
"if": {
"required": [
"path"
]
},
"then": {
"required": [
"sha256"
]
}
},
{
"if": {
"required": [
"sha256"
]
},
"then": {
"required": [
"path"
]
}
}
]
}
Schema: RosterMetadataQuery
{
"type": "object",
"properties": {
"metadata_id": {
"type": "string",
"pattern": "^roster-metadata:[0-9a-f]{64}$"
},
"section": {
"type": "integer",
"enum": [
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
45
]
},
"start": {
"type": "integer",
"minimum": 0
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 128
}
},
"required": [
"metadata_id"
],
"additionalProperties": false
}
Schema: RosterMetadataPage
{
"type": "object",
"properties": {
"metadata": {
"$ref": "#/components/schemas/RosterCompanionInfo"
},
"fields": {
"$ref": "#/components/schemas/RosterExtraFields"
},
"records": {
"type": "array",
"maxItems": 100000,
"items": {
"type": "object",
"properties": {
"section": {
"type": "integer",
"enum": [
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
45
]
},
"row": {
"type": "integer",
"minimum": 0,
"maximum": 65534
},
"fields": {
"$ref": "#/components/schemas/RosterExtraFields"
}
},
"required": [
"section",
"row",
"fields"
],
"additionalProperties": false
}
},
"total": {
"type": "integer",
"minimum": 0
},
"start": {
"type": "integer",
"minimum": 0
}
},
"required": [
"metadata",
"fields",
"records",
"total",
"start"
],
"additionalProperties": false
}
Schema: RosterMetadataResolve
{
"type": "object",
"properties": {
"metadata_id": {
"type": "string",
"pattern": "^roster-metadata:[0-9a-f]{64}$"
},
"roster_id": {
"type": "string",
"pattern": "^roster:[0-9a-f]{64}$"
},
"preparation": {
"type": "object"
},
"identity": {
"$ref": "#/components/schemas/MatchIdentityPlan"
},
"overrides": {
"$ref": "#/components/schemas/RosterMetadataOverrides"
},
"player_rows": {
"type": "object",
"maxProperties": 40,
"patternProperties": {
"^(home|away):([0-9]|1[0-9])$": {
"type": "integer",
"minimum": 0,
"maximum": 65534
}
},
"additionalProperties": false
}
},
"required": [
"metadata_id",
"roster_id",
"preparation",
"identity"
],
"additionalProperties": false
}
Schema: RosterContextIdentifier
{
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
}
Schema: RuleExtensionRequest
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,63}$"
},
"path": {
"type": "string",
"minLength": 1,
"maxLength": 1023,
"description": "Explicit trusted x86 DLL path, admitted/frozen before owned child creation; not a runtime load command"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"configuration": {
"type": "object"
},
"required": {
"type": "boolean"
}
},
"required": [
"id",
"path",
"sha256"
],
"additionalProperties": false
}
Schema: RuleAttempt
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"kind": {
"enum": [
"none",
"field_goal",
"free_throw",
"unknown"
]
},
"stage": {
"enum": [
"absent",
"registered",
"flight",
"settled"
]
},
"shooter": {
"anyOf": [
{
"$ref": "#/components/schemas/EngineActor"
},
{
"type": "null"
}
]
},
"scoring_points": {
"enum": [
1,
2,
3,
null
]
},
"can_score": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"known_fields": {
"type": "array",
"items": {
"enum": [
"identity",
"shooter",
"scoring_points",
"can_score"
]
},
"uniqueItems": true
}
},
"required": [
"id",
"kind",
"stage",
"shooter",
"scoring_points",
"can_score",
"known_fields"
],
"additionalProperties": false
}
Schema: RuleRestart
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"kind": {
"enum": [
"none",
"throw_in",
"free_throw",
"jump_ball"
]
},
"stage": {
"enum": [
"absent",
"awarded",
"disposed",
"released",
"legal_touch",
"completed"
]
},
"team": {
"enum": [
"home",
"away",
null
]
},
"thrower": {
"anyOf": [
{
"$ref": "#/components/schemas/EngineActor"
},
{
"type": "null"
}
]
},
"count_complete": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"throw_in_complete": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"arrow_consumed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"known_fields": {
"type": "array",
"items": {
"enum": [
"identity",
"team",
"thrower",
"count_complete",
"throw_in_complete",
"arrow_consumed"
]
},
"uniqueItems": true
}
},
"required": [
"id",
"kind",
"stage",
"team",
"thrower",
"count_complete",
"throw_in_complete",
"arrow_consumed",
"known_fields"
],
"additionalProperties": false
}
Schema: RuleFreeThrows
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"shooter": {
"anyOf": [
{
"$ref": "#/components/schemas/EngineActor"
},
{
"type": "null"
}
]
},
"attempt_ordinal": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 3
},
{
"type": "null"
}
]
},
"total": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 3
},
{
"type": "null"
}
]
},
"remaining": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 3
},
{
"type": "null"
}
]
},
"conditional_next": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"retained_team": {
"enum": [
"home",
"away",
null
]
},
"following_restart": {
"enum": [
"none",
"throw_in",
"free_throw",
"jump_ball",
null
]
},
"known_fields": {
"type": "array",
"items": {
"enum": [
"identity",
"shooter",
"attempt_ordinal",
"total",
"remaining",
"conditional_next",
"retained_team",
"following_restart"
]
},
"uniqueItems": true
}
},
"required": [
"id",
"shooter",
"attempt_ordinal",
"total",
"remaining",
"conditional_next",
"retained_team",
"following_restart",
"known_fields"
],
"additionalProperties": false
}
Schema: LegalBallState
{
"type": "object",
"properties": {
"authority": {
"const": "engine_committed_profile_interpretation"
},
"model": {
"enum": [
"nba2k14",
"openhoops_college"
]
},
"epoch": {
"type": "integer",
"minimum": 0
},
"revision": {
"type": "integer",
"minimum": 0
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"continuity_faults": {
"type": "integer",
"minimum": 0
},
"fields": {
"type": "object",
"properties": {
"live": {
"type": "object",
"properties": {
"status": {
"enum": [
"known",
"unknown",
"inapplicable"
]
},
"value": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"reason": {
"enum": [
"new_match",
"accepted_control",
"pass_release",
"attempt",
"contact",
"rim",
"adjudication",
"goal",
"period",
"restart",
"free_throw",
"capture_gap",
"unclassified_transition",
"match_end",
null
]
}
},
"required": [
"status",
"value",
"evidence_sequence",
"reason"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"unknown",
"inapplicable"
]
}
}
},
"then": {
"properties": {
"value": {
"type": "null"
}
}
}
}
]
},
"alive": {
"type": "object",
"properties": {
"status": {
"enum": [
"known",
"unknown",
"inapplicable"
]
},
"value": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"reason": {
"enum": [
"new_match",
"accepted_control",
"pass_release",
"attempt",
"contact",
"rim",
"adjudication",
"goal",
"period",
"restart",
"free_throw",
"capture_gap",
"unclassified_transition",
"match_end",
null
]
}
},
"required": [
"status",
"value",
"evidence_sequence",
"reason"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"unknown",
"inapplicable"
]
}
}
},
"then": {
"properties": {
"value": {
"type": "null"
}
}
}
}
]
},
"player_control": {
"type": "object",
"properties": {
"status": {
"enum": [
"known",
"unknown",
"inapplicable"
]
},
"value": {
"anyOf": [
{
"$ref": "#/components/schemas/EngineActor"
},
{
"type": "null"
}
]
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"reason": {
"enum": [
"new_match",
"accepted_control",
"pass_release",
"attempt",
"contact",
"rim",
"adjudication",
"goal",
"period",
"restart",
"free_throw",
"capture_gap",
"unclassified_transition",
"match_end",
null
]
}
},
"required": [
"status",
"value",
"evidence_sequence",
"reason"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"unknown",
"inapplicable"
]
}
}
},
"then": {
"properties": {
"value": {
"type": "null"
}
}
}
}
]
},
"team_control": {
"type": "object",
"properties": {
"status": {
"enum": [
"known",
"unknown",
"inapplicable"
]
},
"value": {
"anyOf": [
{
"enum": [
"home",
"away",
null
]
},
{
"type": "null"
}
]
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"reason": {
"enum": [
"new_match",
"accepted_control",
"pass_release",
"attempt",
"contact",
"rim",
"adjudication",
"goal",
"period",
"restart",
"free_throw",
"capture_gap",
"unclassified_transition",
"match_end",
null
]
}
},
"required": [
"status",
"value",
"evidence_sequence",
"reason"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"unknown",
"inapplicable"
]
}
}
},
"then": {
"properties": {
"value": {
"type": "null"
}
}
}
}
]
},
"team_possession": {
"type": "object",
"properties": {
"status": {
"enum": [
"known",
"unknown",
"inapplicable"
]
},
"value": {
"anyOf": [
{
"enum": [
"home",
"away",
null
]
},
{
"type": "null"
}
]
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"reason": {
"enum": [
"new_match",
"accepted_control",
"pass_release",
"attempt",
"contact",
"rim",
"adjudication",
"goal",
"period",
"restart",
"free_throw",
"capture_gap",
"unclassified_transition",
"match_end",
null
]
}
},
"required": [
"status",
"value",
"evidence_sequence",
"reason"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"unknown",
"inapplicable"
]
}
}
},
"then": {
"properties": {
"value": {
"type": "null"
}
}
}
}
]
},
"entitlement": {
"type": "object",
"properties": {
"status": {
"enum": [
"known",
"unknown",
"inapplicable"
]
},
"value": {
"anyOf": [
{
"enum": [
"home",
"away",
null
]
},
{
"type": "null"
}
]
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"reason": {
"enum": [
"new_match",
"accepted_control",
"pass_release",
"attempt",
"contact",
"rim",
"adjudication",
"goal",
"period",
"restart",
"free_throw",
"capture_gap",
"unclassified_transition",
"match_end",
null
]
}
},
"required": [
"status",
"value",
"evidence_sequence",
"reason"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"unknown",
"inapplicable"
]
}
}
},
"then": {
"properties": {
"value": {
"type": "null"
}
}
}
}
]
},
"attempt": {
"type": "object",
"properties": {
"status": {
"enum": [
"known",
"unknown",
"inapplicable"
]
},
"value": {
"anyOf": [
{
"$ref": "#/components/schemas/RuleAttempt"
},
{
"type": "null"
}
]
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"reason": {
"enum": [
"new_match",
"accepted_control",
"pass_release",
"attempt",
"contact",
"rim",
"adjudication",
"goal",
"period",
"restart",
"free_throw",
"capture_gap",
"unclassified_transition",
"match_end",
null
]
}
},
"required": [
"status",
"value",
"evidence_sequence",
"reason"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"unknown",
"inapplicable"
]
}
}
},
"then": {
"properties": {
"value": {
"type": "null"
}
}
}
}
]
},
"restart": {
"type": "object",
"properties": {
"status": {
"enum": [
"known",
"unknown",
"inapplicable"
]
},
"value": {
"anyOf": [
{
"$ref": "#/components/schemas/RuleRestart"
},
{
"type": "null"
}
]
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"reason": {
"enum": [
"new_match",
"accepted_control",
"pass_release",
"attempt",
"contact",
"rim",
"adjudication",
"goal",
"period",
"restart",
"free_throw",
"capture_gap",
"unclassified_transition",
"match_end",
null
]
}
},
"required": [
"status",
"value",
"evidence_sequence",
"reason"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"unknown",
"inapplicable"
]
}
}
},
"then": {
"properties": {
"value": {
"type": "null"
}
}
}
}
]
},
"free_throws": {
"type": "object",
"properties": {
"status": {
"enum": [
"known",
"unknown",
"inapplicable"
]
},
"value": {
"anyOf": [
{
"$ref": "#/components/schemas/RuleFreeThrows"
},
{
"type": "null"
}
]
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"reason": {
"enum": [
"new_match",
"accepted_control",
"pass_release",
"attempt",
"contact",
"rim",
"adjudication",
"goal",
"period",
"restart",
"free_throw",
"capture_gap",
"unclassified_transition",
"match_end",
null
]
}
},
"required": [
"status",
"value",
"evidence_sequence",
"reason"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"unknown",
"inapplicable"
]
}
}
},
"then": {
"properties": {
"value": {
"type": "null"
}
}
}
}
]
}
},
"required": [
"live",
"alive",
"player_control",
"team_control",
"team_possession",
"entitlement",
"attempt",
"restart",
"free_throws"
],
"additionalProperties": false
}
},
"required": [
"authority",
"model",
"epoch",
"revision",
"evidence_sequence",
"continuity_faults",
"fields"
],
"additionalProperties": false
}
Schema: RuleDecision
{
"type": "object",
"properties": {
"kind": {
"enum": [
"permission",
"shot_clock_full",
"shot_clock_minimum",
"backcourt_seconds",
"personal_foul_limit",
"bonus_threshold",
"late_bonus_threshold",
"one_and_one_threshold",
"overtime_seconds",
"period_seconds",
"three_point_classification",
"free_throw_count",
"shot_clock_rim"
]
},
"value": {
"type": [
"number",
"null"
]
}
},
"required": [
"kind",
"value"
],
"additionalProperties": false
}
Schema: RuleExtensionStatus
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"version": {
"type": "string"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"configuration_sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"required": {
"type": "boolean"
},
"calls": {
"type": "integer",
"minimum": 0
},
"overrides": {
"type": "integer",
"minimum": 0
},
"faults": {
"type": "integer",
"minimum": 0
},
"disabled": {
"type": "boolean"
},
"last_fault": {
"enum": [
null,
"exception",
"invalid_result",
"context_mutation",
"over_budget",
"reentrant",
"floating_point_environment"
]
},
"last_exception_code": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
]
},
"decisions": {
"type": "array",
"items": {
"enum": [
"permission",
"shot_clock_full",
"shot_clock_minimum",
"backcourt_seconds",
"personal_foul_limit",
"bonus_threshold",
"late_bonus_threshold",
"one_and_one_threshold",
"overtime_seconds",
"period_seconds",
"three_point_classification",
"free_throw_count",
"shot_clock_rim"
]
},
"uniqueItems": true
},
"permissions": {
"type": "array",
"items": {
"enum": [
"shot_clock",
"out_of_bounds",
"backcourt",
"eight_second",
"offensive_three_second",
"defensive_three_second",
"back_to_basket",
"goaltending",
"traveling",
"double_dribble",
"illegal_screen",
"over_the_back",
"charging",
"blocking",
"reaching",
"shooting",
"loose_ball",
"intentional",
"kicked_ball"
]
},
"uniqueItems": true
},
"events": {
"type": "array",
"items": {
"enum": [
"ball_state",
"adjudication_record",
"stat_delta",
"phase",
"decision",
"lifecycle"
]
},
"uniqueItems": true
},
"maximum_microseconds": {
"type": "integer",
"minimum": 0
},
"last_fault_surface": {
"enum": [
null,
"decision",
"observer"
]
},
"last_fault_decision_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
]
},
"last_fault_observation_sequence": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
]
},
"last_fault_sequence": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"version",
"sha256",
"configuration_sha256",
"required",
"calls",
"overrides",
"faults",
"disabled",
"last_fault",
"last_exception_code",
"decisions",
"permissions",
"events",
"maximum_microseconds",
"last_fault_surface",
"last_fault_decision_id",
"last_fault_observation_sequence",
"last_fault_sequence"
],
"additionalProperties": false
}
Schema: RuleRuntime
{
"type": "object",
"properties": {
"available": {
"type": "boolean"
},
"version": {
"enum": [
1,
2
]
},
"interpreter_version": {
"type": "integer",
"minimum": 0
},
"profile": {
"enum": [
"original",
"college"
]
},
"profile_revision": {
"type": "integer",
"minimum": 0
},
"initialized": {
"type": "boolean"
},
"configuration_frozen": {
"type": "boolean"
},
"active": {
"type": "boolean"
},
"degraded": {
"type": "boolean"
},
"halted": {
"type": "boolean"
},
"halt_pending": {
"type": "boolean"
},
"host_faults": {
"type": "integer",
"minimum": 0
},
"continuity_faults": {
"type": "integer",
"minimum": 0
},
"off_thread": {
"type": "integer",
"minimum": 0
},
"match_epoch": {
"type": "integer",
"minimum": 0
},
"evaluation_epoch": {
"type": "integer",
"minimum": 0
},
"decision_sequence": {
"type": "integer",
"minimum": 0
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"configuration_decisions": {
"type": "array",
"items": {
"enum": [
"permission",
"shot_clock_full",
"shot_clock_minimum",
"backcourt_seconds",
"personal_foul_limit",
"bonus_threshold",
"late_bonus_threshold",
"one_and_one_threshold",
"overtime_seconds",
"period_seconds",
"three_point_classification",
"free_throw_count",
"shot_clock_rim"
]
},
"uniqueItems": true
},
"runtime_decisions": {
"type": "array",
"items": {
"enum": [
"permission",
"shot_clock_full",
"shot_clock_minimum",
"backcourt_seconds",
"personal_foul_limit",
"bonus_threshold",
"late_bonus_threshold",
"one_and_one_threshold",
"overtime_seconds",
"period_seconds",
"three_point_classification",
"free_throw_count",
"shot_clock_rim"
]
},
"uniqueItems": true
},
"permissions": {
"type": "array",
"items": {
"enum": [
"shot_clock",
"out_of_bounds",
"backcourt",
"eight_second",
"offensive_three_second",
"defensive_three_second",
"back_to_basket",
"goaltending",
"traveling",
"double_dribble",
"illegal_screen",
"over_the_back",
"charging",
"blocking",
"reaching",
"shooting",
"loose_ball",
"intentional",
"kicked_ball"
]
},
"uniqueItems": true
},
"events": {
"type": "array",
"items": {
"enum": [
"ball_state",
"adjudication_record",
"stat_delta",
"phase",
"decision",
"lifecycle"
]
},
"uniqueItems": true
},
"ball_field_families": {
"type": "array",
"items": {
"enum": [
"live",
"alive",
"player_control",
"team_control",
"team_possession",
"entitlement",
"attempt",
"restart",
"free_throws"
]
},
"uniqueItems": true
},
"frozen_values": {
"$ref": "#/components/schemas/FrozenRuleValues"
},
"modules": {
"type": "array",
"maxItems": 8,
"items": {
"$ref": "#/components/schemas/RuleExtensionStatus"
}
},
"ball": {
"$ref": "#/components/schemas/LegalBallState"
},
"boundary": {
"type": "object",
"properties": {
"sequence": {
"type": "integer",
"minimum": 0
},
"errors": {
"type": "integer",
"minimum": 0
}
},
"required": [
"sequence",
"errors"
],
"additionalProperties": false
}
},
"required": [
"available",
"version",
"interpreter_version",
"profile",
"profile_revision",
"initialized",
"configuration_frozen",
"active",
"degraded",
"halted",
"halt_pending",
"host_faults",
"continuity_faults",
"off_thread",
"match_epoch",
"evaluation_epoch",
"decision_sequence",
"evidence_sequence",
"configuration_decisions",
"runtime_decisions",
"permissions",
"events",
"ball_field_families",
"frozen_values",
"modules",
"ball",
"boundary"
],
"additionalProperties": false
}
Schema: RuleEvent
{
"type": "object",
"properties": {
"source_rule_sequence": {
"type": "integer",
"minimum": 0
},
"kind": {
"enum": [
"ball_state",
"adjudication_record",
"stat_delta",
"phase",
"decision",
"lifecycle"
]
},
"match_epoch": {
"type": "integer",
"minimum": 0
},
"decision_id": {
"type": "integer",
"minimum": 0
},
"raw_period": {
"type": "integer",
"minimum": 0
},
"phase_code": {
"type": "integer",
"minimum": 0
},
"game_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"shot_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"ball": {
"$ref": "#/components/schemas/LegalBallState"
},
"evidence_sequence": {
"type": "integer",
"minimum": 0
},
"transaction_id": {
"type": "integer",
"minimum": 0
},
"parent_transaction": {
"type": "integer",
"minimum": 0
},
"engine_event_watermark": {
"type": "integer",
"minimum": 0
},
"record_stage": {
"type": "integer",
"minimum": 0
},
"fault_code": {
"type": "integer",
"minimum": 0
},
"actors": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/EngineActor"
},
{
"type": "null"
}
]
}
},
"record_kind_code": {
"type": "integer",
"minimum": 0
},
"record_kind_name": {
"enum": [
"eight_second_backcourt_violation",
"ten_second_backcourt_violation",
"double_dribble_violation",
"out_of_bounds",
"five_second_inbound_violation",
"shot_clock_violation",
"kicked_ball_violation",
"reach_in_foul",
"blocking_foul",
"shooting_foul",
null
]
},
"actor_roles": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"enum": [
"violating_player",
"foul_committer",
"fouled_player",
null
]
}
},
"role_authority": {
"enum": [
"original_handler_credit_arguments",
"unresolved"
]
},
"detection_authority": {
"const": "original_game_detection_not_independently_certified"
},
"scope": {
"enum": [
"match_configuration",
"simulation_step",
"native_transaction"
]
},
"reason": {
"enum": [
null,
"field_goal_release",
"shooting_foul",
"conditional_bonus",
"double_bonus",
"administrative_free_throws",
"other_free_throws"
]
}
},
"required": [
"source_rule_sequence",
"kind",
"match_epoch",
"decision_id",
"raw_period",
"phase_code",
"game_seconds",
"shot_seconds",
"ball",
"evidence_sequence",
"transaction_id",
"parent_transaction",
"engine_event_watermark",
"record_stage",
"fault_code",
"actors"
],
"additionalProperties": true
}
Schema: RuleResultContext
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"profile": {
"enum": [
"original",
"college"
]
},
"profile_revision": {
"type": "integer",
"minimum": 0
},
"interpreter_version": {
"type": "integer",
"minimum": 0
},
"match_epoch": {
"type": "integer",
"minimum": 0
},
"configuration_frozen": {
"type": "boolean"
},
"frozen_values": {
"$ref": "#/components/schemas/FrozenRuleValues"
},
"modules": {
"type": "array",
"maxItems": 8,
"items": {
"$ref": "#/components/schemas/RuleExtensionStatus"
}
},
"degraded": {
"type": "boolean"
},
"halted": {
"type": "boolean"
},
"halt_pending": {
"type": "boolean"
},
"host_faults": {
"type": "integer",
"minimum": 0
},
"continuity_faults": {
"type": "integer",
"minimum": 0
},
"event_boundary": {
"type": "object",
"properties": {
"sequence": {
"type": "integer",
"minimum": 0
},
"errors": {
"type": "integer",
"minimum": 0
}
},
"required": [
"sequence",
"errors"
],
"additionalProperties": false
},
"transport_gaps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"first": {
"type": "integer",
"minimum": 0
},
"last": {
"type": "integer",
"minimum": 0
}
},
"required": [
"first",
"last"
],
"additionalProperties": false
},
"maxItems": 128
},
"fault_receipts": {
"type": "array",
"items": {
"type": "object"
},
"maxItems": 128
},
"semantic_coverage": {
"const": "per_field_validity; unknown_and_inapplicable_are_explicit"
},
"fault_receipts_omitted": {
"type": "integer",
"minimum": 0
},
"transport_gaps_omitted": {
"type": "integer",
"minimum": 0
}
},
"required": [
"version",
"profile",
"profile_revision",
"interpreter_version",
"match_epoch",
"configuration_frozen",
"frozen_values",
"modules",
"degraded",
"halted",
"halt_pending",
"host_faults",
"continuity_faults",
"event_boundary",
"transport_gaps",
"fault_receipts",
"semantic_coverage"
],
"additionalProperties": false
}
Schema: RuleRuntimeResponse
{
"type": "object",
"properties": {
"run_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"health": {
"enum": [
"ready",
"unavailable",
"stale"
]
},
"state": {
"anyOf": [
{
"$ref": "#/components/schemas/RuleRuntime"
},
{
"type": "null"
}
]
}
},
"required": [
"run_id",
"health",
"state"
],
"additionalProperties": false
}
Schema: LegalBallResponse
{
"type": "object",
"properties": {
"run_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"health": {
"enum": [
"ready",
"unavailable",
"stale"
]
},
"state": {
"anyOf": [
{
"$ref": "#/components/schemas/LegalBallState"
},
{
"type": "null"
}
]
}
},
"required": [
"run_id",
"health",
"state"
],
"additionalProperties": false
}
Schema: AssetFile
{
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_.-]{0,119}\\.iff$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"kind": {
"enum": [
"arena",
"court",
"uniform",
"logo",
"support"
]
},
"bytes": {
"type": "integer",
"minimum": 1,
"maximum": 536870912
}
},
"required": [
"name",
"sha256",
"kind",
"bytes"
],
"additionalProperties": false
}
Schema: AssetFileObservation
{
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_.-]{0,119}\\.iff$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"kind": {
"enum": [
"arena",
"court",
"uniform",
"logo",
"support"
]
},
"bytes": {
"type": "integer",
"minimum": 1,
"maximum": 536870912
},
"opens": {
"type": "integer",
"minimum": 0
}
},
"required": [
"name",
"sha256",
"kind",
"bytes",
"opens"
],
"additionalProperties": false
}
Schema: AssetContainerValidation
{
"type": "object",
"properties": {
"family": {
"const": "94ef3bff"
},
"segments": {
"type": "integer",
"minimum": 1,
"maximum": 4096
},
"resources": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"decoded_bytes": {
"type": "integer",
"minimum": 0,
"maximum": 536870912
}
},
"required": [
"family",
"segments",
"resources",
"decoded_bytes"
],
"additionalProperties": false
}
Schema: AssetPackageFile
{
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_.-]{0,119}\\.iff$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"kind": {
"enum": [
"arena",
"court",
"uniform",
"logo",
"support"
]
},
"bytes": {
"type": "integer",
"minimum": 1,
"maximum": 536870912
},
"path": {
"type": "string",
"pattern": "^files/"
},
"container": {
"$ref": "#/components/schemas/AssetContainerValidation"
}
},
"required": [
"name",
"sha256",
"kind",
"bytes",
"path",
"container"
],
"additionalProperties": false
}
Schema: AssetPackageDescriptor
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^asset-package:[a-f0-9]{64}$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"archive_bytes": {
"type": "integer",
"minimum": 1,
"maximum": 536870912
},
"expanded_bytes": {
"type": "integer",
"minimum": 1,
"maximum": 2147483648
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AssetPackageFile"
},
"maxItems": 512,
"minItems": 1
},
"native_loaded": {
"const": false
}
},
"required": [
"id",
"sha256",
"archive_bytes",
"expanded_bytes",
"files",
"native_loaded"
],
"additionalProperties": false
}
Schema: AssetPackageReference
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^asset-package:[a-f0-9]{64}$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"id",
"sha256"
],
"additionalProperties": false
}
Schema: AssetOverlay
{
"type": "object",
"properties": {
"version": {
"const": 1
},
"packages": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AssetPackageReference"
},
"maxItems": 8,
"minItems": 1
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AssetFile"
},
"maxItems": 512,
"minItems": 1
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"version",
"packages",
"files",
"sha256"
],
"additionalProperties": false
}
Schema: NativeMetadataStatus
{
"type": "object",
"properties": {
"required": {
"type": "boolean"
},
"state": {
"enum": [
"inactive",
"waiting",
"committed"
]
},
"epoch": {
"type": "integer",
"minimum": 0
},
"context_sha256": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"match_id": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
{
"type": "null"
}
]
},
"bytes": {
"type": "integer",
"minimum": 0,
"maximum": 524288
},
"entities": {
"type": "integer",
"minimum": 0,
"maximum": 46
},
"simulation_blocked": {
"type": "boolean"
},
"error": {
"type": "integer",
"minimum": 0
}
},
"required": [
"required",
"state",
"epoch",
"context_sha256",
"match_id",
"bytes",
"entities",
"simulation_blocked",
"error"
],
"additionalProperties": false
}
Schema: NativeAssetStatus
{
"type": "object",
"properties": {
"active": {
"type": "boolean"
},
"sha256": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"packages": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AssetPackageReference"
},
"maxItems": 8,
"minItems": 0
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AssetFileObservation"
},
"maxItems": 512,
"minItems": 0
},
"reads": {
"type": "integer",
"minimum": 0
},
"write_refusals": {
"type": "integer",
"minimum": 0
}
},
"required": [
"active",
"sha256",
"packages",
"files",
"reads",
"write_refusals"
],
"additionalProperties": false
}
Schema: NativePlatform
{
"type": "object",
"properties": {
"available": {
"const": true
},
"version": {
"const": 1
},
"metadata": {
"$ref": "#/components/schemas/NativeMetadataStatus"
},
"assets": {
"$ref": "#/components/schemas/NativeAssetStatus"
}
},
"required": [
"available",
"version",
"metadata",
"assets"
],
"additionalProperties": false
}
Schema: NativePlatformResponse
{
"type": "object",
"properties": {
"run_id": {
"type": "string"
},
"health": {
"type": "string"
},
"platform": {
"anyOf": [
{
"$ref": "#/components/schemas/NativePlatform"
},
{
"type": "null"
}
]
}
},
"required": [
"run_id",
"health",
"platform"
],
"additionalProperties": false
}
Schema: NativeContextReceipt
{
"type": "object",
"properties": {
"status": {
"const": "committed"
},
"epoch": {
"type": "integer",
"minimum": 1
},
"match_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$"
},
"context_sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"payload_sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"bytes": {
"type": "integer",
"minimum": 1,
"maximum": 2097152
},
"entities": {
"type": "integer",
"minimum": 6,
"maximum": 46
}
},
"required": [
"status",
"epoch",
"match_id",
"context_sha256",
"payload_sha256",
"bytes",
"entities"
],
"additionalProperties": false
}
Schema: CompatibilityCheck
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"status": {
"enum": [
"pass",
"fail",
"warning",
"unknown"
]
},
"message": {
"type": "string"
},
"fix": {
"type": [
"string",
"null"
]
},
"evidence": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"id",
"status",
"message",
"fix",
"evidence"
],
"additionalProperties": false
}
Schema: CompatibilityReport
{
"type": "object",
"properties": {
"format": {
"const": "openhoops.compatibility_report"
},
"version": {
"const": 1
},
"status": {
"enum": [
"passed",
"failed",
"incomplete"
]
},
"scope": {
"const": "static_preflight"
},
"live_readiness": {
"const": "not_established"
},
"game_started": {
"const": false
},
"request_reserved": {
"const": false
},
"source_files_modified": {
"const": false
},
"summary": {
"type": "object",
"properties": {
"pass": {
"type": "integer",
"minimum": 0
},
"fail": {
"type": "integer",
"minimum": 0
},
"warning": {
"type": "integer",
"minimum": 0
},
"unknown": {
"type": "integer",
"minimum": 0
}
},
"required": [
"pass",
"fail",
"warning",
"unknown"
],
"additionalProperties": false
},
"checks": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CompatibilityCheck"
}
}
},
"required": [
"format",
"version",
"status",
"scope",
"live_readiness",
"game_started",
"request_reserved",
"source_files_modified",
"summary",
"checks"
],
"additionalProperties": false
}
Schema: CompatibilityRequest
{
"type": "object",
"properties": {
"request": {
"$ref": "#/components/schemas/MatchRequest"
},
"game_path": {
"type": "string"
}
},
"required": [
"request"
],
"additionalProperties": false
}
Schema: FrozenRuleValues
{
"type": "object",
"properties": {
"shot_clock_full": {
"type": "number",
"minimum": 1,
"maximum": 120
},
"shot_clock_minimum": {
"type": "number",
"minimum": 1,
"maximum": 120
},
"personal_foul_limit": {
"enum": [
5,
6
]
},
"shot_clock_rim": {
"type": "number",
"minimum": 1,
"maximum": 120
},
"backcourt_seconds": {
"type": "number",
"minimum": 1,
"maximum": 120
},
"overtime_seconds": {
"type": "number",
"minimum": 60,
"maximum": 300,
"multipleOf": 60
},
"period_seconds": {
"type": "number",
"minimum": 60,
"maximum": 1200,
"multipleOf": 60
},
"bonus_threshold": {
"type": "integer",
"minimum": 1,
"maximum": 2147483647
},
"one_and_one_threshold": {
"type": "integer",
"minimum": 1,
"maximum": 2147483647
}
},
"required": [],
"additionalProperties": false
}