{"openapi":"3.1.0","info":{"title":"Clan Labs API v2","version":"3.0.0","description":"The public Clan Labs API v2 contract. Read the guides and generated endpoint reference at https://docs.clanlabs.co/api-reference."},"servers":[{"url":"https://v3.api.clanlabs.co","description":"Clan Labs API v2"}],"security":[{"BearerKey":[],"ClanId":[]}],"tags":[{"name":"Members","description":"Member profiles and progression"},{"name":"Configuration","description":"Ranks, medals, qualifications"},{"name":"Moderation","description":"Blacklists and warnings"},{"name":"Events","description":"Community event lifecycle and curated types"}],"paths":{"/v2/members":{"get":{"summary":"List members","tags":["Members"],"description":"Cursor paginated on `userId`. Pass `meta.nextCursor` as `?cursor=` for the next page; it is null when there are no further pages.\n\n**Requires permission:** `members.read` — View members (Read member profiles and management data.)\n\n**Feature:** `members`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string"},"example":"1234567","in":"query","name":"cursor","required":false,"description":"The `userId` of the last member from the previous page. Take it from `meta.nextCursor`."},{"schema":{"type":"string"},"example":"50","in":"query","name":"limit","required":false,"description":"Page size, 1-100. Defaults to 50. Larger values are clamped to 100."}],"x-required-permission":"members.read","x-community-feature":"members","responses":{"200":{"description":"A page of members","content":{"application/json":{"schema":{"description":"A page of members","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Member"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}":{"get":{"summary":"Fetch one member","tags":["Members"],"description":"Creates the member if it does not exist. Runs the AutoRank check unless the profile was synced within the staleness window; `?refresh=1` forces a sync first.\n\n**Requires permission:** `members.read` — View members (Read member profiles and management data.)\n\n**Feature:** `members`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string","enum":["1","true"]},"in":"query","name":"refresh","required":false,"description":"Bypass the staleness window: sync from Roblox and run the AutoRank check before responding."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.read","x-community-feature":"members","responses":{"200":{"description":"The member","content":{"application/json":{"schema":{"description":"The member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/experience":{"post":{"summary":"Change a member's experience","tags":["Members"],"description":"Writes an audit entry and re-runs AutoRank. `increment`/`decrement` are clamped to `Experience.AwardLimits.API`; `set` deliberately is not.\n\n**Requires permission:** `members.experience.write` — Manage member experience (Award, remove, or set member experience.)\n\n**Feature:** `experience`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["op","amount"],"additionalProperties":false,"properties":{"op":{"type":"string","enum":["increment","decrement","set"],"description":"`increment` and `decrement` are clamped to the community's per-call API award limit; `set` is not."},"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"example":10},"reason":{"type":"string","minLength":1,"maxLength":256}}}}}},"parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.experience.write","x-community-feature":"experience","responses":{"200":{"description":"The member","content":{"application/json":{"schema":{"description":"The member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/quota-points":{"post":{"summary":"Change a member's quota points","tags":["Members"],"description":"`increment`/`decrement` are clamped to `Quota.AwardLimits.API`. Quota points never go below zero.\n\n**Requires permission:** `members.quota.write` — Manage member quota (Award, remove, or set member quota points.)\n\n**Feature:** `quota`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["op","amount"],"additionalProperties":false,"properties":{"op":{"type":"string","enum":["increment","decrement","set"],"description":"`increment` and `decrement` are clamped to the community's per-call API award limit; `set` is not."},"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"example":10},"reason":{"type":"string","minLength":1,"maxLength":256}}}}}},"parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.quota.write","x-community-feature":"quota","responses":{"200":{"description":"The member","content":{"application/json":{"schema":{"description":"The member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/rank":{"put":{"summary":"Set a member's rank","tags":["Members"],"description":"Identify the rank by `rankUniqueId` (the Roblox role resource id) or `rankId` (the 0-255 rank number).\n\n**Requires permission:** `members.ranks.write` — Manage member ranks (Promote, demote, or set member ranks.)\n\n**Feature:** `rank-management`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"oneOf":[{"required":["rankUniqueId"]},{"required":["rankId"]}],"properties":{"rankUniqueId":{"type":"number","example":900002},"rankId":{"type":"number","minimum":0,"maximum":255,"example":20}}}}}},"parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.ranks.write","x-community-feature":"rank-management","responses":{"200":{"description":"The updated member","content":{"application/json":{"schema":{"description":"The updated member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/rank/promote":{"post":{"summary":"Promote a member one rank","tags":["Members"],"description":"Moves the member to the next rank by rank number.\n\n**Requires permission:** `members.ranks.write` — Manage member ranks (Promote, demote, or set member ranks.)\n\n**Feature:** `rank-management`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.ranks.write","x-community-feature":"rank-management","responses":{"200":{"description":"The updated member","content":{"application/json":{"schema":{"description":"The updated member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/rank/demote":{"post":{"summary":"Demote a member one rank","tags":["Members"],"description":"Moves the member to the previous rank by rank number.\n\n**Requires permission:** `members.ranks.write` — Manage member ranks (Promote, demote, or set member ranks.)\n\n**Feature:** `rank-management`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.ranks.write","x-community-feature":"rank-management","responses":{"200":{"description":"The updated member","content":{"application/json":{"schema":{"description":"The updated member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/medals":{"post":{"summary":"Award a medal","tags":["Members"],"description":"Idempotent — awarding a medal the member already holds is a no-op. `name` is the medal's name, which is unique per community.\n\n**Requires permission:** `members.medals.write` — Manage member medals (Award or remove medals from members.)\n\n**Feature:** `medals`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"example":"Long Service"}}}}}},"parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.medals.write","x-community-feature":"medals","responses":{"200":{"description":"The member","content":{"application/json":{"schema":{"description":"The member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/medals/{name}":{"delete":{"summary":"Remove a medal","tags":["Members"],"description":"**Requires permission:** `members.medals.write` — Manage member medals (Award or remove medals from members.)\n\n**Feature:** `medals`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."},{"schema":{"type":"string"},"example":"Long Service","in":"path","name":"name","required":true,"description":"The medal's name."}],"x-required-permission":"members.medals.write","x-community-feature":"medals","responses":{"200":{"description":"The member","content":{"application/json":{"schema":{"description":"The member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/qualifications":{"post":{"summary":"Award a qualification","tags":["Members"],"description":"Idempotent — awarding a qualification the member already holds is a no-op. `name` is the qualification's name, which is unique per community.\n\n**Requires permission:** `members.qualifications.write` — Manage member qualifications (Award or remove qualifications from members.)\n\n**Feature:** `qualifications`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"example":"Marksman"}}}}}},"parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.qualifications.write","x-community-feature":"qualifications","responses":{"200":{"description":"The member","content":{"application/json":{"schema":{"description":"The member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/qualifications/{name}":{"delete":{"summary":"Remove a qualification","tags":["Members"],"description":"**Requires permission:** `members.qualifications.write` — Manage member qualifications (Award or remove qualifications from members.)\n\n**Feature:** `qualifications`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."},{"schema":{"type":"string"},"example":"Marksman","in":"path","name":"name","required":true,"description":"The qualification's name."}],"x-required-permission":"members.qualifications.write","x-community-feature":"qualifications","responses":{"200":{"description":"The member","content":{"application/json":{"schema":{"description":"The member","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Member"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/ranks":{"get":{"summary":"List ranks","tags":["Configuration"],"description":"Ordered by Roblox rank number ascending. Note `uniqueId` (the Roblox role resource id) is what rank changes target, not `rankId`.\n\n**Requires permission:** `ranks.read` — View ranks (Read configured community ranks.)\n\n**Feature:** `ranks`. Communities whose tier or trial does not include it receive 403.","x-required-permission":"ranks.read","x-community-feature":"ranks","responses":{"200":{"description":"The community's ranks","content":{"application/json":{"schema":{"description":"The community's ranks","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Rank"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/ranks/{uniqueId}":{"get":{"summary":"Fetch one rank","tags":["Configuration"],"description":"**Requires permission:** `ranks.read` — View ranks (Read configured community ranks.)\n\n**Feature:** `ranks`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string"},"example":"900001","in":"path","name":"uniqueId","required":true,"description":"The rank's Roblox role resource id."}],"x-required-permission":"ranks.read","x-community-feature":"ranks","responses":{"200":{"description":"The rank","content":{"application/json":{"schema":{"description":"The rank","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Rank"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/medals":{"get":{"summary":"List medals","tags":["Configuration"],"description":"**Requires permission:** `medals.read` — View medals (Read configured community medals.)\n\n**Feature:** `medals`. Communities whose tier or trial does not include it receive 403.","x-required-permission":"medals.read","x-community-feature":"medals","responses":{"200":{"description":"The community's medals","content":{"application/json":{"schema":{"description":"The community's medals","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CatalogEntry"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/medals/{name}":{"get":{"summary":"Fetch one medal by name","tags":["Configuration"],"description":"`name` is the medal's name, which is unique per community.\n\n**Requires permission:** `medals.read` — View medals (Read configured community medals.)\n\n**Feature:** `medals`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string"},"example":"Long Service","in":"path","name":"name","required":true}],"x-required-permission":"medals.read","x-community-feature":"medals","responses":{"200":{"description":"The medal","content":{"application/json":{"schema":{"description":"The medal","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/CatalogEntry"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/qualifications":{"get":{"summary":"List qualifications","tags":["Configuration"],"description":"**Requires permission:** `qualifications.read` — View qualifications (Read configured community qualifications.)\n\n**Feature:** `qualifications`. Communities whose tier or trial does not include it receive 403.","x-required-permission":"qualifications.read","x-community-feature":"qualifications","responses":{"200":{"description":"The community's qualifications","content":{"application/json":{"schema":{"description":"The community's qualifications","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CatalogEntry"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/qualifications/{name}":{"get":{"summary":"Fetch one qualification by name","tags":["Configuration"],"description":"`name` is the qualification's name, which is unique per community.\n\n**Requires permission:** `qualifications.read` — View qualifications (Read configured community qualifications.)\n\n**Feature:** `qualifications`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string"},"example":"Marksman","in":"path","name":"name","required":true}],"x-required-permission":"qualifications.read","x-community-feature":"qualifications","responses":{"200":{"description":"The qualification","content":{"application/json":{"schema":{"description":"The qualification","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/CatalogEntry"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/blacklists":{"get":{"summary":"List blacklist entries","tags":["Moderation"],"description":"**Requires permission:** `blacklists.read` — View blacklists (Read community blacklist records.)\n\n**Feature:** `blacklists`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["User","Group"]},"in":"query","name":"type","required":false,"description":"Restrict to one blacklist type."}],"x-required-permission":"blacklists.read","x-community-feature":"blacklists","responses":{"200":{"description":"The community's blacklist entries","content":{"application/json":{"schema":{"description":"The community's blacklist entries","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Blacklist"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}},"post":{"summary":"Create a blacklist entry","tags":["Moderation"],"description":"A community may blacklist a given target once; a duplicate returns 409.\n\n**Requires permission:** `blacklists.write` — Manage blacklists (Create, update, or remove blacklist records.)\n\n**Feature:** `blacklists`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type","id","name","description"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["User","Group"]},"id":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Roblox user id or group id, per `type`.","example":987654},"name":{"type":"string","minLength":1,"description":"Display name for the entry. The canonical Roblox name is used instead whenever it can be resolved; this is the fallback when Roblox is unreachable.","example":"Troublemaker"},"description":{"type":"string","minLength":1,"example":"Exploiting"}}}}}},"x-required-permission":"blacklists.write","x-community-feature":"blacklists","responses":{"201":{"description":"The created entry","content":{"application/json":{"schema":{"description":"The created entry","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Blacklist"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"That target is already blacklisted.","content":{"application/json":{"schema":{"description":"That target is already blacklisted.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/blacklists/{type}/{id}":{"get":{"summary":"Fetch one blacklist entry","tags":["Moderation"],"description":"**Requires permission:** `blacklists.read` — View blacklists (Read community blacklist records.)\n\n**Feature:** `blacklists`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["User","Group"]},"in":"path","name":"type","required":true},{"schema":{"type":"string"},"example":"987654","in":"path","name":"id","required":true,"description":"Roblox user id or group id, per `type`."}],"x-required-permission":"blacklists.read","x-community-feature":"blacklists","responses":{"200":{"description":"The blacklist entry","content":{"application/json":{"schema":{"description":"The blacklist entry","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Blacklist"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}},"patch":{"summary":"Update a blacklist entry's description","tags":["Moderation"],"description":"**Requires permission:** `blacklists.write` — Manage blacklists (Create, update, or remove blacklist records.)\n\n**Feature:** `blacklists`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["description"],"additionalProperties":false,"properties":{"description":{"type":"string","minLength":1,"example":"Repeat offender"}}}}}},"parameters":[{"schema":{"type":"string","enum":["User","Group"]},"in":"path","name":"type","required":true},{"schema":{"type":"string"},"example":"987654","in":"path","name":"id","required":true,"description":"Roblox user id or group id, per `type`."}],"x-required-permission":"blacklists.write","x-community-feature":"blacklists","responses":{"200":{"description":"The blacklist entry","content":{"application/json":{"schema":{"description":"The blacklist entry","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Blacklist"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}},"delete":{"summary":"Remove a blacklist entry","tags":["Moderation"],"description":"**Requires permission:** `blacklists.write` — Manage blacklists (Create, update, or remove blacklist records.)\n\n**Feature:** `blacklists`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["User","Group"]},"in":"path","name":"type","required":true},{"schema":{"type":"string"},"example":"987654","in":"path","name":"id","required":true,"description":"Roblox user id or group id, per `type`."}],"x-required-permission":"blacklists.write","x-community-feature":"blacklists","responses":{"204":{"description":"Removed"},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/warnings":{"get":{"summary":"List warnings","tags":["Moderation"],"description":"Newest first. Offset paginated with `limit` and `skip`. An unrecognised `targetUsername` returns an empty list rather than everything.\n\n**Requires permission:** `warnings.read` — View warnings (Read community warning records.)\n\n**Feature:** `warnings`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","pattern":"^(?:0|[1-9][0-9]*)$"},"in":"query","name":"targetId","required":false,"description":"Filter by Roblox user id."},{"schema":{"type":"string"},"in":"query","name":"targetUsername","required":false,"description":"Filter by Roblox username."},{"schema":{"type":"string","enum":["Low","Medium","High"]},"in":"query","name":"severity","required":false},{"schema":{"type":"string","pattern":"^(?:0|[1-9][0-9]*)$"},"in":"query","name":"limit","required":false,"description":"Page size, 1-200. Defaults to 50."},{"schema":{"type":"string","pattern":"^(?:0|[1-9][0-9]*)$"},"in":"query","name":"skip","required":false,"description":"Rows to skip. Defaults to 0."}],"x-required-permission":"warnings.read","x-community-feature":"warnings","responses":{"200":{"description":"A page of warnings","content":{"application/json":{"schema":{"description":"A page of warnings","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}},"post":{"summary":"Issue a warning","tags":["Moderation"],"description":"Identify the target by exactly one of `targetUserId` or `targetUsername`. An optional invoker identifies the in-game administrator; the API key is captured separately on the audit entry.\n\n**Requires permission:** `warnings.write` — Manage warnings (Create, update, or remove warning records.)\n\n**Feature:** `warnings`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["severity","description"],"additionalProperties":false,"oneOf":[{"required":["targetUserId"]},{"required":["targetUsername"]}],"properties":{"targetUserId":{"type":"integer","minimum":1,"maximum":9007199254740991},"targetUsername":{"type":"string","minLength":3,"maxLength":20,"example":"Builderman"},"severity":{"type":"string","enum":["Low","Medium","High"]},"description":{"type":"string","minLength":1,"maxLength":1024},"invokerUserId":{"type":"integer","minimum":1,"maximum":9007199254740991},"invokerUsername":{"type":"string","minLength":3,"maxLength":20,"example":"Builderman"}}}}}},"x-required-permission":"warnings.write","x-community-feature":"warnings","responses":{"201":{"description":"The issued warning","content":{"application/json":{"schema":{"description":"The issued warning","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Warning"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/warnings/{id}":{"get":{"summary":"Fetch one warning","tags":["Moderation"],"description":"**Requires permission:** `warnings.read` — View warnings (Read community warning records.)\n\n**Feature:** `warnings`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","pattern":"^(?:0|[1-9][0-9]*)$"},"example":"1","in":"path","name":"id","required":true,"description":"The warning's per-community sequential id."}],"x-required-permission":"warnings.read","x-community-feature":"warnings","responses":{"200":{"description":"The warning","content":{"application/json":{"schema":{"description":"The warning","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Warning"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}},"patch":{"summary":"Update a warning","tags":["Moderation"],"description":"Supply at least one field. The target cannot be changed.\n\n**Requires permission:** `warnings.write` — Manage warnings (Create, update, or remove warning records.)\n\n**Feature:** `warnings`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"severity":{"type":"string","enum":["Low","Medium","High"]},"description":{"type":"string","minLength":1,"maxLength":1024}}}}}},"parameters":[{"schema":{"type":"string","pattern":"^(?:0|[1-9][0-9]*)$"},"example":"1","in":"path","name":"id","required":true,"description":"The warning's per-community sequential id."}],"x-required-permission":"warnings.write","x-community-feature":"warnings","responses":{"200":{"description":"The warning","content":{"application/json":{"schema":{"description":"The warning","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Warning"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}},"delete":{"summary":"Delete a warning","tags":["Moderation"],"description":"Writes the full pre-delete snapshot so the Dashboard can roll the deletion back.\n\n**Requires permission:** `warnings.write` — Manage warnings (Create, update, or remove warning records.)\n\n**Feature:** `warnings`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","pattern":"^(?:0|[1-9][0-9]*)$"},"example":"1","in":"path","name":"id","required":true,"description":"The warning's per-community sequential id."}],"x-required-permission":"warnings.write","x-community-feature":"warnings","responses":{"204":{"description":"Deleted"},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/suspensions":{"get":{"summary":"List a member's suspensions","tags":["Members"],"description":"Newest first, including restored and cancelled records. Write permission implies read because the permission catalog has no suspension-read scope.\n\n**Requires permission:** `members.suspensions.write` — Manage member suspensions (Create, restore, or cancel member suspensions.)\n\n**Feature:** `suspensions`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.suspensions.write","x-community-feature":"suspensions","responses":{"200":{"description":"The member's suspension history","content":{"application/json":{"schema":{"description":"The member's suspension history","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Suspension"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}},"post":{"summary":"Suspend a member","tags":["Members"],"description":"Claims the suspension before changing Roblox and verifies the resulting role. A member may hold only one active suspension.\n\n**Requires permission:** `members.suspensions.write` — Manage member suspensions (Create, restore, or cancel member suspensions.)\n\n**Feature:** `suspensions`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["durationMs","reason"],"additionalProperties":false,"properties":{"durationMs":{"type":"integer","minimum":1,"maximum":9007199254740991},"reason":{"type":"string","minLength":1,"maxLength":1024}}}}}},"parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.suspensions.write","x-community-feature":"suspensions","responses":{"201":{"description":"The created suspension","content":{"application/json":{"schema":{"description":"The created suspension","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Suspension"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/suspensions/restore":{"post":{"summary":"Restore a member's active suspension","tags":["Members"],"description":"Puts the member back on the rank they held before the suspension and marks it `restored`. The role is only changed if the member still holds the suspended role, so a manual promotion or demotion is preserved.\n\n**Requires permission:** `members.suspensions.write` — Manage member suspensions (Create, restore, or cancel member suspensions.)\n\n**Feature:** `suspensions`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.suspensions.write","x-community-feature":"suspensions","responses":{"200":{"description":"The updated suspension","content":{"application/json":{"schema":{"description":"The updated suspension","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Suspension"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/members/{userId}/suspensions/cancel":{"post":{"summary":"Cancel a member's active suspension","tags":["Members"],"description":"Voids the suspension without touching the member's Roblox rank, marking it `cancelled`.\n\n**Requires permission:** `members.suspensions.write` — Manage member suspensions (Create, restore, or cancel member suspensions.)\n\n**Feature:** `suspensions`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["userId","username"],"default":"userId"},"in":"query","name":"by","required":false,"description":"How to interpret the identifier in the path. Prefer `username`: under Roblox's scoped user identifiers an in-experience user id is not a global one."},{"schema":{"type":"string"},"example":"1234567","in":"path","name":"userId","required":true,"description":"Roblox user id, or a username when `?by=username` is set."}],"x-required-permission":"members.suspensions.write","x-community-feature":"suspensions","responses":{"200":{"description":"The updated suspension","content":{"application/json":{"schema":{"description":"The updated suspension","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Suspension"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/events":{"get":{"summary":"List events","tags":["Events"],"description":"Newest events first, using cursor pagination.\n\n**Requires permission:** `events.read` — View events (Read community events and curated event types.)\n\n**Feature:** `events`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","enum":["Scheduled","Started","Finished","Cancelled"]},"in":"query","name":"status","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"cursor","required":false,"description":"Last event id from the previous page."},{"schema":{"type":"string","pattern":"^[1-9][0-9]*$"},"in":"query","name":"limit","required":false,"description":"Page size, 1-100. Defaults to 25."}],"x-required-permission":"events.read","x-community-feature":"events","responses":{"200":{"description":"A page of events","content":{"application/json":{"schema":{"description":"A page of events","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}},"post":{"summary":"Create and announce an event","tags":["Events"],"description":"Supply a curated `typeId`, a custom `name`, or both when they agree. Discord announcement delivery is best-effort and never rolls back the stored event.\n\n**Requires permission:** `events.write` — Manage events (Create, run, finish, cancel, and announce community events.)\n\n**Feature:** `events`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["locationPlaceId","hostUserId"],"anyOf":[{"required":["name"]},{"required":["typeId"]}],"properties":{"name":{"type":"string","minLength":1,"maxLength":100},"typeId":{"type":["string","null"],"format":"uuid"},"locationPlaceId":{"type":"integer","minimum":1},"hostUserId":{"type":"integer","minimum":1},"coHostUserId":{"type":["integer","null"],"minimum":1},"mentionRoleId":{"type":["string","null"],"pattern":"^[0-9]{17,20}$"},"notes":{"type":["string","null"],"minLength":1,"maxLength":1024}}}}}},"x-required-permission":"events.write","x-community-feature":"events","responses":{"201":{"description":"The persisted event","content":{"application/json":{"schema":{"description":"The persisted event","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Event"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/events/types":{"get":{"summary":"List curated event types","tags":["Events"],"description":"**Requires permission:** `events.read` — View events (Read community events and curated event types.)\n\n**Feature:** `events`. Communities whose tier or trial does not include it receive 403.","x-required-permission":"events.read","x-community-feature":"events","responses":{"200":{"description":"The configured curated event types","content":{"application/json":{"schema":{"description":"The configured curated event types","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventType"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/events/locations":{"get":{"summary":"List approved event locations","tags":["Events"],"description":"**Requires permission:** `events.read` — View events (Read community events and curated event types.)\n\n**Feature:** `events`. Communities whose tier or trial does not include it receive 403.","x-required-permission":"events.read","x-community-feature":"events","responses":{"200":{"description":"Approved community and division games","content":{"application/json":{"schema":{"description":"Approved community and division games","type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventLocation"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/events/{eventId}":{"get":{"summary":"Fetch one event","tags":["Events"],"description":"**Requires permission:** `events.read` — View events (Read community events and curated event types.)\n\n**Feature:** `events`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","format":"uuid"},"example":"8ca14e0a-60cb-4b43-8a91-0c77bc521d81","in":"path","name":"eventId","required":true,"description":"The event's stable UUID."}],"x-required-permission":"events.read","x-community-feature":"events","responses":{"200":{"description":"The event","content":{"application/json":{"schema":{"description":"The event","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Event"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/events/{eventId}/cancel":{"post":{"summary":"Cancel an event","tags":["Events"],"description":"**Requires permission:** `events.write` — Manage events (Create, run, finish, cancel, and announce community events.)\n\n**Feature:** `events`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","format":"uuid"},"example":"8ca14e0a-60cb-4b43-8a91-0c77bc521d81","in":"path","name":"eventId","required":true,"description":"The event's stable UUID."}],"x-required-permission":"events.write","x-community-feature":"events","responses":{"200":{"description":"The cancelled event","content":{"application/json":{"schema":{"description":"The cancelled event","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Event"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/events/{eventId}/finish":{"post":{"summary":"Finish an event","tags":["Events"],"description":"Accepts JSON or multipart/form-data. In multipart requests, `attendeeUserIds` is a JSON array field and `screenshot` is an image file up to 10 MB. Screenshot delivery to Discord is best-effort; the bot persists durable message and attachment references.\n\n**Requires permission:** `events.write` — Manage events (Create, run, finish, cancel, and announce community events.)\n\n**Feature:** `events`. Communities whose tier or trial does not include it receive 403.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"attendeeUserIds":{"type":"array","maxItems":100,"items":{"type":"integer","minimum":1}},"screenshot":{"type":"string","format":"binary"}}}},"multipart/form-data":{"schema":{"type":"object","additionalProperties":false,"properties":{"attendeeUserIds":{"type":"array","maxItems":100,"items":{"type":"integer","minimum":1}},"screenshot":{"type":"string","format":"binary"}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"example":"8ca14e0a-60cb-4b43-8a91-0c77bc521d81","in":"path","name":"eventId","required":true,"description":"The event's stable UUID."}],"x-required-permission":"events.write","x-community-feature":"events","responses":{"200":{"description":"The finished event","content":{"application/json":{"schema":{"description":"The finished event","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Event"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}},"/v2/events/{eventId}/announce":{"post":{"summary":"Create a fresh Discord announcement","tags":["Events"],"description":"Queues a best-effort re-announcement. The bot replaces the durable announcement reference only after the new message exists.\n\n**Requires permission:** `events.write` — Manage events (Create, run, finish, cancel, and announce community events.)\n\n**Feature:** `events`. Communities whose tier or trial does not include it receive 403.","parameters":[{"schema":{"type":"string","format":"uuid"},"example":"8ca14e0a-60cb-4b43-8a91-0c77bc521d81","in":"path","name":"eventId","required":true,"description":"The event's stable UUID."}],"x-required-permission":"events.write","x-community-feature":"events","responses":{"202":{"description":"The event whose announcement was queued","content":{"application/json":{"schema":{"description":"The event whose announcement was queued","type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Event"},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"description":"The request was malformed or failed validation.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"401":{"description":"The API key is missing, malformed, or not recognised for this community.","content":{"application/json":{"schema":{"description":"The API key is missing, malformed, or not recognised for this community.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"403":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","content":{"application/json":{"schema":{"description":"The key is disabled, lacks the required permission, or the community's subscription or tier does not cover API access or this feature.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"description":"The requested resource does not exist.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"409":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"description":"The request conflicts with current state.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"description":"Rate limited.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"description":"Unexpected server error.","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}}}}},"components":{"securitySchemes":{"BearerKey":{"type":"http","scheme":"bearer","description":"A `cl_live_` API key issued from the Dashboard. A key migrated from V2 is rejected here with 403 `legacy_key_unsupported`."},"ClanId":{"type":"apiKey","in":"header","name":"X-Clan-Id","description":"The community's ClanId."}},"schemas":{"RankSnapshot":{"type":"object","description":"Denormalised rank snapshot stored on the member.","required":["uniqueId","id","name","experience","locked"],"properties":{"uniqueId":{"type":"integer","description":"Roblox role resource id. 0 when unset.","example":900001},"id":{"type":"integer","description":"Roblox rank number, 0-255.","example":10},"name":{"type":"string","example":"Private"},"experience":{"type":"integer","description":"Experience required for this rank.","example":200},"locked":{"type":"boolean","description":"Whether AutoRank may move a member into this rank.","example":false}}},"Member":{"type":"object","required":["userId","username","experience","quotaPoints","medals","qualifications","currentRank","nextRank","perks","createdAt","lastUpdatedAt"],"properties":{"userId":{"type":"integer","description":"Global Roblox user id.","example":1234567},"username":{"type":"string","example":"Builderman"},"experience":{"type":"integer","example":250},"quotaPoints":{"type":"integer","example":3},"medals":{"type":"array","items":{"type":"string"},"description":"Medal names held by the member.","example":["Long Service"]},"qualifications":{"type":"array","items":{"type":"string"},"example":["Marksman"]},"currentRank":{"$ref":"#/components/schemas/RankSnapshot"},"nextRank":{"$ref":"#/components/schemas/RankSnapshot"},"perks":{"type":"object","required":["boosting","primary"],"properties":{"boosting":{"type":"boolean"},"primary":{"type":"boolean"}}},"createdAt":{"type":["null","integer"],"example":1735689600000},"lastUpdatedAt":{"type":["null","integer"],"example":1735689600000}}},"Rank":{"type":"object","required":["uniqueId","rankId","name","prefix","experience","locked","discordRoles","gamepass","badge","shirt","quota","createdAt","lastUpdatedAt"],"properties":{"uniqueId":{"type":"integer","description":"Roblox role resource id. This is what Open Cloud rank changes target.","example":900001},"rankId":{"type":"integer","description":"Roblox rank number, 0-255.","example":10},"name":{"type":"string","example":"Private"},"prefix":{"type":["null","string"],"example":"[PVT]"},"experience":{"type":"object","required":["enabled","requirement"],"properties":{"enabled":{"type":"boolean"},"requirement":{"type":"integer"}}},"locked":{"type":"boolean"},"discordRoles":{"type":"array","items":{"type":"string"}},"gamepass":{"type":"object","required":["enabled","id","name"],"properties":{"enabled":{"type":"boolean"},"id":{"type":["null","integer"]},"name":{"type":["null","string"]}}},"badge":{"type":"object","required":["enabled","id","name"],"properties":{"enabled":{"type":"boolean"},"id":{"type":["null","integer"]},"name":{"type":["null","string"]}}},"shirt":{"type":"object","required":["enabled","id","name","type"],"properties":{"enabled":{"type":"boolean"},"id":{"type":["null","integer"]},"name":{"type":["null","string"]},"type":{"type":["null","integer"]}}},"quota":{"type":"object","required":["enabled","points"],"properties":{"enabled":{"type":"boolean"},"points":{"type":"integer"}}},"createdAt":{"type":["null","integer"],"example":1735689600000},"lastUpdatedAt":{"type":["null","integer"],"example":1735689600000}}},"CatalogEntry":{"type":"object","description":"A medal or a qualification. The two share a shape.","required":["name","description","emote","discordRole","createdAt","lastUpdatedAt"],"properties":{"name":{"type":"string","example":"Long Service"},"description":{"type":"string","example":"Five years of service"},"emote":{"type":["null","string"],"example":":medal:"},"discordRole":{"type":["null","string"],"example":"1234567890123456789"},"createdAt":{"type":["null","integer"],"example":1735689600000},"lastUpdatedAt":{"type":["null","integer"],"example":1735689600000}}},"Blacklist":{"type":"object","required":["type","targetId","name","description","createdAt","lastUpdatedAt"],"properties":{"type":{"type":"string","enum":["User","Group"]},"targetId":{"type":"integer","description":"Roblox user id or group id, per `type`.","example":987654},"name":{"type":"string","example":"Troublemaker"},"description":{"type":"string","example":"Exploiting"},"createdAt":{"type":["null","integer"],"example":1735689600000},"lastUpdatedAt":{"type":["null","integer"],"example":1735689600000}}},"Actor":{"type":"object","description":"A Roblox user. `redacted` is true once an erasure request has removed the identity, in which case `id` is null.","required":["name","id","redacted"],"properties":{"name":{"type":"string","example":"Builderman"},"id":{"type":["null","integer"],"example":1234567},"redacted":{"type":"boolean","example":false}}},"Warning":{"type":"object","required":["warningId","target","invoker","severity","description","createdAt","lastUpdatedAt"],"properties":{"warningId":{"type":"integer","description":"Sequential per community.","example":1},"target":{"$ref":"#/components/schemas/Actor"},"invoker":{"$ref":"#/components/schemas/Actor"},"severity":{"type":"string","enum":["Low","Medium","High"]},"description":{"type":"string","example":"Failed to attend training"},"createdAt":{"type":["null","integer"],"example":1735689600000},"lastUpdatedAt":{"type":["null","integer"],"example":1735689600000}}},"Suspension":{"type":"object","required":["status","target","invoker","reason","durationMs","expiresAt","restoredAt","cancelledAt","previousRank","suspendedRank","createdAt","lastUpdatedAt"],"properties":{"status":{"type":"string","enum":["active","restored","cancelled"]},"target":{"$ref":"#/components/schemas/Actor"},"invoker":{"$ref":"#/components/schemas/Actor"},"reason":{"type":"string","example":"Misconduct"},"durationMs":{"type":"integer","example":86400000},"expiresAt":{"type":["null","integer"],"example":1735689600000},"restoredAt":{"type":["null","integer"]},"cancelledAt":{"type":["null","integer"]},"previousRank":{"type":"object","required":["uniqueId","id","name"],"properties":{"uniqueId":{"type":"integer"},"id":{"type":"integer"},"name":{"type":"string"}}},"suspendedRank":{"type":"object","required":["uniqueId","id","name"],"properties":{"uniqueId":{"type":"integer"},"id":{"type":"integer"},"name":{"type":"string"}}},"createdAt":{"type":["null","integer"],"example":1735689600000},"lastUpdatedAt":{"type":["null","integer"],"example":1735689600000}}},"EventParticipant":{"type":"object","required":["discordId","robloxId","robloxName"],"properties":{"discordId":{"type":["null","string"]},"robloxId":{"type":"integer","example":1234567},"robloxName":{"type":"string","example":"Builderman"}}},"EventType":{"type":"object","required":["id","name","quota","experience","defaultMentionRoleId"],"properties":{"id":{"type":"string","format":"uuid","example":"128d8545-92ce-46d5-9f04-6ed803bbd351"},"name":{"type":"string","example":"Training"},"quota":{"type":"object","required":["hostPoints","coHostPoints"],"properties":{"hostPoints":{"type":"integer","minimum":0},"coHostPoints":{"type":"integer","minimum":0}}},"experience":{"type":"object","required":["hostExperience","coHostExperience","attendeeExperience"],"properties":{"hostExperience":{"type":"integer","minimum":0},"coHostExperience":{"type":"integer","minimum":0},"attendeeExperience":{"type":"integer","minimum":0}}},"defaultMentionRoleId":{"type":["null","string"]}}},"EventLocation":{"type":"object","required":["placeId","universeId","name","groupId","groupName"],"properties":{"placeId":{"type":"integer","minimum":1},"universeId":{"type":"integer","minimum":1},"name":{"type":"string"},"groupId":{"type":"integer","minimum":1},"groupName":{"type":"string"}}},"Event":{"type":"object","required":["eventId","name","type","location","status","host","coHost","mentionRoleId","notes","attendees","proof","announcement","startedAt","finishedAt","cancelledAt","createdAt","lastUpdatedAt"],"properties":{"eventId":{"type":"string","format":"uuid","description":"Stable event identifier."},"name":{"type":"string"},"type":{"anyOf":[{"$ref":"#/components/schemas/EventType"},{"type":"null"}]},"location":{"type":"string","format":"uri"},"status":{"type":"string","enum":["Scheduled","Started","Finished","Cancelled"]},"host":{"$ref":"#/components/schemas/EventParticipant"},"coHost":{"anyOf":[{"$ref":"#/components/schemas/EventParticipant"},{"type":"null"}]},"mentionRoleId":{"type":["null","string"]},"notes":{"type":["null","string"]},"attendees":{"type":"array","items":{"$ref":"#/components/schemas/EventParticipant"}},"proof":{"anyOf":[{"type":"object","required":["channelId","messageId","attachmentId","filename","contentType","size"],"properties":{"channelId":{"type":"string"},"messageId":{"type":"string"},"attachmentId":{"type":"string"},"filename":{"type":"string"},"contentType":{"type":"string"},"size":{"type":"integer","minimum":0}}},{"type":"null"}]},"announcement":{"anyOf":[{"type":"object","required":["channelId","messageId"],"properties":{"channelId":{"type":"string"},"messageId":{"type":"string"}}},{"type":"null"}]},"startedAt":{"type":["null","integer"],"example":1735689600000},"finishedAt":{"type":["null","integer"],"example":1735689600000},"cancelledAt":{"type":["null","integer"],"example":1735689600000},"createdAt":{"type":["null","integer"],"example":1735689600000},"lastUpdatedAt":{"type":["null","integer"],"example":1735689600000}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"member_not_found"},"message":{"type":"string","example":"Member not found"},"details":{"type":"object","additionalProperties":true}}}}}}}}