> ## 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
>
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": "\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."
}
}
}
}
}
}
}
}
}
````