Skip to main content
Version: v1.7.5

Permissions and roles matrix

This page is the complete reference for the RBAC system in Enterprise h2oGPTe. It covers built-in roles, the full permissions catalog, user groups, per-role configuration overrides, and programmatic management through the REST API and Python SDK.

For step-by-step instructions on creating roles, assigning them to users, and mapping IdP roles through the System Dashboard UI, see Roles and Permissions.

note

The System Dashboard is the administration area in Enterprise h2oGPTe where administrators manage system-wide settings, roles, collections, and monitoring. It is also referred to as the Admin Center in some contexts.

Choosing a management surfaceโ€‹

Enterprise h2oGPTe provides role and permission management through three interfaces. Use the following table to choose the right one for your task:

InterfaceBest for
System Dashboard UIAd-hoc role assignment, exploration, and IdP role mapping.
REST APIScripting, Terraform/IaC pipelines, and bulk role provisioning.
Python SDKEmbedding role management in Python applications and tooling.

Built-in rolesโ€‹

Enterprise h2oGPTe includes five built-in roles. Each role is preconfigured with a set of permissions appropriate for its intended audience. You can use these as-is or create custom roles based on your organization's access requirements.

RoleDescriptionIntended audience
adminFull system access with all permissions enabled.System administrators
defaultDeveloper-level access. Can create, share, and manage own resources.Power users and developers
userBusiness user access. Can use features but has limited sharing and administrative capabilities.End users
viewerRead-only access to shared resources.Stakeholders and auditors
guestMinimal access for unauthenticated users. Disabled by default.Public or anonymous visitors
note

The guest role is disabled by default. Guest access must be explicitly enabled during deployment through infrastructure configuration.

Permissionsโ€‹

Enterprise h2oGPTe organizes permissions into 19 categories. You can assign each permission to any role through the System Dashboard UI or the REST API. The following tables show the default permission assignments for each built-in role.

Column key: Yes = granted by default ยท No = not granted by default

Admin permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Show admin centerh2ogpte/display/admin_centerYesNoNoNoNo
Manage rolesh2ogpte/roles/manageYesNoNoNoNo
Impersonate usersh2ogpte/display/impersonate_usersYesYesNoNoNo
Manage collectionsh2ogpte/admin_center/manage_collectionsYesNoNoNoNo
Manage autosync jobsh2ogpte/admin_center/manage_autosync_connector_jobsYesNoNoNoNo
Worker statush2ogpte/admin_center/worker_statusYesNoNoNoNo
Live logsh2ogpte/admin_center/live_logsYesNoNoNoNo
System notificationsh2ogpte/admin_center/system_notificationsYesNoNoNoNo
Manage secretsh2ogpte/secrets/manageYesNoNoNoNo
Read secretsh2ogpte/secrets/readYesYesYesNoNo
Allow device pairingh2ogpte/display/device_pairingYesYesYesYesNo
Manage Slack integrationsh2ogpte/integration/slack/manageYesNoNoNoNo
Link connectorsh2ogpte/display/link_connectorsYesYesYesNoNo

Display permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Show private buttonh2ogpte/display/private_buttonYesNoNoNoNo
Show extractorsh2ogpte/display/extractorsYesYesNoNoNo
Show models pageh2ogpte/display/models_pageYesYesNoNoYes
Display notificationsh2ogpte/display/notificationsYesYesNoNoNo
Run self-testsh2ogpte/display/run_self_testsYesYesNoNoNo
Developer settingsh2ogpte/display/developer_settingsYesYesNoNoYes
Recent collectionsh2ogpte/display/recent_collectionsYesYesYesNoYes
Configure agentsh2ogpte/display/configure_agentsYesYesNoNoYes
Show eval pageh2ogpte/display/evalYesYesNoNoNo
Chat insightsh2ogpte/display/chat_insightsYesYesYesNoNo

Collection permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Add collectionsh2ogpte/collection/addYesYesNoNoYes
Edit collectionsh2ogpte/collection/editYesYesNoNoYes
Delete collectionsh2ogpte/collection/deleteYesYesNoNoYes
Evaluate collectionsh2ogpte/collection/evalYesYesNoNoNo
Share collectionsh2ogpte/collection/shareYesYesNoNoNo
Make collection publich2ogpte/collection/publicYesYesNoNoNo
Import collectionh2ogpte/collection/importYesYesYesNoYes

