{"openapi":"3.0.3","info":{"title":"Wits World API","description":"Hand-written HTTP API for the Wits Quest game.","version":"0.0.0"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Auth0 bearer access token issued for the Wits World API."},"developerApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Developer credential generated from Wits World Account settings. Keep this secret out of browser bundles and URLs."}},"schemas":{}},"paths":{"/health":{"get":{"operationId":"getHealth","summary":"Check API health","tags":["System"],"description":"Confirms that the Wits World API process is running and accepting requests.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["status","service","requestId"],"properties":{"status":{"type":"string","enum":["ok"]},"service":{"type":"string","enum":["Wits World API"]},"requestId":{"type":"string"}}}}}}}}},"/api/v1/":{"get":{"operationId":"getApiVersion","summary":"Get API version information","tags":["System"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["name","version","requestId"],"properties":{"name":{"type":"string","enum":["Wits World API"]},"version":{"type":"string","enum":["v1"]},"requestId":{"type":"string"}}}}}}}}},"/api/v1/auth/account-deletion":{"post":{"operationId":"deleteCurrentPlayerAccount","summary":"Permanently delete the current player account","tags":["Authentication"],"description":"Requires a valid API access token, recent Auth0 reauthentication proof, and explicit permanent-deletion confirmation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["reauthenticationToken","confirmation"],"properties":{"reauthenticationToken":{"type":"string","minLength":1,"maxLength":16384,"description":"Fresh Auth0 ID token used only as recent-authentication proof."},"confirmation":{"type":"string","minLength":1,"description":"Must exactly equal DELETE_MY_ACCOUNT."}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["deletionId","status","requestId"],"properties":{"deletionId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["completed"]},"requestId":{"type":"string"}}}}}},"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["deletionId","status","requestId"],"properties":{"deletionId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["retry_pending"]},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/auth/me":{"get":{"operationId":"getCurrentPlayer","summary":"Get the current player","tags":["Authentication"],"description":"Resolves the authenticated Auth0 identity to the current local Wits World player.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["connectionStrategy","id","playerName","playerNameSetupRequired","role","lifecycleStatus","requestId"],"properties":{"connectionStrategy":{"type":"string","enum":["auth0","google-oauth2"]},"id":{"type":"string","format":"uuid"},"role":{"type":"string","enum":["player","author"]},"lifecycleStatus":{"type":"string","enum":["active","deletion_pending","deleted"]},"playerName":{"type":["null","string"],"minLength":3,"maxLength":20},"playerNameSetupRequired":{"type":"boolean"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[401]},"code":{"type":"string","enum":["UNAUTHORIZED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/auth/me/player-name":{"put":{"operationId":"assignCurrentPlayerName","summary":"Choose the current Google player Player Name","tags":["Authentication"],"description":"Assigns the authenticated Google player their one-time, immutable Basic Tier Player Name.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string","description":"Between 3 and 20 characters using letters, numbers, and _ + - . ! # $ ^ ` ~ @ '; email and phone number formats are not allowed."}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["connectionStrategy","id","playerName","playerNameSetupRequired","role","lifecycleStatus","requestId"],"properties":{"connectionStrategy":{"type":"string","enum":["auth0","google-oauth2"]},"id":{"type":"string","format":"uuid"},"role":{"type":"string","enum":["player","author"]},"lifecycleStatus":{"type":"string","enum":["active","deletion_pending","deleted"]},"playerName":{"type":["null","string"],"minLength":3,"maxLength":20},"playerNameSetupRequired":{"type":"boolean"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/events":{"get":{"operationId":"listPlayerEvents","summary":"List published events for players","tags":["Events"],"description":"Returns player-safe published event information for the campus map and event list.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["events","requestId"],"properties":{"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","description","latitude","longitude","radiusMetres","startsAt","endsAt","availability"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"radiusMetres":{"type":"number","exclusiveMinimum":0},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"availability":{"type":"string","enum":["active","upcoming","ended"]}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/events/{eventId}/eligibility":{"post":{"operationId":"evaluateEventEligibility","summary":"Evaluate a player location claim for an event","tags":["Events"],"description":"Validates a browser location claim, delegates authoritative distance, radius, and recent-journey evaluation to server-side services, and stores short-lived movement evidence only for this active player-requested operation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["latitude","longitude","accuracyMetres","acquiredAt"],"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"accuracyMetres":{"type":"number","minimum":0},"acquiredAt":{"type":"string","format":"date-time"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["eventId","status","reachable","requestId"],"properties":{"eventId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["reachable","unreachable","retry","unavailable"]},"reachable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"reason":{"type":"string","enum":["location_accuracy","stale_location","future_acquisition_time","journey_too_fast","not_started","ended"]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events":{"get":{"operationId":"listAuthorEvents","summary":"List events for Authors","tags":["Authoring"],"description":"Returns event definitions in every Author lifecycle state for protected Basic content management.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["events","requestId"],"properties":{"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"post":{"operationId":"createAuthorEvent","summary":"Create an event draft","tags":["Authoring"],"description":"Creates an unpublished event definition and records the acting Author in the audit trail.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["automaticPlacement","title","latitude","longitude","radiusMetres","startsAt","endsAt"],"properties":{"automaticPlacement":{"type":"boolean"},"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}}}}}},"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}":{"put":{"operationId":"updateAuthorEvent","summary":"Update an event definition","tags":["Authoring"],"description":"Updates an existing event definition and records the acting Author in the audit trail.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["automaticPlacement","title","latitude","longitude","radiusMetres","startsAt","endsAt","expectedVersion"],"properties":{"automaticPlacement":{"type":"boolean"},"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"expectedVersion":{"type":"integer","minimum":0}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/submit":{"post":{"operationId":"submitAuthorEvent","summary":"Submit an event","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/approve":{"post":{"operationId":"approveAuthorEvent","summary":"Approve an event","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/return":{"post":{"operationId":"returnAuthorEvent","summary":"Return an event to draft","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/publish":{"post":{"operationId":"publishAuthorEvent","summary":"Publish a ready event","tags":["Authoring"],"description":"Publishes an approved event only after rechecking its Basic challenge and reward catalogue dependencies.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/package/submit":{"post":{"operationId":"submitAuthorEventReviewPackage","summary":"submit an event with its challenge and questions","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/package/approve":{"post":{"operationId":"approveAuthorEventReviewPackage","summary":"approve an event with its challenge and questions","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/package/publish":{"post":{"operationId":"publishAuthorEventReviewPackage","summary":"publish an event with its challenge and questions","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/package/return":{"post":{"operationId":"returnAuthorEventReviewPackage","summary":"Return an event review package to draft","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/retire":{"post":{"operationId":"retireAuthorEvent","summary":"Retire an event","tags":["Authoring"],"description":"Removes an event from player publication while preserving its immutable authored record.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","automaticPlacement","title","description","latitude","longitude","radiusMetres","sourceUrls","startsAt","endsAt","isPublished","createdAt","updatedAt","authoringStatus","retiredAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"automaticPlacement":{"type":"boolean"},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","minimum":-180,"maximum":180,"nullable":true},"radiusMetres":{"type":"integer","minimum":1},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"isPublished":{"type":"boolean"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement":{"get":{"operationId":"getAuthorEventPlacement","tags":["Authoring"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"required":["policyVersion","policy","rotationBucket","stateVersion","metrics","zones","sites","assignments","events","overrides","requestId"],"properties":{"policyVersion":{"type":"string"},"policy":{"type":"object","additionalProperties":false,"required":["id","target","preferredPerZone","mandatoryPerZone","separationMetres","replacements","cooldownBuckets","previewTtlMinutes","rotationTimezone","rotationLocalTime","maximumPinHours","maximumPauseHours","maximumExclusionHours"],"properties":{"id":{"type":"string"},"target":{"type":"integer","minimum":1},"preferredPerZone":{"type":"integer","minimum":1},"mandatoryPerZone":{"type":"integer","minimum":1},"separationMetres":{"type":"integer","minimum":1},"replacements":{"type":"integer","minimum":0},"cooldownBuckets":{"type":"integer","minimum":0},"previewTtlMinutes":{"type":"integer","minimum":1},"rotationTimezone":{"type":"string"},"rotationLocalTime":{"type":"string"},"maximumPinHours":{"type":"integer","minimum":1},"maximumPauseHours":{"type":"integer","minimum":1},"maximumExclusionHours":{"type":"integer","minimum":1}}},"rotationBucket":{"type":"string","format":"date"},"stateVersion":{"type":"integer"},"currentPlanId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"nextRotationBoundary":{"type":"string","format":"date-time"},"metrics":{"type":"object","additionalProperties":false,"required":["targetAssignmentCount","activeAssignmentCount","activeZoneCount","servedZoneCount","unservedZoneCount","lastAppliedAt","lastFailureAt","lastFailureCode"],"properties":{"targetAssignmentCount":{"type":"integer"},"activeAssignmentCount":{"type":"integer"},"activeZoneCount":{"type":"integer"},"servedZoneCount":{"type":"integer"},"unservedZoneCount":{"type":"integer"},"lastAppliedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastFailureAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastFailureCode":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"zones":{"type":"array","items":{"type":"object","additionalProperties":true}},"sites":{"type":"array","items":{"type":"object","additionalProperties":true}},"assignments":{"type":"array","items":{"type":"object","additionalProperties":true}},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","title"],"properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1}}}},"overrides":{"type":"array","items":{"type":"object","additionalProperties":true}},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement/history":{"get":{"operationId":"getAuthorEventPlacementHistory","tags":["Authoring"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["plans","requestId"],"properties":{"plans":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["planId","policyVersion","rotationBucket","status","trigger","assignmentCount","createdAt"],"properties":{"planId":{"type":"string","format":"uuid"},"policyVersion":{"type":"string"},"rotationBucket":{"type":"string","format":"date"},"status":{"type":"string"},"trigger":{"type":"string"},"failureCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"assignmentCount":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"}}}},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement/previews":{"post":{"operationId":"previewAuthorEventPlacement","tags":["Authoring"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["plan","requestId"],"properties":{"plan":{"type":"object","additionalProperties":false,"required":["planId","policyVersion","rotationBucket","stateVersion","validUntil","status","entries","zoneCounts","exceptions","validation"],"properties":{"planId":{"type":"string","format":"uuid"},"policyVersion":{"type":"string"},"rotationBucket":{"type":"string","format":"date"},"stateVersion":{"type":"integer"},"validUntil":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["valid","degraded","unserved"]},"entries":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","siteId","zoneId","origin","preserved"],"properties":{"eventId":{"type":"string","format":"uuid"},"siteId":{"type":"string","format":"uuid"},"zoneId":{"type":"string","format":"uuid"},"origin":{"type":"string","enum":["automatic","pin","rollback"]},"preserved":{"type":"boolean"},"startedAt":{"type":"string","format":"date-time"},"cooldownException":{"type":"boolean"}}}},"zoneCounts":{"type":"object","additionalProperties":{"type":"integer"}},"exceptions":{"type":"array","items":{"type":"string"}},"validation":{"type":"object","additionalProperties":false,"required":["coverage","separation"],"properties":{"coverage":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["zoneId","actual","mandatory","preferred","status"],"properties":{"zoneId":{"type":"string","format":"uuid"},"actual":{"type":"integer","minimum":0},"mandatory":{"type":"integer","minimum":0},"preferred":{"type":"integer","minimum":0},"status":{"type":"string","enum":["met","preferred_shortfall","unserved"]}}}},"separation":{"type":"object","additionalProperties":false,"required":["minimumMetres","blockedSites"],"properties":{"minimumMetres":{"type":"integer","minimum":1},"blockedSites":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["siteId","zoneId","relatedSiteIds","conflictsWithFixedEvent"],"properties":{"siteId":{"type":"string","format":"uuid"},"zoneId":{"type":"string","format":"uuid"},"relatedSiteIds":{"type":"array","items":{"type":"string","format":"uuid"}},"conflictsWithFixedEvent":{"type":"boolean"}}}}}}}}}},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement/apply":{"post":{"operationId":"applyAuthorEventPlacement","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason","planId"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"},"planId":{"type":"string","format":"uuid"}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["plan","requestId"],"properties":{"plan":{"type":"object","additionalProperties":false,"required":["planId","policyVersion","rotationBucket","stateVersion","validUntil","status","entries","zoneCounts","exceptions","validation"],"properties":{"planId":{"type":"string","format":"uuid"},"policyVersion":{"type":"string"},"rotationBucket":{"type":"string","format":"date"},"stateVersion":{"type":"integer"},"validUntil":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["valid","degraded","unserved"]},"entries":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","siteId","zoneId","origin","preserved"],"properties":{"eventId":{"type":"string","format":"uuid"},"siteId":{"type":"string","format":"uuid"},"zoneId":{"type":"string","format":"uuid"},"origin":{"type":"string","enum":["automatic","pin","rollback"]},"preserved":{"type":"boolean"},"startedAt":{"type":"string","format":"date-time"},"cooldownException":{"type":"boolean"}}}},"zoneCounts":{"type":"object","additionalProperties":{"type":"integer"}},"exceptions":{"type":"array","items":{"type":"string"}},"validation":{"type":"object","additionalProperties":false,"required":["coverage","separation"],"properties":{"coverage":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["zoneId","actual","mandatory","preferred","status"],"properties":{"zoneId":{"type":"string","format":"uuid"},"actual":{"type":"integer","minimum":0},"mandatory":{"type":"integer","minimum":0},"preferred":{"type":"integer","minimum":0},"status":{"type":"string","enum":["met","preferred_shortfall","unserved"]}}}},"separation":{"type":"object","additionalProperties":false,"required":["minimumMetres","blockedSites"],"properties":{"minimumMetres":{"type":"integer","minimum":1},"blockedSites":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["siteId","zoneId","relatedSiteIds","conflictsWithFixedEvent"],"properties":{"siteId":{"type":"string","format":"uuid"},"zoneId":{"type":"string","format":"uuid"},"relatedSiteIds":{"type":"array","items":{"type":"string","format":"uuid"}},"conflictsWithFixedEvent":{"type":"boolean"}}}}}}}}}},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement/overrides":{"post":{"operationId":"createAuthorEventPlacementOverride","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["kind","expectedVersion","reason","durationHours","idempotencyKey"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"},"kind":{"type":"string","enum":["pin","site_exclusion","automation_pause"]},"eventId":{"type":"string","format":"uuid"},"siteId":{"type":"string","format":"uuid"},"idempotencyKey":{"type":"string","format":"uuid"},"durationHours":{"type":"integer","minimum":1}},"oneOf":[{"properties":{"kind":{"enum":["pin"]}},"required":["eventId","siteId"]},{"properties":{"kind":{"enum":["site_exclusion"]}},"required":["siteId"],"not":{"required":["eventId"]}},{"properties":{"kind":{"enum":["automation_pause"]}},"not":{"anyOf":[{"required":["eventId"]},{"required":["siteId"]}]}}]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["overrideId","replayed","requestId"],"properties":{"overrideId":{"type":"string","format":"uuid"},"replayed":{"type":"boolean"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement/overrides/{id}/end":{"post":{"operationId":"endAuthorEventPlacementOverride","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["stateVersion","requestId"],"properties":{"stateVersion":{"type":"integer"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement/sites/{id}/status":{"post":{"operationId":"changeAuthorPlacementSiteStatus","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason","status"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"},"status":{"type":"string","enum":["active","suspended","retired"]}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["stateVersion","requestId"],"properties":{"stateVersion":{"type":"integer"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement/zones/{id}/status":{"post":{"operationId":"changeAuthorPlacementZoneStatus","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason","status"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"},"status":{"type":"string","enum":["active","suspended","retired"]}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["stateVersion","requestId"],"properties":{"stateVersion":{"type":"integer"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement/events/{id}/portability":{"post":{"operationId":"reviewAuthorEventPortability","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason","action"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"action":{"type":"string","enum":["approve","withdraw"]}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["stateVersion","requestId"],"properties":{"stateVersion":{"type":"integer"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/event-placement/rollback":{"post":{"operationId":"rollbackAuthorEventPlacement","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason","sourcePlanId"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"},"sourcePlanId":{"type":"string","format":"uuid"}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["plan","requestId"],"properties":{"plan":{"type":"object","additionalProperties":false,"required":["planId","policyVersion","rotationBucket","stateVersion","validUntil","status","entries","zoneCounts","exceptions","validation"],"properties":{"planId":{"type":"string","format":"uuid"},"policyVersion":{"type":"string"},"rotationBucket":{"type":"string","format":"date"},"stateVersion":{"type":"integer"},"validUntil":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["valid","degraded","unserved"]},"entries":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","siteId","zoneId","origin","preserved"],"properties":{"eventId":{"type":"string","format":"uuid"},"siteId":{"type":"string","format":"uuid"},"zoneId":{"type":"string","format":"uuid"},"origin":{"type":"string","enum":["automatic","pin","rollback"]},"preserved":{"type":"boolean"},"startedAt":{"type":"string","format":"date-time"},"cooldownException":{"type":"boolean"}}}},"zoneCounts":{"type":"object","additionalProperties":{"type":"integer"}},"exceptions":{"type":"array","items":{"type":"string"}},"validation":{"type":"object","additionalProperties":false,"required":["coverage","separation"],"properties":{"coverage":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["zoneId","actual","mandatory","preferred","status"],"properties":{"zoneId":{"type":"string","format":"uuid"},"actual":{"type":"integer","minimum":0},"mandatory":{"type":"integer","minimum":0},"preferred":{"type":"integer","minimum":0},"status":{"type":"string","enum":["met","preferred_shortfall","unserved"]}}}},"separation":{"type":"object","additionalProperties":false,"required":["minimumMetres","blockedSites"],"properties":{"minimumMetres":{"type":"integer","minimum":1},"blockedSites":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["siteId","zoneId","relatedSiteIds","conflictsWithFixedEvent"],"properties":{"siteId":{"type":"string","format":"uuid"},"zoneId":{"type":"string","format":"uuid"},"relatedSiteIds":{"type":"array","items":{"type":"string","format":"uuid"}},"conflictsWithFixedEvent":{"type":"boolean"}}}}}}}}}},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/events/{eventId}/challenges":{"get":{"operationId":"listAuthorChallenges","summary":"List challenges for an event","tags":["Authoring"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["challenges","requestId"],"properties":{"challenges":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["challengeId","eventId","format","status","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"challengeId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"post":{"operationId":"createAuthorChallenge","summary":"Create a draft challenge for an event","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"format":{"type":"string","enum":["multiple_choice","ordering"],"default":"multiple_choice"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["challenge","requestId"],"properties":{"challenge":{"type":"object","additionalProperties":false,"required":["challengeId","eventId","format","status","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"challengeId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/challenges/{challengeId}/questions":{"get":{"operationId":"listAuthorQuestions","summary":"List Author-visible challenge questions","tags":["Authoring"],"description":"Returns challenge questions including the private accepted-answer relationship. This operation is Author-only.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"challengeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["questions","requestId"],"properties":{"questions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","choices","acceptedChoiceId","acceptedChoicePosition","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"choices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["choiceId","position","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"acceptedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptedChoicePosition":{"anyOf":[{"type":"integer","minimum":1,"maximum":4},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","items","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","position","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}]}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"post":{"operationId":"createAuthorQuestion","summary":"Create a draft challenge question","tags":["Authoring"],"description":"Creates a format-matching four-choice or four-item question and stores its accepted answer or correct sequence privately.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["prompt","difficulty","explanation","choices","acceptedChoicePosition"],"properties":{"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string","minLength":1},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"type":"string","minLength":1},"choices":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"string","minLength":1}},"acceptedChoicePosition":{"type":"integer","minimum":1,"maximum":4}}},{"type":"object","additionalProperties":false,"required":["format","prompt","difficulty","explanation","items"],"properties":{"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string","minLength":1},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"type":"string","minLength":1},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"string","minLength":1}}}}]}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"challengeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["question","requestId"],"properties":{"question":{"oneOf":[{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","choices","acceptedChoiceId","acceptedChoicePosition","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"choices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["choiceId","position","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"acceptedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptedChoicePosition":{"anyOf":[{"type":"integer","minimum":1,"maximum":4},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","items","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","position","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/questions/{questionId}":{"put":{"operationId":"updateAuthorQuestion","summary":"Edit a draft question","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["prompt","difficulty","explanation","choices","acceptedChoicePosition","expectedVersion"],"properties":{"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string","minLength":1},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"type":"string","minLength":1},"choices":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"string","minLength":1}},"acceptedChoicePosition":{"type":"integer","minimum":1,"maximum":4},"expectedVersion":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["format","prompt","difficulty","explanation","items","expectedVersion"],"properties":{"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string","minLength":1},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"type":"string","minLength":1},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"string","minLength":1}},"expectedVersion":{"type":"integer","minimum":0}}}]}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"questionId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["question","requestId"],"properties":{"question":{"oneOf":[{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","choices","acceptedChoiceId","acceptedChoicePosition","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"choices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["choiceId","position","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"acceptedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptedChoicePosition":{"anyOf":[{"type":"integer","minimum":1,"maximum":4},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","items","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","position","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/questions/{questionId}/submit":{"post":{"operationId":"submitAuthorQuestion","summary":"Submit a question","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"questionId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["question","requestId"],"properties":{"question":{"oneOf":[{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","choices","acceptedChoiceId","acceptedChoicePosition","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"choices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["choiceId","position","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"acceptedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptedChoicePosition":{"anyOf":[{"type":"integer","minimum":1,"maximum":4},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","items","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","position","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/questions/{questionId}/approve":{"post":{"operationId":"approveAuthorQuestion","summary":"Approve a question","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"questionId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["question","requestId"],"properties":{"question":{"oneOf":[{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","choices","acceptedChoiceId","acceptedChoicePosition","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"choices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["choiceId","position","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"acceptedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptedChoicePosition":{"anyOf":[{"type":"integer","minimum":1,"maximum":4},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","items","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","position","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/questions/{questionId}/return":{"post":{"operationId":"returnAuthorQuestion","summary":"Return a question to draft","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"questionId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["question","requestId"],"properties":{"question":{"oneOf":[{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","choices","acceptedChoiceId","acceptedChoicePosition","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"choices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["choiceId","position","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"acceptedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptedChoicePosition":{"anyOf":[{"type":"integer","minimum":1,"maximum":4},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","items","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","position","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/questions/{questionId}/publish":{"post":{"operationId":"publishAuthorQuestion","summary":"Publish a complete draft question","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"questionId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["question","requestId"],"properties":{"question":{"oneOf":[{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","choices","acceptedChoiceId","acceptedChoicePosition","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"choices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["choiceId","position","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"acceptedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptedChoicePosition":{"anyOf":[{"type":"integer","minimum":1,"maximum":4},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","items","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","position","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/questions/{questionId}/retire":{"post":{"operationId":"retireAuthorQuestion","summary":"Retire a question","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"questionId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["question","requestId"],"properties":{"question":{"oneOf":[{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","choices","acceptedChoiceId","acceptedChoicePosition","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"choices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["choiceId","position","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"acceptedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptedChoicePosition":{"anyOf":[{"type":"integer","minimum":1,"maximum":4},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},{"type":"object","additionalProperties":false,"required":["questionId","challengeId","format","prompt","difficulty","explanation","sourceUrls","status","items","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"prompt":{"type":"string"},"difficulty":{"type":"integer","minimum":1,"maximum":3},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceUrls":{"type":"array","items":{"type":"string","format":"uri"}},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","position","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":4},"text":{"type":"string"}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/challenges/{challengeId}/submit":{"post":{"operationId":"submitAuthorChallenge","summary":"Submit a challenge","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"challengeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["challenge","requestId"],"properties":{"challenge":{"type":"object","additionalProperties":false,"required":["challengeId","eventId","format","status","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"challengeId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/challenges/{challengeId}/approve":{"post":{"operationId":"approveAuthorChallenge","summary":"Approve a challenge","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"challengeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["challenge","requestId"],"properties":{"challenge":{"type":"object","additionalProperties":false,"required":["challengeId","eventId","format","status","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"challengeId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/challenges/{challengeId}/return":{"post":{"operationId":"returnAuthorChallenge","summary":"Return a challenge to draft","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"challengeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["challenge","requestId"],"properties":{"challenge":{"type":"object","additionalProperties":false,"required":["challengeId","eventId","format","status","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"challengeId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/challenges/{challengeId}/publish":{"post":{"operationId":"publishAuthorChallenge","summary":"Publish a ready challenge","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"challengeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["challenge","requestId"],"properties":{"challenge":{"type":"object","additionalProperties":false,"required":["challengeId","eventId","format","status","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"challengeId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/challenges/{challengeId}/retire":{"post":{"operationId":"retireAuthorChallenge","summary":"Retire a challenge","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"challengeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["challenge","requestId"],"properties":{"challenge":{"type":"object","additionalProperties":false,"required":["challengeId","eventId","format","status","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"challengeId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/question-performance":{"get":{"operationId":"listAuthorQuestionPerformance","summary":"List Author-only question performance aggregates","tags":["Authoring"],"description":"Returns Author-only aggregate outcomes. No player identity, selected response, order, or location is projected.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"query","name":"eventId","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"challengeId","required":false},{"schema":{"type":"string","enum":["multiple_choice","ordering"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":1,"maximum":3},"in":"query","name":"difficulty","required":false},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"from","required":false},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"to","required":false},{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","minimumSampleSize","problematicIncorrectRate","requestId"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["questionId","challengeId","eventId","eventTitle","prompt","format","difficulty","status","answerCount","correctCount","incorrectCount","timeoutCount","correctRate","incorrectRate","hasSufficientSample","isProblematic"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"eventTitle":{"type":"string"},"prompt":{"type":"string"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"difficulty":{"type":"integer","minimum":1,"maximum":3},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"answerCount":{"type":"integer","minimum":0},"correctCount":{"type":"integer","minimum":0},"incorrectCount":{"type":"integer","minimum":0},"timeoutCount":{"type":"integer","minimum":0},"correctRate":{"type":"number","minimum":0,"maximum":1},"incorrectRate":{"type":"number","minimum":0,"maximum":1},"hasSufficientSample":{"type":"boolean"},"isProblematic":{"type":"boolean"}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"minimumSampleSize":{"type":"integer","enum":[10]},"problematicIncorrectRate":{"type":"number","enum":[0.7]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/analytics/attention":{"get":{"operationId":"listAuthorEventAttention","summary":"List events with reportable analytics attention signals","tags":["Authoring"],"parameters":[{"schema":{"type":"string","format":"date"},"in":"query","name":"fromDate","required":false},{"schema":{"type":"string","format":"date"},"in":"query","name":"toDate","required":false},{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","minimumSampleSize","requestId"],"properties":{"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"minimumSampleSize":{"type":"integer","enum":[10]},"requestId":{"type":"string"},"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["eventId","eventTitle","ignoredLocationCount","easyQuestionCount","hardQuestionCount","questionId","challengeId"],"properties":{"eventId":{"type":"string","format":"uuid"},"eventTitle":{"type":"string"},"ignoredLocationCount":{"type":"integer","minimum":0},"easyQuestionCount":{"type":"integer","minimum":0},"hardQuestionCount":{"type":"integer","minimum":0},"questionId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"challengeId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/analytics/event-locations":{"get":{"operationId":"listAuthorEventLocationAnalytics","summary":"List privacy-safe event-location analytics","tags":["Authoring"],"description":"Returns aggregate discovery, eligibility, start, and completion activity by authored location or reviewed placement site. Player identities and precise player coordinates are never projected.","parameters":[{"schema":{"type":"string","format":"date"},"in":"query","name":"fromDate","required":false},{"schema":{"type":"string","format":"date"},"in":"query","name":"toDate","required":false},{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","enum":["all","popular","ignored"],"default":"all"},"in":"query","name":"mode","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","minimumSampleSize","requestId"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["eventId","eventTitle","locationKind","locationId","locationName","viewCount","eligibleCount","startCount","completionCount","suppressed"],"properties":{"eventId":{"type":"string","format":"uuid"},"eventTitle":{"type":"string"},"locationKind":{"type":"string","enum":["authored","placement_site"]},"locationId":{"type":"string","format":"uuid"},"locationName":{"type":"string"},"viewCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"eligibleCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"startCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"completionCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"suppressed":{"type":"boolean"}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"minimumSampleSize":{"type":"integer","enum":[10]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/analytics/questions":{"get":{"operationId":"listAuthorAdvancedQuestionAnalytics","summary":"List privacy-safe question analytics","tags":["Authoring"],"description":"Reuses authoritative completed-attempt performance while suppressing small samples and classifying easy or problematic questions.","parameters":[{"schema":{"type":"string","format":"date"},"in":"query","name":"fromDate","required":false},{"schema":{"type":"string","format":"date"},"in":"query","name":"toDate","required":false},{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"eventId","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"challengeId","required":false},{"schema":{"type":"string","enum":["multiple_choice","ordering"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":1,"maximum":3},"in":"query","name":"difficulty","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","minimumSampleSize","easyCorrectRate","problematicIncorrectRate","requestId"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["questionId","challengeId","eventId","eventTitle","prompt","format","difficulty","status","answerCount","correctCount","incorrectCount","timeoutCount","correctRate","incorrectRate","classification","suppressed"],"properties":{"questionId":{"type":"string","format":"uuid"},"challengeId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"eventTitle":{"type":"string"},"prompt":{"type":"string"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"difficulty":{"type":"integer","minimum":1,"maximum":3},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"answerCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"correctCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"incorrectCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"timeoutCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"correctRate":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"incorrectRate":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"classification":{"type":"string","enum":["suppressed","easy","problematic","normal"]},"suppressed":{"type":"boolean"}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"minimumSampleSize":{"type":"integer","enum":[10]},"easyCorrectRate":{"type":"number","enum":[0.9]},"problematicIncorrectRate":{"type":"number","enum":[0.7]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/analytics/card-issuance":{"get":{"operationId":"listAuthorCardIssuanceAnalytics","summary":"List privacy-safe card issuance analytics","tags":["Authoring"],"description":"Returns historical card issuance from the immutable completion reward ledger, grouped by card and rarity without exposing current owners.","parameters":[{"schema":{"type":"string","format":"date"},"in":"query","name":"fromDate","required":false},{"schema":{"type":"string","format":"date"},"in":"query","name":"toDate","required":false},{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","rarities","page","pageSize","totalItems","totalPages","minimumSampleSize","requestId"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","cardName","rarity","rewardEligible","issuanceCount","issuancesPer100Completions","suppressed"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"cardName":{"type":"string"},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"rewardEligible":{"type":"boolean"},"issuanceCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"issuancesPer100Completions":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"suppressed":{"type":"boolean"}}}},"rarities":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["rarity","issuanceCount","issuancesPer100Completions","suppressed"],"properties":{"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"issuanceCount":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"issuancesPer100Completions":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"suppressed":{"type":"boolean"}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"minimumSampleSize":{"type":"integer","enum":[10]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trust-cases":{"get":{"operationId":"listSuspectPlayerCases","summary":"List the protected suspect-player review queue","tags":["Trust review"],"description":"Returns stable, privacy-limited case summaries for active Authors. Cases targeting the authenticated Author are excluded server-side.","parameters":[{"schema":{"type":"string","enum":["all","active","open","under_review","resolved"],"default":"active"},"in":"query","name":"status","required":false,"description":"active selects open and under_review cases; all applies no status filter. Omitted status defaults to active."},{"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^(?!\\s)(?![\\s\\S]*\\s$)[^\\u0000-\\u001F\\u007F-\\u009F]+$"},"in":"query","name":"search","required":false,"description":"Case-insensitive literal substring match on Player Name, plus exact case or player UUID match when the complete search value is a UUID. SQL wildcard characters are treated literally."},{"schema":{"type":"string","enum":["normal","observe","review_required","urgent_review"]},"in":"query","name":"band","required":false},{"schema":{"type":"string","enum":["active","none"]},"in":"query","name":"restrictionState","required":false},{"schema":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]},"in":"query","name":"signalType","required":false},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"createdFrom","required":false},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"createdTo","required":false},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"updatedFrom","required":false},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"updatedTo","required":false},{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"in":"query","name":"pageSize","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","requestId"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["caseId","playerId","playerName","status","version","score","band","policyVersion","signalTypes","restrictionCount","activeRestrictionCount","latestRestrictionExpiry","activeRestrictionScopes","canReview","openedAt","updatedAt"],"properties":{"caseId":{"type":"string","format":"uuid"},"playerId":{"type":"string","format":"uuid"},"playerName":{"type":"string"},"status":{"type":"string","enum":["open","under_review","resolved"]},"version":{"type":"integer","minimum":1},"score":{"type":"integer","minimum":0,"maximum":100},"band":{"type":"string","enum":["normal","observe","review_required","urgent_review"]},"policyVersion":{"type":"string"},"signalTypes":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]}},"restrictionCount":{"type":"integer","minimum":0},"activeRestrictionCount":{"type":"integer","minimum":0},"latestRestrictionExpiry":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"activeRestrictionScopes":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]}},"canReview":{"type":"boolean"},"openedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trust-cases/{caseId}":{"get":{"operationId":"getSuspectPlayerCase","summary":"Read privacy-safe suspect-player case detail","tags":["Trust review"],"description":"Returns derived evidence, score components, effective restrictions, and recent append-only history without precise location, provider identity, or raw private telemetry.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"caseId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["case","requestId"],"properties":{"case":{"type":"object","additionalProperties":false,"required":["caseId","playerId","playerName","status","version","score","band","policyVersion","restrictionCount","activeRestrictionCount","activeRestrictionScopes","latestRestrictionExpiry","canReview","categoryTotals","sourceSignalCount","scoreExplanation","evidence","evidencePreview","evidenceTotalItems","evidenceTruncated","restrictionPreview","restrictionTotalItems","restrictionsTruncated","recentHistory","history","historyTruncated","openedAt","updatedAt","resolvedAt","resolutionReason"],"properties":{"caseId":{"type":"string","format":"uuid"},"playerId":{"type":"string","format":"uuid"},"playerName":{"type":"string"},"status":{"type":"string","enum":["open","under_review","resolved"]},"version":{"type":"integer","minimum":1},"score":{"type":"integer","minimum":0,"maximum":100},"band":{"type":"string","enum":["normal","observe","review_required","urgent_review"]},"policyVersion":{"type":"string"},"restrictionCount":{"type":"integer","minimum":0},"activeRestrictionCount":{"type":"integer","minimum":0},"activeRestrictionScopes":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]}},"latestRestrictionExpiry":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"canReview":{"type":"boolean"},"categoryTotals":{"type":"object","additionalProperties":false,"required":["movement","submissionConflicts","opponentPatterns"],"properties":{"movement":{"type":"integer","minimum":0,"maximum":50},"submissionConflicts":{"type":"integer","minimum":0,"maximum":30},"opponentPatterns":{"type":"integer","minimum":0,"maximum":30}}},"sourceSignalCount":{"type":"integer","minimum":0},"scoreExplanation":{"type":"object","additionalProperties":false,"required":["snapshotId","evaluatedAt","movementPoints","submissionConflictPoints","opponentPatternPoints","finalScore","reviewBand","sourceSignalCount"],"properties":{"snapshotId":{"type":"string","format":"uuid"},"evaluatedAt":{"type":"string","format":"date-time"},"movementPoints":{"type":"integer","minimum":0,"maximum":50},"submissionConflictPoints":{"type":"integer","minimum":0,"maximum":30},"opponentPatternPoints":{"type":"integer","minimum":0,"maximum":30},"finalScore":{"type":"integer","minimum":0,"maximum":100},"reviewBand":{"type":"string","enum":["normal","observe","review_required","urgent_review"]},"sourceSignalCount":{"type":"integer","minimum":0}}},"evidence":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["evidenceId","signalType","severity","basePoints","effectivePoints","observedAt","expiresAt","policyVersion","state","decayState","safeSourceType","reviewedFalsePositive","opponentPattern"],"properties":{"evidenceId":{"type":"string","format":"uuid"},"signalType":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]},"severity":{"type":"string"},"basePoints":{"type":"integer","minimum":1,"maximum":25},"effectivePoints":{"type":"integer","minimum":0,"maximum":25},"observedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"policyVersion":{"type":"string"},"state":{"type":"string","enum":["active","adjusted_false_positive","expired"]},"decayState":{"type":"string","enum":["active","expired","reviewed_false_positive"]},"safeSourceType":{"type":"string"},"reviewedFalsePositive":{"type":"boolean"},"opponentPattern":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","completedMatchCount","repeatedOpponentMatchCount","opponentConcentrationRatio"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["opponent_concentration"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"completedMatchCount":{"type":"integer","minimum":0},"repeatedOpponentMatchCount":{"type":"integer","minimum":0},"opponentConcentrationRatio":{"type":"number","minimum":0,"maximum":1}}},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","qualifyingForfeitCount"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["one_sided_outcome_pattern"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"qualifyingForfeitCount":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["availability","reason","remediation"],"properties":{"availability":{"type":"string","enum":["unavailable"]},"reason":{"type":"string","enum":["legacy_summary_not_retained"]},"remediation":{"type":"string","enum":["await_fresh_detector_evaluation"]}}}]}}}},"evidencePreview":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["evidenceId","signalType","severity","basePoints","effectivePoints","observedAt","expiresAt","policyVersion","state","decayState","safeSourceType","reviewedFalsePositive","opponentPattern"],"properties":{"evidenceId":{"type":"string","format":"uuid"},"signalType":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]},"severity":{"type":"string"},"basePoints":{"type":"integer","minimum":1,"maximum":25},"effectivePoints":{"type":"integer","minimum":0,"maximum":25},"observedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"policyVersion":{"type":"string"},"state":{"type":"string","enum":["active","adjusted_false_positive","expired"]},"decayState":{"type":"string","enum":["active","expired","reviewed_false_positive"]},"safeSourceType":{"type":"string"},"reviewedFalsePositive":{"type":"boolean"},"opponentPattern":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","completedMatchCount","repeatedOpponentMatchCount","opponentConcentrationRatio"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["opponent_concentration"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"completedMatchCount":{"type":"integer","minimum":0},"repeatedOpponentMatchCount":{"type":"integer","minimum":0},"opponentConcentrationRatio":{"type":"number","minimum":0,"maximum":1}}},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","qualifyingForfeitCount"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["one_sided_outcome_pattern"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"qualifyingForfeitCount":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["availability","reason","remediation"],"properties":{"availability":{"type":"string","enum":["unavailable"]},"reason":{"type":"string","enum":["legacy_summary_not_retained"]},"remediation":{"type":"string","enum":["await_fresh_detector_evaluation"]}}}]}}}},"evidenceTotalItems":{"type":"integer","minimum":0},"evidenceTruncated":{"type":"boolean"},"restrictionPreview":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]}}}},"restrictionTotalItems":{"type":"integer","minimum":0},"restrictionsTruncated":{"type":"boolean"},"recentHistory":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["decisionId","actorType","actorPlayerId","actorPlayerName","decisionType","action","previousStatus","resultingStatus","reasonCode","reasonNote","policyVersion","caseVersionBefore","caseVersionAfter","versionBefore","versionAfter","evidenceIds","falsePositiveEvidenceIds","restrictions","occurredAt"],"properties":{"decisionId":{"type":"string","format":"uuid"},"actorType":{"type":"string","enum":["system","author"]},"actorPlayerId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"actorPlayerName":{"anyOf":[{"type":"string"},{"type":"null"}]},"decisionType":{"type":"string"},"action":{"type":"string"},"previousStatus":{"anyOf":[{"type":"string","enum":["open","under_review","resolved"]},{"type":"null"}]},"resultingStatus":{"type":"string","enum":["open","under_review","resolved"]},"reasonCode":{"type":"string"},"reasonNote":{"anyOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"policyVersion":{"type":"string"},"caseVersionBefore":{"type":"integer","minimum":0},"caseVersionAfter":{"type":"integer","minimum":1},"versionBefore":{"type":"integer","minimum":0},"versionAfter":{"type":"integer","minimum":1},"evidenceIds":{"type":"array","maxItems":100,"items":{"type":"string","format":"uuid"}},"falsePositiveEvidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"restrictions":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus","expiresAt"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]},"expiresAt":{"type":"string","format":"date-time"}}}},"occurredAt":{"type":"string","format":"date-time"}}}},"history":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["decisionId","actorType","actorPlayerId","actorPlayerName","decisionType","action","previousStatus","resultingStatus","reasonCode","reasonNote","policyVersion","caseVersionBefore","caseVersionAfter","versionBefore","versionAfter","evidenceIds","falsePositiveEvidenceIds","restrictions","occurredAt"],"properties":{"decisionId":{"type":"string","format":"uuid"},"actorType":{"type":"string","enum":["system","author"]},"actorPlayerId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"actorPlayerName":{"anyOf":[{"type":"string"},{"type":"null"}]},"decisionType":{"type":"string"},"action":{"type":"string"},"previousStatus":{"anyOf":[{"type":"string","enum":["open","under_review","resolved"]},{"type":"null"}]},"resultingStatus":{"type":"string","enum":["open","under_review","resolved"]},"reasonCode":{"type":"string"},"reasonNote":{"anyOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"policyVersion":{"type":"string"},"caseVersionBefore":{"type":"integer","minimum":0},"caseVersionAfter":{"type":"integer","minimum":1},"versionBefore":{"type":"integer","minimum":0},"versionAfter":{"type":"integer","minimum":1},"evidenceIds":{"type":"array","maxItems":100,"items":{"type":"string","format":"uuid"}},"falsePositiveEvidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"restrictions":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus","expiresAt"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]},"expiresAt":{"type":"string","format":"date-time"}}}},"occurredAt":{"type":"string","format":"date-time"}}}},"historyTruncated":{"type":"boolean"},"openedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"resolutionReason":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trust-cases/{caseId}/evidence":{"get":{"operationId":"listSuspectPlayerCaseEvidence","summary":"List privacy-safe suspect-player evidence","tags":["Trust review"],"description":"Returns a deterministic page of derived evidence summaries. Opponent-pattern evidence includes the signal-time aggregate counts and policy thresholds, never opponent identities or private match payloads.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"caseId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","requestId"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["evidenceId","signalType","severity","basePoints","effectivePoints","observedAt","expiresAt","policyVersion","state","decayState","safeSourceType","reviewedFalsePositive","opponentPattern"],"properties":{"evidenceId":{"type":"string","format":"uuid"},"signalType":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]},"severity":{"type":"string"},"basePoints":{"type":"integer","minimum":1,"maximum":25},"effectivePoints":{"type":"integer","minimum":0,"maximum":25},"observedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"policyVersion":{"type":"string"},"state":{"type":"string","enum":["active","adjusted_false_positive","expired"]},"decayState":{"type":"string","enum":["active","expired","reviewed_false_positive"]},"safeSourceType":{"type":"string"},"reviewedFalsePositive":{"type":"boolean"},"opponentPattern":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","completedMatchCount","repeatedOpponentMatchCount","opponentConcentrationRatio"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["opponent_concentration"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"completedMatchCount":{"type":"integer","minimum":0},"repeatedOpponentMatchCount":{"type":"integer","minimum":0},"opponentConcentrationRatio":{"type":"number","minimum":0,"maximum":1}}},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","qualifyingForfeitCount"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["one_sided_outcome_pattern"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"qualifyingForfeitCount":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["availability","reason","remediation"],"properties":{"availability":{"type":"string","enum":["unavailable"]},"reason":{"type":"string","enum":["legacy_summary_not_retained"]},"remediation":{"type":"string","enum":["await_fresh_detector_evaluation"]}}}]}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trust-cases/{caseId}/restrictions":{"get":{"operationId":"listSuspectPlayerCaseRestrictions","summary":"List suspect-player restriction history","tags":["Trust review"],"description":"Returns a deterministic page of current and historical restriction summaries with authoritative original and effective expiry times.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"caseId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","requestId"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trust-cases/{caseId}/history":{"get":{"operationId":"listSuspectPlayerCaseHistory","summary":"List append-only suspect-player audit history","tags":["Trust review"],"description":"Returns policy-versioned case transitions with local reviewer identity, reason, linked safe evidence, and restriction scopes.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"caseId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","requestId"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["decisionId","actorType","actorPlayerId","actorPlayerName","decisionType","action","previousStatus","resultingStatus","reasonCode","reasonNote","policyVersion","caseVersionBefore","caseVersionAfter","versionBefore","versionAfter","evidenceIds","falsePositiveEvidenceIds","restrictions","occurredAt"],"properties":{"decisionId":{"type":"string","format":"uuid"},"actorType":{"type":"string","enum":["system","author"]},"actorPlayerId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"actorPlayerName":{"anyOf":[{"type":"string"},{"type":"null"}]},"decisionType":{"type":"string"},"action":{"type":"string"},"previousStatus":{"anyOf":[{"type":"string","enum":["open","under_review","resolved"]},{"type":"null"}]},"resultingStatus":{"type":"string","enum":["open","under_review","resolved"]},"reasonCode":{"type":"string"},"reasonNote":{"anyOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"policyVersion":{"type":"string"},"caseVersionBefore":{"type":"integer","minimum":0},"caseVersionAfter":{"type":"integer","minimum":1},"versionBefore":{"type":"integer","minimum":0},"versionAfter":{"type":"integer","minimum":1},"evidenceIds":{"type":"array","maxItems":100,"items":{"type":"string","format":"uuid"}},"falsePositiveEvidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"restrictions":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus","expiresAt"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]},"expiresAt":{"type":"string","format":"date-time"}}}},"occurredAt":{"type":"string","format":"date-time"}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trust-cases/{caseId}/decisions":{"post":{"operationId":"decideSuspectPlayerCase","summary":"Record an auditable suspect-player decision","tags":["Trust review"],"description":"Atomically advances the expected case version, appends the authenticated Author decision, links at most 100 reviewed evidence summaries, records false-positive adjustments only for mark_false_positive, and applies only the three trust-v1 time-bounded restriction scopes. Decisions are rejected while legacy opponent-pattern evidence lacks a reviewer-safe summary and no fresh explainable evaluation supersedes it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["expectedVersion","action","reasonNote"],"properties":{"expectedVersion":{"type":"integer","minimum":1},"reasonNote":{"type":"string","minLength":1,"maxLength":1000,"pattern":"^(?!\\s)(?![\\s\\S]*\\s$)[^\\u0000-\\u001F\\u007F-\\u009F]+$","description":"Required reviewer reason. It must be trimmed and contain no control characters."},"evidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"description":"Safe evidence summaries referenced by the decision. For mark_false_positive, every referenced summary is adjusted as a reviewed false positive.","items":{"type":"string","format":"uuid"}},"action":{"type":"string","enum":["continue_monitoring"]}}},{"type":"object","additionalProperties":false,"required":["expectedVersion","action","reasonNote"],"properties":{"expectedVersion":{"type":"integer","minimum":1},"reasonNote":{"type":"string","minLength":1,"maxLength":1000,"pattern":"^(?!\\s)(?![\\s\\S]*\\s$)[^\\u0000-\\u001F\\u007F-\\u009F]+$","description":"Required reviewer reason. It must be trimmed and contain no control characters."},"evidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"description":"Safe evidence summaries referenced by the decision. For mark_false_positive, every referenced summary is adjusted as a reviewed false positive.","items":{"type":"string","format":"uuid"}},"action":{"type":"string","enum":["dismiss"]}}},{"type":"object","additionalProperties":false,"required":["expectedVersion","action","reasonNote","evidenceIds"],"properties":{"expectedVersion":{"type":"integer","minimum":1},"reasonNote":{"type":"string","minLength":1,"maxLength":1000,"pattern":"^(?!\\s)(?![\\s\\S]*\\s$)[^\\u0000-\\u001F\\u007F-\\u009F]+$","description":"Required reviewer reason. It must be trimmed and contain no control characters."},"evidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"description":"Safe evidence summaries referenced by the decision. For mark_false_positive, every referenced summary is adjusted as a reviewed false positive.","items":{"type":"string","format":"uuid"},"minItems":1},"action":{"type":"string","enum":["mark_false_positive"]}}},{"type":"object","additionalProperties":false,"required":["expectedVersion","action","reasonNote","restrictionScopes","durationHours"],"properties":{"expectedVersion":{"type":"integer","minimum":1},"reasonNote":{"type":"string","minLength":1,"maxLength":1000,"pattern":"^(?!\\s)(?![\\s\\S]*\\s$)[^\\u0000-\\u001F\\u007F-\\u009F]+$","description":"Required reviewer reason. It must be trimmed and contain no control characters."},"evidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"description":"Safe evidence summaries referenced by the decision. For mark_false_positive, every referenced summary is adjusted as a reviewed false positive.","items":{"type":"string","format":"uuid"}},"action":{"type":"string","enum":["restrict"]},"restrictionScopes":{"type":"array","minItems":1,"maxItems":3,"uniqueItems":true,"items":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold"]}},"durationHours":{"type":"integer","minimum":1,"maximum":168}}}]}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"caseId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["case","requestId"],"properties":{"case":{"type":"object","additionalProperties":false,"required":["caseId","playerId","playerName","status","version","score","band","policyVersion","restrictionCount","activeRestrictionCount","activeRestrictionScopes","latestRestrictionExpiry","canReview","categoryTotals","sourceSignalCount","scoreExplanation","evidence","evidencePreview","evidenceTotalItems","evidenceTruncated","restrictionPreview","restrictionTotalItems","restrictionsTruncated","recentHistory","history","historyTruncated","openedAt","updatedAt","resolvedAt","resolutionReason"],"properties":{"caseId":{"type":"string","format":"uuid"},"playerId":{"type":"string","format":"uuid"},"playerName":{"type":"string"},"status":{"type":"string","enum":["open","under_review","resolved"]},"version":{"type":"integer","minimum":1},"score":{"type":"integer","minimum":0,"maximum":100},"band":{"type":"string","enum":["normal","observe","review_required","urgent_review"]},"policyVersion":{"type":"string"},"restrictionCount":{"type":"integer","minimum":0},"activeRestrictionCount":{"type":"integer","minimum":0},"activeRestrictionScopes":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]}},"latestRestrictionExpiry":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"canReview":{"type":"boolean"},"categoryTotals":{"type":"object","additionalProperties":false,"required":["movement","submissionConflicts","opponentPatterns"],"properties":{"movement":{"type":"integer","minimum":0,"maximum":50},"submissionConflicts":{"type":"integer","minimum":0,"maximum":30},"opponentPatterns":{"type":"integer","minimum":0,"maximum":30}}},"sourceSignalCount":{"type":"integer","minimum":0},"scoreExplanation":{"type":"object","additionalProperties":false,"required":["snapshotId","evaluatedAt","movementPoints","submissionConflictPoints","opponentPatternPoints","finalScore","reviewBand","sourceSignalCount"],"properties":{"snapshotId":{"type":"string","format":"uuid"},"evaluatedAt":{"type":"string","format":"date-time"},"movementPoints":{"type":"integer","minimum":0,"maximum":50},"submissionConflictPoints":{"type":"integer","minimum":0,"maximum":30},"opponentPatternPoints":{"type":"integer","minimum":0,"maximum":30},"finalScore":{"type":"integer","minimum":0,"maximum":100},"reviewBand":{"type":"string","enum":["normal","observe","review_required","urgent_review"]},"sourceSignalCount":{"type":"integer","minimum":0}}},"evidence":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["evidenceId","signalType","severity","basePoints","effectivePoints","observedAt","expiresAt","policyVersion","state","decayState","safeSourceType","reviewedFalsePositive","opponentPattern"],"properties":{"evidenceId":{"type":"string","format":"uuid"},"signalType":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]},"severity":{"type":"string"},"basePoints":{"type":"integer","minimum":1,"maximum":25},"effectivePoints":{"type":"integer","minimum":0,"maximum":25},"observedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"policyVersion":{"type":"string"},"state":{"type":"string","enum":["active","adjusted_false_positive","expired"]},"decayState":{"type":"string","enum":["active","expired","reviewed_false_positive"]},"safeSourceType":{"type":"string"},"reviewedFalsePositive":{"type":"boolean"},"opponentPattern":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","completedMatchCount","repeatedOpponentMatchCount","opponentConcentrationRatio"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["opponent_concentration"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"completedMatchCount":{"type":"integer","minimum":0},"repeatedOpponentMatchCount":{"type":"integer","minimum":0},"opponentConcentrationRatio":{"type":"number","minimum":0,"maximum":1}}},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","qualifyingForfeitCount"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["one_sided_outcome_pattern"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"qualifyingForfeitCount":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["availability","reason","remediation"],"properties":{"availability":{"type":"string","enum":["unavailable"]},"reason":{"type":"string","enum":["legacy_summary_not_retained"]},"remediation":{"type":"string","enum":["await_fresh_detector_evaluation"]}}}]}}}},"evidencePreview":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["evidenceId","signalType","severity","basePoints","effectivePoints","observedAt","expiresAt","policyVersion","state","decayState","safeSourceType","reviewedFalsePositive","opponentPattern"],"properties":{"evidenceId":{"type":"string","format":"uuid"},"signalType":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]},"severity":{"type":"string"},"basePoints":{"type":"integer","minimum":1,"maximum":25},"effectivePoints":{"type":"integer","minimum":0,"maximum":25},"observedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"policyVersion":{"type":"string"},"state":{"type":"string","enum":["active","adjusted_false_positive","expired"]},"decayState":{"type":"string","enum":["active","expired","reviewed_false_positive"]},"safeSourceType":{"type":"string"},"reviewedFalsePositive":{"type":"boolean"},"opponentPattern":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","completedMatchCount","repeatedOpponentMatchCount","opponentConcentrationRatio"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["opponent_concentration"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"completedMatchCount":{"type":"integer","minimum":0},"repeatedOpponentMatchCount":{"type":"integer","minimum":0},"opponentConcentrationRatio":{"type":"number","minimum":0,"maximum":1}}},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","qualifyingForfeitCount"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["one_sided_outcome_pattern"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"qualifyingForfeitCount":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["availability","reason","remediation"],"properties":{"availability":{"type":"string","enum":["unavailable"]},"reason":{"type":"string","enum":["legacy_summary_not_retained"]},"remediation":{"type":"string","enum":["await_fresh_detector_evaluation"]}}}]}}}},"evidenceTotalItems":{"type":"integer","minimum":0},"evidenceTruncated":{"type":"boolean"},"restrictionPreview":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]}}}},"restrictionTotalItems":{"type":"integer","minimum":0},"restrictionsTruncated":{"type":"boolean"},"recentHistory":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["decisionId","actorType","actorPlayerId","actorPlayerName","decisionType","action","previousStatus","resultingStatus","reasonCode","reasonNote","policyVersion","caseVersionBefore","caseVersionAfter","versionBefore","versionAfter","evidenceIds","falsePositiveEvidenceIds","restrictions","occurredAt"],"properties":{"decisionId":{"type":"string","format":"uuid"},"actorType":{"type":"string","enum":["system","author"]},"actorPlayerId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"actorPlayerName":{"anyOf":[{"type":"string"},{"type":"null"}]},"decisionType":{"type":"string"},"action":{"type":"string"},"previousStatus":{"anyOf":[{"type":"string","enum":["open","under_review","resolved"]},{"type":"null"}]},"resultingStatus":{"type":"string","enum":["open","under_review","resolved"]},"reasonCode":{"type":"string"},"reasonNote":{"anyOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"policyVersion":{"type":"string"},"caseVersionBefore":{"type":"integer","minimum":0},"caseVersionAfter":{"type":"integer","minimum":1},"versionBefore":{"type":"integer","minimum":0},"versionAfter":{"type":"integer","minimum":1},"evidenceIds":{"type":"array","maxItems":100,"items":{"type":"string","format":"uuid"}},"falsePositiveEvidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"restrictions":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus","expiresAt"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]},"expiresAt":{"type":"string","format":"date-time"}}}},"occurredAt":{"type":"string","format":"date-time"}}}},"history":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["decisionId","actorType","actorPlayerId","actorPlayerName","decisionType","action","previousStatus","resultingStatus","reasonCode","reasonNote","policyVersion","caseVersionBefore","caseVersionAfter","versionBefore","versionAfter","evidenceIds","falsePositiveEvidenceIds","restrictions","occurredAt"],"properties":{"decisionId":{"type":"string","format":"uuid"},"actorType":{"type":"string","enum":["system","author"]},"actorPlayerId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"actorPlayerName":{"anyOf":[{"type":"string"},{"type":"null"}]},"decisionType":{"type":"string"},"action":{"type":"string"},"previousStatus":{"anyOf":[{"type":"string","enum":["open","under_review","resolved"]},{"type":"null"}]},"resultingStatus":{"type":"string","enum":["open","under_review","resolved"]},"reasonCode":{"type":"string"},"reasonNote":{"anyOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"policyVersion":{"type":"string"},"caseVersionBefore":{"type":"integer","minimum":0},"caseVersionAfter":{"type":"integer","minimum":1},"versionBefore":{"type":"integer","minimum":0},"versionAfter":{"type":"integer","minimum":1},"evidenceIds":{"type":"array","maxItems":100,"items":{"type":"string","format":"uuid"}},"falsePositiveEvidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"restrictions":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus","expiresAt"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]},"expiresAt":{"type":"string","format":"date-time"}}}},"occurredAt":{"type":"string","format":"date-time"}}}},"historyTruncated":{"type":"boolean"},"openedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"resolutionReason":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trust-cases/{caseId}/export":{"get":{"operationId":"exportSuspectPlayerCase","summary":"Export a bounded privacy-safe suspect-player case","tags":["Trust review"],"description":"Returns a server-defined JSON export containing the safe case projection and at most 100 evidence, restriction, and history records per collection. Counts and pagination metadata identify any truncation.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"caseId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["export","requestId"],"properties":{"export":{"type":"object","additionalProperties":false,"required":["formatVersion","generatedAt","case","evidence","restrictions","history"],"properties":{"formatVersion":{"type":"string","enum":["trust-case-review-v1"]},"generatedAt":{"type":"string","format":"date-time"},"case":{"type":"object","additionalProperties":false,"required":["caseId","playerId","playerName","status","version","score","band","policyVersion","restrictionCount","activeRestrictionCount","activeRestrictionScopes","latestRestrictionExpiry","canReview","categoryTotals","sourceSignalCount","scoreExplanation","evidence","evidencePreview","evidenceTotalItems","evidenceTruncated","restrictionPreview","restrictionTotalItems","restrictionsTruncated","recentHistory","history","historyTruncated","openedAt","updatedAt","resolvedAt","resolutionReason"],"properties":{"caseId":{"type":"string","format":"uuid"},"playerId":{"type":"string","format":"uuid"},"playerName":{"type":"string"},"status":{"type":"string","enum":["open","under_review","resolved"]},"version":{"type":"integer","minimum":1},"score":{"type":"integer","minimum":0,"maximum":100},"band":{"type":"string","enum":["normal","observe","review_required","urgent_review"]},"policyVersion":{"type":"string"},"restrictionCount":{"type":"integer","minimum":0},"activeRestrictionCount":{"type":"integer","minimum":0},"activeRestrictionScopes":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]}},"latestRestrictionExpiry":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"canReview":{"type":"boolean"},"categoryTotals":{"type":"object","additionalProperties":false,"required":["movement","submissionConflicts","opponentPatterns"],"properties":{"movement":{"type":"integer","minimum":0,"maximum":50},"submissionConflicts":{"type":"integer","minimum":0,"maximum":30},"opponentPatterns":{"type":"integer","minimum":0,"maximum":30}}},"sourceSignalCount":{"type":"integer","minimum":0},"scoreExplanation":{"type":"object","additionalProperties":false,"required":["snapshotId","evaluatedAt","movementPoints","submissionConflictPoints","opponentPatternPoints","finalScore","reviewBand","sourceSignalCount"],"properties":{"snapshotId":{"type":"string","format":"uuid"},"evaluatedAt":{"type":"string","format":"date-time"},"movementPoints":{"type":"integer","minimum":0,"maximum":50},"submissionConflictPoints":{"type":"integer","minimum":0,"maximum":30},"opponentPatternPoints":{"type":"integer","minimum":0,"maximum":30},"finalScore":{"type":"integer","minimum":0,"maximum":100},"reviewBand":{"type":"string","enum":["normal","observe","review_required","urgent_review"]},"sourceSignalCount":{"type":"integer","minimum":0}}},"evidence":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["evidenceId","signalType","severity","basePoints","effectivePoints","observedAt","expiresAt","policyVersion","state","decayState","safeSourceType","reviewedFalsePositive","opponentPattern"],"properties":{"evidenceId":{"type":"string","format":"uuid"},"signalType":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]},"severity":{"type":"string"},"basePoints":{"type":"integer","minimum":1,"maximum":25},"effectivePoints":{"type":"integer","minimum":0,"maximum":25},"observedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"policyVersion":{"type":"string"},"state":{"type":"string","enum":["active","adjusted_false_positive","expired"]},"decayState":{"type":"string","enum":["active","expired","reviewed_false_positive"]},"safeSourceType":{"type":"string"},"reviewedFalsePositive":{"type":"boolean"},"opponentPattern":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","completedMatchCount","repeatedOpponentMatchCount","opponentConcentrationRatio"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["opponent_concentration"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"completedMatchCount":{"type":"integer","minimum":0},"repeatedOpponentMatchCount":{"type":"integer","minimum":0},"opponentConcentrationRatio":{"type":"number","minimum":0,"maximum":1}}},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","qualifyingForfeitCount"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["one_sided_outcome_pattern"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"qualifyingForfeitCount":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["availability","reason","remediation"],"properties":{"availability":{"type":"string","enum":["unavailable"]},"reason":{"type":"string","enum":["legacy_summary_not_retained"]},"remediation":{"type":"string","enum":["await_fresh_detector_evaluation"]}}}]}}}},"evidencePreview":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["evidenceId","signalType","severity","basePoints","effectivePoints","observedAt","expiresAt","policyVersion","state","decayState","safeSourceType","reviewedFalsePositive","opponentPattern"],"properties":{"evidenceId":{"type":"string","format":"uuid"},"signalType":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]},"severity":{"type":"string"},"basePoints":{"type":"integer","minimum":1,"maximum":25},"effectivePoints":{"type":"integer","minimum":0,"maximum":25},"observedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"policyVersion":{"type":"string"},"state":{"type":"string","enum":["active","adjusted_false_positive","expired"]},"decayState":{"type":"string","enum":["active","expired","reviewed_false_positive"]},"safeSourceType":{"type":"string"},"reviewedFalsePositive":{"type":"boolean"},"opponentPattern":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","completedMatchCount","repeatedOpponentMatchCount","opponentConcentrationRatio"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["opponent_concentration"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"completedMatchCount":{"type":"integer","minimum":0},"repeatedOpponentMatchCount":{"type":"integer","minimum":0},"opponentConcentrationRatio":{"type":"number","minimum":0,"maximum":1}}},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","qualifyingForfeitCount"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["one_sided_outcome_pattern"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"qualifyingForfeitCount":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["availability","reason","remediation"],"properties":{"availability":{"type":"string","enum":["unavailable"]},"reason":{"type":"string","enum":["legacy_summary_not_retained"]},"remediation":{"type":"string","enum":["await_fresh_detector_evaluation"]}}}]}}}},"evidenceTotalItems":{"type":"integer","minimum":0},"evidenceTruncated":{"type":"boolean"},"restrictionPreview":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]}}}},"restrictionTotalItems":{"type":"integer","minimum":0},"restrictionsTruncated":{"type":"boolean"},"recentHistory":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["decisionId","actorType","actorPlayerId","actorPlayerName","decisionType","action","previousStatus","resultingStatus","reasonCode","reasonNote","policyVersion","caseVersionBefore","caseVersionAfter","versionBefore","versionAfter","evidenceIds","falsePositiveEvidenceIds","restrictions","occurredAt"],"properties":{"decisionId":{"type":"string","format":"uuid"},"actorType":{"type":"string","enum":["system","author"]},"actorPlayerId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"actorPlayerName":{"anyOf":[{"type":"string"},{"type":"null"}]},"decisionType":{"type":"string"},"action":{"type":"string"},"previousStatus":{"anyOf":[{"type":"string","enum":["open","under_review","resolved"]},{"type":"null"}]},"resultingStatus":{"type":"string","enum":["open","under_review","resolved"]},"reasonCode":{"type":"string"},"reasonNote":{"anyOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"policyVersion":{"type":"string"},"caseVersionBefore":{"type":"integer","minimum":0},"caseVersionAfter":{"type":"integer","minimum":1},"versionBefore":{"type":"integer","minimum":0},"versionAfter":{"type":"integer","minimum":1},"evidenceIds":{"type":"array","maxItems":100,"items":{"type":"string","format":"uuid"}},"falsePositiveEvidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"restrictions":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus","expiresAt"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]},"expiresAt":{"type":"string","format":"date-time"}}}},"occurredAt":{"type":"string","format":"date-time"}}}},"history":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["decisionId","actorType","actorPlayerId","actorPlayerName","decisionType","action","previousStatus","resultingStatus","reasonCode","reasonNote","policyVersion","caseVersionBefore","caseVersionAfter","versionBefore","versionAfter","evidenceIds","falsePositiveEvidenceIds","restrictions","occurredAt"],"properties":{"decisionId":{"type":"string","format":"uuid"},"actorType":{"type":"string","enum":["system","author"]},"actorPlayerId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"actorPlayerName":{"anyOf":[{"type":"string"},{"type":"null"}]},"decisionType":{"type":"string"},"action":{"type":"string"},"previousStatus":{"anyOf":[{"type":"string","enum":["open","under_review","resolved"]},{"type":"null"}]},"resultingStatus":{"type":"string","enum":["open","under_review","resolved"]},"reasonCode":{"type":"string"},"reasonNote":{"anyOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"policyVersion":{"type":"string"},"caseVersionBefore":{"type":"integer","minimum":0},"caseVersionAfter":{"type":"integer","minimum":1},"versionBefore":{"type":"integer","minimum":0},"versionAfter":{"type":"integer","minimum":1},"evidenceIds":{"type":"array","maxItems":100,"items":{"type":"string","format":"uuid"}},"falsePositiveEvidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"restrictions":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus","expiresAt"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]},"expiresAt":{"type":"string","format":"date-time"}}}},"occurredAt":{"type":"string","format":"date-time"}}}},"historyTruncated":{"type":"boolean"},"openedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"resolutionReason":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"evidence":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["evidenceId","signalType","severity","basePoints","effectivePoints","observedAt","expiresAt","policyVersion","state","decayState","safeSourceType","reviewedFalsePositive","opponentPattern"],"properties":{"evidenceId":{"type":"string","format":"uuid"},"signalType":{"type":"string","enum":["impossible_movement","idempotency_payload_conflict","submission_conflict_pattern","opponent_concentration","one_sided_outcome_pattern"]},"severity":{"type":"string"},"basePoints":{"type":"integer","minimum":1,"maximum":25},"effectivePoints":{"type":"integer","minimum":0,"maximum":25},"observedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"policyVersion":{"type":"string"},"state":{"type":"string","enum":["active","adjusted_false_positive","expired"]},"decayState":{"type":"string","enum":["active","expired","reviewed_false_positive"]},"safeSourceType":{"type":"string"},"reviewedFalsePositive":{"type":"boolean"},"opponentPattern":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","completedMatchCount","repeatedOpponentMatchCount","opponentConcentrationRatio"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["opponent_concentration"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"completedMatchCount":{"type":"integer","minimum":0},"repeatedOpponentMatchCount":{"type":"integer","minimum":0},"opponentConcentrationRatio":{"type":"number","minimum":0,"maximum":1}}},{"type":"object","additionalProperties":false,"required":["availability","kind","evaluationWindowStart","evaluationWindowEnd","qualifyingForfeitCount"],"properties":{"availability":{"type":"string","enum":["available"]},"kind":{"type":"string","enum":["one_sided_outcome_pattern"]},"evaluationWindowStart":{"type":"string","format":"date-time"},"evaluationWindowEnd":{"type":"string","format":"date-time"},"qualifyingForfeitCount":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["availability","reason","remediation"],"properties":{"availability":{"type":"string","enum":["unavailable"]},"reason":{"type":"string","enum":["legacy_summary_not_retained"]},"remediation":{"type":"string","enum":["await_fresh_detector_evaluation"]}}}]}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0}}},"restrictions":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0}}},"history":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["decisionId","actorType","actorPlayerId","actorPlayerName","decisionType","action","previousStatus","resultingStatus","reasonCode","reasonNote","policyVersion","caseVersionBefore","caseVersionAfter","versionBefore","versionAfter","evidenceIds","falsePositiveEvidenceIds","restrictions","occurredAt"],"properties":{"decisionId":{"type":"string","format":"uuid"},"actorType":{"type":"string","enum":["system","author"]},"actorPlayerId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"actorPlayerName":{"anyOf":[{"type":"string"},{"type":"null"}]},"decisionType":{"type":"string"},"action":{"type":"string"},"previousStatus":{"anyOf":[{"type":"string","enum":["open","under_review","resolved"]},{"type":"null"}]},"resultingStatus":{"type":"string","enum":["open","under_review","resolved"]},"reasonCode":{"type":"string"},"reasonNote":{"anyOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"policyVersion":{"type":"string"},"caseVersionBefore":{"type":"integer","minimum":0},"caseVersionAfter":{"type":"integer","minimum":1},"versionBefore":{"type":"integer","minimum":0},"versionAfter":{"type":"integer","minimum":1},"evidenceIds":{"type":"array","maxItems":100,"items":{"type":"string","format":"uuid"}},"falsePositiveEvidenceIds":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"restrictions":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["restrictionId","decisionId","scope","startsAt","originalExpiresAt","effectiveExpiresAt","active","appealStatus","expiresAt"],"properties":{"restrictionId":{"type":"string","format":"uuid"},"decisionId":{"type":"string","format":"uuid"},"scope":{"type":"string","enum":["online_verification_required","location_reward_challenge_hold","new_competitive_match_hold","card_trade_hold"]},"startsAt":{"type":"string","format":"date-time"},"originalExpiresAt":{"type":"string","format":"date-time"},"effectiveExpiresAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"appealStatus":{"type":"string","enum":["eligible","submitted","resolved","expired"]},"expiresAt":{"type":"string","format":"date-time"}}}},"occurredAt":{"type":"string","format":"date-time"}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/cards":{"get":{"operationId":"listAuthorCards","summary":"List card definitions for Authors","tags":["Authoring"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cards","requestId"],"properties":{"cards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","authoringStatus","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"type":"integer","minimum":0,"nullable":true},"power":{"type":"integer","minimum":0,"nullable":true},"description":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer"}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}}},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"post":{"operationId":"createAuthorCard","summary":"Create a draft card definition","tags":["Authoring"],"description":"Creates an inactive draft. Publication is a separate Author-only operation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["name","category","affinity","rarity","hp","power","moves"],"properties":{"name":{"type":"string","minLength":1,"pattern":"\\S"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"description":{"type":"string","minLength":1,"pattern":"\\S","nullable":true},"imageUrl":{"type":"string","minLength":1,"pattern":"\\S","nullable":true,"description":"Absolute http(s) image URL or same-origin /cards/ artwork path."},"category":{"type":"string","enum":["creature"]},"hp":{"type":"integer","minimum":1},"power":{"type":"integer","minimum":0},"moves":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["position","name","moveType","effectType","powerCost"],"properties":{"position":{"type":"integer","minimum":1,"maximum":4},"name":{"type":"string","minLength":1,"pattern":"\\S"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer","minimum":0}}},"description":"Draft Creature cards allow zero through four moves. Move positions must be unique; publication requires exactly four moves."},"effects":{"type":"array","maxItems":0,"items":{"type":"object","additionalProperties":false,"required":["position","effectType"],"properties":{"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}},"description":"Creature cards cannot define Power-card effects."}}},{"type":"object","additionalProperties":false,"required":["name","category","affinity","rarity","hp","power","effects"],"properties":{"name":{"type":"string","minLength":1,"pattern":"\\S"},"affinity":{"type":"null","description":"Ordinary Power cards are typeless."},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"description":{"type":"string","minLength":1,"pattern":"\\S","nullable":true},"imageUrl":{"type":"string","minLength":1,"pattern":"\\S","nullable":true,"description":"Absolute http(s) image URL or same-origin /cards/ artwork path."},"category":{"type":"string","enum":["power"]},"hp":{"type":"integer","enum":[null],"nullable":true},"power":{"type":"integer","enum":[null],"nullable":true},"moves":{"type":"array","maxItems":0,"items":{"type":"object","additionalProperties":false,"required":["position","name","moveType","effectType","powerCost"],"properties":{"position":{"type":"integer","minimum":1,"maximum":4},"name":{"type":"string","minLength":1,"pattern":"\\S"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer","minimum":0}}},"description":"Power cards cannot define Creature moves."},"effects":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["position","effectType"],"properties":{"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}},"description":"Power cards require at least one effect. Effect positions must be unique."}}}]}}}},"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["card","requestId"],"properties":{"card":{"type":"object","additionalProperties":false,"required":["id","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","authoringStatus","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"type":"integer","minimum":0,"nullable":true},"power":{"type":"integer","minimum":0,"nullable":true},"description":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer"}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}}},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Another card definition in the Author lifecycle already reserves the normalized name. The error code is CARD_NAME_CONFLICT.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}},"description":"Another card definition in the Author lifecycle already reserves the normalized name. The error code is CARD_NAME_CONFLICT."}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/cards/{cardId}":{"put":{"operationId":"updateAuthorCard","summary":"Edit a draft card definition","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["name","category","affinity","rarity","hp","power","moves","expectedVersion"],"properties":{"name":{"type":"string","minLength":1,"pattern":"\\S"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"description":{"type":"string","minLength":1,"pattern":"\\S","nullable":true},"imageUrl":{"type":"string","minLength":1,"pattern":"\\S","nullable":true,"description":"Absolute http(s) image URL or same-origin /cards/ artwork path."},"category":{"type":"string","enum":["creature"]},"hp":{"type":"integer","minimum":1},"power":{"type":"integer","minimum":0},"moves":{"type":"array","maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["position","name","moveType","effectType","powerCost"],"properties":{"position":{"type":"integer","minimum":1,"maximum":4},"name":{"type":"string","minLength":1,"pattern":"\\S"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer","minimum":0}}},"description":"Draft Creature cards allow zero through four moves. Move positions must be unique; publication requires exactly four moves."},"effects":{"type":"array","maxItems":0,"items":{"type":"object","additionalProperties":false,"required":["position","effectType"],"properties":{"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}},"description":"Creature cards cannot define Power-card effects."},"expectedVersion":{"type":"integer","minimum":0}}},{"type":"object","additionalProperties":false,"required":["name","category","affinity","rarity","hp","power","effects","expectedVersion"],"properties":{"name":{"type":"string","minLength":1,"pattern":"\\S"},"affinity":{"type":"null","description":"Ordinary Power cards are typeless."},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"description":{"type":"string","minLength":1,"pattern":"\\S","nullable":true},"imageUrl":{"type":"string","minLength":1,"pattern":"\\S","nullable":true,"description":"Absolute http(s) image URL or same-origin /cards/ artwork path."},"category":{"type":"string","enum":["power"]},"hp":{"type":"integer","enum":[null],"nullable":true},"power":{"type":"integer","enum":[null],"nullable":true},"moves":{"type":"array","maxItems":0,"items":{"type":"object","additionalProperties":false,"required":["position","name","moveType","effectType","powerCost"],"properties":{"position":{"type":"integer","minimum":1,"maximum":4},"name":{"type":"string","minLength":1,"pattern":"\\S"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer","minimum":0}}},"description":"Power cards cannot define Creature moves."},"effects":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["position","effectType"],"properties":{"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}},"description":"Power cards require at least one effect. Effect positions must be unique."},"expectedVersion":{"type":"integer","minimum":0}}}]}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"cardId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["card","requestId"],"properties":{"card":{"type":"object","additionalProperties":false,"required":["id","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","authoringStatus","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"type":"integer","minimum":0,"nullable":true},"power":{"type":"integer","minimum":0,"nullable":true},"description":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer"}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}}},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"The draft cannot be updated because of a lifecycle conflict or because another card definition reserves the normalized name. Name conflicts use the error code CARD_NAME_CONFLICT.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}},"description":"The draft cannot be updated because of a lifecycle conflict or because another card definition reserves the normalized name. Name conflicts use the error code CARD_NAME_CONFLICT."}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/cards/{cardId}/submit":{"post":{"operationId":"submitAuthorCard","summary":"Submit a card definition","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"cardId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["card","requestId"],"properties":{"card":{"type":"object","additionalProperties":false,"required":["id","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","authoringStatus","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"type":"integer","minimum":0,"nullable":true},"power":{"type":"integer","minimum":0,"nullable":true},"description":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer"}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}}},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/cards/{cardId}/approve":{"post":{"operationId":"approveAuthorCard","summary":"Approve a card definition","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"cardId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["card","requestId"],"properties":{"card":{"type":"object","additionalProperties":false,"required":["id","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","authoringStatus","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"type":"integer","minimum":0,"nullable":true},"power":{"type":"integer","minimum":0,"nullable":true},"description":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer"}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}}},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/cards/{cardId}/return":{"post":{"operationId":"returnAuthorCard","summary":"Return a card definition to draft","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"cardId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["card","requestId"],"properties":{"card":{"type":"object","additionalProperties":false,"required":["id","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","authoringStatus","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"type":"integer","minimum":0,"nullable":true},"power":{"type":"integer","minimum":0,"nullable":true},"description":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer"}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}}},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/cards/{cardId}/publish":{"post":{"operationId":"publishAuthorCard","summary":"Publish a ready card definition","tags":["Authoring"],"description":"Publishes an approved definition only after rechecking every executable Creature move or Power-card effect.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"cardId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["card","requestId"],"properties":{"card":{"type":"object","additionalProperties":false,"required":["id","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","authoringStatus","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"type":"integer","minimum":0,"nullable":true},"power":{"type":"integer","minimum":0,"nullable":true},"description":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer"}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}}},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/cards/{cardId}/retire":{"post":{"operationId":"retireAuthorCard","summary":"Retire a card definition","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"cardId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["card","requestId"],"properties":{"card":{"type":"object","additionalProperties":false,"required":["id","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","authoringStatus","createdAt","updatedAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"type":"integer","minimum":0,"nullable":true},"power":{"type":"integer","minimum":0,"nullable":true},"description":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true},"powerCost":{"type":"integer"}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"type":"integer","minimum":0,"nullable":true},"modifierStat":{"type":"string","enum":["hp","power","damage_multiplier",null],"nullable":true},"modifierOperation":{"type":"string","enum":["add","multiply",null],"nullable":true},"modifierDurationTurns":{"type":"integer","minimum":1,"nullable":true}}}},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trails":{"get":{"operationId":"listAuthorTrails","summary":"List trails for Authors","tags":["Authoring"],"description":"Returns draft, published, and retired ordered trail definitions for protected content management.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trails","requestId"],"properties":{"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","description","status","publishedAt","retiredAt","createdAt","updatedAt","steps"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","published","retired"]},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","eventId","title","eventStatus"],"properties":{"position":{"type":"integer","minimum":1,"maximum":50},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"eventStatus":{"type":"string","enum":["draft","published","retired"]}}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"post":{"operationId":"createAuthorTrail","summary":"Create a trail draft","tags":["Authoring"],"description":"Creates an editable draft with its ordered event membership and records the acting Author.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["title","eventIds"],"properties":{"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"nullable":true},"eventIds":{"type":"array","maxItems":50,"uniqueItems":true,"items":{"type":"string","format":"uuid"}}}}}}},"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trail","requestId"],"properties":{"trail":{"type":"object","additionalProperties":false,"required":["trailId","title","description","status","publishedAt","retiredAt","createdAt","updatedAt","steps"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","published","retired"]},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","eventId","title","eventStatus"],"properties":{"position":{"type":"integer","minimum":1,"maximum":50},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"eventStatus":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trails/{trailId}":{"put":{"operationId":"updateAuthorTrail","summary":"Update and reorder a trail draft","tags":["Authoring"],"description":"Replaces the draft metadata and ordered event membership atomically.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["title","eventIds"],"properties":{"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"nullable":true},"eventIds":{"type":"array","maxItems":50,"uniqueItems":true,"items":{"type":"string","format":"uuid"}}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"trailId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trail","requestId"],"properties":{"trail":{"type":"object","additionalProperties":false,"required":["trailId","title","description","status","publishedAt","retiredAt","createdAt","updatedAt","steps"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","published","retired"]},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","eventId","title","eventStatus"],"properties":{"position":{"type":"integer","minimum":1,"maximum":50},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"eventStatus":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trails/{trailId}/publish":{"post":{"operationId":"publishAuthorTrail","summary":"Publish a ready trail","tags":["Authoring"],"description":"Publishes a trail containing at least two ordered, published, non-retired events.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"maxProperties":0}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"trailId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trail","requestId"],"properties":{"trail":{"type":"object","additionalProperties":false,"required":["trailId","title","description","status","publishedAt","retiredAt","createdAt","updatedAt","steps"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","published","retired"]},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","eventId","title","eventStatus"],"properties":{"position":{"type":"integer","minimum":1,"maximum":50},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"eventStatus":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/trails/{trailId}/retire":{"post":{"operationId":"retireAuthorTrail","summary":"Retire a trail","tags":["Authoring"],"description":"Removes the trail from active guidance while preserving progress for players who started it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"maxProperties":0}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"trailId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trail","requestId"],"properties":{"trail":{"type":"object","additionalProperties":false,"required":["trailId","title","description","status","publishedAt","retiredAt","createdAt","updatedAt","steps"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","published","retired"]},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","eventId","title","eventStatus"],"properties":{"position":{"type":"integer","minimum":1,"maximum":50},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"eventStatus":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/campaigns":{"get":{"operationId":"listAuthorCampaigns","summary":"List campaign content and schedules","tags":["Authoring"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["campaigns","requestId"],"properties":{"campaigns":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["campaignId","title","description","status","startsAt","endsAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance","publishedAt","retiredAt","createdAt","updatedAt","events","trails"],"properties":{"campaignId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","authoringStatus","startsAt","endsAt"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}}}},"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","status"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"status":{"type":"string","enum":["draft","published","retired"]}}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"post":{"operationId":"createAuthorCampaign","summary":"Create a campaign draft","tags":["Authoring"],"description":"Creates a bounded campaign draft. Empty drafts are allowed, but approval requires at least one valid member.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["title","startsAt","endsAt","eventIds","trailIds"],"properties":{"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"nullable":true},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"eventIds":{"type":"array","uniqueItems":true,"items":{"type":"string","format":"uuid"}},"trailIds":{"type":"array","uniqueItems":true,"items":{"type":"string","format":"uuid"}}}}}}},"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["campaign","requestId"],"properties":{"campaign":{"type":"object","additionalProperties":false,"required":["campaignId","title","description","status","startsAt","endsAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance","publishedAt","retiredAt","createdAt","updatedAt","events","trails"],"properties":{"campaignId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","authoringStatus","startsAt","endsAt"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}}}},"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","status"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"status":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/campaigns/{campaignId}":{"put":{"operationId":"updateAuthorCampaign","summary":"Update a campaign draft","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["title","startsAt","endsAt","eventIds","trailIds","expectedVersion"],"properties":{"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"nullable":true},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"eventIds":{"type":"array","uniqueItems":true,"items":{"type":"string","format":"uuid"}},"trailIds":{"type":"array","uniqueItems":true,"items":{"type":"string","format":"uuid"}},"expectedVersion":{"type":"integer","minimum":0}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"campaignId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["campaign","requestId"],"properties":{"campaign":{"type":"object","additionalProperties":false,"required":["campaignId","title","description","status","startsAt","endsAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance","publishedAt","retiredAt","createdAt","updatedAt","events","trails"],"properties":{"campaignId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","authoringStatus","startsAt","endsAt"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}}}},"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","status"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"status":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/campaigns/{campaignId}/submit":{"post":{"operationId":"submitAuthorCampaign","summary":"Submit a campaign","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"campaignId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["campaign","requestId"],"properties":{"campaign":{"type":"object","additionalProperties":false,"required":["campaignId","title","description","status","startsAt","endsAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance","publishedAt","retiredAt","createdAt","updatedAt","events","trails"],"properties":{"campaignId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","authoringStatus","startsAt","endsAt"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}}}},"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","status"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"status":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/campaigns/{campaignId}/approve":{"post":{"operationId":"approveAuthorCampaign","summary":"Approve a campaign","tags":["Authoring"],"description":"Validates campaign members, timing, and schedule conflicts before advancing the lifecycle.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"campaignId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["campaign","requestId"],"properties":{"campaign":{"type":"object","additionalProperties":false,"required":["campaignId","title","description","status","startsAt","endsAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance","publishedAt","retiredAt","createdAt","updatedAt","events","trails"],"properties":{"campaignId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","authoringStatus","startsAt","endsAt"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}}}},"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","status"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"status":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/campaigns/{campaignId}/publish":{"post":{"operationId":"publishAuthorCampaign","summary":"Publish a campaign","tags":["Authoring"],"description":"Validates campaign members, timing, and schedule conflicts before advancing the lifecycle.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"campaignId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["campaign","requestId"],"properties":{"campaign":{"type":"object","additionalProperties":false,"required":["campaignId","title","description","status","startsAt","endsAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance","publishedAt","retiredAt","createdAt","updatedAt","events","trails"],"properties":{"campaignId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","authoringStatus","startsAt","endsAt"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}}}},"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","status"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"status":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/campaigns/{campaignId}/retire":{"post":{"operationId":"retireAuthorCampaign","summary":"Retire a campaign","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"note":{"type":"string","minLength":1,"maxLength":1000}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"campaignId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["campaign","requestId"],"properties":{"campaign":{"type":"object","additionalProperties":false,"required":["campaignId","title","description","status","startsAt","endsAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance","publishedAt","retiredAt","createdAt","updatedAt","events","trails"],"properties":{"campaignId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","authoringStatus","startsAt","endsAt"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}}}},"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","status"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"status":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/campaigns/{campaignId}/return":{"post":{"operationId":"returnAuthorCampaign","summary":"Return a campaign to draft","tags":["Authoring"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","reason"],"properties":{"expectedVersion":{"type":"integer","minimum":0},"reason":{"type":"string","minLength":1,"maxLength":1000}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"campaignId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["campaign","requestId"],"properties":{"campaign":{"type":"object","additionalProperties":false,"required":["campaignId","title","description","status","startsAt","endsAt","version","submittedBy","submittedAt","reviewedBy","reviewedAt","publicationProvenance","publishedAt","retiredAt","createdAt","updatedAt","events","trails"],"properties":{"campaignId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid","nullable":true},"submittedAt":{"type":"string","format":"date-time","nullable":true},"reviewedBy":{"type":"string","format":"uuid","nullable":true},"reviewedAt":{"type":"string","format":"date-time","nullable":true},"publicationProvenance":{"type":"string","enum":["legacy","controlled_seed","reviewed",null],"nullable":true},"publishedAt":{"type":"string","format":"date-time","nullable":true},"retiredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","authoringStatus","startsAt","endsAt"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"authoringStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}}}},"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","status"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"status":{"type":"string","enum":["draft","published","retired"]}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trails":{"get":{"operationId":"listPlayerTrails","summary":"List visible trails and progress","tags":["Trails"],"description":"Returns effectively scheduled trails plus retired history with progress derived from this authenticated player's authoritative event completions.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trails","requestId"],"properties":{"trails":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","description","publicationStatus","availability","startsAt","endsAt","progressStatus","completedStepCount","totalSteps","currentStepPosition"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"publicationStatus":{"type":"string","enum":["published","retired"]},"availability":{"type":"string","enum":["active","upcoming","ended","retired"]},"startsAt":{"type":"string","format":"date-time","nullable":true},"endsAt":{"type":"string","format":"date-time","nullable":true},"progressStatus":{"type":"string","enum":["in_progress","completed","retired"]},"completedStepCount":{"type":"integer","minimum":0},"totalSteps":{"type":"integer","minimum":1,"maximum":50},"currentStepPosition":{"type":"integer","minimum":1,"maximum":50,"nullable":true}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trails/{trailId}":{"get":{"operationId":"getPlayerTrail","summary":"Get ordered trail progress","tags":["Trails"],"description":"Returns completed, current, locked, and unavailable steps derived for the authenticated player.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"trailId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trail","requestId"],"properties":{"trail":{"type":"object","additionalProperties":false,"required":["trailId","title","description","publicationStatus","availability","startsAt","endsAt","progressStatus","completedStepCount","totalSteps","currentStepPosition","steps"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"publicationStatus":{"type":"string","enum":["published","retired"]},"availability":{"type":"string","enum":["active","upcoming","ended","retired"]},"startsAt":{"type":"string","format":"date-time","nullable":true},"endsAt":{"type":"string","format":"date-time","nullable":true},"progressStatus":{"type":"string","enum":["in_progress","completed","retired"]},"completedStepCount":{"type":"integer","minimum":0},"totalSteps":{"type":"integer","minimum":1,"maximum":50},"currentStepPosition":{"type":"integer","minimum":1,"maximum":50,"nullable":true},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","eventId","title","description","latitude","longitude","radiusMetres","startsAt","endsAt","state","unavailableReason","completedAt"],"properties":{"position":{"type":"integer","minimum":1,"maximum":50},"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"radiusMetres":{"type":"integer","minimum":1},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["completed","current","locked","unavailable"]},"unavailableReason":{"type":"string","enum":["upcoming","ended","event_unavailable","event_retired","trail_retired"],"nullable":true},"completedAt":{"type":"string","format":"date-time","nullable":true}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/events/nearby-unvisited":{"post":{"operationId":"listNearbyUnvisitedEvents","summary":"Find nearby unvisited current events","tags":["Trails","Events"],"description":"Uses a fresh untrusted browser location claim to return active standalone events and current trail steps. This guidance does not grant event eligibility.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["latitude","longitude","accuracyMetres","acquiredAt"],"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"accuracyMetres":{"type":"number","minimum":0},"acquiredAt":{"type":"string","format":"date-time"},"maxDistanceMetres":{"type":"number","minimum":100,"maximum":5000},"limit":{"type":"integer","minimum":1,"maximum":50}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["events","requestId"],"properties":{"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","description","latitude","longitude","radiusMetres","startsAt","endsAt","distanceMetres","trailContexts"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"radiusMetres":{"type":"integer","minimum":1},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"distanceMetres":{"type":"number","minimum":0},"trailContexts":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["trailId","title","position","totalSteps"],"properties":{"trailId":{"type":"string","format":"uuid"},"title":{"type":"string"},"position":{"type":"integer","minimum":1,"maximum":50},"totalSteps":{"type":"integer","minimum":2,"maximum":50}}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/review-queue":{"get":{"operationId":"listAuthorReviewQueue","summary":"List submitted Author content","tags":["Authoring"],"description":"Returns safe summaries only; private answers and full content bodies are excluded.","parameters":[{"schema":{"type":"string","enum":["event","challenge","question","card","campaign"]},"in":"query","name":"entityType","required":false},{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"in":"query","name":"pageSize","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","requestId"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["entityType","entityId","eventId","challengeId","label","status","version","submittedBy","submittedByName","submittedAt","canReview"],"properties":{"entityType":{"type":"string","enum":["event","challenge","question","card","campaign"]},"entityId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid","nullable":true},"challengeId":{"type":"string","format":"uuid","nullable":true},"label":{"type":"string"},"status":{"type":"string","enum":["in_review"]},"version":{"type":"integer","minimum":0},"submittedBy":{"type":"string","format":"uuid"},"submittedByName":{"type":"string"},"submittedAt":{"type":"string","format":"date-time"},"canReview":{"type":"boolean"}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/author/content/{entityType}/{entityId}/history":{"get":{"operationId":"getAuthorContentHistory","summary":"Read Author content audit history","tags":["Authoring"],"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","enum":["event","challenge","question","card","campaign"]},"in":"path","name":"entityType","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"entityId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","totalItems","totalPages","requestId"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["auditId","action","fromStatus","toStatus","resultingVersion","note","actorPlayerId","actorPlayerName","occurredAt"],"properties":{"auditId":{"type":"string","format":"uuid"},"action":{"type":"string","enum":["create","edit","submit","approve","return","publish","retire"]},"fromStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"],"nullable":true},"toStatus":{"type":"string","enum":["draft","in_review","approved","published","retired"]},"resultingVersion":{"type":"integer","minimum":0},"note":{"type":"string","nullable":true},"actorPlayerId":{"type":"string","format":"uuid"},"actorPlayerName":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/offline-challenge-packs":{"post":{"operationId":"prepareOfflineChallenges","summary":"Prepare player-bound challenge packs without creating attempts","tags":["Challenges"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["eventIds"],"properties":{"eventIds":{"type":"array","minItems":1,"maxItems":10,"uniqueItems":true,"items":{"type":"string","format":"uuid"}}}}}}},"parameters":[{"schema":{"type":"string","enum":["1"]},"in":"header","name":"x-wits-offline-contract-version","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["packs","requestId"],"properties":{"requestId":{"type":"string"},"packs":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["pack","packToken"],"properties":{"pack":{"type":"object","additionalProperties":false,"required":["version","packId","playerId","issuedAt","validFrom","validUntil","event","challengeId","challengeVersion","format","timeLimitSeconds","questions"],"properties":{"version":{"type":"integer","enum":[1]},"packId":{"type":"string","format":"uuid"},"playerId":{"type":"string","format":"uuid"},"issuedAt":{"type":"string","format":"date-time"},"validFrom":{"type":"string","format":"date-time"},"validUntil":{"type":"string","format":"date-time"},"placementAssignmentId":{"type":"string","format":"uuid"},"locationPolicy":{"type":"string","enum":["arrival-v1"]},"rewardContext":{"type":"object","additionalProperties":false,"required":["policyVersion","cards"],"properties":{"policyVersion":{"type":"string"},"cards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","rarity"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"challengeId":{"type":"string","format":"uuid"},"challengeVersion":{"type":"integer"},"format":{"type":"string","enum":["multiple_choice","ordering"]},"timeLimitSeconds":{"type":"integer","enum":[90,120,150]},"event":{"type":"object","additionalProperties":false,"required":["eventId","version","title","description","latitude","longitude","radiusMetres"],"properties":{"eventId":{"type":"string","format":"uuid"},"version":{"type":"integer"},"title":{"type":"string"},"description":{"type":["null","string"]},"latitude":{"type":"number"},"longitude":{"type":"number"},"radiusMetres":{"type":"number"}}},"questions":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["id","version","prompt","difficulty","options"],"properties":{"id":{"type":"string","format":"uuid"},"version":{"type":"integer"},"prompt":{"type":"string"},"difficulty":{"type":"integer","enum":[1,2,3]},"options":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["id","text"],"properties":{"id":{"type":"string","format":"uuid"},"text":{"type":"string"}}}}}}}}},"packToken":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/offline-challenge-attempts":{"post":{"operationId":"syncOfflineChallenge","summary":"Validate, mark, and complete an offline attempt atomically","tags":["Challenges"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["clientAttemptId","packToken","startedAt","finishedAt","answers","startLocation"],"properties":{"clientAttemptId":{"type":"string","format":"uuid"},"packToken":{"type":"string","minLength":1,"maxLength":128000},"startedAt":{"type":"string","format":"date-time"},"finishedAt":{"type":"string","format":"date-time"},"startLocation":{"type":"object","additionalProperties":false,"required":["latitude","longitude","accuracyMetres","acquiredAt"],"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"accuracyMetres":{"type":"number","minimum":0},"acquiredAt":{"type":"string","format":"date-time"}}},"finishLocation":{"type":"object","additionalProperties":false,"required":["latitude","longitude","accuracyMetres","acquiredAt"],"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"accuracyMetres":{"type":"number","minimum":0},"acquiredAt":{"type":"string","format":"date-time"}}},"answers":{"type":"array","maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["questionId","answeredAt","optionIds"],"properties":{"questionId":{"type":"string","format":"uuid"},"answeredAt":{"type":"string","format":"date-time"},"optionIds":{"type":"array","minItems":1,"maxItems":4,"uniqueItems":true,"items":{"type":"string","format":"uuid"}}}}}}}}}},"parameters":[{"schema":{"type":"string","enum":["1"]},"in":"header","name":"x-wits-offline-contract-version","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["attempt","requestId"],"properties":{"requestId":{"type":"string"},"attempt":{"oneOf":[{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedChoice","correctChoice","isCorrect"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedChoice":{"anyOf":[{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},{"type":"null"}]},"correctChoice":{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},"isCorrect":{"type":"boolean"}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedItems","correctItems","isCorrect","explanation"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedItems":{"anyOf":[{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},{"type":"null"}]},"correctItems":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"isCorrect":{"type":"boolean"},"explanation":{"type":"string"}}}},"requestId":{"type":"string"}}}]}}}}}},"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["attempt","requestId"],"properties":{"requestId":{"type":"string"},"attempt":{"oneOf":[{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedChoice","correctChoice","isCorrect"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedChoice":{"anyOf":[{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},{"type":"null"}]},"correctChoice":{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},"isCorrect":{"type":"boolean"}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedItems","correctItems","isCorrect","explanation"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedItems":{"anyOf":[{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},{"type":"null"}]},"correctItems":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"isCorrect":{"type":"boolean"},"explanation":{"type":"string"}}}},"requestId":{"type":"string"}}}]}}}}}}}}},"/api/v1/events/{eventId}/challenge-attempts":{"post":{"operationId":"startOrResumeChallengeAttempt","summary":"Start or resume an event challenge attempt","tags":["Challenges"],"description":"Creates a challenge attempt after fresh authoritative event and location checks, or returns the player existing persisted attempt.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["latitude","longitude","accuracyMetres","acquiredAt"],"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"accuracyMetres":{"type":"number","minimum":0},"acquiredAt":{"type":"string","format":"date-time"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true},{"schema":{"type":"string","enum":["2"]},"in":"header","name":"x-wits-challenge-contract-version","required":true,"description":"Required challenge response-contract version. Refresh the Web application when the active version changes."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","startedAt","deadline","totalQuestions","answeredCount","questions","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"status":{"type":"string","enum":["in_progress"]},"startedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"totalQuestions":{"type":"integer","enum":[5]},"answeredCount":{"type":"integer","minimum":0,"maximum":5},"questions":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","choices","selectedChoiceId","answeredAt"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"choices":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"selectedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"answeredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","startedAt","deadline","totalQuestions","answeredCount","questions","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"status":{"type":"string","enum":["in_progress"]},"startedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"totalQuestions":{"type":"integer","enum":[5]},"answeredCount":{"type":"integer","minimum":0,"maximum":5},"questions":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","items","selectedItemIds","answeredAt"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"selectedItemIds":{"anyOf":[{"type":"array","minItems":4,"maxItems":4,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},{"type":"null"}]},"answeredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedChoice","correctChoice","isCorrect"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedChoice":{"anyOf":[{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},{"type":"null"}]},"correctChoice":{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},"isCorrect":{"type":"boolean"}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedItems","correctItems","isCorrect","explanation"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedItems":{"anyOf":[{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},{"type":"null"}]},"correctItems":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"isCorrect":{"type":"boolean"},"explanation":{"type":"string"}}}},"requestId":{"type":"string"}}}]}}}},"201":{"description":"Default Response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","startedAt","deadline","totalQuestions","answeredCount","questions","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"status":{"type":"string","enum":["in_progress"]},"startedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"totalQuestions":{"type":"integer","enum":[5]},"answeredCount":{"type":"integer","minimum":0,"maximum":5},"questions":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","choices","selectedChoiceId","answeredAt"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"choices":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"selectedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"answeredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","startedAt","deadline","totalQuestions","answeredCount","questions","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"status":{"type":"string","enum":["in_progress"]},"startedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"totalQuestions":{"type":"integer","enum":[5]},"answeredCount":{"type":"integer","minimum":0,"maximum":5},"questions":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","items","selectedItemIds","answeredAt"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"selectedItemIds":{"anyOf":[{"type":"array","minItems":4,"maxItems":4,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},{"type":"null"}]},"answeredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}},"requestId":{"type":"string"}}}]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/challenge-attempts/{attemptId}":{"get":{"operationId":"fetchChallengeAttempt","summary":"Fetch the current challenge attempt state","tags":["Challenges"],"description":"Returns the authenticated player persisted in-progress or completed attempt. Expired in-progress attempts are finalized synchronously before the completed result is returned.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"attemptId","required":true},{"schema":{"type":"string","enum":["2"]},"in":"header","name":"x-wits-challenge-contract-version","required":true,"description":"Required challenge response-contract version. Refresh the Web application when the active version changes."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","startedAt","deadline","totalQuestions","answeredCount","questions","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"status":{"type":"string","enum":["in_progress"]},"startedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"totalQuestions":{"type":"integer","enum":[5]},"answeredCount":{"type":"integer","minimum":0,"maximum":5},"questions":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","choices","selectedChoiceId","answeredAt"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"choices":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"selectedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"answeredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","startedAt","deadline","totalQuestions","answeredCount","questions","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"status":{"type":"string","enum":["in_progress"]},"startedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"totalQuestions":{"type":"integer","enum":[5]},"answeredCount":{"type":"integer","minimum":0,"maximum":5},"questions":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","items","selectedItemIds","answeredAt"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"selectedItemIds":{"anyOf":[{"type":"array","minItems":4,"maxItems":4,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},{"type":"null"}]},"answeredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedChoice","correctChoice","isCorrect"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedChoice":{"anyOf":[{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},{"type":"null"}]},"correctChoice":{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},"isCorrect":{"type":"boolean"}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedItems","correctItems","isCorrect","explanation"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedItems":{"anyOf":[{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},{"type":"null"}]},"correctItems":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"isCorrect":{"type":"boolean"},"explanation":{"type":"string"}}}},"requestId":{"type":"string"}}}]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}},"/api/v1/challenge-attempts/{attemptId}/answers":{"post":{"operationId":"submitChallengeAnswer","summary":"Submit and lock a challenge answer","tags":["Challenges"],"description":"Locks one answer using server receipt time and returns the updated persisted attempt state. Fifth answers and expired attempts finalize synchronously through the atomic completion boundary.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["attemptQuestionId","choiceId"],"properties":{"format":{"type":"string","enum":["multiple_choice"]},"attemptQuestionId":{"type":"string","format":"uuid"},"choiceId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["format","attemptQuestionId","itemIds"],"properties":{"format":{"type":"string","enum":["ordering"]},"attemptQuestionId":{"type":"string","format":"uuid"},"itemIds":{"type":"array","minItems":4,"maxItems":4,"uniqueItems":true,"items":{"type":"string","format":"uuid"}}}}]}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"attemptId","required":true},{"schema":{"type":"string","enum":["2"]},"in":"header","name":"x-wits-challenge-contract-version","required":true,"description":"Required challenge response-contract version. Refresh the Web application when the active version changes."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","startedAt","deadline","totalQuestions","answeredCount","questions","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"status":{"type":"string","enum":["in_progress"]},"startedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"totalQuestions":{"type":"integer","enum":[5]},"answeredCount":{"type":"integer","minimum":0,"maximum":5},"questions":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","choices","selectedChoiceId","answeredAt"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"choices":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"selectedChoiceId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"answeredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","startedAt","deadline","totalQuestions","answeredCount","questions","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"status":{"type":"string","enum":["in_progress"]},"startedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"totalQuestions":{"type":"integer","enum":[5]},"answeredCount":{"type":"integer","minimum":0,"maximum":5},"questions":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","items","selectedItemIds","answeredAt"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"items":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"selectedItemIds":{"anyOf":[{"type":"array","minItems":4,"maxItems":4,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},{"type":"null"}]},"answeredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["multiple_choice"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedChoice","correctChoice","isCorrect"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedChoice":{"anyOf":[{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},{"type":"null"}]},"correctChoice":{"type":"object","additionalProperties":false,"required":["choiceId","text"],"properties":{"choiceId":{"type":"string","format":"uuid"},"text":{"type":"string"}}},"isCorrect":{"type":"boolean"}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["attemptId","eventId","format","status","completedAt","completionReason","totalQuestions","scoreCorrect","reward","review","requestId"],"properties":{"attemptId":{"type":"string","format":"uuid"},"eventId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["ordering"]},"status":{"type":"string","enum":["completed"]},"completedAt":{"type":"string","format":"date-time"},"completionReason":{"type":"string","enum":["answered","timeout"]},"totalQuestions":{"type":"integer","enum":[5]},"scoreCorrect":{"type":"integer","minimum":0,"maximum":5},"reward":{"type":"object","additionalProperties":false,"required":["cards"],"properties":{"cards":{"type":"array","minItems":0,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}},"ownerBonus":{"type":"object","additionalProperties":false,"required":["outcome","card"],"properties":{"outcome":{"enum":["awarded","not_eligible","score_too_low","already_claimed"]},"card":{"anyOf":[{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common"]}}},{"type":"null"}]}}},"review":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["attemptQuestionId","position","prompt","selectedItems","correctItems","isCorrect","explanation"],"properties":{"attemptQuestionId":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1,"maximum":5},"prompt":{"type":"string"},"selectedItems":{"anyOf":[{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},{"type":"null"}]},"correctItems":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["itemId","text"],"properties":{"itemId":{"type":"string","format":"uuid"},"text":{"type":"string"}}}},"isCorrect":{"type":"boolean"},"explanation":{"type":"string"}}}},"requestId":{"type":"string"}}}]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"},"validation":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}},"/api/v1/cards/collection":{"get":{"operationId":"listOwnedCards","summary":"List the current player card collection","tags":["Cards"],"description":"Returns owned card copies with player-safe catalogue and acquisition metadata. With deckId, limits copies to a saved deck belonging to the authenticated player; missing or inaccessible decks return an empty list. With unique=true, returns only the newest copy of each definition within the requested collection.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"unique","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"deckId","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cards","requestId"],"properties":{"cards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","acquisitionKind","acquiredAt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"acquisitionKind":{"type":"string","enum":["event_reward","starter","evolution","trade"]},"acquiredAt":{"type":"string","format":"date-time"}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/cards/trading-catalogue":{"get":{"operationId":"listTradingCardDefinitions","summary":"List card definitions that may be requested in a trade","tags":["Trading"],"description":"Returns active player-safe card definitions without exposing any player ownership information.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["definitions","requestId"],"properties":{"definitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","imageAlt","isActive","moves","effects"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/cards/starter-options":{"get":{"operationId":"listStarterOptions","summary":"List the currently eligible starter packages","tags":["Cards"],"description":"Returns the approved canonical three-Common-Creature and two-Common-Power-card packages available to the authenticated player for comparison.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["options","requestId"],"properties":{"options":{"type":"array","minItems":3,"maxItems":3,"items":{"type":"object","additionalProperties":false,"required":["affinity","title","description","highlights","composition","creatures","powerCards"],"properties":{"affinity":{"type":"string","enum":["spark","grit","wit"]},"title":{"type":"string"},"description":{"type":"string"},"highlights":{"type":"array","minItems":3,"maxItems":3,"items":{"type":"string"}},"composition":{"type":"object","additionalProperties":false,"required":["creatureCount","powerCardCount"],"properties":{"creatureCount":{"type":"integer","enum":[3]},"powerCardCount":{"type":"integer","enum":[2]}}},"creatures":{"type":"array","minItems":3,"maxItems":3,"items":{"type":"object","additionalProperties":false,"required":["name","hp","power","moves"],"properties":{"name":{"type":"string"},"hp":{"type":"integer","minimum":1},"power":{"type":"integer","minimum":0},"moves":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["name","effects"],"properties":{"name":{"type":"string"},"effects":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/cards/starter":{"post":{"operationId":"selectStarterCards","summary":"Select the current player starter affinity","tags":["Cards"],"description":"Grants the approved canonical set of three Common Creature cards and two Common Power cards for the selected affinity.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["affinity"],"properties":{"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["starterGrantId","affinity","grantedAt","cards","requestId"],"properties":{"starterGrantId":{"type":"string","format":"uuid"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"grantedAt":{"type":"string","format":"date-time"},"cards":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","acquisitionKind","acquiredAt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"acquisitionKind":{"type":"string","enum":["starter"]},"acquiredAt":{"type":"string","format":"date-time"}}}},"requestId":{"type":"string"}}}}}},"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["starterGrantId","affinity","grantedAt","cards","requestId"],"properties":{"starterGrantId":{"type":"string","format":"uuid"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"grantedAt":{"type":"string","format":"date-time"},"cards":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","acquisitionKind","acquiredAt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"acquisitionKind":{"type":"string","enum":["starter"]},"acquiredAt":{"type":"string","format":"date-time"}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/cards/evolutions/{sourceCardDefinitionId}/preview":{"get":{"operationId":"previewCardEvolution","summary":"Preview a fixed card evolution","tags":["Cards"],"description":"Returns the server-authored target and the current player copy eligibility without reserving or consuming cards.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"sourceCardDefinitionId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["source","target","copiesRequired","ownedCopyCount","eligibleCopyCount","deckLockedCopyCount","tradeReservedCopyCount","copies","canEvolve","unavailableReason","requestId"],"properties":{"source":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","imageAlt","isActive","moves","effects","deckPointCost"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"deckPointCost":{"type":"integer","minimum":1,"maximum":4}}},"target":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","imageAlt","isActive","moves","effects","deckPointCost"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"deckPointCost":{"type":"integer","minimum":1,"maximum":4}}},"copiesRequired":{"type":"integer","enum":[3]},"ownedCopyCount":{"type":"integer","minimum":0},"eligibleCopyCount":{"type":"integer","minimum":0},"deckLockedCopyCount":{"type":"integer","minimum":0},"tradeReservedCopyCount":{"type":"integer","minimum":0},"copies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","acquiredAt","acquisitionKind","eligible","lockReason"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"acquiredAt":{"type":"string","format":"date-time"},"acquisitionKind":{"type":"string","enum":["event_reward","starter","evolution","trade"]},"eligible":{"type":"boolean"},"lockReason":{"anyOf":[{"type":"string","enum":["saved_deck","trade_reservation"]},{"type":"null"}]}}}},"canEvolve":{"type":"boolean"},"unavailableReason":{"anyOf":[{"type":"string","enum":["insufficient_copies","saved_deck_lock","trade_reservation"]},{"type":"null"}]},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/cards/evolutions":{"post":{"operationId":"evolveCards","summary":"Evolve three eligible duplicate cards","tags":["Cards"],"description":"Atomically consumes three server-selected, non-deck copies of one source definition and grants its fixed evolved definition.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","sourceCardDefinitionId"],"properties":{"submissionId":{"type":"string","format":"uuid"},"sourceCardDefinitionId":{"type":"string","format":"uuid"}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["evolutionId","submissionId","sourceCardDefinitionId","target","consumedOwnedCardIds","newCard","completedAt","replayed","requestId"],"properties":{"evolutionId":{"type":"string","format":"uuid"},"submissionId":{"type":"string","format":"uuid"},"sourceCardDefinitionId":{"type":"string","format":"uuid"},"target":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","imageAlt","isActive","moves","effects","deckPointCost"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"deckPointCost":{"type":"integer","minimum":1,"maximum":4}}},"consumedOwnedCardIds":{"type":"array","minItems":3,"maxItems":3,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"newCard":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","acquisitionKind","acquiredAt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"acquisitionKind":{"type":"string","enum":["evolution"]},"acquiredAt":{"type":"string","format":"date-time"}}},"completedAt":{"type":"string","format":"date-time"},"replayed":{"type":"boolean"},"requestId":{"type":"string"}}}}}},"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["evolutionId","submissionId","sourceCardDefinitionId","target","consumedOwnedCardIds","newCard","completedAt","replayed","requestId"],"properties":{"evolutionId":{"type":"string","format":"uuid"},"submissionId":{"type":"string","format":"uuid"},"sourceCardDefinitionId":{"type":"string","format":"uuid"},"target":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","imageAlt","isActive","moves","effects","deckPointCost"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"deckPointCost":{"type":"integer","minimum":1,"maximum":4}}},"consumedOwnedCardIds":{"type":"array","minItems":3,"maxItems":3,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"newCard":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","isActive","moves","effects","acquisitionKind","acquiredAt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"],"nullable":true},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","name","moveType","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns","powerCost"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","position","effectType","effectValue","modifierStat","modifierOperation","modifierDurationTurns"],"properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer","minimum":1},"effectType":{"type":"string","enum":["damage","debuff","heal","buff"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifierStat":{"anyOf":[{"type":"string","enum":["hp","power","damage_multiplier"]},{"type":"null"}]},"modifierOperation":{"anyOf":[{"type":"string","enum":["add","multiply"]},{"type":"null"}]},"modifierDurationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"acquisitionKind":{"type":"string","enum":["evolution"]},"acquiredAt":{"type":"string","format":"date-time"}}},"completedAt":{"type":"string","format":"date-time"},"replayed":{"type":"boolean"},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/decks":{"get":{"operationId":"listSavedDecks","summary":"List the current player saved decks","tags":["Decks"],"description":"Returns every saved deck owned by the authenticated player and identifies the currently selected deck.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["decks","requestId"],"properties":{"decks":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["deckId","name","isSelected","totalPoints","createdAt","updatedAt","cards"],"properties":{"deckId":{"type":"string","format":"uuid"},"name":{"type":"string"},"isSelected":{"type":"boolean"},"totalPoints":{"type":"integer","minimum":5,"maximum":10},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"cards":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["position","ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"position":{"type":"integer","minimum":1,"maximum":5},"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"post":{"operationId":"createSavedDeck","summary":"Create a saved deck","tags":["Decks"],"description":"Creates a five-card Basic deck from owned card-copy IDs. Composition, ownership, and rarity points are validated by the server.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["name","ownedCardIds"],"properties":{"name":{"type":"string","minLength":1},"ownedCardIds":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"string","format":"uuid"}}}}}}},"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["deckId","name","isSelected","totalPoints","createdAt","updatedAt","cards","requestId"],"properties":{"deckId":{"type":"string","format":"uuid"},"name":{"type":"string"},"isSelected":{"type":"boolean"},"totalPoints":{"type":"integer","minimum":5,"maximum":10},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"cards":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["position","ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"position":{"type":"integer","minimum":1,"maximum":5},"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/decks/{deckId}":{"put":{"operationId":"updateSavedDeck","summary":"Update a saved deck","tags":["Decks"],"description":"Replaces the authenticated player saved deck name and ordered owned-card copies after server-side validation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["name","ownedCardIds"],"properties":{"name":{"type":"string","minLength":1},"ownedCardIds":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"string","format":"uuid"}}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"deckId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["deckId","name","isSelected","totalPoints","createdAt","updatedAt","cards","requestId"],"properties":{"deckId":{"type":"string","format":"uuid"},"name":{"type":"string"},"isSelected":{"type":"boolean"},"totalPoints":{"type":"integer","minimum":5,"maximum":10},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"cards":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["position","ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"position":{"type":"integer","minimum":1,"maximum":5},"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"delete":{"operationId":"deleteSavedDeck","summary":"Delete a saved deck","tags":["Decks"],"description":"Deletes a saved deck owned by the authenticated player without deleting any owned card copies.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"deckId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/decks/{deckId}/selection":{"put":{"operationId":"selectSavedDeck","summary":"Select a saved deck","tags":["Decks"],"description":"Makes one valid saved deck the authenticated player active selection after revalidating its authoritative card state.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"deckId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["deckId","name","isSelected","totalPoints","createdAt","updatedAt","cards","requestId"],"properties":{"deckId":{"type":"string","format":"uuid"},"name":{"type":"string"},"isSelected":{"type":"boolean"},"totalPoints":{"type":"integer","minimum":5,"maximum":10},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"cards":{"type":"array","minItems":5,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["position","ownedCardId","cardDefinitionId","name","category","affinity","rarity"],"properties":{"position":{"type":"integer","minimum":1,"maximum":5},"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/cpu":{"post":{"operationId":"createCpuMatch","summary":"Create a server-authoritative CPU match","tags":["Matches"],"description":"Creates a CPU match from the authenticated player selected deck and snapshots the authoritative card data.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["deckId"],"properties":{"deckId":{"type":"string","format":"uuid"}}}}}},"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matchId","status","version","winner","startedAt","completedAt","state","lastAction","battleLog","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["active","completed"]},"version":{"type":"integer","minimum":0},"winner":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","currentSide","replacementSide","firstSide","selections","player","cpu","legalActions","turnDeadline"],"properties":{"phase":{"type":"string","enum":["initial_selection","active","replacement","completed"]},"turnNumber":{"type":"integer","minimum":0},"currentSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"replacementSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"firstSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"selections":{"type":"object","additionalProperties":false,"required":["player","cpu"],"properties":{"player":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"player":{"type":"object","additionalProperties":false,"required":["creatures","powerCards","usedPowerCardIds","activeCreatureId"],"properties":{"creatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","available"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"activeCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"cpu":{"type":"object","additionalProperties":false,"required":["activeCreature","defeatedCreatures","remainingCreatureCount","usedPowerCardIds","remainingPowerCardCount"],"properties":{"activeCreature":{"anyOf":[{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}},{"type":"null"}]},"defeatedCreatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"remainingCreatureCount":{"type":"integer","minimum":0},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"remainingPowerCardCount":{"type":"integer","minimum":0}}},"legalActions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_initial_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string"}}}]}},"turnDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},"lastAction":{"anyOf":[{"type":"object","additionalProperties":false,"required":["side","action","effects","expiredEffects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"type":"string","enum":["player","cpu"]},"action":{"type":"object","additionalProperties":true},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier"],"properties":{"effectId":{"type":"string"},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"expiredEffects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","targetSide","targetCreatureId","damageMultiplier"],"properties":{"effectId":{"type":"string"},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]},"winner":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}},{"type":"null"}]},"battleLog":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","label","turnNumber","events"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"turnNumber":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","sequence","side","kind","message"],"properties":{"id":{"type":"string"},"sequence":{"type":"integer","minimum":1},"side":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"kind":{"type":"string","enum":["action","defeat","effect","effect_expired","result","turn"]},"message":{"type":"string"},"creatureId":{"type":"string","format":"uuid"}}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"get":{"operationId":"getActiveCpuMatch","summary":"Read the current active CPU match","tags":["Matches"],"description":"Returns the authenticated player's current unfinished CPU match without creating or advancing it. Returns CPU_MATCH_NOT_FOUND when none exists.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matchId","status","version","winner","startedAt","completedAt","state","lastAction","battleLog","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"status":{"enum":["active"]},"version":{"type":"integer","minimum":0},"winner":{"type":"null"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"null"},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","currentSide","replacementSide","firstSide","selections","player","cpu","legalActions","turnDeadline"],"properties":{"phase":{"type":"string","enum":["initial_selection","active","replacement","completed"]},"turnNumber":{"type":"integer","minimum":0},"currentSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"replacementSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"firstSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"selections":{"type":"object","additionalProperties":false,"required":["player","cpu"],"properties":{"player":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"player":{"type":"object","additionalProperties":false,"required":["creatures","powerCards","usedPowerCardIds","activeCreatureId"],"properties":{"creatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","available"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"activeCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"cpu":{"type":"object","additionalProperties":false,"required":["activeCreature","defeatedCreatures","remainingCreatureCount","usedPowerCardIds","remainingPowerCardCount"],"properties":{"activeCreature":{"anyOf":[{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}},{"type":"null"}]},"defeatedCreatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"remainingCreatureCount":{"type":"integer","minimum":0},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"remainingPowerCardCount":{"type":"integer","minimum":0}}},"legalActions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_initial_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string"}}}]}},"turnDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},"lastAction":{"anyOf":[{"type":"object","additionalProperties":false,"required":["side","action","effects","expiredEffects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"type":"string","enum":["player","cpu"]},"action":{"type":"object","additionalProperties":true},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier"],"properties":{"effectId":{"type":"string"},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"expiredEffects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","targetSide","targetCreatureId","damageMultiplier"],"properties":{"effectId":{"type":"string"},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]},"winner":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}},{"type":"null"}]},"battleLog":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","label","turnNumber","events"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"turnNumber":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","sequence","side","kind","message"],"properties":{"id":{"type":"string"},"sequence":{"type":"integer","minimum":1},"side":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"kind":{"type":"string","enum":["action","defeat","effect","effect_expired","result","turn"]},"message":{"type":"string"},"creatureId":{"type":"string","format":"uuid"}}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/cpu/entry":{"get":{"operationId":"getActiveCpuMatchEntry","summary":"Read the current active CPU match dashboard entry","tags":["Matches"],"description":"Returns only the authenticated player's unfinished CPU match fields. With view=summary, returns nullable activeMatch and selectedDeck identity/name in one read; the selected deck is omitted when a match is active. No gameplay mutation or deck validation is performed.","parameters":[{"schema":{"enum":["summary"]},"in":"query","name":"view","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["matchId","status","startedAt","state","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"status":{"enum":["active"]},"startedAt":{"type":"string","format":"date-time"},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","currentSide"],"properties":{"phase":{"type":"string","enum":["active","completed","initial_selection","replacement"]},"turnNumber":{"type":"integer","minimum":0},"currentSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["activeMatch","selectedDeck","requestId"],"properties":{"activeMatch":{"anyOf":[{"type":"object","additionalProperties":false,"required":["matchId","status","startedAt","state"],"properties":{"matchId":{"type":"string","format":"uuid"},"status":{"enum":["active"]},"startedAt":{"type":"string","format":"date-time"},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","currentSide"],"properties":{"phase":{"type":"string","enum":["active","completed","initial_selection","replacement"]},"turnNumber":{"type":"integer","minimum":0},"currentSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]}}},"requestId":{"type":"string"}}},{"type":"null"}]},"selectedDeck":{"anyOf":[{"type":"object","additionalProperties":false,"required":["deckId","name"],"properties":{"deckId":{"type":"string","format":"uuid"},"name":{"type":"string"}}},{"type":"null"}]},"requestId":{"type":"string"}}}]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/{matchId}":{"get":{"operationId":"getCpuMatch","summary":"Read the authenticated player CPU match","tags":["Matches"],"description":"Include application/vnd.wits-world.cpu.v2+json in Accept to receive voluntary swap actions and Creature IDs in battle-log events. Without it, the response retains the previous battle projection.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"matchId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matchId","status","version","winner","startedAt","completedAt","state","lastAction","battleLog","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["active","completed"]},"version":{"type":"integer","minimum":0},"winner":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","currentSide","replacementSide","firstSide","selections","player","cpu","legalActions","turnDeadline"],"properties":{"phase":{"type":"string","enum":["initial_selection","active","replacement","completed"]},"turnNumber":{"type":"integer","minimum":0},"currentSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"replacementSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"firstSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"selections":{"type":"object","additionalProperties":false,"required":["player","cpu"],"properties":{"player":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"player":{"type":"object","additionalProperties":false,"required":["creatures","powerCards","usedPowerCardIds","activeCreatureId"],"properties":{"creatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","available"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"activeCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"cpu":{"type":"object","additionalProperties":false,"required":["activeCreature","defeatedCreatures","remainingCreatureCount","usedPowerCardIds","remainingPowerCardCount"],"properties":{"activeCreature":{"anyOf":[{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}},{"type":"null"}]},"defeatedCreatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"remainingCreatureCount":{"type":"integer","minimum":0},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"remainingPowerCardCount":{"type":"integer","minimum":0}}},"legalActions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_initial_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string"}}}]}},"turnDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},"lastAction":{"anyOf":[{"type":"object","additionalProperties":false,"required":["side","action","effects","expiredEffects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"type":"string","enum":["player","cpu"]},"action":{"type":"object","additionalProperties":true},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier"],"properties":{"effectId":{"type":"string"},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"expiredEffects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","targetSide","targetCreatureId","damageMultiplier"],"properties":{"effectId":{"type":"string"},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]},"winner":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}},{"type":"null"}]},"battleLog":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","label","turnNumber","events"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"turnNumber":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","sequence","side","kind","message"],"properties":{"id":{"type":"string"},"sequence":{"type":"integer","minimum":1},"side":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"kind":{"type":"string","enum":["action","defeat","effect","effect_expired","result","turn"]},"message":{"type":"string"},"creatureId":{"type":"string","format":"uuid"}}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/{matchId}/actions":{"post":{"operationId":"submitCpuMatchAction","summary":"Submit one intended CPU match action","tags":["Matches"],"description":"The server validates and applies the intended action, then performs any CPU action using server-side randomness.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","expectedVersion","action"],"properties":{"submissionId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":0},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_initial_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"matchId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matchId","status","version","winner","startedAt","completedAt","state","lastAction","battleLog","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["active","completed"]},"version":{"type":"integer","minimum":0},"winner":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","currentSide","replacementSide","firstSide","selections","player","cpu","legalActions","turnDeadline"],"properties":{"phase":{"type":"string","enum":["initial_selection","active","replacement","completed"]},"turnNumber":{"type":"integer","minimum":0},"currentSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"replacementSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"firstSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"selections":{"type":"object","additionalProperties":false,"required":["player","cpu"],"properties":{"player":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"player":{"type":"object","additionalProperties":false,"required":["creatures","powerCards","usedPowerCardIds","activeCreatureId"],"properties":{"creatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","available"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"activeCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"cpu":{"type":"object","additionalProperties":false,"required":["activeCreature","defeatedCreatures","remainingCreatureCount","usedPowerCardIds","remainingPowerCardCount"],"properties":{"activeCreature":{"anyOf":[{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}},{"type":"null"}]},"defeatedCreatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"remainingCreatureCount":{"type":"integer","minimum":0},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"remainingPowerCardCount":{"type":"integer","minimum":0}}},"legalActions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_initial_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string"}}}]}},"turnDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},"lastAction":{"anyOf":[{"type":"object","additionalProperties":false,"required":["side","action","effects","expiredEffects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"type":"string","enum":["player","cpu"]},"action":{"type":"object","additionalProperties":true},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier"],"properties":{"effectId":{"type":"string"},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"expiredEffects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","targetSide","targetCreatureId","damageMultiplier"],"properties":{"effectId":{"type":"string"},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]},"winner":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}},{"type":"null"}]},"battleLog":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","label","turnNumber","events"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"turnNumber":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","sequence","side","kind","message"],"properties":{"id":{"type":"string"},"sequence":{"type":"integer","minimum":1},"side":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"kind":{"type":"string","enum":["action","defeat","effect","effect_expired","result","turn"]},"message":{"type":"string"},"creatureId":{"type":"string","format":"uuid"}}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/{matchId}/forfeit":{"post":{"operationId":"forfeitCpuMatch","summary":"Forfeit an active CPU match","tags":["Matches"],"description":"Records an authoritative CPU victory and completes the current match without applying another battle action.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion"],"properties":{"expectedVersion":{"type":"integer","minimum":0}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"matchId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matchId","status","version","winner","startedAt","completedAt","state","lastAction","battleLog","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["active","completed"]},"version":{"type":"integer","minimum":0},"winner":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","currentSide","replacementSide","firstSide","selections","player","cpu","legalActions","turnDeadline"],"properties":{"phase":{"type":"string","enum":["initial_selection","active","replacement","completed"]},"turnNumber":{"type":"integer","minimum":0},"currentSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"replacementSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"firstSide":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"selections":{"type":"object","additionalProperties":false,"required":["player","cpu"],"properties":{"player":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"player":{"type":"object","additionalProperties":false,"required":["creatures","powerCards","usedPowerCardIds","activeCreatureId"],"properties":{"creatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","available"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"activeCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"cpu":{"type":"object","additionalProperties":false,"required":["activeCreature","defeatedCreatures","remainingCreatureCount","usedPowerCardIds","remainingPowerCardCount"],"properties":{"activeCreature":{"anyOf":[{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}},{"type":"null"}]},"defeatedCreatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","affinity","rarity","maxHp","maxPower","currentHp","remainingPower","defeated","moves"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"affinity":{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"maxHp":{"type":"integer","minimum":0},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effectiveness"],"properties":{"effectiveness":{"anyOf":[{"type":"string","enum":["effective","neutral","resisted"]},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"moveType":{"type":"string","enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"remainingCreatureCount":{"type":"integer","minimum":0},"usedPowerCardIds":{"type":"array","items":{"type":"string"}},"remainingPowerCardCount":{"type":"integer","minimum":0}}},"legalActions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_initial_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string"}}}]}},"turnDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},"lastAction":{"anyOf":[{"type":"object","additionalProperties":false,"required":["side","action","effects","expiredEffects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"type":"string","enum":["player","cpu"]},"action":{"type":"object","additionalProperties":true},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier"],"properties":{"effectId":{"type":"string"},"effectType":{"type":"string","enum":["buff","damage","debuff","heal"]},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"type":"string","enum":["hp","power","damage_multiplier"]},"operation":{"type":"string","enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"expiredEffects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","targetSide","targetCreatureId","damageMultiplier"],"properties":{"effectId":{"type":"string"},"targetSide":{"type":"string","enum":["player","cpu"]},"targetCreatureId":{"type":"string"},"damageMultiplier":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string"},{"type":"null"}]},"winner":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}},{"type":"null"}]},"battleLog":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","label","turnNumber","events"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"turnNumber":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","sequence","side","kind","message"],"properties":{"id":{"type":"string"},"sequence":{"type":"integer","minimum":1},"side":{"anyOf":[{"type":"string","enum":["player","cpu"]},{"type":"null"}]},"kind":{"type":"string","enum":["action","defeat","effect","effect_expired","result","turn"]},"message":{"type":"string"},"creatureId":{"type":"string","format":"uuid"}}}}}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/history":{"get":{"operationId":"listCpuMatchHistory","summary":"List completed CPU matches for the current player","tags":["Matches"],"description":"With view=summary, return at most limit (default 5, maximum 20) completed match headers with roundCount; no rounds, actions or state are loaded. Ordered by completedAt descending then matchId descending. Without view, retain full history. Include application/vnd.wits-world.cpu.v2+json in Accept to receive swap actions in full history.","parameters":[{"schema":{"enum":["summary"]},"in":"query","name":"view","required":true},{"schema":{"type":"integer","minimum":1,"maximum":20},"in":"query","name":"limit","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["matches","requestId"],"properties":{"matches":{"type":"array","items":{"type":"object","additionalProperties":true,"required":["matchId","status","winner","startedAt","completedAt","rounds"],"properties":{"matchId":{"type":"string","format":"uuid"},"status":{"enum":["completed"]},"winner":{"type":"string","enum":["player","cpu"]},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"rounds":{"type":"array","items":{"type":"object","additionalProperties":true}}}}},"requestId":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["matches","requestId"],"properties":{"matches":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["matchId","status","winner","startedAt","completedAt","roundCount"],"properties":{"matchId":{"type":"string","format":"uuid"},"status":{"enum":["completed"]},"winner":{"type":"string","enum":["player","cpu"]},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"roundCount":{"type":"integer","minimum":0}}}},"requestId":{"type":"string"}}}]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp/players":{"get":{"operationId":"findPvpPlayer","tags":["Matches"],"parameters":[{"schema":{"type":"string","minLength":3,"maxLength":20},"in":"query","name":"playerName","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["playerName","requestId"],"properties":{"playerName":{"type":"string"},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp/invitations":{"post":{"operationId":"createPvpInvitation","tags":["Matches"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["opponentPlayerName","deckId","initialCreatureId","submissionId"],"properties":{"opponentPlayerName":{"type":"string","minLength":3,"maxLength":20},"deckId":{"type":"string","format":"uuid"},"initialCreatureId":{"type":"string","format":"uuid"},"submissionId":{"type":"string","format":"uuid"}}}}}},"parameters":[{"schema":{"type":"string"},"in":"header","name":"accept","required":false,"description":"Include application/vnd.wits-world.pvp.v5+json for voluntary Creature swaps and the current battle projection, application/vnd.wits-world.pvp.v4+json for participant-safe full battle history, application/vnd.wits-world.pvp.v3+json for invitation cancellation, or application/vnd.wits-world.pvp.v2+json for voluntary resignation only, without adding a non-safelisted CORS request header."}],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["invitation","requestId"],"properties":{"invitation":{"type":"object","additionalProperties":false,"required":["invitationId","direction","status","version","opponent","createdAt","expiresAt","respondedAt","matchId"],"properties":{"invitationId":{"type":"string","format":"uuid"},"direction":{"enum":["incoming","outgoing"]},"status":{"enum":["pending","accepted","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":0},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"respondedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"canCancel":{"type":"boolean","description":"Server-derived outgoing pending-invitation capability returned to PvP contract version 3 clients."}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"get":{"operationId":"listPvpInvitations","tags":["Matches"],"parameters":[{"schema":{"type":"string","maxLength":512},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"in":"query","name":"limit","required":false},{"schema":{"enum":["incoming","outgoing"]},"in":"query","name":"direction","required":false},{"schema":{"enum":["pending","accepted","declined","cancelled","expired","invalidated"]},"in":"query","name":"status","required":false},{"schema":{"type":"string"},"in":"header","name":"accept","required":false,"description":"Include application/vnd.wits-world.pvp.v5+json for voluntary Creature swaps and the current battle projection, application/vnd.wits-world.pvp.v4+json for participant-safe full battle history, application/vnd.wits-world.pvp.v3+json for invitation cancellation, or application/vnd.wits-world.pvp.v2+json for voluntary resignation only, without adding a non-safelisted CORS request header."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["invitations","nextCursor","requestId"],"properties":{"invitations":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["invitationId","direction","status","version","opponent","createdAt","expiresAt","respondedAt","matchId"],"properties":{"invitationId":{"type":"string","format":"uuid"},"direction":{"enum":["incoming","outgoing"]},"status":{"enum":["pending","accepted","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":0},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"respondedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"canCancel":{"type":"boolean","description":"Server-derived outgoing pending-invitation capability returned to PvP contract version 3 clients."}}}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp/invitations/{invitationId}/accept":{"post":{"operationId":"acceptPvpInvitation","tags":["Matches"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["deckId","initialCreatureId","submissionId","expectedVersion"],"properties":{"deckId":{"type":"string","format":"uuid"},"initialCreatureId":{"type":"string","format":"uuid"},"submissionId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":0}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"invitationId","required":true},{"schema":{"type":"string"},"in":"header","name":"accept","required":false,"description":"Include application/vnd.wits-world.pvp.v5+json for voluntary Creature swaps and the current battle projection, application/vnd.wits-world.pvp.v4+json for participant-safe full battle history, application/vnd.wits-world.pvp.v3+json for invitation cancellation, or application/vnd.wits-world.pvp.v2+json for voluntary resignation only, without adding a non-safelisted CORS request header."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["invitation","match","requestId"],"properties":{"invitation":{"type":"object","additionalProperties":false,"required":["invitationId","direction","status","version","opponent","createdAt","expiresAt","respondedAt","matchId"],"properties":{"invitationId":{"type":"string","format":"uuid"},"direction":{"enum":["incoming","outgoing"]},"status":{"enum":["pending","accepted","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":0},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"respondedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"canCancel":{"type":"boolean","description":"Server-derived outgoing pending-invitation capability returned to PvP contract version 3 clients."}}},"match":{"type":"object","additionalProperties":false,"required":["matchId","mode","status","version","opponent","currentActor","turnDeadline","state","legalActions","lastAction","outcome","completionReason","startedAt","updatedAt","completedAt","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"mode":{"enum":["asynchronous"]},"status":{"enum":["active","completed"]},"version":{"type":"integer","minimum":0},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"currentActor":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","self","opponent"],"properties":{"phase":{"enum":["active","replacement","completed"]},"turnNumber":{"type":"integer","minimum":1},"self":{"type":"object","additionalProperties":false,"required":["playerName","creatures","powerCards","usedPowerCardIds","activeCreatureId"],"properties":{"playerName":{"type":"string"},"creatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","effects","available"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"usedPowerCardIds":{"type":"array","items":{"type":"string","format":"uuid"}},"activeCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}},"opponent":{"type":"object","additionalProperties":false,"required":["playerName","activeCreature","defeatedCreatures","remainingCreatureCount","playedPowerCards","remainingPowerCardCount"],"properties":{"playerName":{"type":"string"},"activeCreature":{"anyOf":[{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}},{"type":"null"}]},"defeatedCreatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"remainingCreatureCount":{"type":"integer","minimum":0},"playedPowerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","effects","available"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"remainingPowerCardCount":{"type":"integer","minimum":0}}}}},"legalActions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]}},"history":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["sequence","turnNumber","createdAt","result"],"properties":{"sequence":{"type":"integer","minimum":1},"turnNumber":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"result":{"type":"object","additionalProperties":false,"required":["side","action","effects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"enum":["self","opponent"]},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier","modifier"],"properties":{"effectId":{"type":"string"},"effectType":{"enum":["buff","damage","debuff","heal"]},"targetSide":{"enum":["self","opponent"]},"targetCreatureId":{"type":"string","format":"uuid"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"winner":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}}}}},"lastAction":{"anyOf":[{"type":"object","additionalProperties":false,"required":["side","action","effects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"enum":["self","opponent"]},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier","modifier"],"properties":{"effectId":{"type":"string"},"effectType":{"enum":["buff","damage","debuff","heal"]},"targetSide":{"enum":["self","opponent"]},"targetCreatureId":{"type":"string","format":"uuid"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"winner":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}},{"type":"null"}]},"outcome":{"anyOf":[{"enum":["win","loss"]},{"type":"null"}]},"completionReason":{"anyOf":[{"enum":["defeat","turn_forfeit","account_deletion_forfeit","voluntary_resignation"]},{"type":"null"}]},"startedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"canResign":{"type":"boolean","description":"Server-derived active-match capability returned to PvP contract version 2 clients."},"requestId":{"type":"string"}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp/invitations/{invitationId}/decline":{"post":{"operationId":"declinePvpInvitation","tags":["Matches"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","expectedVersion"],"properties":{"submissionId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":0}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"invitationId","required":true},{"schema":{"type":"string"},"in":"header","name":"accept","required":false,"description":"Include application/vnd.wits-world.pvp.v5+json for voluntary Creature swaps and the current battle projection, application/vnd.wits-world.pvp.v4+json for participant-safe full battle history, application/vnd.wits-world.pvp.v3+json for invitation cancellation, or application/vnd.wits-world.pvp.v2+json for voluntary resignation only, without adding a non-safelisted CORS request header."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["invitation","requestId"],"properties":{"invitation":{"type":"object","additionalProperties":false,"required":["invitationId","direction","status","version","opponent","createdAt","expiresAt","respondedAt","matchId"],"properties":{"invitationId":{"type":"string","format":"uuid"},"direction":{"enum":["incoming","outgoing"]},"status":{"enum":["pending","accepted","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":0},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"respondedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"canCancel":{"type":"boolean","description":"Server-derived outgoing pending-invitation capability returned to PvP contract version 3 clients."}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp/invitations/{invitationId}/cancel":{"post":{"operationId":"cancelPvpInvitation","tags":["Matches"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","expectedVersion"],"properties":{"submissionId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":0}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"invitationId","required":true},{"schema":{"type":"string"},"in":"header","name":"accept","required":false,"description":"Include application/vnd.wits-world.pvp.v5+json for voluntary Creature swaps and the current battle projection, application/vnd.wits-world.pvp.v4+json for participant-safe full battle history, application/vnd.wits-world.pvp.v3+json for invitation cancellation, or application/vnd.wits-world.pvp.v2+json for voluntary resignation only, without adding a non-safelisted CORS request header."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["invitation","requestId"],"properties":{"invitation":{"type":"object","additionalProperties":false,"required":["invitationId","direction","status","version","opponent","createdAt","expiresAt","respondedAt","matchId"],"properties":{"invitationId":{"type":"string","format":"uuid"},"direction":{"enum":["incoming","outgoing"]},"status":{"enum":["pending","accepted","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":0},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"respondedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"canCancel":{"type":"boolean","description":"Server-derived outgoing pending-invitation capability returned to PvP contract version 3 clients."}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp/history":{"get":{"operationId":"listPvpHistory","tags":["Matches"],"parameters":[{"schema":{"type":"string","maxLength":512},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"in":"query","name":"limit","required":false},{"schema":{"type":"string"},"in":"header","name":"accept","required":false,"description":"Include application/vnd.wits-world.pvp.v5+json for voluntary Creature swaps and the current battle projection, application/vnd.wits-world.pvp.v4+json for participant-safe full battle history, application/vnd.wits-world.pvp.v3+json for invitation cancellation, or application/vnd.wits-world.pvp.v2+json for voluntary resignation only, without adding a non-safelisted CORS request header."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matches","nextCursor","requestId"],"properties":{"matches":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["matchId","mode","status","opponent","outcome","completionReason","startedAt","completedAt"],"properties":{"matchId":{"type":"string","format":"uuid"},"mode":{"enum":["asynchronous"]},"status":{"enum":["completed"]},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"outcome":{"enum":["win","loss"]},"completionReason":{"enum":["defeat","turn_forfeit","account_deletion_forfeit","voluntary_resignation"]},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"}}}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp":{"get":{"operationId":"listActivePvpMatches","tags":["Matches"],"parameters":[{"schema":{"type":"string","maxLength":512},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"in":"query","name":"limit","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matches","nextCursor","requestId"],"properties":{"matches":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["matchId","mode","status","version","opponent","currentActor","turnDeadline","updatedAt"],"properties":{"matchId":{"type":"string","format":"uuid"},"mode":{"enum":["asynchronous"]},"status":{"enum":["active"]},"version":{"type":"integer"},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"currentActor":{"enum":["self","opponent"]},"turnDeadline":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp/{matchId}":{"get":{"operationId":"getPvpMatch","tags":["Matches"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"matchId","required":true},{"schema":{"type":"string"},"in":"header","name":"accept","required":false,"description":"Include application/vnd.wits-world.pvp.v5+json for voluntary Creature swaps and the current battle projection, application/vnd.wits-world.pvp.v4+json for participant-safe full battle history, application/vnd.wits-world.pvp.v3+json for invitation cancellation, or application/vnd.wits-world.pvp.v2+json for voluntary resignation only, without adding a non-safelisted CORS request header."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matchId","mode","status","version","opponent","currentActor","turnDeadline","state","legalActions","lastAction","outcome","completionReason","startedAt","updatedAt","completedAt","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"mode":{"enum":["asynchronous"]},"status":{"enum":["active","completed"]},"version":{"type":"integer","minimum":0},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"currentActor":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","self","opponent"],"properties":{"phase":{"enum":["active","replacement","completed"]},"turnNumber":{"type":"integer","minimum":1},"self":{"type":"object","additionalProperties":false,"required":["playerName","creatures","powerCards","usedPowerCardIds","activeCreatureId"],"properties":{"playerName":{"type":"string"},"creatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","effects","available"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"usedPowerCardIds":{"type":"array","items":{"type":"string","format":"uuid"}},"activeCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}},"opponent":{"type":"object","additionalProperties":false,"required":["playerName","activeCreature","defeatedCreatures","remainingCreatureCount","playedPowerCards","remainingPowerCardCount"],"properties":{"playerName":{"type":"string"},"activeCreature":{"anyOf":[{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}},{"type":"null"}]},"defeatedCreatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"remainingCreatureCount":{"type":"integer","minimum":0},"playedPowerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","effects","available"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"remainingPowerCardCount":{"type":"integer","minimum":0}}}}},"legalActions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]}},"history":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["sequence","turnNumber","createdAt","result"],"properties":{"sequence":{"type":"integer","minimum":1},"turnNumber":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"result":{"type":"object","additionalProperties":false,"required":["side","action","effects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"enum":["self","opponent"]},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier","modifier"],"properties":{"effectId":{"type":"string"},"effectType":{"enum":["buff","damage","debuff","heal"]},"targetSide":{"enum":["self","opponent"]},"targetCreatureId":{"type":"string","format":"uuid"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"winner":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}}}}},"lastAction":{"anyOf":[{"type":"object","additionalProperties":false,"required":["side","action","effects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"enum":["self","opponent"]},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier","modifier"],"properties":{"effectId":{"type":"string"},"effectType":{"enum":["buff","damage","debuff","heal"]},"targetSide":{"enum":["self","opponent"]},"targetCreatureId":{"type":"string","format":"uuid"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"winner":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}},{"type":"null"}]},"outcome":{"anyOf":[{"enum":["win","loss"]},{"type":"null"}]},"completionReason":{"anyOf":[{"enum":["defeat","turn_forfeit","account_deletion_forfeit","voluntary_resignation"]},{"type":"null"}]},"startedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"canResign":{"type":"boolean","description":"Server-derived active-match capability returned to PvP contract version 2 clients."},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp/{matchId}/actions":{"post":{"operationId":"submitPvpAction","tags":["Matches"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","expectedVersion","action"],"properties":{"submissionId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":0},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"matchId","required":true},{"schema":{"type":"string"},"in":"header","name":"accept","required":false,"description":"Include application/vnd.wits-world.pvp.v5+json for voluntary Creature swaps and the current battle projection, application/vnd.wits-world.pvp.v4+json for participant-safe full battle history, application/vnd.wits-world.pvp.v3+json for invitation cancellation, or application/vnd.wits-world.pvp.v2+json for voluntary resignation only, without adding a non-safelisted CORS request header."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matchId","mode","status","version","opponent","currentActor","turnDeadline","state","legalActions","lastAction","outcome","completionReason","startedAt","updatedAt","completedAt","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"mode":{"enum":["asynchronous"]},"status":{"enum":["active","completed"]},"version":{"type":"integer","minimum":0},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"currentActor":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","self","opponent"],"properties":{"phase":{"enum":["active","replacement","completed"]},"turnNumber":{"type":"integer","minimum":1},"self":{"type":"object","additionalProperties":false,"required":["playerName","creatures","powerCards","usedPowerCardIds","activeCreatureId"],"properties":{"playerName":{"type":"string"},"creatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","effects","available"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"usedPowerCardIds":{"type":"array","items":{"type":"string","format":"uuid"}},"activeCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}},"opponent":{"type":"object","additionalProperties":false,"required":["playerName","activeCreature","defeatedCreatures","remainingCreatureCount","playedPowerCards","remainingPowerCardCount"],"properties":{"playerName":{"type":"string"},"activeCreature":{"anyOf":[{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}},{"type":"null"}]},"defeatedCreatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"remainingCreatureCount":{"type":"integer","minimum":0},"playedPowerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","effects","available"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"remainingPowerCardCount":{"type":"integer","minimum":0}}}}},"legalActions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]}},"history":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["sequence","turnNumber","createdAt","result"],"properties":{"sequence":{"type":"integer","minimum":1},"turnNumber":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"result":{"type":"object","additionalProperties":false,"required":["side","action","effects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"enum":["self","opponent"]},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier","modifier"],"properties":{"effectId":{"type":"string"},"effectType":{"enum":["buff","damage","debuff","heal"]},"targetSide":{"enum":["self","opponent"]},"targetCreatureId":{"type":"string","format":"uuid"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"winner":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}}}}},"lastAction":{"anyOf":[{"type":"object","additionalProperties":false,"required":["side","action","effects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"enum":["self","opponent"]},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier","modifier"],"properties":{"effectId":{"type":"string"},"effectType":{"enum":["buff","damage","debuff","heal"]},"targetSide":{"enum":["self","opponent"]},"targetCreatureId":{"type":"string","format":"uuid"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"winner":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}},{"type":"null"}]},"outcome":{"anyOf":[{"enum":["win","loss"]},{"type":"null"}]},"completionReason":{"anyOf":[{"enum":["defeat","turn_forfeit","account_deletion_forfeit","voluntary_resignation"]},{"type":"null"}]},"startedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"canResign":{"type":"boolean","description":"Server-derived active-match capability returned to PvP contract version 2 clients."},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/pvp/{matchId}/resign":{"post":{"operationId":"resignPvpMatch","tags":["Matches"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","expectedVersion"],"properties":{"submissionId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":0}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"matchId","required":true},{"schema":{"type":"string"},"in":"header","name":"accept","required":false,"description":"Include application/vnd.wits-world.pvp.v5+json for voluntary Creature swaps and the current battle projection, application/vnd.wits-world.pvp.v4+json for participant-safe full battle history, application/vnd.wits-world.pvp.v3+json for invitation cancellation, or application/vnd.wits-world.pvp.v2+json for voluntary resignation only, without adding a non-safelisted CORS request header."}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matchId","mode","status","version","opponent","currentActor","turnDeadline","state","legalActions","lastAction","outcome","completionReason","startedAt","updatedAt","completedAt","requestId"],"properties":{"matchId":{"type":"string","format":"uuid"},"mode":{"enum":["asynchronous"]},"status":{"enum":["active","completed"]},"version":{"type":"integer","minimum":0},"opponent":{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},"currentActor":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"state":{"type":"object","additionalProperties":false,"required":["phase","turnNumber","self","opponent"],"properties":{"phase":{"enum":["active","replacement","completed"]},"turnNumber":{"type":"integer","minimum":1},"self":{"type":"object","additionalProperties":false,"required":["playerName","creatures","powerCards","usedPowerCardIds","activeCreatureId"],"properties":{"playerName":{"type":"string"},"creatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"powerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","effects","available"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"usedPowerCardIds":{"type":"array","items":{"type":"string","format":"uuid"}},"activeCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}},"opponent":{"type":"object","additionalProperties":false,"required":["playerName","activeCreature","defeatedCreatures","remainingCreatureCount","playedPowerCards","remainingPowerCardCount"],"properties":{"playerName":{"type":"string"},"activeCreature":{"anyOf":[{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}},{"type":"null"}]},"defeatedCreatures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","maxHp","maxPower","currentHp","remainingPower","defeated","moves","activeModifiers"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"rarity":{"enum":["common","rare","epic","legendary"]},"affinity":{"enum":["wit","grit","spark","spirit","mystic"]},"maxHp":{"type":"integer","minimum":1},"maxPower":{"type":"integer","minimum":0},"currentHp":{"type":"integer","minimum":0},"remainingPower":{"type":"integer","minimum":0},"defeated":{"type":"boolean"},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","moveType","powerCost","effects"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"moveType":{"enum":["basic","wit","grit","spark","spirit","mystic"]},"powerCost":{"type":"integer","minimum":0},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}}}}},"activeModifiers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["stat","operation","value","percentage","remainingTurns","remainingCharges"],"properties":{"stat":{"enum":["hp","power","damage_multiplier","incoming_damage_multiplier","poison","stun","dodge","reflect","lifesteal"]},"operation":{"enum":["add","multiply"]},"value":{"type":"number","minimum":0},"percentage":{"anyOf":[{"type":"integer"},{"type":"null"}]},"remainingTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"remainingCharges":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}}}}}},"remainingCreatureCount":{"type":"integer","minimum":0},"playedPowerCards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","affinity","effects","available"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["damageMultiplier","effectType","effectValue","modifier"],"properties":{"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"effectType":{"enum":["buff","damage","debuff","heal"]},"effectValue":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"available":{"type":"boolean"}}}},"remainingPowerCardCount":{"type":"integer","minimum":0}}}}},"legalActions":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]}},"history":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["sequence","turnNumber","createdAt","result"],"properties":{"sequence":{"type":"integer","minimum":1},"turnNumber":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"result":{"type":"object","additionalProperties":false,"required":["side","action","effects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"enum":["self","opponent"]},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier","modifier"],"properties":{"effectId":{"type":"string"},"effectType":{"enum":["buff","damage","debuff","heal"]},"targetSide":{"enum":["self","opponent"]},"targetCreatureId":{"type":"string","format":"uuid"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"winner":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}}}}},"lastAction":{"anyOf":[{"type":"object","additionalProperties":false,"required":["side","action","effects","defeatedCreatureId","winner","turnEnded"],"properties":{"side":{"enum":["self","opponent"]},"action":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["select_replacement"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","creatureId"],"properties":{"type":{"enum":["swap_creature"]},"creatureId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","moveId"],"properties":{"type":{"enum":["use_move"]},"moveId":{"type":"string","format":"uuid"}}},{"type":"object","additionalProperties":false,"required":["type","powerCardId"],"properties":{"type":{"enum":["use_power_card"]},"powerCardId":{"type":"string","format":"uuid"}}}]},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["effectId","effectType","targetSide","targetCreatureId","amount","damageMultiplier","modifier"],"properties":{"effectId":{"type":"string"},"effectType":{"enum":["buff","damage","debuff","heal"]},"targetSide":{"enum":["self","opponent"]},"targetCreatureId":{"type":"string","format":"uuid"},"amount":{"type":"number"},"damageMultiplier":{"anyOf":[{"type":"number"},{"type":"null"}]},"modifier":{"anyOf":[{"type":"object","additionalProperties":false,"required":["stat","operation"],"properties":{"stat":{"enum":["hp","power","damage_multiplier"]},"operation":{"enum":["add","multiply"]},"durationTurns":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]}}},{"type":"null"}]}}}},"defeatedCreatureId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"winner":{"anyOf":[{"enum":["self","opponent"]},{"type":"null"}]},"turnEnded":{"type":"boolean"}}},{"type":"null"}]},"outcome":{"anyOf":[{"enum":["win","loss"]},{"type":"null"}]},"completionReason":{"anyOf":[{"enum":["defeat","turn_forfeit","account_deletion_forfeit","voluntary_resignation"]},{"type":"null"}]},"startedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"canResign":{"type":"boolean","description":"Server-derived active-match capability returned to PvP contract version 2 clients."},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trades/recipient":{"get":{"operationId":"findCardTradeRecipient","summary":"Check one exact Player Name before building an offer","tags":["Trading"],"parameters":[{"schema":{"type":"string","minLength":3,"maxLength":20},"in":"query","name":"playerName","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["playerName","requestId"],"properties":{"playerName":{"type":"string"},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trades":{"post":{"operationId":"createCardTrade","summary":"Create a private bilateral card trade","tags":["Trading"],"description":"Creates a versioned private trade using the recipient Player Name. Ownership and eligibility remain server-authoritative.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","recipientPlayerName","offeredOwnedCardIds","requestedDefinitions"],"properties":{"submissionId":{"type":"string","format":"uuid"},"recipientPlayerName":{"type":"string","minLength":3,"maxLength":20},"offeredOwnedCardIds":{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"requestedDefinitions":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5}}}}}}}}},"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trade","requestId"],"properties":{"trade":{"type":"object","additionalProperties":false,"required":["tradeId","role","counterpartyPlayerName","status","version","createdAt","expiresAt","terminalAt","complete","imbalanceWarningRequired","self","counterparty","settlement"],"properties":{"tradeId":{"type":"string","format":"uuid"},"role":{"enum":["sender","recipient"]},"counterpartyPlayerName":{"type":"string"},"status":{"enum":["open","completed","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"terminalAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"complete":{"type":"boolean"},"imbalanceWarningRequired":{"type":"boolean"},"self":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"counterparty":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"settlement":{"anyOf":[{"type":"object","additionalProperties":false,"required":["completedAt"],"properties":{"completedAt":{"type":"string","format":"date-time"}}},{"type":"null"}]}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"get":{"operationId":"listCardTrades","summary":"List the current player card trades","tags":["Trading"],"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"in":"query","name":"pageSize","required":false},{"schema":{"enum":["sent","received"]},"in":"query","name":"direction","required":false},{"schema":{"enum":["open","completed","declined","cancelled","expired","invalidated"]},"in":"query","name":"status","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","page","pageSize","hasMore","requestId"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["tradeId","direction","status","version","counterpartyPlayerName","createdAt","expiresAt","terminalAt"],"properties":{"tradeId":{"type":"string","format":"uuid"},"direction":{"enum":["sent","received"]},"status":{"enum":["open","completed","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":1},"counterpartyPlayerName":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"terminalAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}},"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":50},"hasMore":{"type":"boolean"},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trades/selection-preview":{"post":{"operationId":"previewCardTradeSelection","summary":"Preview the current player card trade selection","tags":["Trading"],"description":"Returns non-reserving, server-computed eligibility for the current player own copies and proposed requested definitions.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["offeredOwnedCardIds","requestedDefinitions"],"properties":{"tradeId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":1},"offeredOwnedCardIds":{"type":"array","maxItems":5,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"requestedDefinitions":{"type":"array","maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5}}}}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["valid","issues","ownedCopies","requestedDefinitions","offeredRarityPoints","requestedRarityPoints","imbalanceWarningRequired","limits","requestId"],"properties":{"valid":{"type":"boolean"},"issues":{"type":"array","items":{"enum":["offer_required","request_required","copy_limit","request_limit","unavailable_copy","definition_unavailable","collection_minimum"]},"uniqueItems":true},"ownedCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt","availability"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"availability":{"enum":["available","selected_here","saved_deck","gameplay_commitment","other_trade","inactive_definition","collection_minimum"]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"offeredRarityPoints":{"type":"integer","minimum":0},"requestedRarityPoints":{"type":"integer","minimum":0},"imbalanceWarningRequired":{"type":"boolean"},"limits":{"type":"object","additionalProperties":false,"required":["maximumCopiesPerSide","minimumCreatureCopies","minimumPowerCopies"],"properties":{"maximumCopiesPerSide":{"type":"integer","minimum":1},"minimumCreatureCopies":{"type":"integer","minimum":0},"minimumPowerCopies":{"type":"integer","minimum":0}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trades/{tradeId}":{"get":{"operationId":"getCardTrade","summary":"View a private card trade","tags":["Trading"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"tradeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trade","requestId"],"properties":{"trade":{"type":"object","additionalProperties":false,"required":["tradeId","role","counterpartyPlayerName","status","version","createdAt","expiresAt","terminalAt","complete","imbalanceWarningRequired","self","counterparty","settlement"],"properties":{"tradeId":{"type":"string","format":"uuid"},"role":{"enum":["sender","recipient"]},"counterpartyPlayerName":{"type":"string"},"status":{"enum":["open","completed","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"terminalAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"complete":{"type":"boolean"},"imbalanceWarningRequired":{"type":"boolean"},"self":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"counterparty":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"settlement":{"anyOf":[{"type":"object","additionalProperties":false,"required":["completedAt"],"properties":{"completedAt":{"type":"string","format":"date-time"}}},{"type":"null"}]}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"put":{"operationId":"reviseCardTrade","summary":"Create a new immutable card trade version","tags":["Trading"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","expectedVersion","offeredOwnedCardIds","requestedDefinitions"],"properties":{"submissionId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":1},"offeredOwnedCardIds":{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string","format":"uuid"}},"requestedDefinitions":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5}}}}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"tradeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trade","requestId"],"properties":{"trade":{"type":"object","additionalProperties":false,"required":["tradeId","role","counterpartyPlayerName","status","version","createdAt","expiresAt","terminalAt","complete","imbalanceWarningRequired","self","counterparty","settlement"],"properties":{"tradeId":{"type":"string","format":"uuid"},"role":{"enum":["sender","recipient"]},"counterpartyPlayerName":{"type":"string"},"status":{"enum":["open","completed","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"terminalAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"complete":{"type":"boolean"},"imbalanceWarningRequired":{"type":"boolean"},"self":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"counterparty":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"settlement":{"anyOf":[{"type":"object","additionalProperties":false,"required":["completedAt"],"properties":{"completedAt":{"type":"string","format":"date-time"}}},{"type":"null"}]}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trades/{tradeId}/imbalance-acknowledgement":{"post":{"operationId":"acknowledgeCardTradeImbalance","summary":"Acknowledge the current trade version imbalance","tags":["Trading"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","expectedVersion"],"properties":{"submissionId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":1}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"tradeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trade","requestId"],"properties":{"trade":{"type":"object","additionalProperties":false,"required":["tradeId","role","counterpartyPlayerName","status","version","createdAt","expiresAt","terminalAt","complete","imbalanceWarningRequired","self","counterparty","settlement"],"properties":{"tradeId":{"type":"string","format":"uuid"},"role":{"enum":["sender","recipient"]},"counterpartyPlayerName":{"type":"string"},"status":{"enum":["open","completed","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"terminalAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"complete":{"type":"boolean"},"imbalanceWarningRequired":{"type":"boolean"},"self":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"counterparty":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"settlement":{"anyOf":[{"type":"object","additionalProperties":false,"required":["completedAt"],"properties":{"completedAt":{"type":"string","format":"date-time"}}},{"type":"null"}]}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trades/{tradeId}/accept":{"post":{"operationId":"acceptCardTrade","summary":"Accept the current trade version","tags":["Trading"],"description":"Requires fresh Auth0 reauthentication proof. Both participants must accept the same immutable version before settlement.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId","expectedVersion","reauthenticationToken"],"properties":{"submissionId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":1},"reauthenticationToken":{"type":"string","minLength":1,"maxLength":16384,"description":"Fresh Auth0 ID token used only as recent-authentication proof."}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"tradeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trade","requestId"],"properties":{"trade":{"type":"object","additionalProperties":false,"required":["tradeId","role","counterpartyPlayerName","status","version","createdAt","expiresAt","terminalAt","complete","imbalanceWarningRequired","self","counterparty","settlement"],"properties":{"tradeId":{"type":"string","format":"uuid"},"role":{"enum":["sender","recipient"]},"counterpartyPlayerName":{"type":"string"},"status":{"enum":["open","completed","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"terminalAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"complete":{"type":"boolean"},"imbalanceWarningRequired":{"type":"boolean"},"self":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"counterparty":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"settlement":{"anyOf":[{"type":"object","additionalProperties":false,"required":["completedAt"],"properties":{"completedAt":{"type":"string","format":"date-time"}}},{"type":"null"}]}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trades/{tradeId}/decline":{"post":{"operationId":"declineCardTrade","summary":"Decline an incoming card trade","tags":["Trading"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId"],"properties":{"submissionId":{"type":"string","format":"uuid"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"tradeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trade","requestId"],"properties":{"trade":{"type":"object","additionalProperties":false,"required":["tradeId","role","counterpartyPlayerName","status","version","createdAt","expiresAt","terminalAt","complete","imbalanceWarningRequired","self","counterparty","settlement"],"properties":{"tradeId":{"type":"string","format":"uuid"},"role":{"enum":["sender","recipient"]},"counterpartyPlayerName":{"type":"string"},"status":{"enum":["open","completed","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"terminalAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"complete":{"type":"boolean"},"imbalanceWarningRequired":{"type":"boolean"},"self":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"counterparty":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"settlement":{"anyOf":[{"type":"object","additionalProperties":false,"required":["completedAt"],"properties":{"completedAt":{"type":"string","format":"date-time"}}},{"type":"null"}]}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/trades/{tradeId}/cancel":{"post":{"operationId":"cancelCardTrade","summary":"Cancel an outgoing card trade","tags":["Trading"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissionId"],"properties":{"submissionId":{"type":"string","format":"uuid"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"tradeId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["trade","requestId"],"properties":{"trade":{"type":"object","additionalProperties":false,"required":["tradeId","role","counterpartyPlayerName","status","version","createdAt","expiresAt","terminalAt","complete","imbalanceWarningRequired","self","counterparty","settlement"],"properties":{"tradeId":{"type":"string","format":"uuid"},"role":{"enum":["sender","recipient"]},"counterpartyPlayerName":{"type":"string"},"status":{"enum":["open","completed","declined","cancelled","expired","invalidated"]},"version":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"terminalAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"complete":{"type":"boolean"},"imbalanceWarningRequired":{"type":"boolean"},"self":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"counterparty":{"type":"object","additionalProperties":false,"required":["offeredCopies","requestedDefinitions","rarityPoints","accepted","imbalanceAcknowledged"],"properties":{"offeredCopies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ownedCardId","cardDefinitionId","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"ownedCardId":{"type":"string","format":"uuid"},"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"requestedDefinitions":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","quantity","name","category","affinity","rarity","imageUrl","imageAlt"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"quantity":{"type":"integer","minimum":1,"maximum":5},"name":{"type":"string"},"category":{"enum":["creature","power"]},"affinity":{"anyOf":[{"enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"enum":["common","rare","epic","legendary"]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"rarityPoints":{"type":"integer","minimum":0},"accepted":{"type":"boolean"},"imbalanceAcknowledged":{"type":"boolean"}}},"settlement":{"anyOf":[{"type":"object","additionalProperties":false,"required":["completedAt"],"properties":{"completedAt":{"type":"string","format":"date-time"}}},{"type":"null"}]}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/live/{matchId}":{"get":{"operationId":"getLivePvpMatch","summary":"Read the latest live PvP projection","tags":["Matches"],"description":"Returns the authoritative participant or spectator-safe projection derived from the authenticated player. Include application/vnd.wits-world.live.v2+json in Accept to receive voluntary swap legal actions; otherwise the previous projection is returned.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"matchId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"required":["matchId","mode","role","status","version","phase","serverTime"],"properties":{"matchId":{"type":"string","format":"uuid"},"mode":{"enum":["live"]},"role":{"enum":["participant","spectator"]},"status":{"enum":["active","completed"]},"version":{"type":"integer","minimum":0},"phase":{"enum":["initial_selection","active","replacement","completed"]},"serverTime":{"type":"string","format":"date-time"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/matches/live/{matchId}/connection-tickets":{"post":{"operationId":"createLivePvpConnectionTicket","summary":"Mint a one-use live PvP connection ticket","tags":["Matches"],"description":"Returns a 60-second opaque ticket for the server-derived participant or spectator role. Bearer tokens are never used on the WebSocket URL.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["role"],"properties":{"role":{"enum":["participant","spectator"]}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"matchId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["ticket","role","protocolVersion","expiresAt","webSocketUrl","requestId"],"properties":{"ticket":{"type":"string","minLength":32,"maxLength":512},"role":{"enum":["participant","spectator"]},"protocolVersion":{"enum":[1]},"expiresAt":{"type":"string","format":"date-time"},"webSocketUrl":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"The rate-limit store is unavailable, so this protected operation cannot proceed. Retry later.","content":{"application/json":{"schema":{"description":"The rate-limit store is unavailable, so this protected operation cannot proceed. Retry later.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[503]},"code":{"type":"string","enum":["RATE_LIMIT_UNAVAILABLE"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/ranked/queue":{"post":{"operationId":"joinRankedQueue","summary":"Join the current ranked queue with an owned valid deck","tags":["Ranked"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["deckId"],"properties":{"deckId":{"type":"string","format":"uuid"},"territoryClaim":{"type":"object","additionalProperties":false,"required":["zoneId","latitude","longitude","accuracyMetres","acquiredAt"],"properties":{"zoneId":{"type":"string","format":"uuid"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"accuracyMetres":{"type":"number","minimum":0},"acquiredAt":{"type":"string","format":"date-time"}}}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["status","queueEntryId","seasonId","joinedAt","leaseExpiresAt","searchRange","proposalId","acceptanceDeadline","accepted","matchId"],"properties":{"status":{"enum":["idle","searching","proposed","matched","cancelled","expired","restricted","invalid_deck"]},"queueEntryId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"joinedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"leaseExpiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"searchRange":{"anyOf":[{"type":"integer","minimum":100,"maximum":400},{"type":"null"}]},"proposalId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptanceDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"accepted":{"type":"boolean"},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"get":{"operationId":"getRankedQueue","summary":"Read only your ranked queue state","tags":["Ranked"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["status","queueEntryId","seasonId","joinedAt","leaseExpiresAt","searchRange","proposalId","acceptanceDeadline","accepted","matchId"],"properties":{"status":{"enum":["idle","searching","proposed","matched","cancelled","expired","restricted","invalid_deck"]},"queueEntryId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"joinedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"leaseExpiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"searchRange":{"anyOf":[{"type":"integer","minimum":100,"maximum":400},{"type":"null"}]},"proposalId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptanceDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"accepted":{"type":"boolean"},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"delete":{"operationId":"cancelRankedQueue","summary":"Cancel searching or decline a pending proposal","tags":["Ranked"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["status","queueEntryId","seasonId","joinedAt","leaseExpiresAt","searchRange","proposalId","acceptanceDeadline","accepted","matchId"],"properties":{"status":{"enum":["idle","searching","proposed","matched","cancelled","expired","restricted","invalid_deck"]},"queueEntryId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"joinedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"leaseExpiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"searchRange":{"anyOf":[{"type":"integer","minimum":100,"maximum":400},{"type":"null"}]},"proposalId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptanceDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"accepted":{"type":"boolean"},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/ranked/queue/heartbeat":{"post":{"operationId":"heartbeatRankedQueue","summary":"Renew a live searching lease","tags":["Ranked"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["status","queueEntryId","seasonId","joinedAt","leaseExpiresAt","searchRange","proposalId","acceptanceDeadline","accepted","matchId"],"properties":{"status":{"enum":["idle","searching","proposed","matched","cancelled","expired","restricted","invalid_deck"]},"queueEntryId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"joinedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"leaseExpiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"searchRange":{"anyOf":[{"type":"integer","minimum":100,"maximum":400},{"type":"null"}]},"proposalId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptanceDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"accepted":{"type":"boolean"},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/ranked/proposals/{proposalId}/accept":{"post":{"operationId":"acceptRankedProposal","summary":"Accept your pending ranked proposal","tags":["Ranked"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"proposalId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["status","queueEntryId","seasonId","joinedAt","leaseExpiresAt","searchRange","proposalId","acceptanceDeadline","accepted","matchId"],"properties":{"status":{"enum":["idle","searching","proposed","matched","cancelled","expired","restricted","invalid_deck"]},"queueEntryId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"joinedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"leaseExpiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"searchRange":{"anyOf":[{"type":"integer","minimum":100,"maximum":400},{"type":"null"}]},"proposalId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptanceDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"accepted":{"type":"boolean"},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/ranked/proposals/{proposalId}/decline":{"post":{"operationId":"declineRankedProposal","summary":"Decline your pending ranked proposal","tags":["Ranked"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"proposalId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["status","queueEntryId","seasonId","joinedAt","leaseExpiresAt","searchRange","proposalId","acceptanceDeadline","accepted","matchId"],"properties":{"status":{"enum":["idle","searching","proposed","matched","cancelled","expired","restricted","invalid_deck"]},"queueEntryId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"joinedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"leaseExpiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"searchRange":{"anyOf":[{"type":"integer","minimum":100,"maximum":400},{"type":"null"}]},"proposalId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"acceptanceDeadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"accepted":{"type":"boolean"},"matchId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/ranked/me":{"get":{"operationId":"getRankedProfile","summary":"Read your own seasonal rating and placements","tags":["Ranked"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["season","rating","wins","losses","settledMatchCount","placementMatchesRemaining","provisional"],"properties":{"season":{"anyOf":[{"type":"object","additionalProperties":false,"required":["seasonId","name","status","policyVersion","activatedAt","activeEndsAt","closedAt"],"properties":{"seasonId":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"enum":["scheduled","active","closing","closed"]},"policyVersion":{"type":"string"},"activatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"activeEndsAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"closedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},{"type":"null"}]},"rating":{"anyOf":[{"type":"integer","minimum":100},{"type":"null"}]},"wins":{"type":"integer","minimum":0},"losses":{"type":"integer","minimum":0},"settledMatchCount":{"type":"integer","minimum":0},"placementMatchesRemaining":{"type":"integer","minimum":0,"maximum":5},"provisional":{"type":"boolean"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/ranked/matches/{matchId}/settlement":{"get":{"operationId":"getRankedSettlement","summary":"Read your own ranked match settlement","tags":["Ranked"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"matchId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matchId","seasonId","status","completionReason","outcome","ratingBefore","ratingAfter","appliedDelta","settledAt","territory"],"properties":{"matchId":{"type":"string","format":"uuid"},"seasonId":{"type":"string","format":"uuid"},"status":{"enum":["pending","settled"]},"completionReason":{"anyOf":[{"enum":["defeat","abandonment_forfeit","voluntary_resignation","account_deletion_forfeit"]},{"type":"null"}]},"outcome":{"anyOf":[{"enum":["win","loss"]},{"type":"null"}]},"ratingBefore":{"anyOf":[{"type":"integer"},{"type":"null"}]},"ratingAfter":{"anyOf":[{"type":"integer"},{"type":"null"}]},"appliedDelta":{"anyOf":[{"type":"integer"},{"type":"null"}]},"settledAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"territory":{"anyOf":[{"type":"object","additionalProperties":false,"required":["zoneId","zoneName","outcome","influencePoints","exclusionReason"],"properties":{"zoneId":{"type":"string","format":"uuid"},"zoneName":{"type":"string"},"outcome":{"enum":["pending","lost","accepted","excluded"]},"influencePoints":{"type":"integer","minimum":0},"exclusionReason":{"anyOf":[{"enum":["daily_cap_reached","placement_matches_remaining","player_unavailable","result_not_eligible","zone_unavailable"]},{"type":"null"}]}}},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/ranked/seasons/current":{"get":{"operationId":"getCurrentRankedSeason","summary":"Read the current ranked season","tags":["Ranked"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["season"],"properties":{"season":{"anyOf":[{"type":"object","additionalProperties":false,"required":["seasonId","name","status","policyVersion","activatedAt","activeEndsAt","closedAt"],"properties":{"seasonId":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"enum":["scheduled","active","closing","closed"]},"policyVersion":{"type":"string"},"activatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"activeEndsAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"closedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/ranked/standings":{"get":{"operationId":"listCurrentRankedStandings","summary":"Page through established current-season standings","tags":["Ranked"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":512},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"limit","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["season","entries","nextCursor"],"properties":{"season":{"type":"object","additionalProperties":false,"required":["seasonId","name","status","policyVersion","activatedAt","activeEndsAt","closedAt"],"properties":{"seasonId":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"enum":["scheduled","active","closing","closed"]},"policyVersion":{"type":"string"},"activatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"activeEndsAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"closedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},"entries":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["playerName","rank","rating","wins","losses","settledMatchCount"],"properties":{"playerName":{"type":"string"},"rank":{"type":"integer","minimum":1},"rating":{"type":"integer","minimum":100},"wins":{"type":"integer","minimum":0},"losses":{"type":"integer","minimum":0},"settledMatchCount":{"type":"integer","minimum":5}}}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/ranked/seasons/{seasonId}/standings":{"get":{"operationId":"listArchivedRankedStandings","summary":"Page through immutable closed-season results","tags":["Ranked"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":512},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"limit","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"seasonId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["season","entries","nextCursor"],"properties":{"season":{"type":"object","additionalProperties":false,"required":["seasonId","name","status","policyVersion","activatedAt","activeEndsAt","closedAt"],"properties":{"seasonId":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"enum":["scheduled","active","closing","closed"]},"policyVersion":{"type":"string"},"activatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"activeEndsAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"closedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},"entries":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["playerName","rank","rating","wins","losses","settledMatchCount"],"properties":{"playerName":{"type":"string"},"rank":{"type":"integer","minimum":1},"rating":{"type":"integer","minimum":100},"wins":{"type":"integer","minimum":0},"losses":{"type":"integer","minimum":0},"settledMatchCount":{"type":"integer","minimum":5}}}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/territory/zones":{"get":{"operationId":"listTerritoryZones","summary":"List reviewed contested-campus zones and current ownership","tags":["Territory"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["zones"],"properties":{"zones":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["zoneId","name","status","geometry","owner","seasonId","windowStart","windowEnd"],"properties":{"zoneId":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"enum":["active","suspended"]},"geometry":{"type":"object","additionalProperties":true},"owner":{"anyOf":[{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},{"type":"null"}]},"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"windowStart":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"windowEnd":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/territory/zones/{zoneId}":{"get":{"operationId":"getTerritoryZone","summary":"Read one territory zone and its public ownership state","tags":["Territory"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"zoneId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["zoneId","name","status","geometry","owner","seasonId","windowStart","windowEnd","lifecycleVersion","lastSettledAt"],"properties":{"zoneId":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"enum":["active","suspended"]},"geometry":{"type":"object","additionalProperties":true},"owner":{"anyOf":[{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},{"type":"null"}]},"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"windowStart":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"windowEnd":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lifecycleVersion":{"type":"integer","minimum":0},"lastSettledAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/territory/zones/{zoneId}/standings":{"get":{"operationId":"getTerritoryStandings","summary":"Read anonymous current influence standings for a territory","tags":["Territory"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"zoneId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["zoneId","seasonId","top","activity","viewer"],"properties":{"zoneId":{"type":"string","format":"uuid"},"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"top":{"type":"array","maxItems":3,"items":{"type":"object","additionalProperties":false,"required":["rank","influence"],"properties":{"rank":{"type":"integer","minimum":1,"maximum":3},"influence":{"type":"integer","minimum":1}}}},"activity":{"type":"object","additionalProperties":false,"required":["influence","contributors"],"properties":{"influence":{"type":"integer","minimum":0},"contributors":{"type":"integer","minimum":0}}},"viewer":{"type":"object","additionalProperties":false,"required":["influence","todayInfluence","dailyCap","remainingDailyInfluence"],"properties":{"influence":{"type":"integer","minimum":0},"todayInfluence":{"type":"integer","minimum":0},"dailyCap":{"type":"integer","minimum":1},"remainingDailyInfluence":{"type":"integer","minimum":0}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/territory/zones/{zoneId}/history":{"get":{"operationId":"getTerritoryHistory","summary":"Read recent public ownership history for a territory","tags":["Territory"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"zoneId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["zoneId","entries"],"properties":{"zoneId":{"type":"string","format":"uuid"},"entries":{"type":"array","maxItems":50,"items":{"type":"object","additionalProperties":false,"required":["seasonId","owner","transitionKind","effectiveAt"],"properties":{"seasonId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"owner":{"anyOf":[{"type":"object","additionalProperties":false,"required":["playerName"],"properties":{"playerName":{"type":"string"}}},{"type":"null"}]},"transitionKind":{"type":"string"},"effectiveAt":{"type":"string","format":"date-time"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/profiles/me":{"get":{"responses":{"200":{"description":"Default Response"}}},"put":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedVersion","bio","degree","studyYear","avatarDataUrl","statusEmoji","statusText","statusExpiry","isPublic","activityVisible","featuredOwnedCardIds"],"properties":{"expectedVersion":{"type":"integer","minimum":0,"maximum":2147483646},"bio":{"type":"string","maxLength":280},"degree":{"type":"string","maxLength":100},"studyYear":{"type":"string","maxLength":32},"avatarDataUrl":{"type":["string","null"],"maxLength":200000},"statusEmoji":{"type":"string","maxLength":16},"statusText":{"type":"string","maxLength":80},"statusExpiry":{"type":"string","enum":["keep","today","week","never"]},"isPublic":{"type":"boolean"},"activityVisible":{"type":"boolean"},"featuredOwnedCardIds":{"type":"array","maxItems":4,"uniqueItems":true,"items":{"type":"string","format":"uuid"}}}}}}},"responses":{"200":{"description":"Default Response"}}}},"/api/v1/profiles/players/{playerName}":{"get":{"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"playerName","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/progression/me":{"get":{"operationId":"getCurrentProgressionProfile","summary":"Get the current player progression profile","tags":["Progression"],"description":"Returns the authenticated player authoritative points, all-time rank, streaks, and achievement progress without gameplay history or identity-provider data.","parameters":[{"schema":"object","in":"query","name":"type"},{"schema":false,"in":"query","name":"additionalProperties"}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["playerName","points","rank","currentStreak","longestStreak","achievements","requestId"],"properties":{"playerName":{"type":"string"},"points":{"type":"integer","minimum":0},"rank":{"type":"integer","minimum":1},"currentStreak":{"type":"integer","minimum":0},"longestStreak":{"type":"integer","minimum":0},"achievements":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","title","description","earned","progress","target"],"properties":{"code":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"title":{"type":"string"},"description":{"type":"string"},"earned":{"type":"boolean"},"progress":{"type":"integer","minimum":0},"target":{"type":"integer","minimum":1}}}},"requestId":{"type":"string"}}},"example":{"playerName":"campus-explorer","points":75,"rank":4,"currentStreak":2,"longestStreak":3,"achievements":[{"code":"first_quiz","title":"First Quiz","description":"Complete your first event quiz.","earned":true,"progress":2,"target":1}],"requestId":"server-generated-request-id"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/progression/standings":{"get":{"operationId":"listProgressionStandings","summary":"List privacy-safe progression standings","tags":["Progression"],"description":"Returns one deterministic page of active-player all-time or Johannesburg-calendar-month standings and always includes the authenticated player rank outside that page.","parameters":[{"schema":{"type":"string","enum":["all_time","monthly"]},"in":"query","name":"period","required":false},{"schema":{"type":"string","pattern":"^(?!0000)\\d{4}-(0[1-9]|1[0-2])$"},"in":"query","name":"month","required":false},{"schema":{"type":"integer","minimum":1,"maximum":10000,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"in":"query","name":"pageSize","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["period","month","entries","currentPlayer","pagination","requestId"],"properties":{"period":{"type":"string","enum":["all_time","monthly"]},"month":{"anyOf":[{"type":"string","pattern":"^(?!0000)\\d{4}-(0[1-9]|1[0-2])$"},{"type":"null"}]},"entries":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["playerName","points","rank","currentStreak","longestStreak","isCurrentPlayer"],"properties":{"playerName":{"type":["null","string"]},"points":{"type":"integer","minimum":0},"rank":{"type":"integer","minimum":1},"currentStreak":{"type":"integer","minimum":0},"longestStreak":{"type":"integer","minimum":0},"isCurrentPlayer":{"type":"boolean"}}}},"currentPlayer":{"type":"object","additionalProperties":false,"required":["playerName","points","rank","currentStreak","longestStreak","isCurrentPlayer"],"properties":{"playerName":{"type":["null","string"]},"points":{"type":"integer","minimum":0},"rank":{"type":"integer","minimum":1},"currentStreak":{"type":"integer","minimum":0},"longestStreak":{"type":"integer","minimum":0},"isCurrentPlayer":{"type":"boolean"}}},"pagination":{"type":"object","additionalProperties":false,"required":["page","pageSize","totalPlayers","totalPages"],"properties":{"page":{"type":"integer","minimum":1,"maximum":10000},"pageSize":{"type":"integer","minimum":1,"maximum":100},"totalPlayers":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0}}},"requestId":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/developer/keys":{"get":{"operationId":"listDeveloperApiKeys","summary":"List developer API keys for the current account","tags":["Developer API"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["keys","activeKeyLimit","requestId"],"properties":{"keys":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","keyPrefix","createdAt","lastUsedAt","revokedAt","status"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":80},"keyPrefix":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"status":{"type":"string","enum":["active","revoked"]}}}},"activeKeyLimit":{"type":"integer","enum":[5]},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"post":{"operationId":"createDeveloperApiKey","summary":"Create a developer API key","tags":["Developer API"],"description":"Returns the complete developer credential exactly once. Store it securely because later responses expose metadata only.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":".*\\S.*"}}}}}},"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["key","apiKey","requestId"],"properties":{"key":{"type":"object","additionalProperties":false,"required":["id","name","keyPrefix","createdAt","lastUsedAt","revokedAt","status"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":80},"keyPrefix":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"status":{"type":"string","enum":["active","revoked"]}}},"apiKey":{"type":"string","pattern":"^ww_api_"},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"503":{"description":"The rate-limit store is unavailable, so this protected operation cannot proceed. Retry later.","content":{"application/json":{"schema":{"description":"The rate-limit store is unavailable, so this protected operation cannot proceed. Retry later.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[503]},"code":{"type":"string","enum":["RATE_LIMIT_UNAVAILABLE"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/developer/keys/{keyId}":{"delete":{"operationId":"revokeDeveloperApiKey","summary":"Revoke a developer API key","tags":["Developer API"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"keyId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["key","requestId"],"properties":{"key":{"type":"object","additionalProperties":false,"required":["id","name","keyPrefix","createdAt","lastUsedAt","revokedAt","status"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":80},"keyPrefix":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"status":{"type":"string","enum":["active","revoked"]}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The verified local player has exceeded a shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/developer/events":{"get":{"operationId":"listDeveloperEvents","summary":"List published Wits Quest events","tags":["Developer API"],"description":"Returns the deliberately public event projection. Challenge answers, placement internals and player activity are not exposed.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":10000,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"in":"query","name":"pageSize","required":false}],"security":[{"developerApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["events","pagination","requestId"],"properties":{"events":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["eventId","title","description","latitude","longitude","radiusMetres","startsAt","endsAt","availability"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"radiusMetres":{"type":"number","exclusiveMinimum":0},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"availability":{"type":"string","enum":["active","upcoming","ended"]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["page","pageSize","totalItems","totalPages"],"properties":{"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/developer/events/{eventId}":{"get":{"operationId":"getDeveloperEvent","summary":"Get one published Wits Quest event","tags":["Developer API"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"eventId","required":true}],"security":[{"developerApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event","requestId"],"properties":{"event":{"type":"object","additionalProperties":false,"required":["eventId","title","description","latitude","longitude","radiusMetres","startsAt","endsAt","availability"],"properties":{"eventId":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"radiusMetres":{"type":"number","exclusiveMinimum":0},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"availability":{"type":"string","enum":["active","upcoming","ended"]}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/developer/cards":{"get":{"operationId":"listDeveloperCards","summary":"List the public collectible-card catalogue","tags":["Developer API"],"security":[{"developerApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cards","requestId"],"properties":{"cards":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","imageAlt","deckPointCost","evolvesFromCardDefinitionId","evolutionCopiesRequired","moves","effects"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"deckPointCost":{"type":"integer","minimum":1,"maximum":4},"evolvesFromCardDefinitionId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"evolutionCopiesRequired":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","name","moveType","powerCost","rulesText"],"properties":{"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string"},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","rulesText"],"properties":{"position":{"type":"integer","minimum":1},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/developer/cards/{cardDefinitionId}":{"get":{"operationId":"getDeveloperCard","summary":"Get one public card definition","tags":["Developer API"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"cardDefinitionId","required":true}],"security":[{"developerApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["card","requestId"],"properties":{"card":{"type":"object","additionalProperties":false,"required":["cardDefinitionId","name","category","affinity","rarity","hp","power","description","imageUrl","imageAlt","deckPointCost","evolvesFromCardDefinitionId","evolutionCopiesRequired","moves","effects"],"properties":{"cardDefinitionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["creature","power"]},"affinity":{"anyOf":[{"type":"string","enum":["wit","grit","spark","spirit","mystic"]},{"type":"null"}]},"rarity":{"type":"string","enum":["common","rare","epic","legendary"]},"hp":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"power":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"imageAlt":{"anyOf":[{"type":"string"},{"type":"null"}]},"deckPointCost":{"type":"integer","minimum":1,"maximum":4},"evolvesFromCardDefinitionId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"evolutionCopiesRequired":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"moves":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","name","moveType","powerCost","rulesText"],"properties":{"position":{"type":"integer","minimum":1},"name":{"type":"string"},"moveType":{"type":"string"},"powerCost":{"type":"integer","minimum":0},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"effects":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["position","rulesText"],"properties":{"position":{"type":"integer","minimum":1},"rulesText":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}},"/api/v1/developer/leaderboard":{"get":{"operationId":"listDeveloperLeaderboard","summary":"List the public progression leaderboard","tags":["Developer API"],"description":"Returns public Player Names, points and ranks only. Private progression, account, moderation and trust data are not exposed.","parameters":[{"schema":{"type":"string","enum":["all_time","monthly"]},"in":"query","name":"period","required":false},{"schema":{"type":"string","pattern":"^(?!0000)\\d{4}-(0[1-9]|1[0-2])$"},"in":"query","name":"month","required":false},{"schema":{"type":"integer","minimum":1,"maximum":10000,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"in":"query","name":"pageSize","required":false}],"security":[{"developerApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["period","month","entries","pagination","requestId"],"properties":{"period":{"type":"string","enum":["all_time","monthly"]},"month":{"anyOf":[{"type":"string","pattern":"^(?!0000)\\d{4}-(0[1-9]|1[0-2])$"},{"type":"null"}]},"entries":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["playerName","points","rank"],"properties":{"playerName":{"type":"string","minLength":1},"points":{"type":"integer","minimum":0},"rank":{"type":"integer","minimum":1}}}},"pagination":{"type":"object","additionalProperties":false,"required":["page","pageSize","totalItems","totalPages"],"properties":{"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0}}},"requestId":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}},"429":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Whole seconds until the request may be retried."},"RateLimit-Limit":{"schema":{"type":"integer","minimum":1},"description":"Maximum requests allowed in the sliding window."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in the current window."}},"content":{"application/json":{"schema":{"description":"The authenticated developer API key has exceeded its shared sliding-window request limit. Retry after the advertised delay.","type":"object","additionalProperties":false,"required":["type","title","status","code","detail","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","enum":[429]},"code":{"type":"string","enum":["RATE_LIMITED"]},"detail":{"type":"string"},"requestId":{"type":"string"}}}}}}}}}},"tags":[{"name":"System","description":"API health and version information."},{"name":"Authentication","description":"Authenticated API identity operations."},{"name":"Developer API","description":"API-key management and the external read-only Wits Quest developer API."},{"name":"Events","description":"Player-safe event discovery and location eligibility."},{"name":"Challenges","description":"Timed event challenge attempts and player quiz state."},{"name":"Cards","description":"Player card catalogue and starter selection."},{"name":"Decks","description":"Player saved decks and active deck selection."},{"name":"Trails","description":"Ordered campus trails and player progress guidance."},{"name":"Authoring","description":"Protected Author-only Basic content management."},{"name":"Trust review","description":"Protected Author-only review of privacy-limited trust cases and human decisions."},{"name":"Matches","description":"Server-authoritative CPU matches and private history."},{"name":"Trading","description":"Private, versioned, server-authoritative bilateral card trades."},{"name":"Ranked","description":"Server-owned ranked live queue, rating, and seasons."},{"name":"Territory","description":"Privacy-safe contested-campus zones, influence, and ownership history."},{"name":"Progression","description":"Authenticated player progression and privacy-safe standings."},{"name":"Trust review","description":"Protected Author-only suspect-player review, proportionate decisions, and immutable audit history."}]}