OPENHOOPSTeam build 2026.10.20-team1 · Windows

Live controls and observations

Read /v1/session and /v1/snapshot first. Capabilities describe what this adapter can do; snapshot health, run ID, revisions, native phase, pause/replay and expected preimages determine whether it can do it now. Schema enum membership alone does not establish availability.

Mutating command pattern

  1. Acquire POST /v1/control/lease with your client_id and bounded ttl_seconds.
  2. Read the current snapshot and the relevant settings/control catalog.
  3. Persist a unique command_id with the intended operation before sending POST /v1/commands. Include the lease token, same client/run identity and all required expected values/revisions/period preconditions.
  4. Read the command receipt. Applied, rejected, queued and indeterminate have different meanings. Recover a lost response through GET /v1/commands/{id} using the same identity.
  5. Release POST /v1/control/release with the lease token when done. Do not retain leases while idle.

The generated HTTP reference and OpenAPI contain every command variant and required field. Mutation requests are never automatically retried by the SDK. A 409 precondition failure requires a fresh read and an explicit decision, not blind resubmission.

Supported families

FamilyBehavior and boundary
ClocksGuarded game/shot-clock edits with expected period/value; inspect active profile first.
Sliders/optionsNamed settings and exposed ranges, separate user/CPU slider banks. Runtime changes do not promise disk persistence.
CameraNamed supported exhibition camera and that camera's configurable controls. Not every camera/resolution is visually certified.
Controller preferencesStored input preferences; distinct from connected device discovery and side assignment.
CoachingNine settings per team through original handlers. Live commands require the documented frozen simulation/pause state.
DefenseSix fields per instantiated opponent, including preferred defender. Preferred defender is configuration, not observed physical guarding.
Simulation pauseOwned bounded pause/resume with expected revision and expiry. Existing user pause is not claimed or resumed. Verify frozen-clock state before changing paused-only settings.
SubstitutionNative queue/cancel plus separately observed actual entry. A queue receipt does not mean the player is on court.
RotationsGame-clock lineup plans with native opportunity/entry reporting; not arbitrary frame-exact substitutions.
TimeoutsOriginal native timeout calls with current eligibility/preconditions; timeout phase and award semantics remain separately observed.
InputsConnected logical inputs and team assignment; physical multi-controller certification remains open.
Session stopOnly the original broker-owned matching game/run; finished requires finalized result, cancelled abandons.

Use /v1/substitutions/requests and /v1/rotations/plans to inspect ongoing intent. Native cancellation, supersession, injury/foul/lineup changes and match transitions can prevent a requested entry. Surface that status to the user instead of claiming success from queue acceptance.

Data interpretation

Snapshots include team/player statistics, clocks, physical holder and pause/replay/presentation observations. Physical attachment is not legal team possession; presentation phases are not an authoritative live/dead-ball rule state. Scoped legal state is provided separately through /v1/ball-state with validity, evidence and profile applicability. Preserve unknown/inapplicable fields.

Event cursor continuity, counter deltas, semantic rule observations and reconciled final totals are separate sources. Do not count a rule observation and its correlated counter event as two statistical credits. Do not infer every foul subtype from a numeric value in another domain. Final results retain capture gaps, corrections and verification provenance.