Chat permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Add chatsh2ogpte/chat/addYesYesYesNoYes
Delete chatsh2ogpte/chat/deleteYesYesYesNoYes
Create general chath2ogpte/chat/create_generalYesYesYesNoYes
Add documents to chath2ogpte/chat/add_documentsYesYesYesNoYes
Evaluate chatsh2ogpte/chat/evalYesYesNoNoNo
Share chat session publiclyh2ogpte/chat/share_publicYesNoNoNoNo
Share chat session privatelyh2ogpte/chat/share_privateYesYesYesNoNo
Include artifacts in public sharesh2ogpte/chat/share_artifacts_publicYesNoNoNoNo
Include artifacts in private sharesh2ogpte/chat/share_artifacts_privateYesYesYesNoNo
Submit chat feedbackh2ogpte/chat/submit_feedbackYesYesYesNoNo
Manage agent filesh2ogpte/chat/manage_agent_filesYesYesNoNoYes
Preserve chat sessions from global expirationh2ogpte/chat/keep_foreverYesYesYesNoNo

Document permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Add documentsh2ogpte/document/addYesYesYesNoYes
Delete documentsh2ogpte/document/deleteYesYesYesNoYes
Download documentsh2ogpte/document/downloadYesYesYesNoYes

Prompt template permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Edit prompt templatesh2ogpte/prompt_templates/editYesYesNoNoNo
Delete prompt templatesh2ogpte/prompt_templates/deleteYesYesNoNoNo
Share prompt templatesh2ogpte/prompt_templates/shareYesYesNoNoNo
Make templates publich2ogpte/prompt_templates/publicYesYesNoNoNo
Manage prompt templatesh2ogpte/prompt_templates/manageYesNoNoNoNo

Agent permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Manage agent keysh2ogpte/agent/manage_agent_keysYesYesNoNoYes
Manage tool-key associationh2ogpte/agent/manage_agent_tool_key_associationYesYesNoNoYes
Add agent keysh2ogpte/agent/add_agent_keysYesYesNoNoYes

Custom agent permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Manage custom agentsh2ogpte/agent/manage_custom_agentYesYesYesNoNo
Delete custom agentsh2ogpte/agent/delete_custom_agentYesYesYesNoNo

Custom agent tool permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Manage custom toolsh2ogpte/agent/manage_custom_toolYesYesYesNoNo
Delete custom toolsh2ogpte/agent/delete_custom_toolYesYesYesNoNo
Use built-in MCPsh2ogpte/agent/use_builtin_mcpsYesYesYesNoNo

Agent skill permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Add and edit agent skillsh2ogpte/agent/manage_skillYesYesYesNoNo
Delete agent skillsh2ogpte/agent/delete_skillYesYesYesNoNo

Library permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Publish to the library and edit or delete any library itemh2ogpte/agent/manage_libraryYesNoNoNoNo

API key permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Create collection-scoped keysh2ogpte/api_key/createYesYesYesNoNo
Create global keysh2ogpte/api_key/create_globalYesYesYesNoNo
note

api_key/create_global depends on api_key/create. Revoking api_key/create from a role also prevents global key creation.

Configure API key permissions to match your organization's least-privilege requirements. By default, both permissions are enabled for the default and user roles. Restrict these permissions for roles that should not generate API keys.

Data connector permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
File systemh2ogpte/connectors/file_systemYesYesNoNoNo
Web crawlh2ogpte/connectors/web_crawlYesYesNoNoYes
Amazon S3h2ogpte/connectors/s3YesYesNoNoYes
Azure Blob Storageh2ogpte/connectors/azure_blob_storeYesYesNoNoYes
Google Cloud Storageh2ogpte/connectors/google_cloud_storageYesYesNoNoYes
SharePoint Onlineh2ogpte/connectors/sharepoint_onlineYesYesNoNoYes
SharePoint On-Premiseh2ogpte/connectors/sharepoint_on_premiseYesYesNoNoYes
Confluenceh2ogpte/connectors/confluenceYesYesNoNoYes

