{"openapi":"3.1.0","info":{"title":"Portamora API","version":"1.0.0","description":"Explore, publishing, community and safety API. Public cloud delivery and email activation remain disabled pending release."},"servers":[{"url":"/"}],"components":{"securitySchemes":{"session":{"type":"apiKey","in":"cookie","name":"__Host-session"},"bearer":{"type":"http","scheme":"bearer","description":"A personal access token shown once in Settings. Scopes and ownership are checked per operation."}},"schemas":{"ApiError":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]},"World":{"type":"object","properties":{"id":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"title":{"type":"string"},"tagline":{"type":"string"},"description":{"type":"string"},"thumbnailKey":{"type":["string","null"]},"status":{"type":"string","enum":["published","offline","removed"]},"currentVersionId":{"type":["string","null"],"minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"publishedAt":{"type":["string","null"],"format":"date-time"},"playsTotal":{"type":"integer","minimum":0},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"bytesUnpacked":{"type":["integer","null"],"minimum":0},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z0-9][a-z0-9_-]*$"}},"creator":{"type":"object","properties":{"id":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"handle":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"displayName":{"type":"string"},"bio":{"type":"string"},"avatarKey":{"type":["string","null"]},"links":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"profile":{"type":"string","format":"uri"},"avatar":{"type":["string","null"],"format":"uri"}},"required":["self","profile","avatar"]}},"required":["id","handle","displayName","bio","avatarKey","links"]},"links":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"details":{"type":"string","format":"uri"},"play":{"type":["string","null"],"format":"uri"},"thumbnail":{"type":["string","null"],"format":"uri"}},"required":["self","details","play","thumbnail"]}},"required":["id","title","tagline","description","thumbnailKey","status","currentVersionId","publishedAt","playsTotal","likesTotal","dislikesTotal","bytesUnpacked","tags","creator","links"]},"Creator":{"type":"object","properties":{"id":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"handle":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"displayName":{"type":"string"},"bio":{"type":"string"},"avatarKey":{"type":["string","null"]},"links":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"profile":{"type":"string","format":"uri"},"avatar":{"type":["string","null"],"format":"uri"}},"required":["self","profile","avatar"]}},"required":["id","handle","displayName","bio","avatarKey","links"]},"WorldVersion":{"type":"object","properties":{"id":{"type":"string","minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"worldId":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"versionNumber":{"type":"integer","exclusiveMinimum":0},"sdkVersion":{"type":"number","enum":[1]},"bytesUnpacked":{"type":"integer","minimum":0},"notes":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"packagePath":{"type":"string"},"links":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"world":{"type":"string","format":"uri"},"play":{"type":"string","format":"uri"},"entry":{"type":"string","format":"uri"}},"required":["self","world","play","entry"]}},"required":["id","worldId","versionNumber","sdkVersion","bytesUnpacked","notes","createdAt","packagePath","links"]},"WorldList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"title":{"type":"string"},"tagline":{"type":"string"},"description":{"type":"string"},"thumbnailKey":{"type":["string","null"]},"status":{"type":"string","enum":["published","offline","removed"]},"currentVersionId":{"type":["string","null"],"minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"publishedAt":{"type":["string","null"],"format":"date-time"},"playsTotal":{"type":"integer","minimum":0},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"bytesUnpacked":{"type":["integer","null"],"minimum":0},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z0-9][a-z0-9_-]*$"}},"creator":{"type":"object","properties":{"id":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"handle":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"displayName":{"type":"string"},"bio":{"type":"string"},"avatarKey":{"type":["string","null"]},"links":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"profile":{"type":"string","format":"uri"},"avatar":{"type":["string","null"],"format":"uri"}},"required":["self","profile","avatar"]}},"required":["id","handle","displayName","bio","avatarKey","links"]},"links":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"details":{"type":"string","format":"uri"},"play":{"type":["string","null"],"format":"uri"},"thumbnail":{"type":["string","null"],"format":"uri"}},"required":["self","details","play","thumbnail"]}},"required":["id","title","tagline","description","thumbnailKey","status","currentVersionId","publishedAt","playsTotal","likesTotal","dislikesTotal","bytesUnpacked","tags","creator","links"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}},"parameters":{}},"paths":{"/api/v1/worlds":{"get":{"operationId":"worlds.search","summary":"Browse and search published worlds","description":"Sort by newest, liked, or trending. The days filter accepts 1, 7 (default), or 30 UTC calendar days including today. Newest filters publication date; liked and trending rank activity during the window and may include older worlds. Creator lists retain older work. Search text can include exact #hashtags; custom tags are supported without a fixed vocabulary. Liked and trending require the community flag. Follow nextCursor with unchanged filters until null. Drafts and offline worlds are excluded. Public; no authentication is required.","parameters":[{"schema":{"type":"string","maxLength":200,"default":""},"required":false,"name":"q","in":"query"},{"schema":{"type":"string","enum":["newest","liked","trending"],"default":"newest"},"required":false,"name":"sort","in":"query"},{"schema":{"type":"number","default":7},"required":false,"name":"days","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z0-9][a-z0-9_-]*$"},"required":false,"name":"tag","in":"query"},{"schema":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"required":false,"name":"creator","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldList"}}}},"400":{"description":"Invalid request or cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found or not publicly visible","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/worlds/{worldId}":{"get":{"operationId":"worlds.get","summary":"Read a public world page. Offline and removed worlds retain a notice; drafts are not exposed.","description":"Read a public world page. Offline and removed worlds retain a notice; drafts are not exposed.","parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/World"}}}},"400":{"description":"Invalid request or cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found or not publicly visible","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"patch..worlds.worldId.","summary":"Edit owned world metadata, tags, thumbnail and comments switch. Requires worlds:write.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":80},"tagline":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","minLength":1,"maxLength":5000},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z0-9][a-z0-9_-]*$"},"minItems":1,"maxItems":5},"commentsEnabled":{"type":"boolean","default":true},"thumbnailUploadId":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."},"screenshot":{"type":"integer","minimum":0,"maximum":2}},"required":["title","tagline","description","tags"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"boolean","enum":[true]}},"required":["updated"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"delete":{"operationId":"delete..worlds.worldId.","summary":"Hide the world immediately and queue deletion of every stored object version. Confirm its exact title.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"confirmation":{"type":"string","maxLength":80}},"required":["confirmation"],"additionalProperties":false}}}},"responses":{"202":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","minLength":20,"maxLength":20,"pattern":"^job_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{16}$","description":"Case-sensitive job identifier with 16 safe-alphabet characters after the prefix."}},"required":["jobId"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/versions/{versionId}":{"get":{"operationId":"versions.get","summary":"Read the current ready version of a published world. Unpublished versions are not exposed.","description":"Read the current ready version of a published world. Unpublished versions are not exposed.","parameters":[{"schema":{"type":"string","minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix.","name":"versionId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldVersion"}}}},"400":{"description":"Invalid request or cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found or not publicly visible","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/users/{handle}":{"get":{"operationId":"users.get","summary":"Read an active creator profile. Email addresses, roles and account state are never exposed.","description":"Read an active creator profile. Email addresses, roles and account state are never exposed.","parameters":[{"schema":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"required":true,"name":"handle","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Creator"}}}},"400":{"description":"Invalid request or cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found or not publicly visible","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/auth/signin":{"post":{"operationId":"post..auth.signin","summary":"Request an opaque magic-link email (3/email/15 minutes; 30/IP/hour). Local development prints to the mailbox.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email"},"returnPath":{"type":"string"}},"required":["email"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","enum":["Check your email"]}},"required":["message"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/auth/verify":{"post":{"operationId":"post..auth.verify","summary":"Consume a single-use 15-minute link and set the secure browser cookie. GET never consumes a link.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["token"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"next":{"type":"string"}},"required":["next"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/auth/signout":{"post":{"operationId":"post..auth.signout","summary":"Revoke this session family or every session.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"everywhere":{"type":"boolean","default":false}},"additionalProperties":false}}}},"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"signedOut":{"type":"boolean","enum":[true]}},"required":["signedOut"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me":{"get":{"operationId":"get..me","summary":"Read your private profile (read scope for bearer tokens).","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":false,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"query"},{"schema":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"required":false,"description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix.","name":"creatorId","in":"query"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"community":{"type":"boolean"},"comments":{"type":"boolean"},"playCounting":{"type":"boolean"},"liked":{"type":"boolean","default":false},"disliked":{"type":"boolean","default":false},"favorited":{"type":"boolean","default":false},"following":{"type":"boolean","default":false},"id":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"email":{"type":"string","format":"email"},"handle":{"type":["string","null"]},"displayName":{"type":"string"},"bio":{"type":"string"},"avatarKey":{"type":["string","null"]},"onboarded":{"type":"boolean"},"role":{"type":"string","enum":["user","moderator","admin"]},"reportsEnabled":{"type":"boolean"},"unreadNotices":{"type":"integer","minimum":0}},"required":["community","comments","playCounting","id","email","handle","displayName","bio","avatarKey","onboarded","role","reportsEnabled","unreadNotices"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"patch":{"operationId":"patch..me","summary":"Update display name, bio and a processed avatar. The handle is permanent; attempts to change it return 409 handle_immutable.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":80},"handle":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$","description":"The existing handle may be repeated, but cannot be changed."},"bio":{"type":"string","maxLength":500,"default":""},"avatarUploadId":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."}},"required":["displayName"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"boolean","enum":[true]}},"required":["updated"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/onboard":{"post":{"operationId":"post..me.onboard","summary":"Choose display name and a permanent unique handle before creating content. Repeating onboarding cannot change an existing handle.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":80},"handle":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"bio":{"type":"string","maxLength":500,"default":""},"avatarUploadId":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."}},"required":["displayName","handle"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"next":{"type":"string"}},"required":["next"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/email":{"post":{"operationId":"post..me.email","summary":"Request a new-address confirmation; requires sign-in within 10 minutes. Notify the old address after confirmation.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email"}},"required":["email"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","enum":["Check your email"]}},"required":["message"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/sessions":{"get":{"operationId":"get..me.sessions","summary":"List your active browser sessions without credential hashes.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":18,"maxLength":18,"pattern":"^session_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive session identifier with 10 safe-alphabet characters after the prefix."},"agent":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastSeenAt":{"type":"string","format":"date-time"},"current":{"type":"boolean"}},"required":["id","agent","createdAt","lastSeenAt","current"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/sessions/{sessionId}":{"delete":{"operationId":"delete..me.sessions.sessionId.","summary":"Revoke an owned browser session family.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":18,"maxLength":18,"pattern":"^session_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive session identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive session identifier with 10 safe-alphabet characters after the prefix.","name":"sessionId","in":"path"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"revoked":{"type":"boolean","enum":[true]}},"required":["revoked"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/tokens":{"get":{"operationId":"get..me.tokens","summary":"List personal token metadata; secrets cannot be retrieved.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":16,"maxLength":16,"pattern":"^token_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive token identifier with 10 safe-alphabet characters after the prefix."},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["read","worlds:write","social:write"]}},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","name","scopes","createdAt","expiresAt","lastUsedAt","revokedAt"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"post":{"operationId":"post..me.tokens","summary":"Create a token (maximum 10 active); requires sign-in within 10 minutes and shows its secret once.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. Repeat the same Idempotency-Key for retries; keys are retained for 24 hours.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"scopes":{"type":"array","items":{"type":"string","enum":["read","worlds:write","social:write"]},"minItems":1,"maxItems":3},"expiresAt":{"type":["string","null"],"format":"date-time"}},"required":["name","scopes"],"additionalProperties":false}}}},"responses":{"201":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":16,"maxLength":16,"pattern":"^token_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive token identifier with 10 safe-alphabet characters after the prefix."},"secret":{"type":["string","null"],"pattern":"^[a-f0-9]{64}$","description":"Shown only on the first response. An idempotent replay returns null; revoke and create a new token if the secret was lost."}},"required":["id","secret"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/tokens/{tokenId}":{"delete":{"operationId":"delete..me.tokens.tokenId.","summary":"Revoke an owned personal access token; requires fresh browser sign-in.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^token_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive token identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive token identifier with 10 safe-alphabet characters after the prefix.","name":"tokenId","in":"path"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"revoked":{"type":"boolean","enum":[true]}},"required":["revoked"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/uploads":{"post":{"operationId":"post..uploads","summary":"Create a world or allocate its next version and return a presigned multipart POST policy (6 MiB ZIP; 10 packages/account/day). Requires worlds:write.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. Repeat the same Idempotency-Key for retries; keys are retained for 24 hours.","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"worldId":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"notes":{"type":"string","maxLength":2000},"contentType":{"type":"string","enum":["application/zip"],"default":"application/zip"}},"additionalProperties":false}}}},"responses":{"201":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."},"worldId":{"type":["string","null"],"minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"versionId":{"type":["string","null"],"minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"kind":{"type":"string","enum":["package","avatar","thumbnail"]},"contentType":{"type":"string","enum":["application/zip","image/png","image/jpeg","image/webp"]},"status":{"type":"string","enum":["pending","queued","processing","ready","rejected","failed"]},"outputs":{"type":"object","properties":{"thumbnailKey":{"type":"string"},"thumbnailLargeKey":{"type":"string"},"avatarKey":{"type":"string"},"avatarSmallKey":{"type":"string"}}},"error":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"maxBytes":{"type":"integer","minimum":0},"versionNumber":{"type":"integer","exclusiveMinimum":0},"upload":{"type":"object","properties":{"id":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."},"expiresAt":{"type":"string","format":"date-time"},"url":{"type":"string","description":"An absolute HTTPS storage URL, or a relative /api/v1/local-uploads/... path on the local site."},"fields":{"type":"object","additionalProperties":{"type":"string"}}},"required":["id","expiresAt","url","fields"],"description":"Present while the upload is pending. Replayed requests may already be processing or complete."}},"required":["id","worldId","versionId","kind","contentType","status","outputs","error","createdAt","expiresAt","maxBytes","versionNumber"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/images":{"post":{"operationId":"post..images","summary":"Request an avatar or thumbnail upload policy (4 MiB; PNG/JPEG/WebP; 20 images/account/day). Only processed images are promoted.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. Repeat the same Idempotency-Key for retries; keys are retained for 24 hours.","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["avatar","thumbnail"]},"worldId":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"contentType":{"type":"string","enum":["image/png","image/jpeg","image/webp"]}},"required":["kind","contentType"],"additionalProperties":false}}}},"responses":{"201":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."},"worldId":{"type":["string","null"],"minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"versionId":{"type":["string","null"],"minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"kind":{"type":"string","enum":["package","avatar","thumbnail"]},"contentType":{"type":"string","enum":["application/zip","image/png","image/jpeg","image/webp"]},"status":{"type":"string","enum":["pending","queued","processing","ready","rejected","failed"]},"outputs":{"type":"object","properties":{"thumbnailKey":{"type":"string"},"thumbnailLargeKey":{"type":"string"},"avatarKey":{"type":"string"},"avatarSmallKey":{"type":"string"}}},"error":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"maxBytes":{"type":"integer","minimum":0},"upload":{"type":"object","properties":{"id":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."},"expiresAt":{"type":"string","format":"date-time"},"url":{"type":"string","description":"An absolute HTTPS storage URL, or a relative /api/v1/local-uploads/... path on the local site."},"fields":{"type":"object","additionalProperties":{"type":"string"}}},"required":["id","expiresAt","url","fields"]}},"required":["id","worldId","versionId","kind","contentType","status","outputs","error","createdAt","expiresAt","maxBytes"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/uploads/{uploadId}":{"get":{"operationId":"get..uploads.uploadId.","summary":"Poll upload status and outputs (worlds:write scope). Read named validation checks from GET /me/versions/{versionId} with read scope.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix.","name":"uploadId","in":"path"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."},"worldId":{"type":["string","null"],"minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"versionId":{"type":["string","null"],"minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"kind":{"type":"string","enum":["package","avatar","thumbnail"]},"contentType":{"type":"string","enum":["application/zip","image/png","image/jpeg","image/webp"]},"status":{"type":"string","enum":["pending","queued","processing","ready","rejected","failed"]},"outputs":{"type":"object","properties":{"thumbnailKey":{"type":"string"},"thumbnailLargeKey":{"type":"string"},"avatarKey":{"type":"string"},"avatarSmallKey":{"type":"string"}}},"error":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"maxBytes":{"type":"integer","minimum":0}},"required":["id","worldId","versionId","kind","contentType","status","outputs","error","createdAt","expiresAt","maxBytes"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/uploads/{uploadId}/presign":{"post":{"operationId":"post..uploads.uploadId.presign","summary":"Retrieve a pending upload policy within the original 15-minute window.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix.","name":"uploadId","in":"path"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."},"expiresAt":{"type":"string","format":"date-time"},"url":{"type":"string","description":"An absolute HTTPS storage URL, or a relative /api/v1/local-uploads/... path on the local site."},"fields":{"type":"object","additionalProperties":{"type":"string"}}},"required":["id","expiresAt","url","fields"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/dashboard":{"get":{"operationId":"get..dashboard","summary":"List your worlds and 7/30-day statistics, with opaque pagination. Requires read scope.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"title":{"type":"string"},"tagline":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["draft","published","offline","removed"]},"thumbnailKey":{"type":["string","null"]},"currentVersionId":{"type":["string","null"],"minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"commentsEnabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"},"tags":{"type":"array","items":{"type":"string"}},"stats7":{"type":"object","properties":{"plays":{"type":"integer","minimum":0},"likes":{"type":"integer","minimum":0},"favorites":{"type":"integer","minimum":0},"comments":{"type":"integer","minimum":0}},"required":["plays","likes","favorites","comments"]},"stats30":{"type":"object","properties":{"plays":{"type":"integer","minimum":0},"likes":{"type":"integer","minimum":0},"favorites":{"type":"integer","minimum":0},"comments":{"type":"integer","minimum":0}},"required":["plays","likes","favorites","comments"]}},"required":["id","title","tagline","description","status","thumbnailKey","currentVersionId","commentsEnabled","createdAt","publishedAt","tags","stats7","stats30"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/worlds/{worldId}":{"get":{"operationId":"get..me.worlds.worldId.","summary":"Read an owned draft, published, or offline world.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"title":{"type":"string"},"tagline":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["draft","published","offline","removed"]},"thumbnailKey":{"type":["string","null"]},"currentVersionId":{"type":["string","null"],"minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"commentsEnabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"},"tags":{"type":"array","items":{"type":"string"}},"stats7":{"type":"object","properties":{"plays":{"type":"integer","minimum":0},"likes":{"type":"integer","minimum":0},"favorites":{"type":"integer","minimum":0},"comments":{"type":"integer","minimum":0}},"required":["plays","likes","favorites","comments"]},"stats30":{"type":"object","properties":{"plays":{"type":"integer","minimum":0},"likes":{"type":"integer","minimum":0},"favorites":{"type":"integer","minimum":0},"comments":{"type":"integer","minimum":0}},"required":["plays","likes","favorites","comments"]}},"required":["id","title","tagline","description","status","thumbnailKey","currentVersionId","commentsEnabled","createdAt","publishedAt","tags","stats7","stats30"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/worlds/{worldId}/versions":{"get":{"operationId":"get..me.worlds.worldId.versions","summary":"List an owned world’s immutable versions, checks, notes and dates.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"worldId":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"versionNumber":{"type":"integer","exclusiveMinimum":0},"status":{"type":"string","enum":["pending","validating","ready","rejected","retired"]},"notes":{"type":["string","null"]},"checks":{"type":["array","null"],"items":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string","enum":["passed","failed","skipped"]},"message":{"type":"string"}},"required":["name","status","message"]}},"screenshotKeys":{"type":"array","items":{"type":"string"}},"bytesUnpacked":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"},"retiredAt":{"type":["string","null"],"format":"date-time"},"manifest":{"type":["object","null"],"properties":{"name":{"type":"string","minLength":1,"maxLength":80},"entry":{"type":"string","minLength":1,"maxLength":240},"sdk":{"type":"number","enum":[1]},"controls":{"type":"object","additionalProperties":{"type":"string","minLength":1,"maxLength":160}}},"required":["name","entry","sdk","controls"],"additionalProperties":false},"uploadId":{"type":["string","null"],"minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."}},"required":["id","worldId","versionNumber","status","notes","checks","screenshotKeys","bytesUnpacked","createdAt","publishedAt","retiredAt","manifest","uploadId"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/versions/{versionId}":{"get":{"operationId":"get..me.versions.versionId.","summary":"Read an owned version including validation results.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix.","name":"versionId","in":"path"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"worldId":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"versionNumber":{"type":"integer","exclusiveMinimum":0},"status":{"type":"string","enum":["pending","validating","ready","rejected","retired"]},"notes":{"type":["string","null"]},"checks":{"type":["array","null"],"items":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string","enum":["passed","failed","skipped"]},"message":{"type":"string"}},"required":["name","status","message"]}},"screenshotKeys":{"type":"array","items":{"type":"string"}},"bytesUnpacked":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"},"retiredAt":{"type":["string","null"],"format":"date-time"},"manifest":{"type":["object","null"],"properties":{"name":{"type":"string","minLength":1,"maxLength":80},"entry":{"type":"string","minLength":1,"maxLength":240},"sdk":{"type":"number","enum":[1]},"controls":{"type":"object","additionalProperties":{"type":"string","minLength":1,"maxLength":160}}},"required":["name","entry","sdk","controls"],"additionalProperties":false},"uploadId":{"type":["string","null"],"minLength":17,"maxLength":17,"pattern":"^upload_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive upload identifier with 10 safe-alphabet characters after the prefix."}},"required":["id","worldId","versionNumber","status","notes","checks","screenshotKeys","bytesUnpacked","createdAt","publishedAt","retiredAt","manifest","uploadId"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/versions/{versionId}/preview":{"post":{"operationId":"post..versions.versionId.preview","summary":"Issue a 15-minute private preview URL. Each asset checks the owner grant; the source ZIP is never served.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix.","name":"versionId","in":"path"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"worldId":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"versionId":{"type":"string","minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"expiresAt":{"type":"string","format":"date-time"},"url":{"type":"string","format":"uri"}},"required":["worldId","versionId","expiresAt","url"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/worlds/{worldId}/publish":{"post":{"operationId":"post..worlds.worldId.publish","summary":"Promote a validated immutable version and atomically change the published pointer. Select an earlier version to roll back. Requires worlds:write.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"versionId":{"type":"string","minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."}},"required":["versionId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"worldId":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"versionId":{"type":"string","minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"status":{"type":"string","enum":["published"]}},"required":["worldId","versionId","status"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/worlds/{worldId}/offline":{"post":{"operationId":"post..worlds.worldId.offline","summary":"Take your world offline. Requires worlds:write.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"responses":{"200":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["offline"]}},"required":["status"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/export":{"post":{"operationId":"post..me.export","summary":"Download a ZIP with one JSON file per owned table; credential secrets and hashes are excluded. Requires browser sign-in within 10 minutes.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"responses":{"200":{"description":"Account ZIP archive.","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/account":{"delete":{"operationId":"delete..me.account","summary":"Revoke credentials immediately and queue full data/file deletion. Requires browser sign-in within 10 minutes and typed DELETE.","description":"All private responses use no-store. Browser mutations require the configured Origin. POST/PUT requests through CloudFront include x-amz-content-sha256 containing the SHA-256 of the exact request body. ","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"confirmation":{"type":"string","enum":["DELETE"]}},"required":["confirmation"],"additionalProperties":false}}}},"responses":{"202":{"description":"Successful private response; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","minLength":20,"maxLength":20,"pattern":"^job_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{16}$","description":"Case-sensitive job identifier with 16 safe-alphabet characters after the prefix."}},"required":["jobId"]}}}},"400":{"description":"Invalid input or expired sign-in link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Missing scope, browser session, fresh sign-in, or matching Origin.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Missing resource or resource owned by someone else.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Conflicting handle, idempotency key, or version state.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"410":{"description":"The upload window has expired. Allocate a new upload with a new key.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"413":{"description":"Request body or uploaded file exceeds its limit.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limit reached. Retry-After header and details.retryAt give the next allowed attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/community":{"get":{"operationId":"community.get","summary":"Read server-evaluated community and play-counting flags. Personal state is returned by me.get.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"community":{"type":"boolean"},"comments":{"type":"boolean"},"playCounting":{"type":"boolean"},"liked":{"type":"boolean","default":false},"disliked":{"type":"boolean","default":false},"favorited":{"type":"boolean","default":false},"following":{"type":"boolean","default":false}},"required":["community","comments","playCounting"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/favorites":{"get":{"operationId":"favorites.list","summary":"List only your saved published worlds, newest favorite first. Requires read; never cached.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"title":{"type":"string"},"tagline":{"type":"string"},"description":{"type":"string"},"thumbnailKey":{"type":["string","null"]},"status":{"type":"string","enum":["published","offline","removed"]},"currentVersionId":{"type":["string","null"],"minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"publishedAt":{"type":["string","null"],"format":"date-time"},"playsTotal":{"type":"integer","minimum":0},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"bytesUnpacked":{"type":["integer","null"],"minimum":0},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z0-9][a-z0-9_-]*$"}},"creator":{"type":"object","properties":{"id":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"handle":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"displayName":{"type":"string"},"bio":{"type":"string"},"avatarKey":{"type":["string","null"]}},"required":["id","handle","displayName","bio","avatarKey"]}},"required":["id","title","tagline","description","thumbnailKey","status","currentVersionId","publishedAt","playsTotal","likesTotal","dislikesTotal","bytesUnpacked","tags","creator"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/following":{"get":{"operationId":"following.list","summary":"List published worlds by creators you follow, newest published first. Requires read; never cached.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"title":{"type":"string"},"tagline":{"type":"string"},"description":{"type":"string"},"thumbnailKey":{"type":["string","null"]},"status":{"type":"string","enum":["published","offline","removed"]},"currentVersionId":{"type":["string","null"],"minLength":18,"maxLength":18,"pattern":"^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."},"publishedAt":{"type":["string","null"],"format":"date-time"},"playsTotal":{"type":"integer","minimum":0},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"bytesUnpacked":{"type":["integer","null"],"minimum":0},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z0-9][a-z0-9_-]*$"}},"creator":{"type":"object","properties":{"id":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"handle":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"displayName":{"type":"string"},"bio":{"type":"string"},"avatarKey":{"type":["string","null"]}},"required":["id","handle","displayName","bio","avatarKey"]}},"required":["id","title","tagline","description","thumbnailKey","status","currentVersionId","publishedAt","playsTotal","likesTotal","dislikesTotal","bytesUnpacked","tags","creator"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/me/followed-creators":{"get":{"operationId":"follows.list","summary":"List your followed creators, newest follow first. Requires read.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"handle":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"displayName":{"type":"string"},"bio":{"type":"string"},"avatarKey":{"type":["string","null"]}},"required":["id","handle","displayName","bio","avatarKey"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/worlds/{worldId}/comments":{"get":{"operationId":"comments.list","summary":"Read plain-text comments, newest first, with deletion placeholders. Viewer controls are private; no-store.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":18,"maxLength":18,"pattern":"^comment_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive comment identifier with 10 safe-alphabet characters after the prefix."},"worldId":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"body":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"editedAt":{"type":["string","null"],"format":"date-time"},"deletedAt":{"type":["string","null"],"format":"date-time"},"author":{"type":["object","null"],"properties":{"id":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"handle":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"},"displayName":{"type":"string"},"bio":{"type":"string"},"avatarKey":{"type":["string","null"]}},"required":["id","handle","displayName","bio","avatarKey"]},"canEdit":{"type":"boolean"},"canDelete":{"type":"boolean"}},"required":["id","worldId","body","createdAt","editedAt","deletedAt","author","canEdit","canDelete"]}},"nextCursor":{"type":["string","null"]},"canComment":{"type":"boolean"},"commentsEnabled":{"type":"boolean"}},"required":["items","nextCursor","canComment","commentsEnabled"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"post":{"operationId":"comments.create","summary":"Post 1–2,000 plain-text characters. Requires social:write, community and comments enabled. One per ten seconds and thirty per hour.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. Reuse Idempotency-Key on retries for 24 hours.","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"},{"schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[\\P{Cc}\\t\\r\\n]*$/u"}},"required":["body"],"additionalProperties":false}}}},"responses":{"201":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":18,"maxLength":18,"pattern":"^comment_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive comment identifier with 10 safe-alphabet characters after the prefix."}},"required":["id"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/comments/{commentId}":{"patch":{"operationId":"comments.edit","summary":"Edit your own live comment. Requires social:write and comments enabled.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":18,"maxLength":18,"pattern":"^comment_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive comment identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive comment identifier with 10 safe-alphabet characters after the prefix.","name":"commentId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[\\P{Cc}\\t\\r\\n]*$/u"}},"required":["body"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"boolean","enum":[true]}},"required":["updated"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"delete":{"operationId":"comments.delete","summary":"Erase a comment body and preserve its place. Only the author or world creator, with social:write.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":18,"maxLength":18,"pattern":"^comment_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive comment identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive comment identifier with 10 safe-alphabet characters after the prefix.","name":"commentId","in":"path"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean","enum":[true]}},"required":["deleted"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/worlds/{worldId}/plays/start":{"post":{"operationId":"plays.start","summary":"Start a human- or AI-controlled visit and return a signed one-hour ticket bound to this visitor, IP and world version. Sets a private HttpOnly anonymous cookie when needed. Up to 60 starts per account or visitor per minute; shared-network and service budgets also apply. Never call for unpublished previews or metadata-only reads.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"token":{"type":"string"}},"required":["enabled","token"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/worlds/{worldId}/plays":{"post":{"operationId":"plays.count","summary":"Submit the visit ticket after at least ten seconds of live world heartbeats. Human and AI visits count equally. Server time, visitor, IP and version are checked. Dedupes per UTC day and account or visitor cookie and excludes the signed-in creator. Shared IPs do not impose a daily play cap. Up to 120 submissions per account or visitor per minute; shared-network and service budgets also apply.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","minLength":20,"maxLength":2048}},"required":["token"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"counted":{"type":"boolean"}},"required":["counted"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/worlds/{worldId}/like":{"put":{"operationId":"likes.add","summary":"Add your like, idempotently. Adding a like or dislike replaces the opposite vote. Requires social:write and community enabled. Votes and follows share 300 additions per hour.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"liked":{"type":"boolean"},"disliked":{"type":"boolean"}},"required":["active","likesTotal","dislikesTotal","liked","disliked"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"delete":{"operationId":"likes.remove","summary":"Remove your like, idempotently. Adding a like or dislike replaces the opposite vote. Requires social:write and community enabled. Votes and follows share 300 additions per hour.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"liked":{"type":"boolean"},"disliked":{"type":"boolean"}},"required":["active","likesTotal","dislikesTotal","liked","disliked"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/worlds/{worldId}/dislike":{"put":{"operationId":"dislikes.add","summary":"Add your dislike, idempotently. Adding a like or dislike replaces the opposite vote. Requires social:write and community enabled. Votes and follows share 300 additions per hour.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"liked":{"type":"boolean"},"disliked":{"type":"boolean"}},"required":["active","likesTotal","dislikesTotal","liked","disliked"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"delete":{"operationId":"dislikes.remove","summary":"Remove your dislike, idempotently. Adding a like or dislike replaces the opposite vote. Requires social:write and community enabled. Votes and follows share 300 additions per hour.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"liked":{"type":"boolean"},"disliked":{"type":"boolean"}},"required":["active","likesTotal","dislikesTotal","liked","disliked"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/worlds/{worldId}/favorite":{"put":{"operationId":"favorites.add","summary":"Add your favorite, idempotently. Adding a like or dislike replaces the opposite vote. Requires social:write and community enabled. Votes and follows share 300 additions per hour.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"liked":{"type":"boolean"},"disliked":{"type":"boolean"}},"required":["active","likesTotal","dislikesTotal","liked","disliked"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"delete":{"operationId":"favorites.remove","summary":"Remove your favorite, idempotently. Adding a like or dislike replaces the opposite vote. Requires social:write and community enabled. Votes and follows share 300 additions per hour.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":16,"maxLength":16,"pattern":"^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.","name":"worldId","in":"path"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"},"likesTotal":{"type":"integer","minimum":0},"dislikesTotal":{"type":"integer","minimum":0},"liked":{"type":"boolean"},"disliked":{"type":"boolean"}},"required":["active","likesTotal","dislikesTotal","liked","disliked"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/users/{creatorId}/follow":{"put":{"operationId":"follows.add","summary":"Follow a creator idempotently. Requires social:write; self-follow is refused. Votes and follows share 300 additions per hour.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix.","name":"creatorId","in":"path"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"following":{"type":"boolean"}},"required":["following"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"delete":{"operationId":"follows.remove","summary":"Unfollow a creator idempotently. Requires social:write; self-follow is refused. Votes and follows share 300 additions per hour.","description":"Browser mutations require the configured Origin. Include the exact request-body SHA-256 in x-amz-content-sha256 for AWS origin signing. Lists use cursor pagination. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix.","name":"creatorId","in":"path"}],"responses":{"200":{"description":"Success; Cache-Control: no-store.","content":{"application/json":{"schema":{"type":"object","properties":{"following":{"type":"boolean"}},"required":["following"]}}}},"400":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid request, missing authentication/scope, conflicting state, or resource unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Rate limited; Retry-After identifies when to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Feature disabled or service unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/reports":{"post":{"operationId":"reports.create","summary":"Report a visible world, comment, profile or thumbnail. Requires social:write, safety and reports flags; 20/day. Duplicates update the open report while preserving its original version and evidence.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. Reuse Idempotency-Key with the same body on retries.","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"targetType":{"type":"string","enum":["world","comment","profile","thumbnail"]},"targetId":{"type":"string"},"reason":{"type":"string","enum":["mature_content","harassment","hate","violence","spam","copyright","unsafe_behavior","other"]},"note":{"type":"string","maxLength":2000,"default":""}},"required":["targetType","targetId","reason"],"additionalProperties":false}}}},"responses":{"201":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":17,"maxLength":17,"pattern":"^report_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive report identifier with 10 safe-alphabet characters after the prefix."}},"required":["id"]}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/notices":{"get":{"operationId":"notices.list","summary":"List only your notices, newest first. Requires read.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/notices/{noticeId}/read":{"post":{"operationId":"notices.read","summary":"Mark your own notice read. Requires read.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":17,"maxLength":17,"pattern":"^notice_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive notice identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive notice identifier with 10 safe-alphabet characters after the prefix.","name":"noticeId","in":"path"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"read":{"type":"boolean"}},"required":["read"]}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/mod/reports":{"get":{"operationId":"moderation.queue","summary":"Moderator/admin only, safety flag required. Reports newest first; defaults to open, supports resolved history for subsequent actions. Includes age counts and 30-day resolution measure.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["open","resolved"],"default":"open"},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/mod/reports/{reportId}":{"get":{"operationId":"moderation.report","summary":"Moderator/admin only. Read original evidence and the most recent 50 actions.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":17,"maxLength":17,"pattern":"^report_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive report identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive report identifier with 10 safe-alphabet characters after the prefix.","name":"reportId","in":"path"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/mod/reports/{reportId}/actions":{"post":{"operationId":"moderation.act","summary":"Moderator/admin with read and social:write. Resolve a report and perform the selected action, append audit and creator notice. Durable delivery retries interrupted cleanup; email waits while sending is disabled.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. Reuse Idempotency-Key with the same body on retries.","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":17,"maxLength":17,"pattern":"^report_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive report identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive report identifier with 10 safe-alphabet characters after the prefix.","name":"reportId","in":"path"},{"schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["take_offline","restore","remove_comment","remove_image","warn","suspend","unsuspend","clear_anomaly","dismiss"]},"reason":{"type":"string","minLength":3,"maxLength":2000}},"required":["action","reason"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/admin/users":{"get":{"operationId":"admin.users","summary":"Admin only. Exact email or handle lookup; no public account enumeration.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":254},"required":true,"name":"q","in":"query"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/admin/users/{userId}/role":{"put":{"operationId":"admin.roles.set","summary":"Admin only with a browser sign-in under ten minutes old. Last active admin is protected; role changes take effect next request.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix.","name":"userId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["user","moderator","admin"]}},"required":["role"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/admin/flags":{"get":{"operationId":"admin.flags.list","summary":"Admin only. Complete flag configuration and continuous-full-rollout timestamps.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]},{"bearer":[]}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}},"put":{"operationId":"admin.flags.save","summary":"Admin with social:write. Create/update and audit full old/new values. Public flags must be all-or-nothing. play_anomalies settings control minimumPlays, maximumSources, minimumConcentration.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]},{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,79}$"},"enabled":{"type":"boolean"},"rolloutPercent":{"type":"integer","minimum":0,"maximum":100},"allowedUserIds":{"type":"array","items":{"type":"string","minLength":15,"maxLength":15,"pattern":"^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."},"maxItems":500},"note":{"type":"string","minLength":1,"maxLength":500},"affectsPublicPages":{"type":"boolean"},"settings":{"type":"object","additionalProperties":{},"default":{}}},"required":["key","enabled","rolloutPercent","allowedUserIds","note","affectsPublicPages"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/admin/flags/{key}":{"delete":{"operationId":"admin.flags.delete","summary":"Admin with social:write. Delete a flag and audit its former configuration. Missing feature gates fail closed.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,79}$"},"required":true,"name":"key","in":"path"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/admin/audit":{"get":{"operationId":"admin.audit","summary":"Admin only. Cursor-paginated role/flag audit records, newest first.","description":"Always Cache-Control: no-store. Browser mutations require the configured Origin; all clients send body SHA-256 in x-amz-content-sha256. ","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":60,"default":24},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":1024},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"401":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"403":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"404":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"409":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"429":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}},"503":{"description":"Invalid input, missing authority, conflicting state, rate limit, or disabled feature.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["code","message","details"]}}}}}}},"/api/v1/mod/reports/{reportId}/assets/{index}":{"get":{"operationId":"moderation.evidence","summary":"Moderator/admin only. Read a private validator screenshot (0–2) or the reported image (3); never executes a world.","security":[{"session":[]},{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":17,"maxLength":17,"pattern":"^report_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$","description":"Case-sensitive report identifier with 10 safe-alphabet characters after the prefix."},"required":true,"description":"Case-sensitive report identifier with 10 safe-alphabet characters after the prefix.","name":"reportId","in":"path"},{"schema":{"type":["integer","null"],"minimum":0,"maximum":3},"required":false,"name":"index","in":"path"}],"responses":{"200":{"description":"WebP image, no-store.","content":{"image/webp":{"schema":{"type":"string","format":"binary"}}}},"403":{"description":"Staff authority required."},"404":{"description":"Evidence unavailable."}}}}},"webhooks":{}}