{"openapi":"3.1.0","info":{"title":"Challenges API","version":"1.0.0","summary":"A shared competition layer for many small apps.","description":"Identity, leaderboards, qualifications, challenges, badges, collections,\nratings and geographic titles — from district to world.\n\nFive rules explain most answers:\n\n1. The ledger is the truth; everything else is derived.\n2. A qualification is the entrance — no exam passed, no place on a board.\n3. A title never reaches higher than its discipline trust tier.\n4. Two keys per app: `chapi_pk_` may live in a client, `chapi_sk_` never.\n5. A block cuts contact, never results.","license":{"name":"CC0-1.0","url":"https://creativecommons.org/publicdomain/zero/1.0/"},"contact":{"name":"Challenges API","url":"https://challenges.moinsen.dev"}},"servers":[{"url":"https://games-challenges-api.developer-331.workers.dev","description":"This instance"}],"tags":[{"name":"Meta","description":"What this instance is and can do"},{"name":"Identity","description":"Accounts that need no personal data"},{"name":"Recovery","description":"Passkeys, sessions and an optional rescue address"},{"name":"Competition","description":"Entries, boards, challenges and titles"},{"name":"Social","description":"Rivals, blocks and reports"},{"name":"Live","description":"Events, presence and matchmaking"},{"name":"Ceremony","description":"Tournaments, ghosts and title cards"},{"name":"Access","description":"Invites and waitlists"},{"name":"Developer","description":"Server-side calls; secret key only"},{"name":"Console","description":"The developer console"},{"name":"Operator","description":"Platform operations"},{"name":"Verifier","description":"The replay verification queue"}],"components":{"securitySchemes":{"appKey":{"type":"apiKey","in":"header","name":"X-App-Key","description":"Public key (chapi_pk_…)"},"appSecret":{"type":"apiKey","in":"header","name":"X-App-Key","description":"Secret key (chapi_sk_…)"},"playerToken":{"type":"http","scheme":"bearer","description":"A player token, valid across every app"},"adminKey":{"type":"apiKey","in":"header","name":"X-Admin-Key"},"consoleSession":{"type":"apiKey","in":"cookie","name":"chapi_dev"}},"responses":{"Unauthorised":{"description":"Missing or refused credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"No such thing, or not yours to see","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Plain words, not a code to look up"}}},"Standing":{"type":"object","properties":{"rank":{"type":"integer"},"player_id":{"type":"string"},"handle":{"type":"string"},"value":{"type":"number"}}},"Leaderboard":{"type":"object","properties":{"discipline":{"type":"string"},"aggregation":{"type":"string","enum":["best","sum","count","streak"]},"trust_tier":{"type":"integer","minimum":0,"maximum":3},"verification":{"type":"string","enum":["replay","none"]},"region":{"type":"string"},"contenders":{"type":"integer"},"title_eligible":{"type":"boolean"},"cursor":{"type":["string","null"]},"entries":{"type":"array","items":{"$ref":"#/components/schemas/Standing"}}}},"EntryResult":{"type":"object","properties":{"entry_id":{"type":"string"},"status":{"type":"string","enum":["counted","review","rejected"]},"aggregate":{"type":"number"},"qualified":{"type":"boolean"},"qualified_now":{"type":"boolean"},"verification":{"type":"string","enum":["none","pending","verified","failed"]},"streak_days":{"type":["integer","null"]},"settled_challenges":{"type":"array","items":{"type":"string"}},"badges_earned":{"type":"array","items":{"type":"object"}}}}}},"paths":{"/v1/status":{"get":{"tags":["Meta"],"summary":"Service identity and the capabilities this instance has","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"getV1Status","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/openapi.json":{"get":{"tags":["Meta"],"summary":"This document, describing every endpoint of this instance","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"getV1OpenapiJson","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/health":{"get":{"tags":["Meta"],"summary":"Health, with the checks actually performed and the queue depths","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"getV1Health","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/auth/anonymous":{"post":{"tags":["Identity"],"summary":"Create an account in one call, no personal data required","description":"The public app key. Belongs in a client.","operationId":"postV1AuthAnonymous","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/link-code":{"post":{"tags":["Identity"],"summary":"Mint a one-time code to carry this identity elsewhere","description":"The public app key plus a player token.","operationId":"postV1MeLinkCode","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/auth/redeem":{"post":{"tags":["Identity"],"summary":"Redeem a link code on another device or app","description":"The public app key. Belongs in a client.","operationId":"postV1AuthRedeem","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me":{"get":{"tags":["Identity"],"summary":"Own profile: qualifications, badges, titles, region","description":"The public app key plus a player token.","operationId":"getV1Me","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["Identity"],"summary":"Delete the account, irreversibly and completely","description":"The public app key plus a player token.","operationId":"deleteV1Me","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/export":{"get":{"tags":["Identity"],"summary":"Everything stored about this player, as JSON","description":"The public app key plus a player token.","operationId":"getV1MeExport","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/region":{"patch":{"tags":["Identity"],"summary":"Choose a home district; locked for the season","description":"The public app key plus a player token.","operationId":"patchV1MeRegion","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/profile":{"patch":{"tags":["Identity"],"summary":"Display name, avatar, locale, featured title or badge","description":"The public app key plus a player token.","operationId":"patchV1MeProfile","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/handle":{"patch":{"tags":["Identity"],"summary":"Change the handle; locked for 30 days afterwards","description":"The public app key plus a player token.","operationId":"patchV1MeHandle","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/players":{"get":{"tags":["Identity"],"summary":"Find other players by the start of their handle","description":"The public app key. Belongs in a client.","operationId":"getV1Players","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/players/{handle}":{"get":{"tags":["Identity"],"summary":"Public profile: titles and badges only","description":"The public app key. Belongs in a client.","operationId":"getV1PlayersHandle","security":[{"appKey":[]}],"parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/catalog":{"get":{"tags":["Identity"],"summary":"Disciplines, regions, season and collections of this app","description":"The public app key. Belongs in a client.","operationId":"getV1Catalog","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/passkeys/challenge":{"post":{"tags":["Recovery"],"summary":"Start adding a passkey to this account","description":"The public app key plus a player token.","operationId":"postV1MePasskeysChallenge","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/passkeys":{"post":{"tags":["Recovery"],"summary":"Register a passkey for this account","description":"The public app key plus a player token.","operationId":"postV1MePasskeys","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Recovery"],"summary":"The passkeys that can sign in to this account","description":"The public app key plus a player token.","operationId":"getV1MePasskeys","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/passkeys/{id}":{"delete":{"tags":["Recovery"],"summary":"Remove one passkey from this account","description":"The public app key plus a player token.","operationId":"deleteV1MePasskeysId","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/auth/passkey/challenge":{"post":{"tags":["Recovery"],"summary":"Start signing in with a passkey","description":"The public app key. Belongs in a client.","operationId":"postV1AuthPasskeyChallenge","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/auth/passkey":{"post":{"tags":["Recovery"],"summary":"Sign in on a device that never held a token","description":"The public app key. Belongs in a client.","operationId":"postV1AuthPasskey","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/sessions":{"get":{"tags":["Recovery"],"summary":"Sessions currently able to act as this player","description":"The public app key plus a player token.","operationId":"getV1MeSessions","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/sessions/revoke-others":{"post":{"tags":["Recovery"],"summary":"End every session but this one","description":"The public app key plus a player token.","operationId":"postV1MeSessionsRevokeOthers","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/recovery-email":{"post":{"tags":["Recovery"],"summary":"Attach an optional rescue address","description":"The public app key plus a player token.","operationId":"postV1MeRecoveryEmail","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["Recovery"],"summary":"Remove the rescue address","description":"The public app key plus a player token.","operationId":"deleteV1MeRecoveryEmail","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/auth/recovery/confirm":{"get":{"tags":["Recovery"],"summary":"Confirm a rescue address from its email","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"getV1AuthRecoveryConfirm","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/auth/recover":{"post":{"tags":["Recovery"],"summary":"Ask for a recovery link; the answer never says whether one was sent","description":"The public app key. Belongs in a client.","operationId":"postV1AuthRecover","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/auth/recover/callback":{"get":{"tags":["Recovery"],"summary":"Recover an account and end every other session","description":"The public app key. Belongs in a client.","operationId":"getV1AuthRecoverCallback","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/entries":{"post":{"tags":["Competition"],"summary":"Submit one entry, with a trace where the discipline verifies","description":"The public app key plus a player token.","operationId":"postV1Entries","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/entries/{id}":{"get":{"tags":["Competition"],"summary":"What became of one entry, including a verdict","description":"The public app key plus a player token.","operationId":"getV1EntriesId","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/disciplines/{discipline}/me":{"get":{"tags":["Competition"],"summary":"Own value, rank, streak and exam status","description":"The public app key plus a player token.","operationId":"getV1DisciplinesDisciplineMe","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"discipline","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/leaderboards/{discipline}":{"get":{"tags":["Competition"],"summary":"A board, by region, friends or globally; cursor paged","description":"The public app key. Belongs in a client.","operationId":"getV1LeaderboardsDiscipline","security":[{"appKey":[]}],"parameters":[{"name":"discipline","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/leaderboards/{discipline}/around":{"get":{"tags":["Competition"],"summary":"The rows immediately around you","description":"The public app key plus a player token.","operationId":"getV1LeaderboardsDisciplineAround","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"discipline","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/daily/{discipline}":{"get":{"tags":["Competition"],"summary":"The day seed, identical worldwide","description":"The public app key. Belongs in a client.","operationId":"getV1DailyDiscipline","security":[{"appKey":[]}],"parameters":[{"name":"discipline","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/ratings/{discipline}":{"get":{"tags":["Competition"],"summary":"Glicko-2 ratings for a head-to-head discipline","description":"The public app key. Belongs in a client.","operationId":"getV1RatingsDiscipline","security":[{"appKey":[]}],"parameters":[{"name":"discipline","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/challenges":{"post":{"tags":["Competition"],"summary":"Challenge somebody, or leave an open invitation","description":"The public app key plus a player token.","operationId":"postV1Challenges","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Competition"],"summary":"Challenges you are part of, open and settled","description":"The public app key plus a player token.","operationId":"getV1Challenges","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/challenges/{id}/accept":{"post":{"tags":["Competition"],"summary":"Accept a challenge that was aimed at you","description":"The public app key plus a player token.","operationId":"postV1ChallengesIdAccept","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/collections/{slug}":{"get":{"tags":["Competition"],"summary":"A collection with your own holdings","description":"The public app key plus a player token.","operationId":"getV1CollectionsSlug","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/titles":{"get":{"tags":["Competition"],"summary":"The title archive","description":"The public app key. Belongs in a client.","operationId":"getV1Titles","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/titles/{id}/card.svg":{"get":{"tags":["Competition"],"summary":"A title as a shareable image","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"getV1TitlesIdCardSvg","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/follows/{handle}":{"post":{"tags":["Social"],"summary":"Follow a rival, without asking their permission","description":"The public app key plus a player token.","operationId":"postV1MeFollowsHandle","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["Social"],"summary":"Stop following somebody","description":"The public app key plus a player token.","operationId":"deleteV1MeFollowsHandle","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/follows":{"get":{"tags":["Social"],"summary":"The people whose scores you want to see next to yours","description":"The public app key plus a player token.","operationId":"getV1MeFollows","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/blocks/{handle}":{"post":{"tags":["Social"],"summary":"Block a person; cuts contact, never results","description":"The public app key plus a player token.","operationId":"postV1MeBlocksHandle","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["Social"],"summary":"Lift a block and allow contact again","description":"The public app key plus a player token.","operationId":"deleteV1MeBlocksHandle","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/blocks":{"get":{"tags":["Social"],"summary":"People you have cut contact with","description":"The public app key plus a player token.","operationId":"getV1MeBlocks","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/reports":{"post":{"tags":["Social"],"summary":"Report a person to the operator","description":"The public app key plus a player token.","operationId":"postV1Reports","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/events":{"get":{"tags":["Live"],"summary":"Own events, cursor based","description":"The public app key plus a player token.","operationId":"getV1Events","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/events/stream":{"get":{"tags":["Live"],"summary":"The same events as SSE, resumable via Last-Event-ID","description":"The public app key plus a player token.","operationId":"getV1EventsStream","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/presence":{"post":{"tags":["Live"],"summary":"Say you are around; expires after 90 seconds","description":"The public app key plus a player token.","operationId":"postV1MePresence","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/presence":{"get":{"tags":["Live"],"summary":"How many are online, and which of them are your rivals","description":"The public app key plus a player token.","operationId":"getV1Presence","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/queue":{"post":{"tags":["Live"],"summary":"Enter matchmaking and get a ticket to poll","description":"The public app key plus a player token.","operationId":"postV1Queue","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/queue/{ticket}":{"get":{"tags":["Live"],"summary":"Poll a ticket; carries a join ticket once matched","description":"The public app key plus a player token.","operationId":"getV1QueueTicket","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"ticket","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["Live"],"summary":"Leave the queue before anybody was matched","description":"The public app key plus a player token.","operationId":"deleteV1QueueTicket","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"ticket","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/tournaments":{"get":{"tags":["Ceremony"],"summary":"Tournaments this app has run or is running","description":"The public app key. Belongs in a client.","operationId":"getV1Tournaments","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"post":{"tags":["Developer"],"summary":"Create a tournament for one discipline","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1Tournaments","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/tournaments/{slug}":{"get":{"tags":["Ceremony"],"summary":"The whole bracket, drawable from this alone","description":"The public app key. Belongs in a client.","operationId":"getV1TournamentsSlug","security":[{"appKey":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/tournaments/{slug}/join":{"post":{"tags":["Ceremony"],"summary":"Enter a tournament you have qualified for","description":"The public app key plus a player token.","operationId":"postV1TournamentsSlugJoin","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/ghosts/{discipline}":{"get":{"tags":["Ceremony"],"summary":"The runs at the top, with a link to each trace","description":"The public app key. Belongs in a client.","operationId":"getV1GhostsDiscipline","security":[{"appKey":[]}],"parameters":[{"name":"discipline","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/ghosts/trace/{entry}":{"get":{"tags":["Ceremony"],"summary":"The bytes one verified run was made of","description":"The public app key. Belongs in a client.","operationId":"getV1GhostsTraceEntry","security":[{"appKey":[]}],"parameters":[{"name":"entry","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/me/invites":{"post":{"tags":["Access"],"summary":"Spend one invite from your own allowance","description":"The public app key plus a player token.","operationId":"postV1MeInvites","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Access"],"summary":"Invite allowance and who joined through you","description":"The public app key plus a player token.","operationId":"getV1MeInvites","security":[{"appKey":[],"playerToken":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/regions/resolve":{"get":{"tags":["Access"],"summary":"A position becomes a district; the position itself is not stored","description":"The public app key. Belongs in a client.","operationId":"getV1RegionsResolve","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/waitlist/{region}":{"post":{"tags":["Access"],"summary":"Wait for a closed region; it opens itself at its threshold","description":"The public app key plus a player token.","operationId":"postV1WaitlistRegion","security":[{"appKey":[],"playerToken":[]}],"parameters":[{"name":"region","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/waitlist":{"get":{"tags":["Access"],"summary":"Closed regions, ordered by demand","description":"The public app key. Belongs in a client.","operationId":"getV1Waitlist","security":[{"appKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/disciplines":{"post":{"tags":["Developer"],"summary":"Create a discipline, its aggregation and its exam","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1Disciplines","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/disciplines/{slug}/verifier":{"post":{"tags":["Developer"],"summary":"Attach or detach a verifier module","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1DisciplinesSlugVerifier","security":[{"appSecret":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/badges":{"post":{"tags":["Developer"],"summary":"Create a badge scoped to this app","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1Badges","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/collections":{"post":{"tags":["Developer"],"summary":"Create a collection of things to find","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1Collections","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/collections/{slug}/items":{"post":{"tags":["Developer"],"summary":"Define the items a collection is made of","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1CollectionsSlugItems","security":[{"appSecret":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/collections/{slug}/grant":{"post":{"tags":["Developer"],"summary":"Grant a collectible to a player","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1CollectionsSlugGrant","security":[{"appSecret":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/matches":{"post":{"tags":["Developer"],"summary":"Report a duel result; updates Glicko-2","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1Matches","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/invites":{"post":{"tags":["Developer"],"summary":"Mint invite codes for a closed app","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1Invites","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/tournaments/{slug}/start":{"post":{"tags":["Developer"],"summary":"Seed and start the bracket","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1TournamentsSlugStart","security":[{"appSecret":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/tournaments/{slug}/matches/{id}/result":{"post":{"tags":["Developer"],"summary":"Decide one tournament match","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1TournamentsSlugMatchesIdResult","security":[{"appSecret":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/verifier/modules":{"post":{"tags":["Developer"],"summary":"Upload a WebAssembly verifier module","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1VerifierModules","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Developer"],"summary":"Verifier modules this app has uploaded","description":"The secret app key. Belongs on a server, never in a client.","operationId":"getV1VerifierModules","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/verifier/usage":{"get":{"tags":["Developer"],"summary":"Verified runs and CPU time, per day","description":"The secret app key. Belongs on a server, never in a client.","operationId":"getV1VerifierUsage","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/signing-secret":{"get":{"tags":["Developer"],"summary":"The secret that verifies join tickets and signs webhooks","description":"The secret app key. Belongs on a server, never in a client.","operationId":"getV1SigningSecret","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/tickets/verify":{"post":{"tags":["Developer"],"summary":"Check a join ticket online instead of offline","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1TicketsVerify","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/webhooks":{"post":{"tags":["Developer"],"summary":"Register an endpoint to be told rather than asked","description":"The secret app key. Belongs on a server, never in a client.","operationId":"postV1Webhooks","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Developer"],"summary":"Webhook endpoints, with delivery health","description":"The secret app key. Belongs on a server, never in a client.","operationId":"getV1Webhooks","security":[{"appSecret":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/webhooks/{id}":{"delete":{"tags":["Developer"],"summary":"Switch a webhook endpoint off for good","description":"The secret app key. Belongs on a server, never in a client.","operationId":"deleteV1WebhooksId","security":[{"appSecret":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/webhooks/{id}/deliveries":{"get":{"tags":["Developer"],"summary":"What was sent, what failed, and why","description":"The secret app key. Belongs on a server, never in a client.","operationId":"getV1WebhooksIdDeliveries","security":[{"appSecret":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/auth/github":{"get":{"tags":["Console"],"summary":"Start signing in with GitHub","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"getV1DevAuthGithub","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/auth/github/callback":{"get":{"tags":["Console"],"summary":"Finish GitHub sign-in and set a session cookie","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"getV1DevAuthGithubCallback","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/auth/email":{"post":{"tags":["Console"],"summary":"Send a magic link and a six-digit code","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"postV1DevAuthEmail","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/auth/email/callback":{"get":{"tags":["Console"],"summary":"Sign in from the emailed link","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"getV1DevAuthEmailCallback","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/auth/email/verify":{"post":{"tags":["Console"],"summary":"Sign in with the emailed code","description":"No credential. Deliberately open so it can be embedded or linked.","operationId":"postV1DevAuthEmailVerify","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/logout":{"post":{"tags":["Console"],"summary":"End this console session","description":"A console session cookie.","operationId":"postV1DevLogout","security":[{"consoleSession":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/me":{"get":{"tags":["Console"],"summary":"Developer account and app quota","description":"A console session cookie.","operationId":"getV1DevMe","security":[{"consoleSession":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/sessions":{"get":{"tags":["Console"],"summary":"Browser sessions signed in to this console","description":"A console session cookie.","operationId":"getV1DevSessions","security":[{"consoleSession":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/sessions/revoke-others":{"post":{"tags":["Console"],"summary":"End every console session but this one","description":"A console session cookie.","operationId":"postV1DevSessionsRevokeOthers","security":[{"consoleSession":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/apps":{"post":{"tags":["Console"],"summary":"Create an app and its first key pair","description":"A console session cookie.","operationId":"postV1DevApps","security":[{"consoleSession":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Console"],"summary":"The apps this developer account owns","description":"A console session cookie.","operationId":"getV1DevApps","security":[{"consoleSession":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/apps/{slug}/keys":{"get":{"tags":["Console"],"summary":"Keys, with last use and revocation","description":"A console session cookie.","operationId":"getV1DevAppsSlugKeys","security":[{"consoleSession":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"post":{"tags":["Console"],"summary":"Mint a key; rotation happens without a gap","description":"A console session cookie.","operationId":"postV1DevAppsSlugKeys","security":[{"consoleSession":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/keys/{id}/revoke":{"post":{"tags":["Console"],"summary":"Revoke a key, never the last of its kind","description":"A console session cookie.","operationId":"postV1DevKeysIdRevoke","security":[{"consoleSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/dev/audit":{"get":{"tags":["Console"],"summary":"What this developer did, in order","description":"A console session cookie.","operationId":"getV1DevAudit","security":[{"consoleSession":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/apps":{"post":{"tags":["Operator"],"summary":"Create an app and show its keys once","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminApps","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Operator"],"summary":"Every app, with player and entry counts","description":"The operator key. Platform-wide authority.","operationId":"getV1AdminApps","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/apps/{slug}":{"patch":{"tags":["Operator"],"summary":"Access mode and invite allowance","description":"The operator key. Platform-wide authority.","operationId":"patchV1AdminAppsSlug","security":[{"adminKey":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Operator"],"summary":"Disciplines, activity and review cases","description":"The operator key. Platform-wide authority.","operationId":"getV1AdminAppsSlug","security":[{"adminKey":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/regions":{"post":{"tags":["Operator"],"summary":"Add a region, open or closed with a threshold","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminRegions","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/regions/{id}/unlock":{"post":{"tags":["Operator"],"summary":"Open a region and notify its waitlist","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminRegionsIdUnlock","security":[{"adminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/regions/density":{"get":{"tags":["Operator"],"summary":"Contenders per region, the number titles hang on","description":"The operator key. Platform-wide authority.","operationId":"getV1AdminRegionsDensity","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/seasons":{"post":{"tags":["Operator"],"summary":"Create a season for competition to happen in","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminSeasons","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Operator"],"summary":"Seasons with entry and title counts","description":"The operator key. Platform-wide authority.","operationId":"getV1AdminSeasons","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/season":{"get":{"tags":["Operator"],"summary":"The season currently open for entries","description":"The operator key. Platform-wide authority.","operationId":"getV1AdminSeason","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/seasons/{id}/close":{"post":{"tags":["Operator"],"summary":"Award titles and open the next season","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminSeasonsIdClose","security":[{"adminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/entries/{id}/review":{"post":{"tags":["Operator"],"summary":"Decide an entry that was held for review","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminEntriesIdReview","security":[{"adminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/reports":{"get":{"tags":["Operator"],"summary":"Reports waiting for an operator decision","description":"The operator key. Platform-wide authority.","operationId":"getV1AdminReports","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/reports/{id}/resolve":{"post":{"tags":["Operator"],"summary":"Rename, suspend or ban","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminReportsIdResolve","security":[{"adminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/players/{handle}/status":{"post":{"tags":["Operator"],"summary":"Set a player status directly","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminPlayersHandleStatus","security":[{"adminKey":[]}],"parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/badges":{"post":{"tags":["Operator"],"summary":"Create a platform-wide badge","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminBadges","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/events":{"get":{"tags":["Operator"],"summary":"Recent events across every app","description":"The operator key. Platform-wide authority.","operationId":"getV1AdminEvents","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/invites":{"get":{"tags":["Operator"],"summary":"Invite codes handed out across the platform","description":"The operator key. Platform-wide authority.","operationId":"getV1AdminInvites","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/maintenance":{"post":{"tags":["Operator"],"summary":"Retention sweep; meant for a daily cron","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminMaintenance","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/standings/rebuild":{"post":{"tags":["Operator"],"summary":"Rebuild the standings projection from the ledger","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminStandingsRebuild","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/admin/webhooks/retry":{"post":{"tags":["Operator"],"summary":"Retry deliveries that are due","description":"The operator key. Platform-wide authority.","operationId":"postV1AdminWebhooksRetry","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/verifier/claim":{"post":{"tags":["Verifier"],"summary":"Claim a batch of verification jobs to run","description":"The operator key. Platform-wide authority.","operationId":"postV1VerifierClaim","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/verifier/blob/{kind}/{key}":{"get":{"tags":["Verifier"],"summary":"Fetch a module or a trace to re-simulate","description":"The operator key. Platform-wide authority.","operationId":"getV1VerifierBlobKindKey","security":[{"adminKey":[]}],"parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string"}},{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/verifier/jobs/{id}/result":{"post":{"tags":["Verifier"],"summary":"Report verified, failed or error","description":"The operator key. Platform-wide authority.","operationId":"postV1VerifierJobsIdResult","security":[{"adminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/verifier/jobs":{"get":{"tags":["Verifier"],"summary":"Verification jobs and what became of them","description":"The operator key. Platform-wide authority.","operationId":"getV1VerifierJobs","security":[{"adminKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorised"},"404":{"$ref":"#/components/responses/NotFound"}}}}}}