Document AI permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Add extractorsh2ogpte/extractors/addYesYesNoNoNo
Edit extractorsh2ogpte/extractors/editYesYesNoNoNo
Delete extractorsh2ogpte/extractors/deleteYesYesNoNoNo
Share extractorsh2ogpte/extractors/shareYesYesNoNoNo
Make extractors publich2ogpte/extractors/publicYesYesNoNoNo

Memory block permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Display memory blocksh2ogpte/display/memory_blocksYesYesYesNoYes
Create memory blocksh2ogpte/memory_block/createYesYesYesNoYes
Edit memory blocksh2ogpte/memory_block/editYesYesYesNoYes
Delete memory blocksh2ogpte/memory_block/deleteYesYesYesNoYes
Share memory blocksh2ogpte/memory_block/shareYesYesYesNoNo
Make memory blocks publich2ogpte/memory_block/publicYesYesYesNoNo

Scheduled task permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Display scheduled tasksh2ogpte/display/scheduled_tasksYesYesYesNoNo
Create scheduled tasksh2ogpte/scheduled_task/createYesYesYesNoNo
Edit scheduled tasksh2ogpte/scheduled_task/editYesYesYesNoNo
Delete scheduled tasksh2ogpte/scheduled_task/deleteYesYesYesNoNo
Manage scheduled tasksh2ogpte/scheduled_task/manageYesNoNoNoNo

AI assistant permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Display AI assistantsh2ogpte/display/ai_assistantsYesYesYesNoNo
Create AI assistantsh2ogpte/ai_assistant/createYesYesYesNoNo
Edit AI assistantsh2ogpte/ai_assistant/editYesYesYesNoNo
Delete AI assistantsh2ogpte/ai_assistant/deleteYesYesYesNoNo
Share AI assistantsh2ogpte/ai_assistant/shareYesYesYesNoNo
Make AI assistants publich2ogpte/ai_assistant/publicYesYesYesNoNo

These permissions take effect only when the show_ai_assistants setting is also on for the user. See Control access to AI Assistants.

Forum permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Display forumsh2ogpte/display/forumsYesYesYesNoNo
Create forumsh2ogpte/forum/createYesYesYesNoNo
Edit forumsh2ogpte/forum/editYesYesYesNoNo
Delete forumsh2ogpte/forum/deleteYesYesYesNoNo
Share forumsh2ogpte/forum/shareYesYesYesNoNo
Make forums publich2ogpte/forum/publicYesYesYesNoNo

These permissions take effect only when the show_ai_assistants setting is also on for the user. See Control access to AI Assistants.

Sharing permissionsโ€‹

PermissionIdentifieradmindefaultuserviewerguest
Share resources with IdP (identity-provider) groupsh2ogpte/sharing/idp_groupsYesYesYesNoNo
note

This permission controls the IDP Groups tab in the Share dialog for collections, prompt templates, extractors, and memory blocks.

Without it, the tab doesn't appear. You can't add or remove group shares.

The same restriction applies to the REST API and the Python client, where group share and unshare requests fail with 401 Unauthorized.

Administrators always have this permission.

Revoking the permission leaves existing group shares in place for prompt templates, extractors, and memory blocks. Group members keep their access.

For collections, saving the Share dialog without the permission removes the collection's existing group shares and reports an error. To restore them, grant the permission and add the groups again.

In the REST API and the Python client, the permission doesn't affect sharing with individual users or making a resource public.

Without the permission, saving the Share dialog for a collection, prompt template, or extractor can report an error, even when you change only user or public access.

IdP groups differ from the Enterprise h2oGPTe groups in Groups, which exist to assign roles.

Permission dependenciesโ€‹

Permission dependencies enforce least-privilege boundaries. For example, a user must be able to add chats before they can create general (non-collection) chats. Without these dependencies, the system would accept inconsistent permission grants.

Some permissions have declared dependencies. When you assign a dependent permission, the base permission is also required:

PermissionDepends on
h2ogpte/chat/create_generalh2ogpte/chat/add
h2ogpte/api_key/create_globalh2ogpte/api_key/create

Permission dependencies

Groupsโ€‹

Groups let you organize users into teams and assign roles at the group level. Every user in a group automatically inherits the roles assigned to that group, which simplifies access management for large teams without requiring individual role assignments.

