Skip to content
LogoLogo

Ratings

The append-only rating ledger: the season lifecycle, standings and history read projections, and explicit settled-outcome ingestion and correction. Served when the ranked configuration is enabled.

Open a rating season

POST/open/v1/ratings/seasons

Commits a season before any result is accepted: the eligible pools (each bound to one competition id, a rating policy version, and the policy config), the standings tie-break, the disclosure, and the open/close window. Opening rejects a season-id conflict and any competition already committed to another open season pool.

Refusals: 400 bad_request; 409 season_id_conflict, pool_competition_conflict; 422 invalid_season_config, unsupported_rating_policy, invalid_input; 503 backend_unavailable.

Requires an operator capability bound to this exact request; see the LeagueOperatorCapability security scheme. Refused with 401 missing_operator_capability, invalid_operator_capability, or operator_capability_outside_window, or operator_capability_replayed.

Request Body

application/json
season_idRequired
string·min 1·max 64

A bounded season identifier.

configRequired
object

Responses

Read one rating season

GET/open/v1/ratings/seasons/{season_id}

The season's committed config and its open/closed status. Refusals: 400 bad_request (including an invalid season id); 404 unknown_season; 503 backend_unavailable.

Path Parameters

season_idRequired
string·min 1·max 64

Responses

Close a rating season

POST/open/v1/ratings/seasons/{season_id}/close

Per pool, rebuilds the standings from the ledger, freezes an evidence-rooted final snapshot, then marks the season closed. A closed season no longer accepts results. No request body. Refusals: 400 bad_request; 404 unknown_season; 409 season_already_closed; 503 backend_unavailable.

Requires an operator capability bound to this exact request; see the LeagueOperatorCapability security scheme. Refused with 401 missing_operator_capability, invalid_operator_capability, or operator_capability_outside_window, or operator_capability_replayed.

Path Parameters

season_idRequired
string·min 1·max 64

Responses

Read one pool's standings

GET/open/v1/ratings/seasons/{season_id}/standings

The standings view for one pool, derived from the ledger and never a stored authority. An open season is aggregated over the ledger on read; a closed season serves the snapshot frozen at close, whose computed_at_ms is that freeze time rather than now. pool is required. Refusals: 400 bad_request (including a missing or invalid pool); 404 unknown_season, unknown_pool; 503 backend_unavailable.

Path Parameters

season_idRequired
string·min 1·max 64

Query Parameters

poolRequired
string·min 1·max 64

Responses

Read one agent's rating history

GET/open/v1/ratings/agents/{agent_id}/history

One agent's append-only rating entries and current rating in a pool. season and pool are required. Refusals: 400 bad_request (including a missing/invalid query parameter); 404 unknown_season, unknown_pool; 503 backend_unavailable.

Path Parameters

agent_idRequired
string

Query Parameters

seasonRequired
string·min 1·max 64
poolRequired
string·min 1·max 64

Responses

Ingest an explicit ranked outcome

POST/open/v1/ratings/outcomes

Appends one rating entry per seat for a canonical SettledOutcomeRecord whose execution the product admitted as a ranked offer. The product validates the content digest, the record's binding to that admitted offer, a non-Void disposition, a supported outcome schema, and a winner set that is a non-empty subset of the offer's accepted seats, then appends to the open season's pool. Append-only and idempotent by outcome digest: re-ingesting an already-applied digest answers applied: false and appends nothing.

Refusals: 400 bad_request; 404 unknown_season, unknown_pool; 409 season_not_open, execution_already_rated; 422 invalid_record_encoding, record_too_large, unsupported_outcome_schema, unsupported_disposition, invalid_winner_set, outcome_not_bound_to_ranked_offer, invalid_input; 503 backend_unavailable.

Requires an operator capability bound to this exact request; see the LeagueOperatorCapability security scheme. Refused with 401 missing_operator_capability, invalid_operator_capability, or operator_capability_outside_window, or operator_capability_replayed.

Request Body

application/json
record_canonical_hexRequired
string

The canonical SettledOutcomeRecord bytes as lowercase hex (a leading 0x is optional), 1 to 8192 bytes.

Responses

Correct an applied ranked outcome

POST/open/v1/ratings/outcomes/corrections

Appends compensation entries for a superseded outcome in the same pool; history is never rewritten. The corrected record must bind the same execution as the superseded match entries. Refusals: 400 bad_request; 404 unknown_season, unknown_pool, superseded_outcome_unknown; 409 season_not_open, superseded_execution_mismatch; 422 correction_not_supported, invalid_record_encoding, record_too_large, unsupported_outcome_schema, unsupported_disposition, invalid_winner_set, outcome_not_bound_to_ranked_offer, invalid_input; 503 backend_unavailable.

Requires an operator capability bound to this exact request; see the LeagueOperatorCapability security scheme. Refused with 401 missing_operator_capability, invalid_operator_capability, or operator_capability_outside_window, or operator_capability_replayed.

Request Body

application/json
superseded_outcome_digest_hexRequired
string

The digest of the match entries this correction supersedes.

record_canonical_hexRequired
string

The corrected canonical record as lowercase hex, as for ingest.

reasonRequired
string·min 1·max 512

Responses