{"openapi":"3.1.0","info":{"title":"Pimpgame API","version":"0.1.0"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"paths":{"/health":{"get":{"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["status"],"properties":{"status":{"type":"string","const":"ok"}}}}}}}}},"/metrics":{"get":{"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/v1/auth/sbox":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["ticket"],"properties":{"ticket":{"type":"string","minLength":1},"sboxUserId":{"type":"string","minLength":1},"steamId":{"type":"string","minLength":1},"displayName":{"type":"string","minLength":1}},"additionalProperties":false}}}},"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["accessToken","tokenType","expiresInSeconds","user","activeRound","player"],"properties":{"accessToken":{"type":"string"},"tokenType":{"type":"string","const":"Bearer"},"expiresInSeconds":{"type":"number"},"user":{"type":"object","required":["id","sboxUserId","steamId","displayName"],"properties":{"id":{"type":"string"},"sboxUserId":{"type":"string"},"steamId":{"type":"string"},"displayName":{"type":"string"}}},"activeRound":{"type":"object","required":["id","status","rulesetId"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"rulesetId":{"type":"string"}}},"player":{"type":"object","required":["id","displayName","city","turns","cash","payout","netWorth","workerHappiness","thugHappiness"],"properties":{"id":{"type":"string"},"displayName":{"type":"string"},"city":{"type":"string"},"turns":{"type":"number"},"cash":{"type":"number"},"payout":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100}}}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/auth/playtest":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["inviteCode","displayName","clientId"],"properties":{"inviteCode":{"type":"string","minLength":3,"maxLength":32},"displayName":{"type":"string","minLength":1,"maxLength":40},"clientId":{"type":"string","minLength":8,"maxLength":80}},"additionalProperties":false}}}},"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["accessToken","tokenType","expiresInSeconds","user","activeRound","player"],"properties":{"accessToken":{"type":"string"},"tokenType":{"type":"string","const":"Bearer"},"expiresInSeconds":{"type":"number"},"user":{"type":"object","required":["id","sboxUserId","steamId","displayName"],"properties":{"id":{"type":"string"},"sboxUserId":{"type":"string"},"steamId":{"type":"string"},"displayName":{"type":"string"}}},"activeRound":{"type":"object","required":["id","status","rulesetId"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"rulesetId":{"type":"string"}}},"player":{"type":"object","required":["id","displayName","city","turns","cash","payout","netWorth","workerHappiness","thugHappiness"],"properties":{"id":{"type":"string"},"displayName":{"type":"string"},"city":{"type":"string"},"turns":{"type":"number"},"cash":{"type":"number"},"payout":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100}}}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/admin/invite-codes":{"get":{"parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["inviteCodes"],"properties":{"inviteCodes":{"type":"array","items":{"type":"object","required":["code","note","maxUses","uses","disabledAt","createdAt","updatedAt"],"properties":{"code":{"type":"string"},"note":{"type":["null","string"]},"maxUses":{"type":["null","number"]},"uses":{"type":"number"},"disabledAt":{"type":["null","string"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}}}}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"post":{"parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","minLength":3,"maxLength":32},"note":{"type":"string","maxLength":120},"maxUses":{"type":["integer","null"],"minimum":1}},"additionalProperties":false}}}},"responses":{"201":{"description":"HTTP 201","content":{"application/json":{"schema":{"type":"object","required":["inviteCode"],"properties":{"inviteCode":{"type":"object","required":["code","note","maxUses","uses","disabledAt","createdAt","updatedAt"],"properties":{"code":{"type":"string"},"note":{"type":["null","string"]},"maxUses":{"type":["null","number"]},"uses":{"type":"number"},"disabledAt":{"type":["null","string"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/admin/invite-codes/{code}/disable":{"post":{"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":32}},{"name":"x-admin-token","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["inviteCode"],"properties":{"inviteCode":{"type":"object","required":["code","note","maxUses","uses","disabledAt","createdAt","updatedAt"],"properties":{"code":{"type":"string"},"note":{"type":["null","string"]},"maxUses":{"type":["null","number"]},"uses":{"type":"number"},"disabledAt":{"type":["null","string"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/admin/bot-fleets":{"post":{"parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["roundId","name","archetypes"],"properties":{"roundId":{"type":"string","minLength":3,"maxLength":120},"name":{"type":"string","pattern":"^[a-z0-9][a-z0-9.-]{2,63}$"},"archetypes":{"type":"object","properties":{"builder":{"type":"integer","minimum":0},"farmer":{"type":"integer","minimum":0},"raider":{"type":"integer","minimum":0},"victim":{"type":"integer","minimum":0},"chaotic":{"type":"integer","minimum":0}},"additionalProperties":false},"policyVersion":{"type":"string","minLength":1,"maxLength":80},"targetingRules":{"type":"object","properties":{"allowBotVsBot":{"type":"boolean"},"allowBotVsHuman":{"type":"boolean"},"allowHumanVsBot":{"type":"boolean"}},"additionalProperties":false},"maxActiveProfiles":{"type":"integer","minimum":1},"actionRateLimitPerMinute":{"type":"integer","minimum":1,"maximum":10000}},"additionalProperties":false}}}},"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["created","fleet","profiles"],"properties":{"created":{"type":"boolean"},"fleet":{"type":"object","required":["id","roundId","name","status","policyVersion","requestedProfileCount","maxActiveProfiles","actionRateLimitPerMinute","config","targetingRules","createdAt","updatedAt"],"properties":{"id":{"type":"string"},"roundId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"policyVersion":{"type":"string"},"requestedProfileCount":{"type":"number"},"maxActiveProfiles":{"type":"number"},"actionRateLimitPerMinute":{"type":"number"},"config":{"type":"object","additionalProperties":true},"targetingRules":{"type":"object","additionalProperties":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}}},"profiles":{"type":"array","items":{"type":"object","required":["id","fleetId","roundId","userId","playerId","profileIndex","archetype","displayName","seed","status","nextActionAt"],"properties":{"id":{"type":"string"},"fleetId":{"type":"string"},"roundId":{"type":"string"},"userId":{"type":"string"},"playerId":{"type":"string"},"profileIndex":{"type":"number"},"archetype":{"type":"string"},"displayName":{"type":"string"},"seed":{"type":"string"},"status":{"type":"string"},"nextActionAt":{"type":"string"}}}}}}}}},"201":{"description":"HTTP 201","content":{"application/json":{"schema":{"type":"object","required":["created","fleet","profiles"],"properties":{"created":{"type":"boolean"},"fleet":{"type":"object","required":["id","roundId","name","status","policyVersion","requestedProfileCount","maxActiveProfiles","actionRateLimitPerMinute","config","targetingRules","createdAt","updatedAt"],"properties":{"id":{"type":"string"},"roundId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"policyVersion":{"type":"string"},"requestedProfileCount":{"type":"number"},"maxActiveProfiles":{"type":"number"},"actionRateLimitPerMinute":{"type":"number"},"config":{"type":"object","additionalProperties":true},"targetingRules":{"type":"object","additionalProperties":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}}},"profiles":{"type":"array","items":{"type":"object","required":["id","fleetId","roundId","userId","playerId","profileIndex","archetype","displayName","seed","status","nextActionAt"],"properties":{"id":{"type":"string"},"fleetId":{"type":"string"},"roundId":{"type":"string"},"userId":{"type":"string"},"playerId":{"type":"string"},"profileIndex":{"type":"number"},"archetype":{"type":"string"},"displayName":{"type":"string"},"seed":{"type":"string"},"status":{"type":"string"},"nextActionAt":{"type":"string"}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/me/bootstrap":{"get":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["round","player"],"properties":{"round":{"type":"object","required":["id","status","rulesetId","turnGeneration"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"rulesetId":{"type":"string"},"turnGeneration":{"type":"object","required":["intervalSeconds","turnsPerInterval","currentEntitlement","elapsedIntervals","nextIntervalAt"],"properties":{"intervalSeconds":{"type":"number"},"turnsPerInterval":{"type":"number"},"currentEntitlement":{"type":"number"},"elapsedIntervals":{"type":"number"},"nextIntervalAt":{"type":"string"}}}}},"player":{"type":"object","required":["id","displayName","city","turns","cash","payout","netWorth","workerHappiness","thugHappiness","unitStacks","rareUnits","itemStacks","workSession","scoutingOptions"],"properties":{"id":{"type":"string"},"displayName":{"type":"string"},"city":{"type":"string"},"turns":{"type":"number"},"cash":{"type":"number"},"payout":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100},"unitStacks":{"type":"array","items":{"type":"object","required":["unitStackId","unitType","tier","quantity","quantityWorking","quantityAvailable"],"properties":{"unitStackId":{"type":"string"},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"quantityWorking":{"type":"number"},"quantityAvailable":{"type":"number"}}}},"rareUnits":{"type":"array","items":{"type":"object","required":["id","category","rarityBand","displayName","traits","creationSource"],"properties":{"id":{"type":"string"},"category":{"type":"string"},"rarityBand":{"type":"string"},"displayName":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}},"creationSource":{"type":"string"}}}},"itemStacks":{"type":"array","items":{"type":"object","required":["itemType","quantity"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"}}}},"scoutingOptions":{"type":"array","items":{"type":"object","required":["id","name","minTurns","maxTurns"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"minTurns":{"type":"number"},"maxTurns":{"type":"number"}}}},"workSession":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/dev/rounds/{roundId}/players":{"get":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["players"],"properties":{"players":{"type":"array","items":{"type":"object","required":["playerId","userId","displayName","userDisplayName","sboxUserId","steamId","turns","cash","netWorth","workerHappiness","thugHappiness","workerCount","workingWorkerCount","thugCount"],"properties":{"playerId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"userDisplayName":{"type":"string"},"sboxUserId":{"type":"string"},"steamId":{"type":"string"},"turns":{"type":"number"},"cash":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100},"workerCount":{"type":"number"},"workingWorkerCount":{"type":"number"},"thugCount":{"type":"number"},"latestWorkSessionStatus":{"type":["null","string"]}}}}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/work-sessions/current":{"get":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["status","sessionId","selectedSlots","pendingTurns","settledTurns","capProgress"],"properties":{"status":{"type":"string"},"sessionId":{"type":["null","string"]},"selectedSlots":{"type":"array","items":{"type":"object","required":["slotIndex","source","unitStackId","rareUnitId","unitType","tier","quantity","turnRate"],"properties":{"slotIndex":{"type":"number"},"source":{"oneOf":[{"type":"object","required":["kind","unitStackId"],"properties":{"kind":{"type":"string","const":"unit_stack"},"unitStackId":{"type":"string"}}},{"type":"object","required":["kind","rareUnitId"],"properties":{"kind":{"type":"string","const":"rare_unit"},"rareUnitId":{"type":"string"}}},{"type":"null"}]},"unitStackId":{"type":["null","string"]},"rareUnitId":{"type":["null","string"]},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"turnRate":{"type":"number"}}}},"pendingTurns":{"type":"number"},"settledTurns":{"type":"number"},"turnProgress":{"type":"object","required":["turnRate","generatedTurns","claimableTurns","nextTurnProgress"],"properties":{"turnRate":{"type":"number"},"generatedTurns":{"type":"number"},"claimableTurns":{"type":"number"},"nextTurnProgress":{"type":"number"}}},"presence":{"type":"object","required":["status","lastValidChallengeAt","graceEndsAt","accrualBoundary"],"properties":{"status":{"type":"string"},"lastValidChallengeAt":{"type":["null","string"]},"graceEndsAt":{"type":["null","string"]},"accrualBoundary":{"type":["null","string"]}}},"capProgress":{"type":"object","required":["dailyTurnCap","earnedToday","remainingTurns","capped"],"properties":{"dailyTurnCap":{"type":"number"},"earnedToday":{"type":"number"},"remainingTurns":{"type":"number"},"capped":{"type":"boolean"}}}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/attack-targets":{"get":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","examples":[{"targets":[{"playerId":"player.target","displayName":"Target Player","netWorth":12345,"workerCount":5,"thugCount":1}]}],"required":["targets"],"properties":{"targets":{"type":"array","items":{"type":"object","required":["playerId","displayName","netWorth","workerCount","thugCount"],"properties":{"playerId":{"type":"string"},"displayName":{"type":"string"},"netWorth":{"type":"number"},"workerCount":{"type":"number"},"thugCount":{"type":"number"}}}}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/shops":{"get":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","examples":[{"round":{"id":"round.local.active"},"ruleset":{"id":"ruleset.v1"},"payout":{"min":0,"max":100,"step":1},"crackProduction":{"turnCost":10,"thugInput":{"unitType":"thug","tier":1,"quantity":1},"output":{"itemType":"crack","quantityPerThug":{"min":1,"max":3}}},"buyOffers":[{"id":"buy-ak47","stack":{"kind":"item","itemType":"ak47"},"unitPrice":5500,"minQuantity":1}],"saleOffers":[{"id":"sell-crack","stack":{"kind":"item","itemType":"crack"},"unitPrice":3,"minQuantity":1}]}],"required":["round","ruleset","payout","crackProduction","buyOffers","saleOffers"],"properties":{"round":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"ruleset":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"payout":{"type":"object","required":["min","max","step"],"properties":{"min":{"type":"number"},"max":{"type":"number"},"step":{"type":"number"}}},"crackProduction":{"type":"object","required":["turnCost","thugInput","output"],"properties":{"turnCost":{"type":"number"},"thugInput":{"type":"object","required":["unitType","tier","quantity"],"properties":{"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"}}},"output":{"type":"object","required":["itemType","quantityPerThug"],"properties":{"itemType":{"type":"string"},"quantityPerThug":{"type":"object","required":["min","max"],"properties":{"min":{"type":"number"},"max":{"type":"number"}}},"maxQuantity":{"type":"number"}}}}},"buyOffers":{"type":"array","items":{"type":"object","required":["id","stack","unitPrice","minQuantity"],"properties":{"id":{"type":"string"},"stack":{"oneOf":[{"type":"object","required":["kind","itemType"],"properties":{"kind":{"type":"string","const":"item"},"itemType":{"type":"string"}}},{"type":"object","required":["kind","unitType","tier"],"properties":{"kind":{"type":"string","const":"unit"},"unitType":{"type":"string"},"tier":{"type":"number"}}}]},"unitPrice":{"type":"number"},"minQuantity":{"type":"number"}}}},"saleOffers":{"type":"array","items":{"type":"object","required":["id","stack","unitPrice","minQuantity"],"properties":{"id":{"type":"string"},"stack":{"oneOf":[{"type":"object","required":["kind","itemType"],"properties":{"kind":{"type":"string","const":"item"},"itemType":{"type":"string"}}},{"type":"object","required":["kind","unitType","tier"],"properties":{"kind":{"type":"string","const":"unit"},"unitType":{"type":"string"},"tier":{"type":"number"}}}]},"unitPrice":{"type":"number"},"minQuantity":{"type":"number"}}}}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/economy/buy":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","examples":[{"offerId":"buy-pistol","quantity":2}],"required":["offerId","quantity"],"properties":{"offerId":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":1}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["offerId","quantity","unitPrice","cashSpent","stack"],"properties":{"offerId":{"type":"string"},"quantity":{"type":"number"},"unitPrice":{"type":"number"},"cashSpent":{"type":"number"},"stack":{"anyOf":[{"type":"object","required":["kind","itemType"],"properties":{"kind":{"type":"string","const":"item"},"itemType":{"type":"string"}}},{"type":"object","required":["kind","unitType","tier"],"properties":{"kind":{"type":"string","const":"unit"},"unitType":{"type":"string"},"tier":{"type":"number"}}}]}}},"player":{"type":"object","required":["turns","cash","netWorth","workerHappiness","thugHappiness","itemStacks","unitStacks"],"properties":{"turns":{"type":"number"},"cash":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100},"itemStacks":{"type":"array","items":{"type":"object","required":["itemType","quantity"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"}}}},"unitStacks":{"type":"array","items":{"type":"object","required":["unitType","tier","quantity"],"properties":{"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/economy/sell":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","examples":[{"offerId":"sell-pistol","quantity":2}],"required":["offerId","quantity"],"properties":{"offerId":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":1}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["offerId","quantity","unitPrice","cashReturned","stack"],"properties":{"offerId":{"type":"string"},"quantity":{"type":"number"},"unitPrice":{"type":"number"},"cashReturned":{"type":"number"},"stack":{"anyOf":[{"type":"object","required":["kind","itemType"],"properties":{"kind":{"type":"string","const":"item"},"itemType":{"type":"string"}}},{"type":"object","required":["kind","unitType","tier"],"properties":{"kind":{"type":"string","const":"unit"},"unitType":{"type":"string"},"tier":{"type":"number"}}}]}}},"player":{"type":"object","required":["turns","cash","netWorth","workerHappiness","thugHappiness","itemStacks","unitStacks"],"properties":{"turns":{"type":"number"},"cash":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100},"itemStacks":{"type":"array","items":{"type":"object","required":["itemType","quantity"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"}}}},"unitStacks":{"type":"array","items":{"type":"object","required":["unitType","tier","quantity"],"properties":{"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/economy/payout":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","examples":[{"payout":25}],"required":["payout"],"properties":{"payout":{"type":"number"}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["previousPayout","currentPayout"],"properties":{"previousPayout":{"type":"number"},"currentPayout":{"type":"number"}}},"player":{"type":"object","required":["turns","cash","payout","netWorth","itemStacks","unitStacks"],"properties":{"turns":{"type":"number"},"cash":{"type":"number"},"payout":{"type":"number"},"netWorth":{"type":"number"},"itemStacks":{"type":"array","items":{"type":"object","required":["itemType","quantity"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"}}}},"unitStacks":{"type":"array","items":{"type":"object","required":["unitType","tier","quantity"],"properties":{"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/economy/produce-crack":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","examples":[{"turns":10}],"required":["turns"],"properties":{"turns":{"type":"integer","minimum":1}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["turnsSpent","cycles","thugQuantity","eligibleThugGroups","itemType","quantityProduced","turnSpendEffects"],"properties":{"turnsSpent":{"type":"number"},"cycles":{"type":"number"},"thugQuantity":{"type":"number"},"eligibleThugGroups":{"type":"number"},"itemType":{"type":"string"},"quantityProduced":{"type":"number"},"turnSpendEffects":{"type":"object","required":["turnsSpent","workerIncome","upkeep"],"properties":{"turnsSpent":{"type":"number"},"workerIncome":{"type":"object","required":["cashGenerated","workerMoneyContribution","rolls"],"properties":{"cashGenerated":{"type":"number"},"workerMoneyContribution":{"type":"number"},"rolls":{"type":"array","items":{"type":"number"}}}},"upkeep":{"type":"object","required":["supplies","crack","beer"],"properties":{"supplies":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"crack":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"beer":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}}}}}}}},"player":{"type":"object","required":["turns","cash","netWorth","workerHappiness","thugHappiness","itemStacks","unitStacks"],"properties":{"turns":{"type":"number"},"cash":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100},"itemStacks":{"type":"array","items":{"type":"object","required":["itemType","quantity"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"}}}},"unitStacks":{"type":"array","items":{"type":"object","required":["unitType","tier","quantity"],"properties":{"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/attack-reports/incoming":{"get":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","examples":[{"reports":[{"id":"attack_report.example","attackType":"home_invasion","direction":"incoming","attacker":{"playerId":"player.attacker","displayName":"Attacker"},"victim":{"playerId":"player.victim","displayName":"Victim"},"outcome":"success","majorDeltas":{"turnsSpent":10,"cashStolen":5000,"attackerThugsLost":0,"victimThugsLost":6},"thugLosses":{"attacker":{"basicThugs":0,"proThugs":0,"ogThugs":[]},"victim":{"basicThugs":6,"proThugs":0,"ogThugs":[]}},"combatContributions":{"attacker":{"basicThugs":20,"proThugs":0,"ogThugs":0,"combatStrength":20,"casualtyEffectiveness":20},"victim":{"basicThugs":10,"proThugs":0,"ogThugs":0,"combatStrength":10,"casualtyEffectiveness":10}},"combatants":{"attacker":{"thugs":{"basic":20,"pro":0,"og":0,"total":20},"weapons":{"equippedCount":20,"totalWeaponCount":20,"strength":5,"equippedWeapons":[{"itemType":"pistol","quantity":20,"strength":0.25,"totalStrength":5}]},"combatStrength":25,"casualtyEffectiveness":20},"victim":{"thugs":{"basic":10,"pro":0,"og":0,"total":10},"weapons":{"equippedCount":10,"totalWeaponCount":10,"strength":55,"equippedWeapons":[{"itemType":"ak47","quantity":10,"strength":5.5,"totalStrength":55}]},"combatStrength":65,"casualtyEffectiveness":10}},"workerThefts":[],"workerLosses":[],"thugThefts":[],"victimWorkerHappiness":null,"workerStealVulnerability":null,"consumedPrerequisites":{},"reconciledWorkSlots":0,"ruleset":{"id":"ruleset.v1"},"createdAt":"2026-05-03T10:05:00.000Z"}]}],"required":["reports"],"properties":{"reports":{"type":"array","items":{"type":"object","required":["id","attackType","direction","attacker","victim","outcome","majorDeltas","thugLosses","combatContributions","combatants","workerThefts","workerLosses","thugThefts","victimWorkerHappiness","workerStealVulnerability","consumedPrerequisites","reconciledWorkSlots","ruleset","createdAt"],"properties":{"id":{"type":"string"},"attackType":{"type":"string"},"direction":{"type":"string"},"attacker":{"type":"object","required":["playerId","displayName"],"properties":{"playerId":{"type":"string"},"displayName":{"type":"string"}}},"victim":{"type":"object","required":["playerId","displayName"],"properties":{"playerId":{"type":"string"},"displayName":{"type":"string"}}},"outcome":{"type":"string"},"majorDeltas":{"type":"object","required":["turnsSpent","cashStolen","attackerThugsLost","victimThugsLost"],"properties":{"turnsSpent":{"type":"number"},"cashStolen":{"type":"number"},"attackerThugsLost":{"type":"number"},"victimThugsLost":{"type":"number"}}},"thugLosses":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["basicThugs","proThugs","ogThugs"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"array","items":{"type":"object","required":["id","displayName","rarityBand","traits"],"properties":{"id":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}}}},"victim":{"type":"object","required":["basicThugs","proThugs","ogThugs"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"array","items":{"type":"object","required":["id","displayName","rarityBand","traits"],"properties":{"id":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}}}}}},"combatContributions":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["basicThugs","proThugs","ogThugs","combatStrength","casualtyEffectiveness"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"number"},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}},"victim":{"type":"object","required":["basicThugs","proThugs","ogThugs","combatStrength","casualtyEffectiveness"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"number"},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}}}},"combatants":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}},"victim":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}}}},"workerThefts":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","unitStackId","unitType","tier","quantity"],"properties":{"kind":{"type":"string","const":"aggregate_worker"},"unitStackId":{"type":"string"},"unitType":{"type":"string","enum":["normal_worker","pro_worker"]},"tier":{"type":"number"},"quantity":{"type":"number"}}},{"type":"object","required":["kind","rareUnitId","displayName","rarityBand","traits"],"properties":{"kind":{"type":"string","const":"high_tier_worker"},"rareUnitId":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}]}},"workerLosses":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","unitStackId","unitType","tier","quantity"],"properties":{"kind":{"type":"string","const":"aggregate_worker"},"unitStackId":{"type":"string"},"unitType":{"type":"string","enum":["normal_worker","pro_worker"]},"tier":{"type":"number"},"quantity":{"type":"number"}}},{"type":"object","required":["kind","rareUnitId","displayName","rarityBand","traits"],"properties":{"kind":{"type":"string","const":"high_tier_worker"},"rareUnitId":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}]}},"thugThefts":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","unitStackId","unitType","tier","quantity"],"properties":{"kind":{"type":"string","const":"aggregate_thug"},"unitStackId":{"type":"string"},"unitType":{"type":"string","enum":["thug","pro_thug"]},"tier":{"type":"number"},"quantity":{"type":"number"}}},{"type":"object","required":["kind","rareUnitId","displayName","rarityBand","traits"],"properties":{"kind":{"type":"string","const":"og_thug"},"rareUnitId":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}]}},"victimWorkerHappiness":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"workerStealVulnerability":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"consumedPrerequisites":{"type":"object","additionalProperties":{"type":"number"}},"reconciledWorkSlots":{"type":"number"},"ruleset":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"createdAt":{"type":"string"}}}}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/attack-reports/outgoing":{"get":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","examples":[{"reports":[{"id":"attack_report.example","attackType":"home_invasion","direction":"incoming","attacker":{"playerId":"player.attacker","displayName":"Attacker"},"victim":{"playerId":"player.victim","displayName":"Victim"},"outcome":"success","majorDeltas":{"turnsSpent":10,"cashStolen":5000,"attackerThugsLost":0,"victimThugsLost":6},"thugLosses":{"attacker":{"basicThugs":0,"proThugs":0,"ogThugs":[]},"victim":{"basicThugs":6,"proThugs":0,"ogThugs":[]}},"combatContributions":{"attacker":{"basicThugs":20,"proThugs":0,"ogThugs":0,"combatStrength":20,"casualtyEffectiveness":20},"victim":{"basicThugs":10,"proThugs":0,"ogThugs":0,"combatStrength":10,"casualtyEffectiveness":10}},"combatants":{"attacker":{"thugs":{"basic":20,"pro":0,"og":0,"total":20},"weapons":{"equippedCount":20,"totalWeaponCount":20,"strength":5,"equippedWeapons":[{"itemType":"pistol","quantity":20,"strength":0.25,"totalStrength":5}]},"combatStrength":25,"casualtyEffectiveness":20},"victim":{"thugs":{"basic":10,"pro":0,"og":0,"total":10},"weapons":{"equippedCount":10,"totalWeaponCount":10,"strength":55,"equippedWeapons":[{"itemType":"ak47","quantity":10,"strength":5.5,"totalStrength":55}]},"combatStrength":65,"casualtyEffectiveness":10}},"workerThefts":[],"workerLosses":[],"thugThefts":[],"victimWorkerHappiness":null,"workerStealVulnerability":null,"consumedPrerequisites":{},"reconciledWorkSlots":0,"ruleset":{"id":"ruleset.v1"},"createdAt":"2026-05-03T10:05:00.000Z"}]}],"required":["reports"],"properties":{"reports":{"type":"array","items":{"type":"object","required":["id","attackType","direction","attacker","victim","outcome","majorDeltas","thugLosses","combatContributions","combatants","workerThefts","workerLosses","thugThefts","victimWorkerHappiness","workerStealVulnerability","consumedPrerequisites","reconciledWorkSlots","ruleset","createdAt"],"properties":{"id":{"type":"string"},"attackType":{"type":"string"},"direction":{"type":"string"},"attacker":{"type":"object","required":["playerId","displayName"],"properties":{"playerId":{"type":"string"},"displayName":{"type":"string"}}},"victim":{"type":"object","required":["playerId","displayName"],"properties":{"playerId":{"type":"string"},"displayName":{"type":"string"}}},"outcome":{"type":"string"},"majorDeltas":{"type":"object","required":["turnsSpent","cashStolen","attackerThugsLost","victimThugsLost"],"properties":{"turnsSpent":{"type":"number"},"cashStolen":{"type":"number"},"attackerThugsLost":{"type":"number"},"victimThugsLost":{"type":"number"}}},"thugLosses":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["basicThugs","proThugs","ogThugs"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"array","items":{"type":"object","required":["id","displayName","rarityBand","traits"],"properties":{"id":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}}}},"victim":{"type":"object","required":["basicThugs","proThugs","ogThugs"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"array","items":{"type":"object","required":["id","displayName","rarityBand","traits"],"properties":{"id":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}}}}}},"combatContributions":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["basicThugs","proThugs","ogThugs","combatStrength","casualtyEffectiveness"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"number"},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}},"victim":{"type":"object","required":["basicThugs","proThugs","ogThugs","combatStrength","casualtyEffectiveness"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"number"},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}}}},"combatants":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}},"victim":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}}}},"workerThefts":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","unitStackId","unitType","tier","quantity"],"properties":{"kind":{"type":"string","const":"aggregate_worker"},"unitStackId":{"type":"string"},"unitType":{"type":"string","enum":["normal_worker","pro_worker"]},"tier":{"type":"number"},"quantity":{"type":"number"}}},{"type":"object","required":["kind","rareUnitId","displayName","rarityBand","traits"],"properties":{"kind":{"type":"string","const":"high_tier_worker"},"rareUnitId":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}]}},"workerLosses":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","unitStackId","unitType","tier","quantity"],"properties":{"kind":{"type":"string","const":"aggregate_worker"},"unitStackId":{"type":"string"},"unitType":{"type":"string","enum":["normal_worker","pro_worker"]},"tier":{"type":"number"},"quantity":{"type":"number"}}},{"type":"object","required":["kind","rareUnitId","displayName","rarityBand","traits"],"properties":{"kind":{"type":"string","const":"high_tier_worker"},"rareUnitId":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}]}},"thugThefts":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","unitStackId","unitType","tier","quantity"],"properties":{"kind":{"type":"string","const":"aggregate_thug"},"unitStackId":{"type":"string"},"unitType":{"type":"string","enum":["thug","pro_thug"]},"tier":{"type":"number"},"quantity":{"type":"number"}}},{"type":"object","required":["kind","rareUnitId","displayName","rarityBand","traits"],"properties":{"kind":{"type":"string","const":"og_thug"},"rareUnitId":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}]}},"victimWorkerHappiness":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"workerStealVulnerability":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"consumedPrerequisites":{"type":"object","additionalProperties":{"type":"number"}},"reconciledWorkSlots":{"type":"number"},"ruleset":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"createdAt":{"type":"string"}}}}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/work-sessions/start":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","examples":[{"slots":[{"slotIndex":1,"unitStackId":"unit_stack.normal_worker"}]},{"slots":[{"slotIndex":1,"rareUnitId":"rare_unit.high_tier_worker"}]}],"required":["slots"],"properties":{"slots":{"type":"array","minItems":1,"items":{"type":"object","required":["slotIndex"],"oneOf":[{"required":["unitStackId"],"not":{"required":["rareUnitId"]}},{"required":["rareUnitId"],"not":{"required":["unitStackId"]}}],"properties":{"slotIndex":{"type":"integer","minimum":1},"unitStackId":{"type":"string","minLength":1},"rareUnitId":{"type":"string","minLength":1}},"additionalProperties":false}}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","session","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"session":{"type":"object","required":["status","sessionId","selectedSlots","pendingTurns","settledTurns","capProgress"],"properties":{"status":{"type":"string"},"sessionId":{"type":["null","string"]},"selectedSlots":{"type":"array","items":{"type":"object","required":["slotIndex","source","unitStackId","rareUnitId","unitType","tier","quantity","turnRate"],"properties":{"slotIndex":{"type":"number"},"source":{"oneOf":[{"type":"object","required":["kind","unitStackId"],"properties":{"kind":{"type":"string","const":"unit_stack"},"unitStackId":{"type":"string"}}},{"type":"object","required":["kind","rareUnitId"],"properties":{"kind":{"type":"string","const":"rare_unit"},"rareUnitId":{"type":"string"}}},{"type":"null"}]},"unitStackId":{"type":["null","string"]},"rareUnitId":{"type":["null","string"]},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"turnRate":{"type":"number"}}}},"pendingTurns":{"type":"number"},"settledTurns":{"type":"number"},"turnProgress":{"type":"object","required":["turnRate","generatedTurns","claimableTurns","nextTurnProgress"],"properties":{"turnRate":{"type":"number"},"generatedTurns":{"type":"number"},"claimableTurns":{"type":"number"},"nextTurnProgress":{"type":"number"}}},"presence":{"type":"object","required":["status","lastValidChallengeAt","graceEndsAt","accrualBoundary"],"properties":{"status":{"type":"string"},"lastValidChallengeAt":{"type":["null","string"]},"graceEndsAt":{"type":["null","string"]},"accrualBoundary":{"type":["null","string"]}}},"capProgress":{"type":"object","required":["dailyTurnCap","earnedToday","remainingTurns","capped"],"properties":{"dailyTurnCap":{"type":"number"},"earnedToday":{"type":"number"},"remainingTurns":{"type":"number"},"capped":{"type":"boolean"}}}}},"player":{"type":"object","required":["turns","unitStacks"],"properties":{"turns":{"type":"number"},"unitStacks":{"type":"array","items":{"type":"object","required":["unitStackId","unitType","tier","quantity","quantityWorking","quantityAvailable"],"properties":{"unitStackId":{"type":"string"},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"quantityWorking":{"type":"number"},"quantityAvailable":{"type":"number"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/work-sessions/slots/{slotIndex}":{"put":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"slotIndex","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]*$"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","oneOf":[{"required":["unitStackId"],"not":{"required":["rareUnitId"]}},{"required":["rareUnitId"],"not":{"required":["unitStackId"]}}],"properties":{"unitStackId":{"type":"string","minLength":1},"rareUnitId":{"type":"string","minLength":1}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","session","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"session":{"type":"object","required":["status","sessionId","selectedSlots","pendingTurns","settledTurns","capProgress"],"properties":{"status":{"type":"string"},"sessionId":{"type":["null","string"]},"selectedSlots":{"type":"array","items":{"type":"object","required":["slotIndex","source","unitStackId","rareUnitId","unitType","tier","quantity","turnRate"],"properties":{"slotIndex":{"type":"number"},"source":{"oneOf":[{"type":"object","required":["kind","unitStackId"],"properties":{"kind":{"type":"string","const":"unit_stack"},"unitStackId":{"type":"string"}}},{"type":"object","required":["kind","rareUnitId"],"properties":{"kind":{"type":"string","const":"rare_unit"},"rareUnitId":{"type":"string"}}},{"type":"null"}]},"unitStackId":{"type":["null","string"]},"rareUnitId":{"type":["null","string"]},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"turnRate":{"type":"number"}}}},"pendingTurns":{"type":"number"},"settledTurns":{"type":"number"},"turnProgress":{"type":"object","required":["turnRate","generatedTurns","claimableTurns","nextTurnProgress"],"properties":{"turnRate":{"type":"number"},"generatedTurns":{"type":"number"},"claimableTurns":{"type":"number"},"nextTurnProgress":{"type":"number"}}},"presence":{"type":"object","required":["status","lastValidChallengeAt","graceEndsAt","accrualBoundary"],"properties":{"status":{"type":"string"},"lastValidChallengeAt":{"type":["null","string"]},"graceEndsAt":{"type":["null","string"]},"accrualBoundary":{"type":["null","string"]}}},"capProgress":{"type":"object","required":["dailyTurnCap","earnedToday","remainingTurns","capped"],"properties":{"dailyTurnCap":{"type":"number"},"earnedToday":{"type":"number"},"remainingTurns":{"type":"number"},"capped":{"type":"boolean"}}}}},"player":{"type":"object","required":["turns","unitStacks"],"properties":{"turns":{"type":"number"},"unitStacks":{"type":"array","items":{"type":"object","required":["unitStackId","unitType","tier","quantity","quantityWorking","quantityAvailable"],"properties":{"unitStackId":{"type":"string"},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"quantityWorking":{"type":"number"},"quantityAvailable":{"type":"number"}}}}}},"result":{"type":"object","required":["sessionId","slotIndex","action","settledTurns"],"properties":{"sessionId":{"type":["null","string"]},"slotIndex":{"type":"number"},"action":{"type":"string","enum":["assigned","cleared"]},"settledTurns":{"type":"number"}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"delete":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"slotIndex","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]*$"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","session","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"session":{"type":"object","required":["status","sessionId","selectedSlots","pendingTurns","settledTurns","capProgress"],"properties":{"status":{"type":"string"},"sessionId":{"type":["null","string"]},"selectedSlots":{"type":"array","items":{"type":"object","required":["slotIndex","source","unitStackId","rareUnitId","unitType","tier","quantity","turnRate"],"properties":{"slotIndex":{"type":"number"},"source":{"oneOf":[{"type":"object","required":["kind","unitStackId"],"properties":{"kind":{"type":"string","const":"unit_stack"},"unitStackId":{"type":"string"}}},{"type":"object","required":["kind","rareUnitId"],"properties":{"kind":{"type":"string","const":"rare_unit"},"rareUnitId":{"type":"string"}}},{"type":"null"}]},"unitStackId":{"type":["null","string"]},"rareUnitId":{"type":["null","string"]},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"turnRate":{"type":"number"}}}},"pendingTurns":{"type":"number"},"settledTurns":{"type":"number"},"turnProgress":{"type":"object","required":["turnRate","generatedTurns","claimableTurns","nextTurnProgress"],"properties":{"turnRate":{"type":"number"},"generatedTurns":{"type":"number"},"claimableTurns":{"type":"number"},"nextTurnProgress":{"type":"number"}}},"presence":{"type":"object","required":["status","lastValidChallengeAt","graceEndsAt","accrualBoundary"],"properties":{"status":{"type":"string"},"lastValidChallengeAt":{"type":["null","string"]},"graceEndsAt":{"type":["null","string"]},"accrualBoundary":{"type":["null","string"]}}},"capProgress":{"type":"object","required":["dailyTurnCap","earnedToday","remainingTurns","capped"],"properties":{"dailyTurnCap":{"type":"number"},"earnedToday":{"type":"number"},"remainingTurns":{"type":"number"},"capped":{"type":"boolean"}}}}},"player":{"type":"object","required":["turns","unitStacks"],"properties":{"turns":{"type":"number"},"unitStacks":{"type":"array","items":{"type":"object","required":["unitStackId","unitType","tier","quantity","quantityWorking","quantityAvailable"],"properties":{"unitStackId":{"type":"string"},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"quantityWorking":{"type":"number"},"quantityAvailable":{"type":"number"}}}}}},"result":{"type":"object","required":["sessionId","slotIndex","action","settledTurns"],"properties":{"sessionId":{"type":["null","string"]},"slotIndex":{"type":"number"},"action":{"type":"string","enum":["assigned","cleared"]},"settledTurns":{"type":"number"}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/work-sessions/claim":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","examples":[{}],"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","session","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["sessionId","claimedTurns","capImpact"],"properties":{"sessionId":{"type":"string"},"claimedTurns":{"type":"number"},"presence":{"type":"object","required":["status","lastValidChallengeAt","graceEndsAt","accrualBoundary"],"properties":{"status":{"type":"string"},"lastValidChallengeAt":{"type":["null","string"]},"graceEndsAt":{"type":["null","string"]},"accrualBoundary":{"type":["null","string"]}}},"capImpact":{"type":"object","required":["dailyTurnCap","earnedToday","remainingTurns","capped"],"properties":{"dailyTurnCap":{"type":"number"},"earnedToday":{"type":"number"},"remainingTurns":{"type":"number"},"capped":{"type":"boolean"}}}}},"session":{"type":"object","required":["status","sessionId","selectedSlots","pendingTurns","settledTurns","capProgress"],"properties":{"status":{"type":"string"},"sessionId":{"type":["null","string"]},"selectedSlots":{"type":"array","items":{"type":"object","required":["slotIndex","source","unitStackId","rareUnitId","unitType","tier","quantity","turnRate"],"properties":{"slotIndex":{"type":"number"},"source":{"oneOf":[{"type":"object","required":["kind","unitStackId"],"properties":{"kind":{"type":"string","const":"unit_stack"},"unitStackId":{"type":"string"}}},{"type":"object","required":["kind","rareUnitId"],"properties":{"kind":{"type":"string","const":"rare_unit"},"rareUnitId":{"type":"string"}}},{"type":"null"}]},"unitStackId":{"type":["null","string"]},"rareUnitId":{"type":["null","string"]},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"turnRate":{"type":"number"}}}},"pendingTurns":{"type":"number"},"settledTurns":{"type":"number"},"turnProgress":{"type":"object","required":["turnRate","generatedTurns","claimableTurns","nextTurnProgress"],"properties":{"turnRate":{"type":"number"},"generatedTurns":{"type":"number"},"claimableTurns":{"type":"number"},"nextTurnProgress":{"type":"number"}}},"presence":{"type":"object","required":["status","lastValidChallengeAt","graceEndsAt","accrualBoundary"],"properties":{"status":{"type":"string"},"lastValidChallengeAt":{"type":["null","string"]},"graceEndsAt":{"type":["null","string"]},"accrualBoundary":{"type":["null","string"]}}},"capProgress":{"type":"object","required":["dailyTurnCap","earnedToday","remainingTurns","capped"],"properties":{"dailyTurnCap":{"type":"number"},"earnedToday":{"type":"number"},"remainingTurns":{"type":"number"},"capped":{"type":"boolean"}}}}},"player":{"type":"object","required":["turns"],"properties":{"turns":{"type":"number"}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/work-sessions/stop":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","examples":[{"reason":"manual"}],"properties":{"reason":{"type":"string","minLength":1,"maxLength":64}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","session","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["sessionId","stopReason","workerReleaseSummary"],"properties":{"sessionId":{"type":"string"},"stopReason":{"type":"string"},"workerReleaseSummary":{"type":"array","items":{"type":"object","required":["unitStackId","releasedQuantity"],"properties":{"unitStackId":{"type":"string"},"releasedQuantity":{"type":"number"}}}}}},"session":{"type":"object","required":["status","sessionId","selectedSlots","pendingTurns","settledTurns","capProgress"],"properties":{"status":{"type":"string"},"sessionId":{"type":["null","string"]},"selectedSlots":{"type":"array","items":{"type":"object","required":["slotIndex","source","unitStackId","rareUnitId","unitType","tier","quantity","turnRate"],"properties":{"slotIndex":{"type":"number"},"source":{"oneOf":[{"type":"object","required":["kind","unitStackId"],"properties":{"kind":{"type":"string","const":"unit_stack"},"unitStackId":{"type":"string"}}},{"type":"object","required":["kind","rareUnitId"],"properties":{"kind":{"type":"string","const":"rare_unit"},"rareUnitId":{"type":"string"}}},{"type":"null"}]},"unitStackId":{"type":["null","string"]},"rareUnitId":{"type":["null","string"]},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"turnRate":{"type":"number"}}}},"pendingTurns":{"type":"number"},"settledTurns":{"type":"number"},"turnProgress":{"type":"object","required":["turnRate","generatedTurns","claimableTurns","nextTurnProgress"],"properties":{"turnRate":{"type":"number"},"generatedTurns":{"type":"number"},"claimableTurns":{"type":"number"},"nextTurnProgress":{"type":"number"}}},"presence":{"type":"object","required":["status","lastValidChallengeAt","graceEndsAt","accrualBoundary"],"properties":{"status":{"type":"string"},"lastValidChallengeAt":{"type":["null","string"]},"graceEndsAt":{"type":["null","string"]},"accrualBoundary":{"type":["null","string"]}}},"capProgress":{"type":"object","required":["dailyTurnCap","earnedToday","remainingTurns","capped"],"properties":{"dailyTurnCap":{"type":"number"},"earnedToday":{"type":"number"},"remainingTurns":{"type":"number"},"capped":{"type":"boolean"}}}}},"player":{"type":"object","required":["turns","unitStacks"],"properties":{"turns":{"type":"number"},"unitStacks":{"type":"array","items":{"type":"object","required":["unitStackId","unitType","tier","quantity","quantityWorking","quantityAvailable"],"properties":{"unitStackId":{"type":"string"},"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"},"quantityWorking":{"type":"number"},"quantityAvailable":{"type":"number"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/presence":{"get":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}}],"security":[{"bearerAuth":[]}],"x-websocket":true,"responses":{"101":{"description":"HTTP 101","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/scout":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["area","turns"],"properties":{"area":{"type":"string","minLength":1},"turns":{"type":"integer","minimum":1}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["area","turnsSpent","cashGained","turnSpendEffects","unitGains","rareUnitFinds"],"properties":{"area":{"type":"string"},"turnsSpent":{"type":"number"},"cashGained":{"type":"number"},"turnSpendEffects":{"type":"object","required":["turnsSpent","workerIncome","upkeep"],"properties":{"turnsSpent":{"type":"number"},"workerIncome":{"type":"object","required":["cashGenerated","workerMoneyContribution","rolls"],"properties":{"cashGenerated":{"type":"number"},"workerMoneyContribution":{"type":"number"},"rolls":{"type":"array","items":{"type":"number"}}}},"upkeep":{"type":"object","required":["supplies","crack","beer"],"properties":{"supplies":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"crack":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"beer":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}}}}}},"unitGains":{"type":"object","required":["normalWorker","thug","proWorker","proThug"],"properties":{"normalWorker":{"type":"number"},"thug":{"type":"number"},"proWorker":{"type":"number"},"proThug":{"type":"number"}}},"rareUnitFinds":{"type":"array","items":{"type":"object","required":["id","category","rarityBand","displayName","traits","creationSource"],"properties":{"id":{"type":"string"},"category":{"type":"string"},"rarityBand":{"type":"string"},"displayName":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}},"creationSource":{"type":"string"}}}}}},"player":{"type":"object","required":["turns","cash","netWorth","workerHappiness","thugHappiness","unitStacks","rareUnits"],"properties":{"turns":{"type":"number"},"cash":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100},"unitStacks":{"type":"array","items":{"type":"object","required":["unitType","tier","quantity"],"properties":{"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"}}}},"rareUnits":{"type":"array","items":{"type":"object","required":["id","category","rarityBand","displayName","traits","creationSource"],"properties":{"id":{"type":"string"},"category":{"type":"string"},"rarityBand":{"type":"string"},"displayName":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}},"creationSource":{"type":"string"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/attacks/home-invasion":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["targetPlayerId"],"properties":{"targetPlayerId":{"type":"string","minLength":1}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["attackType","targetPlayerId","outcome","turnsSpent","cashStolen","attackerThugsLost","victimThugsLost","attackerOgThugsLost","victimOgThugsLost","turnSpendEffects","attackerStrength","victimStrength","thugLosses","combatContributions","combatants"],"properties":{"attackType":{"type":"string","const":"home_invasion"},"targetPlayerId":{"type":"string"},"outcome":{"type":"string"},"turnsSpent":{"type":"number"},"cashStolen":{"type":"number"},"attackerThugsLost":{"type":"number"},"victimThugsLost":{"type":"number"},"attackerOgThugsLost":{"type":"number"},"victimOgThugsLost":{"type":"number"},"turnSpendEffects":{"type":"object","required":["turnsSpent","workerIncome","upkeep"],"properties":{"turnsSpent":{"type":"number"},"workerIncome":{"type":"object","required":["cashGenerated","workerMoneyContribution","rolls"],"properties":{"cashGenerated":{"type":"number"},"workerMoneyContribution":{"type":"number"},"rolls":{"type":"array","items":{"type":"number"}}}},"upkeep":{"type":"object","required":["supplies","crack","beer"],"properties":{"supplies":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"crack":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"beer":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}}}}}},"attackerStrength":{"type":"number"},"victimStrength":{"type":"number"},"thugLosses":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["basicThugs","proThugs","ogThugs"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"array","items":{"type":"object","required":["id","displayName","rarityBand","traits"],"properties":{"id":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}}}},"victim":{"type":"object","required":["basicThugs","proThugs","ogThugs"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"array","items":{"type":"object","required":["id","displayName","rarityBand","traits"],"properties":{"id":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}}}}}},"combatContributions":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["basicThugs","proThugs","ogThugs","combatStrength","casualtyEffectiveness"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"number"},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}},"victim":{"type":"object","required":["basicThugs","proThugs","ogThugs","combatStrength","casualtyEffectiveness"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"number"},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}}}},"combatants":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}},"victim":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}}}}}},"player":{"type":"object","required":["turns","cash","netWorth","workerHappiness","thugHappiness","unitStacks"],"properties":{"turns":{"type":"number"},"cash":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100},"unitStacks":{"type":"array","items":{"type":"object","required":["unitType","tier","quantity"],"properties":{"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/attacks/worker-steal":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["targetPlayerId"],"properties":{"targetPlayerId":{"type":"string","minLength":1}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["attackType","targetPlayerId","outcome","turnsSpent","workersMoved","workerThefts","workerLosses","consumedPrerequisites","turnSpendEffects","reconciledWorkSlots","attackerThugsLost","victimThugsLost","attackerStrength","victimStrength","victimWorkerHappiness","workerStealVulnerability","combatants"],"properties":{"attackType":{"type":"string","const":"worker_steal"},"targetPlayerId":{"type":"string"},"outcome":{"type":"string"},"turnsSpent":{"type":"number"},"workersMoved":{"type":"number"},"workerThefts":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","unitStackId","unitType","tier","quantity"],"properties":{"kind":{"type":"string","const":"aggregate_worker"},"unitStackId":{"type":"string"},"unitType":{"type":"string","enum":["normal_worker","pro_worker"]},"tier":{"type":"number"},"quantity":{"type":"number"}}},{"type":"object","required":["kind","rareUnitId","displayName","rarityBand","traits"],"properties":{"kind":{"type":"string","const":"high_tier_worker"},"rareUnitId":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}]}},"workerLosses":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","unitStackId","unitType","tier","quantity"],"properties":{"kind":{"type":"string","const":"aggregate_worker"},"unitStackId":{"type":"string"},"unitType":{"type":"string","enum":["normal_worker","pro_worker"]},"tier":{"type":"number"},"quantity":{"type":"number"}}},{"type":"object","required":["kind","rareUnitId","displayName","rarityBand","traits"],"properties":{"kind":{"type":"string","const":"high_tier_worker"},"rareUnitId":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}]}},"consumedPrerequisites":{"type":"object","additionalProperties":{"type":"number"}},"turnSpendEffects":{"type":"object","required":["turnsSpent","workerIncome","upkeep"],"properties":{"turnsSpent":{"type":"number"},"workerIncome":{"type":"object","required":["cashGenerated","workerMoneyContribution","rolls"],"properties":{"cashGenerated":{"type":"number"},"workerMoneyContribution":{"type":"number"},"rolls":{"type":"array","items":{"type":"number"}}}},"upkeep":{"type":"object","required":["supplies","crack","beer"],"properties":{"supplies":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"crack":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"beer":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}}}}}},"reconciledWorkSlots":{"type":"number"},"attackerThugsLost":{"type":"number"},"victimThugsLost":{"type":"number"},"attackerStrength":{"type":"number"},"victimStrength":{"type":"number"},"victimWorkerHappiness":{"type":"number","minimum":0,"maximum":100},"workerStealVulnerability":{"type":"number","minimum":0,"maximum":1},"combatants":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}},"victim":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}}}}}},"player":{"type":"object","required":["turns","cash","netWorth","workerHappiness","thugHappiness","unitStacks"],"properties":{"turns":{"type":"number"},"cash":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100},"unitStacks":{"type":"array","items":{"type":"object","required":["unitType","tier","quantity"],"properties":{"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"/v1/rounds/{roundId}/attacks/thug-steal":{"post":{"parameters":[{"name":"roundId","in":"path","required":true,"schema":{"type":"string","minLength":1}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["targetPlayerId"],"properties":{"targetPlayerId":{"type":"string","minLength":1}},"additionalProperties":false}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HTTP 200","content":{"application/json":{"schema":{"type":"object","required":["commandId","replayed","result","player"],"properties":{"commandId":{"type":"string"},"replayed":{"type":"boolean"},"result":{"type":"object","required":["attackType","targetPlayerId","outcome","turnsSpent","thugsMoved","thugThefts","consumedPrerequisites","turnSpendEffects","attackerThugsLost","victimThugsLost","attackerStrength","victimStrength","victimThugHappiness","thugStealVulnerability","combatContributions","combatants"],"properties":{"attackType":{"type":"string","const":"thug_steal"},"targetPlayerId":{"type":"string"},"outcome":{"type":"string"},"turnsSpent":{"type":"number"},"thugsMoved":{"type":"number"},"thugThefts":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","unitStackId","unitType","tier","quantity"],"properties":{"kind":{"type":"string","const":"aggregate_thug"},"unitStackId":{"type":"string"},"unitType":{"type":"string","enum":["thug","pro_thug"]},"tier":{"type":"number"},"quantity":{"type":"number"}}},{"type":"object","required":["kind","rareUnitId","displayName","rarityBand","traits"],"properties":{"kind":{"type":"string","const":"og_thug"},"rareUnitId":{"type":"string"},"displayName":{"type":"string"},"rarityBand":{"type":"string"},"traits":{"type":"object","additionalProperties":{"type":"number"}}}}]}},"consumedPrerequisites":{"type":"object","additionalProperties":{"type":"number"}},"turnSpendEffects":{"type":"object","required":["turnsSpent","workerIncome","upkeep"],"properties":{"turnsSpent":{"type":"number"},"workerIncome":{"type":"object","required":["cashGenerated","workerMoneyContribution","rolls"],"properties":{"cashGenerated":{"type":"number"},"workerMoneyContribution":{"type":"number"},"rolls":{"type":"array","items":{"type":"number"}}}},"upkeep":{"type":"object","required":["supplies","crack","beer"],"properties":{"supplies":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"crack":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}},"beer":{"type":"object","required":["required","consumed","shortage","remaining"],"properties":{"required":{"type":"number"},"consumed":{"type":"number"},"shortage":{"type":"number"},"remaining":{"type":"number"}}}}}}},"attackerThugsLost":{"type":"number"},"victimThugsLost":{"type":"number"},"attackerStrength":{"type":"number"},"victimStrength":{"type":"number"},"victimThugHappiness":{"type":"number","minimum":0,"maximum":100},"thugStealVulnerability":{"type":"number","minimum":0,"maximum":1},"combatContributions":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["basicThugs","proThugs","ogThugs","combatStrength","casualtyEffectiveness"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"number"},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}},"victim":{"type":"object","required":["basicThugs","proThugs","ogThugs","combatStrength","casualtyEffectiveness"],"properties":{"basicThugs":{"type":"number"},"proThugs":{"type":"number"},"ogThugs":{"type":"number"},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}}}},"combatants":{"type":"object","required":["attacker","victim"],"properties":{"attacker":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}},"victim":{"type":"object","required":["thugs","weapons","combatStrength","casualtyEffectiveness"],"properties":{"thugs":{"type":"object","required":["basic","pro","og","total"],"properties":{"basic":{"type":"number"},"pro":{"type":"number"},"og":{"type":"number"},"total":{"type":"number"}}},"weapons":{"type":"object","required":["equippedCount","totalWeaponCount","strength","equippedWeapons"],"properties":{"equippedCount":{"type":"number"},"totalWeaponCount":{"type":"number"},"strength":{"type":"number"},"equippedWeapons":{"type":"array","items":{"type":"object","required":["itemType","quantity","strength","totalStrength"],"properties":{"itemType":{"type":"string"},"quantity":{"type":"number"},"strength":{"type":"number"},"totalStrength":{"type":"number"}}}}}},"combatStrength":{"type":"number"},"casualtyEffectiveness":{"type":"number"}}}}}}},"player":{"type":"object","required":["turns","cash","netWorth","workerHappiness","thugHappiness","unitStacks"],"properties":{"turns":{"type":"number"},"cash":{"type":"number"},"netWorth":{"type":"number"},"workerHappiness":{"type":"number","minimum":0,"maximum":100},"thugHappiness":{"type":"number","minimum":0,"maximum":100},"unitStacks":{"type":"array","items":{"type":"object","required":["unitType","tier","quantity"],"properties":{"unitType":{"type":"string"},"tier":{"type":"number"},"quantity":{"type":"number"}}}}}}}}}}},"400":{"description":"HTTP 400","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"401":{"description":"HTTP 401","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"HTTP 403","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"HTTP 404","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"HTTP 409","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"HTTP 503","content":{"application/json":{"schema":{"type":"object","examples":[{"code":"UNAUTHENTICATED","message":"missing bearer access token"}],"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}