Create a groupโ€‹

Create a named group to organize users for bulk role assignment:

curl -X POST "https://<YOUR_DOMAIN>/api/v1/groups" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{"name": "data-science-team"}'

Assign a role to a groupโ€‹

Assign a role to all users in a group by group ID and role name:

curl -X PUT "https://<YOUR_DOMAIN>/api/v1/groups/{group_id}/roles/analyst" \
-H "Authorization: Bearer <API_KEY>"

Per-role configuration overridesโ€‹

Settings marked as Overridable in System Settings can be set at the role level. This lets you give specific roles different resource limits or experience settings compared to the system-wide default. The effective value a user receives follows this hierarchy: user override > role override > system default.

If the user has a per-user override for the setting, that value applies. Otherwise, if the user's role has an override, the role override value applies. If neither exists, the system default value applies.

The following settings support per-role overrides:

SettingDescriptionRecommended range
collection_limit_per_userMaximum collections per user.10โ€“1,000
document_limit_per_userMaximum documents per user.100โ€“10,000
agents_document_limit_per_userMaximum agent-created documents per user.1,000โ€“100,000
max_llm_cost_per_user_per_24hRolling 24-hour LLM cost cap (in cost units).1โ€“100
max_llm_cost_per_userLifetime LLM cost cap (in cost units).10โ€“1,000
max_llm_cost_per_guestLLM cost cap for guest users (in cost units).1โ€“10
runtime_max_new_tokensMaximum output tokens per LLM response.256โ€“4,096
api_rate_limit_per_hourMaximum API requests per user per hour. Set to -1 to disable.100โ€“10,000
ws_rate_limit_per_hourMaximum WebSocket messages per user per hour. Set to -1 to disable.100โ€“10,000
default_long_job_timeout_secTimeout in seconds for long-running jobs.300โ€“7,200
default_short_job_timeout_secTimeout in seconds for short-running jobs.60โ€“600
company_logo_urlURL for the company logo displayed in the header.Organization logo URL
chat_logo_urlURL for the logo displayed in the chat interface.Organization chat logo URL
runtime_product_nameProduct name displayed in the UI.Organization product name
runtime_company_nameCompany name displayed in the UI.Organization name
show_ai_assistantsEnable the AI Assistants feature and Assistant Forums for the role.true or false
scheduled_task_user_gmail_enabledAllow users to configure Gmail SMTP for notifications.true or false
user_notification_gmail_emailUser's Gmail address for email notifications.Valid Gmail address
user_notification_gmail_app_passwordUser's Gmail app password for email notifications.Valid app password

Set a per-role overrideโ€‹

Override a setting for a specific role by role ID and setting key:

curl -X PUT "https://<YOUR_DOMAIN>/api/v1/roles/{role_id}/configurations/{key_name}" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{"string_value": "<NEW_VALUE>"}'

List overrides for a roleโ€‹

Retrieve all configuration overrides currently set for a role:

curl -X GET "https://<YOUR_DOMAIN>/api/v1/roles/{role_id}/configurations" \
-H "Authorization: Bearer <API_KEY>"

Reset an override to system defaultโ€‹

Remove a per-role override and restore the system-wide default value for that setting:

curl -X DELETE "https://<YOUR_DOMAIN>/api/v1/roles/{role_id}/configurations/{key_name}" \
-H "Authorization: Bearer <API_KEY>"

LLM grantsโ€‹

LLM access uses a separate mechanism from the permission categories and configuration overrides described in the preceding sections. Each role has its own LLM grants: a list of LLM display names, managed on the role's page in the System Dashboard or through the REST API and Python SDK. Viewing or changing a role's LLM grants requires the Manage roles permission (h2ogpte/roles/manage). Grants control more than chat: they also gate saving an assistant, a scheduled task, or an extractor pinned to a specific model.

Enterprise h2oGPTe grants a new LLM to every role except admin as soon as the LLM starts serving. A model saved with Save without testing gets no grants until its connection test passes. The admin role bypasses grants and always sees every LLM. You can't change the viewer role's grants, and it receives every new LLM automatically. The API rejects an attempt to change either role. You can edit the LLM grants of any other role, including custom roles.

