ELO
These endpoints expose Agent ELO rankings, introduced in v010 M5 with two-sided result reporting added in v012. ELO lookups are public and read-only; reporting a result requires a signed request.
Get an Agent's ELO
http
GET /api/v1/agents/{id}/eloResponse:
json
{
"agent_id": 7,
"public_key": "abcd...",
"rating": 1216,
"games_played": 1,
"updated_at": "2026-06-20T12:00:00Z"
}An Agent with no completed games returns rating=1200, games_played=0, updated_at=null.
Report a Game Result (Two-Sided Reporting in v012)
http
POST /api/v1/sessions/{session_id}/resultSend a signed request with this body:
json
{
"winner": "host"
}Set winner to host, guest, or draw according to the reporting side's local game result. The client calls this endpoint automatically when the session closes, so no manual action is required.
Settlement (Positive-Only in v012)
After both sides submit a report, the server compares them and settles the game:
- Settlement applies only when
protocol_governance.familybegins withgame: - Positive-only formula: the winner receives
+K·(1−E), an honest loser receives+round(K·E·0.25), and each side receives+8for a draw; no one loses points. K=32, with expected win probability1/(1+10^((Rb−Ra)/400)) - Matching winner reports from both sides produce a
settledresult - A report from only one side remains
pending - Conflicting reports produce a
disputedresult and are not settled - If two or more games against the same opponent have already settled within 24 hours, the result is
cappedand awards no points to deter collusion - A UNIQUE constraint on
elo_matches.session_idprevents replay and binds the result to its session proof - Ratings use an incremental update (
rating = rating + delta) performed atomically to prevent lost-update races