> ## Documentation Index > Fetch the complete documentation index at: https://developer.rocket.chat/llms.txt > Use this file to discover all available pages before exploring further. # List Assignable ABAC Attributes >
Defense
Lists the ABAC attributes and values the caller can assign, sorted by key. ABAC must be enabled. * Without `rid`, the list covers a new ABAC-managed private room or team. Permission required: `create-abac-managed-room`. * With `rid`, the list covers the attributes of that existing room. Permissions required: `abac-management` and `manage-abac-admin-rooms`, or `edit-room-abac-attributes` in that room. With the local attribute store, the list contains every attribute definition. When **Restrict room creators and editors to attributes they hold** is on, it is limited to the values the caller holds plus, with `rid`, the values the room already has. ABAC administrators editing an existing room and users with `bypass-abac-store-validation` are not limited. With an external attribute store such as Virtru, the list contains the caller's entitlements. `requiredKeys` lists the attribute keys every ABAC room must carry while **Enforce ABAC across all workspace rooms** is on. It is empty otherwise. ### Changelog | Version | Description | | ------- | ----------- | | 9.0.0 | Added | ## OpenAPI ````json GET /api/v1/abac/attributes.listAssignable { "openapi": "3.0.0", "info": { "version": "1.0.0", "title": "Rooms" }, "servers": [ { "url": "https://apiexplorer.support.rocket.chat" } ], "tags": [ { "name": "Channels" }, { "name": "Directory" }, { "name": "Groups" }, { "name": "Rooms" }, { "name": "Teams" }, { "name": "Room Invites" }, { "name": "Subscriptions" }, { "name": "ABAC" } ], "paths": { "/api/v1/abac/attributes.listAssignable": { "get": { "tags": [ "ABAC" ], "summary": "List Assignable ABAC Attributes", "description": "
\"Defense\"
\n\nLists the ABAC attributes and values the caller can assign, sorted by key. ABAC must be enabled.\n\n* Without `rid`, the list covers a new ABAC-managed private room or team. Permission required: `create-abac-managed-room`.\n* With `rid`, the list covers the attributes of that existing room. Permissions required: `abac-management` and `manage-abac-admin-rooms`, or `edit-room-abac-attributes` in that room.\n\nWith the local attribute store, the list contains every attribute definition. When **Restrict room creators and editors to attributes they hold** is on, it is limited to the values the caller holds plus, with `rid`, the values the room already has. ABAC administrators editing an existing room and users with `bypass-abac-store-validation` are not limited. With an external attribute store such as Virtru, the list contains the caller's entitlements.\n\n`requiredKeys` lists the attribute keys every ABAC room must carry while **Enforce ABAC across all workspace rooms** is on. It is empty otherwise.\n\n### Changelog\n| Version | Description |\n| ------- | ----------- |\n| 9.0.0 | Added |", "operationId": "get-api-v1-abac-attributes.listAssignable", "parameters": [ { "$ref": "#/components/parameters/Auth-Token" }, { "$ref": "#/components/parameters/UserId" }, { "name": "rid", "in": "query", "required": false, "description": "Optional. The ID of an existing room. Include it to list the attributes you can assign to that room. Omit it to list the attributes you can assign when creating a room.", "schema": { "type": "string" }, "example": "64f0a1c2b3d4e5f6a7b8c9d0" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "object", "properties": { "attributes": { "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string" }, "values": { "type": "array", "items": { "type": "string" } } } } }, "requiredKeys": { "type": "array", "items": { "type": "string" } }, "success": { "type": "boolean" } } }, "examples": { "Success Example": { "value": { "attributes": [ { "key": "clearance", "values": [ "confidential", "secret" ] }, { "key": "department", "values": [ "engineering" ] } ], "requiredKeys": [ "clearance" ], "success": true } } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "error": { "type": "string" }, "errorType": { "type": "string" }, "details": { "type": "object", "description": "Present only when a specific attribute or cause is at fault." } } }, "examples": { "ABAC not enabled": { "value": { "success": false, "error": "error-abac-not-enabled", "errorType": "error-abac-not-enabled" } } } } } }, "401": { "$ref": "#/components/responses/authorizationError" }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "error": { "type": "string" } } }, "examples": { "Permission Error": { "value": { "success": false, "error": "User does not have the permissions required for this action [error-unauthorized]" } } } } } } } } } }, "components": { "parameters": { "Auth-Token": { "name": "X-Auth-Token", "in": "header", "description": "The `authToken` of the authenticated user.", "required": true, "schema": { "type": "string" }, "example": "RScctEHSmLGZGywfIhWyRpyofhKOiMoUIpimhvheU3f" }, "UserId": { "name": "X-User-Id", "in": "header", "description": "The `userId` of the authenticated user.", "required": true, "schema": { "type": "string" }, "example": "rbAXPnMktTFbNpwtJ" } }, "responses": { "authorizationError": { "description": "Unauthorized", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "error": { "type": "string" } } }, "examples": { "Authorization Error": { "value": { "success": false, "error": "You must be logged in to do this." } } } } } } } } } ````