The model list a user gets from the UI, the API, the OpenAI-compatible /v1/models endpoint, and MCP includes only the LLMs their roles grant. Two users with different roles can see different lists.

If a request passes a number for llm instead of a name, Enterprise h2oGPTe resolves the number against the list of models that caller can use. It isn't a position in the Models page table. The same number can select a different model for users with different grants. Pass the model name to pin a specific model.

A PUT replaces the role's LLM grants with exactly the names you send. Enterprise h2oGPTe saves only the names of models that are currently serving and ignores the rest. If none of the names match, the role ends up with no LLM grants, and users who have only that role can't use any LLM.

Deleting the last model with a given name resets its access. If you later add a model with that name, Enterprise h2oGPTe treats it as new and grants it to every eligible role again. Grant changes you made for the old model don't carry over.

If you revoke a role's grant for a model in use, requests using that model return The requested model is not found or unavailable. The error doesn't reveal that the model exists.

note

By default, a grant edit can take up to five minutes to apply for a user whose access was already cached, matching the propagation window for permission changes. Adding or removing an LLM always applies immediately.

Retrieve a role's LLM access by role ID. The response lists every LLM that's currently serving, each with a granted flag for this role:

curl -X GET "https://<YOUR_DOMAIN>/api/v1/roles/{role_id}/llm-registry-access" \
-H "Authorization: Bearer <API_KEY>"

Replace a role's LLM grants (full replacement: the request body is the complete list of granted display names):

curl -X PUT "https://<YOUR_DOMAIN>/api/v1/roles/{role_id}/llm-registry-access" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{"names": ["gpt-4o", "claude-sonnet-4-5"]}'

Manage LLM grants with the Python SDK:

from h2ogpte import H2OGPTE

admin = H2OGPTE(address="https://<YOUR_DOMAIN>", api_key="<API_KEY>")

# List every LLM with whether this role is granted it
grants = admin.get_role_llm_access(role_id="<ROLE_ID>")

# Restrict a role to two models
admin.set_role_llm_access(role_id="<ROLE_ID>", names=["gpt-4o", "claude-sonnet-4-5"])

Manage roles with the REST APIโ€‹

Create a custom roleโ€‹

Create a role with a name and optional description:

curl -X POST "https://<YOUR_DOMAIN>/api/v1/roles" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{"name": "analyst", "description": "Data analyst with limited access"}'

Assign permissions to a roleโ€‹

Assign a list of permission identifiers to a role in a single request:

curl -X POST "https://<YOUR_DOMAIN>/api/v1/roles/{role_id}/permissions" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{"permissions": ["h2ogpte/collection/add", "h2ogpte/chat/add", "h2ogpte/document/add"]}'

Add a single permissionโ€‹

Add one permission identifier to a role without replacing existing permissions:

curl -X PUT "https://<YOUR_DOMAIN>/api/v1/roles/{role_id}/permissions/h2ogpte/collection/share" \
-H "Authorization: Bearer <API_KEY>"

Remove a single permissionโ€‹

Remove one permission identifier from a role without affecting other assigned permissions:

curl -X DELETE "https://<YOUR_DOMAIN>/api/v1/roles/{role_id}/permissions/h2ogpte/collection/share" \
-H "Authorization: Bearer <API_KEY>"

Assign a role to a userโ€‹

Assign a named role to a specific user by their user ID:

curl -X PUT "https://<YOUR_DOMAIN>/api/v1/users/{user_id}/roles/analyst" \
-H "Authorization: Bearer <API_KEY>"

Remove a role from a userโ€‹

Remove a named role from a specific user by their user ID:

curl -X DELETE "https://<YOUR_DOMAIN>/api/v1/users/{user_id}/roles/analyst" \
-H "Authorization: Bearer <API_KEY>"

Manage roles with the Python SDKโ€‹

from h2ogpte import H2OGPTE

admin = H2OGPTE(address="https://<YOUR_DOMAIN>", api_key="<API_KEY>")

# List all roles
roles = admin.list_user_roles()

# Create a custom role
role = admin.create_user_role(name="analyst", description="Data analyst")

# Assign permissions
admin.assign_permissions_to_role(
role_name=role.name,
permission_names=["h2ogpte/collection/add", "h2ogpte/chat/add", "h2ogpte/document/add"]
)

Feedback