Permissions Reference for Kestra Enterprise API
This reference maps each RBAC Permission and Action to the Enterprise API endpoints that enforce it. Use it to design least-privilege roles and troubleshoot authorization errors.
How to read this page
- Endpoints are grouped by Permission and CRUD Action.
- Notes labeled “any action” mean the endpoint only checks that the Permission exists on the role.
- Some endpoints require multiple permissions; notes call out additional checks.
- Namespace bindings apply to the namespace and all child namespaces.
Permissions reference
FLOW
Scope: Namespace
CRUD meaning
- Create: create flows or namespace files; import flows.
- Read: view flows, revisions, tasks, graphs, dependencies; export flows; read namespace files and triggers.
- Update: modify flow source, tasks, enable or disable flows; move namespace files.
- Delete: delete flows or namespace files.
Endpoints
Create
- POST
/api/v1/{tenant}/flows(YAML) - POST
/api/v1/{tenant}/flows(JSON, deprecated) - POST
/api/v1/{tenant}/flows/{namespace}(bulk upsert; also requires UPDATE and DELETE) - POST
/api/v1/{tenant}/flows/import(imports require CREATE + UPDATE per flow) - POST
/api/v1/{tenant}/namespaces/{namespace}/files/directory - POST
/api/v1/{tenant}/namespaces/{namespace}/files
Read
- GET
/api/v1/{tenant}/flows/{namespace}/{id} - GET
/api/v1/{tenant}/flows/{namespace}/{id}/graph - POST
/api/v1/{tenant}/flows/graph(any action; no action check) - GET
/api/v1/{tenant}/flows/{namespace}/{id}/revisions - GET
/api/v1/{tenant}/flows/{namespace}/{id}/tasks/{taskId} - GET
/api/v1/{tenant}/flows/search - GET
/api/v1/{tenant}/flows/{namespace} - GET
/api/v1/{tenant}/flows/source - GET
/api/v1/{tenant}/flows/{namespace}/{id}/dependencies - GET
/api/v1/{tenant}/namespaces/{namespace}/dependencies - GET
/api/v1/{tenant}/flows/distinct-namespaces(any action; no action check) - POST
/api/v1/{tenant}/flows/validate(any action; no action check) - POST
/api/v1/{tenant}/flows/validate/task(JSON, any action; no action check) - POST
/api/v1/{tenant}/flows/validate/task(YAML, any action; no action check) - POST
/api/v1/{tenant}/flows/validate/trigger(any action; no action check) - GET
/api/v1/{tenant}/flows/export/by-query - POST
/api/v1/{tenant}/flows/export/by-ids - GET
/api/v1/{tenant}/flows/export/by-query/csv - GET
/api/v1/{tenant}/namespaces/{namespace}/files/search - GET
/api/v1/{tenant}/namespaces/{namespace}/files - GET
/api/v1/{tenant}/namespaces/{namespace}/files/stats - GET
/api/v1/{tenant}/namespaces/{namespace}/files/revisions - GET
/api/v1/{tenant}/namespaces/{namespace}/files/directory - GET
/api/v1/{tenant}/namespaces/{namespace}/files/export - GET
/api/v1/{tenant}/triggers/search - GET
/api/v1/{tenant}/triggers/{namespace}/{flowId} - GET
/api/v1/{tenant}/triggers/export/by-query/csv
Update
- PUT
/api/v1/{tenant}/flows/{namespace}/{id}(YAML) - PUT
/api/v1/{tenant}/flows/{namespace}/{id}(JSON, deprecated) - PATCH
/api/v1/{tenant}/flows/{namespace}/{id}/{taskId} - POST
/api/v1/{tenant}/executions/{executionId}/eval/{taskRunId} - POST
/api/v1/{tenant}/flows/bulk - POST
/api/v1/{tenant}/flows/disable/by-query - POST
/api/v1/{tenant}/flows/disable/by-ids - POST
/api/v1/{tenant}/flows/enable/by-query - POST
/api/v1/{tenant}/flows/enable/by-ids - PUT
/api/v1/{tenant}/namespaces/{namespace}/files
Delete
- DELETE
/api/v1/{tenant}/flows/{namespace}/{id} - DELETE
/api/v1/{tenant}/flows/delete/by-query - DELETE
/api/v1/{tenant}/flows/delete/by-ids - DELETE
/api/v1/{tenant}/namespaces/{namespace}/files
Notes
- Trigger update operations require EXECUTION permissions, but trigger routes also require FLOW permission at the route level.
- Creating a flow in a new namespace also requires NAMESPACE CREATE.
EXECUTION
Scope: Namespace
CRUD meaning
- Create: trigger or create executions; replay executions (creates new executions).
- Read: view executions, graphs, logs, metrics, files, and exports.
- Update: change state, pause or resume, restart, replay by ids, set labels, unqueue, force-run, update task run state.
- Delete: delete executions and logs.
Endpoints
Create
- POST
/api/v1/{tenant}/executions/trigger/{namespace}/{id}(deprecated) - POST
/api/v1/{tenant}/executions/{namespace}/{id} - POST
/api/v1/{tenant}/executions/{namespace}/{id}/validate(any action; no action check) - POST
/api/v1/{tenant}/executions/{executionId}/replay - POST
/api/v1/{tenant}/executions/{executionId}/replay-with-inputs - POST
/api/v1/{tenant}/executions/replay/by-query(any action; no action check) - GET
/api/v1/{tenant}/executions/namespaces(requires CREATE) - GET
/api/v1/{tenant}/executions/namespaces/{namespace}/flows(requires CREATE)
Read
- GET
/api/v1/{tenant}/executions/search - GET
/api/v1/{tenant}/executions - GET
/api/v1/{tenant}/executions/{executionId} - GET
/api/v1/{tenant}/executions/{executionId}/graph - GET
/api/v1/{tenant}/executions/{executionId}/flow - GET
/api/v1/{tenant}/executions/flows/{namespace}/{flowId} - GET
/api/v1/{tenant}/executions/{executionId}/file - GET
/api/v1/{tenant}/executions/{executionId}/file/metas - GET
/api/v1/{tenant}/executions/{executionId}/file/preview - GET
/api/v1/{tenant}/executions/{executionId}/follow - GET
/api/v1/{tenant}/executions/{executionId}/follow-dependencies - POST
/api/v1/{tenant}/executions/latest(any action; no action check) - GET
/api/v1/{tenant}/executions/export/by-query/csv - GET
/api/v1/{tenant}/logs/search - GET
/api/v1/{tenant}/logs/{executionId} - GET
/api/v1/{tenant}/logs/{executionId}/download - GET
/api/v1/{tenant}/logs/{executionId}/follow - GET
/api/v1/{tenant}/metrics/{executionId} - GET
/api/v1/{tenant}/metrics/names/{namespace}/{flowId} - GET
/api/v1/{tenant}/metrics/names/{namespace}/{flowId}/{taskId} - GET
/api/v1/{tenant}/metrics/tasks/{namespace}/{flowId} - GET
/api/v1/{tenant}/metrics/aggregates/{namespace}/{flowId}/{metric} - GET
/api/v1/{tenant}/metrics/aggregates/{namespace}/{flowId}/{taskId}/{metric}
Update
- POST
/api/v1/{tenant}/executions/{executionId}/restart - POST
/api/v1/{tenant}/executions/restart/by-ids - POST
/api/v1/{tenant}/executions/restart/by-query(any action; no action check) - POST
/api/v1/{tenant}/executions/{executionId}/state - POST
/api/v1/{tenant}/executions/{executionId}/change-status - POST
/api/v1/{tenant}/executions/change-status/by-ids - POST
/api/v1/{tenant}/executions/change-status/by-query(any action; no action check) - DELETE
/api/v1/{tenant}/executions/{executionId}/kill{?isOnKillCascade} - DELETE
/api/v1/{tenant}/executions/kill/by-ids - DELETE
/api/v1/{tenant}/executions/kill/by-query(any action; no action check) - POST
/api/v1/{tenant}/executions/{executionId}/resume/validate(any action; no action check) - POST
/api/v1/{tenant}/executions/{executionId}/resume - POST
/api/v1/{tenant}/executions/{executionId}/resume-from-breakpoint - POST
/api/v1/{tenant}/executions/resume/by-ids - POST
/api/v1/{tenant}/executions/resume/by-query(any action; no action check) - POST
/api/v1/{tenant}/executions/{executionId}/pause - POST
/api/v1/{tenant}/executions/pause/by-ids - POST
/api/v1/{tenant}/executions/pause/by-query(any action; no action check) - POST
/api/v1/{tenant}/executions/{executionId}/labels - POST
/api/v1/{tenant}/executions/labels/by-ids - POST
/api/v1/{tenant}/executions/labels/by-query(any action; no action check) - POST
/api/v1/{tenant}/executions/{executionId}/unqueue - POST
/api/v1/{tenant}/executions/unqueue/by-ids - POST
/api/v1/{tenant}/executions/unqueue/by-query(any action; no action check) - POST
/api/v1/{tenant}/executions/{executionId}/force-run - POST
/api/v1/{tenant}/executions/force-run/by-ids - POST
/api/v1/{tenant}/executions/force-run/by-query(any action; no action check) - POST
/api/v1/{tenant}/executions/replay/by-ids(uses UPDATE in current implementation)
Delete
- DELETE
/api/v1/{tenant}/executions/{executionId} - DELETE
/api/v1/{tenant}/executions/by-ids - DELETE
/api/v1/{tenant}/executions/by-query(any action; no action check) - DELETE
/api/v1/{tenant}/logs/{executionId} - DELETE
/api/v1/{tenant}/logs/{namespace}/{flowId}(any action; no action check)
Notes
- Webhook execution endpoints (
/executions/webhook/{namespace}/{id}/{key}) are anonymous and are authorized by webhook key, not RBAC. GET /api/v1/{tenant}/logs/searchonly checks that the EXECUTION permission exists (any action).
TEMPLATE
Scope: Namespace
CRUD meaning
- Create: create templates or bulk update a namespace of templates.
- Read: view templates, search, export, validate.
- Update: update templates or bulk update a namespace of templates.
- Delete: delete templates, bulk delete by query or ids.
Endpoints
Create
- POST
/api/v1/{tenant}/templates - POST
/api/v1/{tenant}/templates/{namespace}(bulk update; also requires UPDATE and DELETE) - POST
/api/v1/{tenant}/templates/import(requires FLOW CREATE + UPDATE)
Read
- GET
/api/v1/{tenant}/templates/{namespace}/{id} - GET
/api/v1/{tenant}/templates/search - GET
/api/v1/{tenant}/templates/distinct-namespaces(any action; no action check) - POST
/api/v1/{tenant}/templates/validate(any action; no action check) - GET
/api/v1/{tenant}/templates/export/by-query - POST
/api/v1/{tenant}/templates/export/by-ids
Update
- PUT
/api/v1/{tenant}/templates/{namespace}/{id} - POST
/api/v1/{tenant}/templates/{namespace}(bulk update; also requires CREATE and DELETE)
Delete
- DELETE
/api/v1/{tenant}/templates/{namespace}/{id} - DELETE
/api/v1/{tenant}/templates/delete/by-query - DELETE
/api/v1/{tenant}/templates/delete/by-ids
Notes
POST /api/v1/{tenant}/templates/importuses FLOW CREATE and UPDATE permissions in the current implementation.
NAMESPACE
Scope: Namespace
CRUD meaning
- Create: create namespaces.
- Read: view namespaces, inherited variables, inherited plugin defaults, and export plugin defaults.
- Update: update namespace metadata and import plugin defaults.
- Delete: delete namespaces.
Endpoints
Create
- POST
/api/v1/{tenant}/namespaces
Read
- POST
/api/v1/{tenant}/namespaces/autocomplete - GET
/api/v1/{tenant}/namespaces/{id} - GET
/api/v1/{tenant}/namespaces/search - GET
/api/v1/{tenant}/namespaces/{id}/inherited-variables - GET
/api/v1/{tenant}/namespaces/{id}/inherited-plugindefaults - POST
/api/v1/{tenant}/namespaces/{id}/plugindefaults/export
Update
- PUT
/api/v1/{tenant}/namespaces/{id} - POST
/api/v1/{tenant}/namespaces/{id}/plugindefaults/import
Delete
- DELETE
/api/v1/{tenant}/namespaces/{id}
KVSTORE
Scope: Namespace
CRUD meaning
- Create: create new KV entries.
- Read: list or retrieve KV entries, including inherited entries.
- Update: update existing KV entries.
- Delete: delete KV entries.
Endpoints
Create
- PUT
/api/v1/{tenant}/namespaces/{namespace}/kv/{key}(creates if key does not exist)
Read
- GET
/api/v1/{tenant}/kv(any action; no action check) - GET
/api/v1/{tenant}/namespaces/{namespace}/kv(deprecated) - GET
/api/v1/{tenant}/namespaces/{namespace}/kv/inheritance - GET
/api/v1/{tenant}/namespaces/{namespace}/kv/{key} - GET
/api/v1/{tenant}/namespaces/{namespace}/kv/{key}/detail
Update
- PUT
/api/v1/{tenant}/namespaces/{namespace}/kv/{key}(updates if key exists)
Delete
- DELETE
/api/v1/{tenant}/namespaces/{namespace}/kv/{key} - DELETE
/api/v1/{tenant}/namespaces/{namespace}/kv
Notes
- The PUT endpoint chooses CREATE vs UPDATE based on whether the key already exists.
DASHBOARD
Scope: Global (tenant)
CRUD meaning
- Create: create dashboards.
- Read: view dashboards and charts.
- Update: update dashboards and charts.
- Delete: delete dashboards.
Endpoints
Create
- POST
/api/v1/{tenant}/dashboards
Read
- GET
/api/v1/{tenant}/dashboards - GET
/api/v1/{tenant}/dashboards/{id} - POST
/api/v1/{tenant}/dashboards/{id}/charts/{chartId} - POST
/api/v1/{tenant}/dashboards/charts/preview - POST
/api/v1/{tenant}/dashboards/validate - POST
/api/v1/{tenant}/dashboards/validate/chart - POST
/api/v1/{tenant}/dashboards/{id}/charts/{chartId}/export/to-csv - POST
/api/v1/{tenant}/dashboards/charts/export/to-csv
Update
- PUT
/api/v1/{tenant}/dashboards/{id}
Delete
- DELETE
/api/v1/{tenant}/dashboards/{id}
Notes
- Read endpoints rely on repository-level permission checks (any DASHBOARD action); action-specific READ checks are not enforced at the controller level.
SECRET
Scope: Namespace
CRUD meaning
- Create: create secrets (implemented via UPDATE in current API).
- Read: list and view secret metadata.
- Update: update secret values or metadata.
- Delete: delete secrets.
Endpoints
Read
- GET
/api/v1/{tenant}/secrets(any action; no action check) - GET
/api/v1/{tenant}/namespaces/{namespace}/secrets - GET
/api/v1/{tenant}/namespaces/{namespace}/inherited-secrets
Update
- PUT
/api/v1/{tenant}/namespaces/{namespace}/secrets - PATCH
/api/v1/{tenant}/namespaces/{namespace}/secrets/{key}
Delete
- DELETE
/api/v1/{tenant}/namespaces/{namespace}/secrets/{key}
Notes
- No endpoint currently checks SECRET CREATE; secret creation is enforced via UPDATE on
PUT /namespaces/{namespace}/secrets.
CREDENTIAL
Scope: Namespace or global (tenant-level credentials)
CRUD meaning
- Create: create tenant or namespace credentials.
- Read: list and view credentials.
- Update: update credentials or test connections.
- Delete: delete credentials.
Endpoints
Create
- POST
/api/v1/{tenant}/credentials - POST
/api/v1/{tenant}/namespaces/{namespace}/credentials
Read
- GET
/api/v1/{tenant}/credentials - GET
/api/v1/{tenant}/credentials/{id} - GET
/api/v1/{tenant}/namespaces/{namespace}/credentials - GET
/api/v1/{tenant}/namespaces/{namespace}/credentials/{name} - GET
/api/v1/{tenant}/namespaces/{namespace}/credentials/inherited
Update
- PUT
/api/v1/{tenant}/credentials/{id} - POST
/api/v1/{tenant}/credentials/{id}/test - PUT
/api/v1/{tenant}/namespaces/{namespace}/credentials/{name} - POST
/api/v1/{tenant}/namespaces/{namespace}/credentials/{name}/test
Delete
- DELETE
/api/v1/{tenant}/credentials/{id} - DELETE
/api/v1/{tenant}/namespaces/{namespace}/credentials/{name}
BLUEPRINT
Scope: Global (tenant)
CRUD meaning
- Create: create custom blueprints.
- Read: list or view custom blueprints and templates.
- Update: update custom blueprints.
- Delete: delete custom blueprints.
Endpoints
Create
- POST
/api/v1/{tenant}/blueprints/flows - POST
/api/v1/{tenant}/blueprints/custom(deprecated)
Read
- GET
/api/v1/{tenant}/blueprints/custom - GET
/api/v1/{tenant}/blueprints/custom/{id} - GET
/api/v1/{tenant}/blueprints/custom/{id}/source - GET
/api/v1/{tenant}/blueprints/custom/tags - GET
/api/v1/{tenant}/blueprints/flow/{id} - GET
/api/v1/{tenant}/blueprints/flows/{id} - POST
/api/v1/{tenant}/blueprints/flows/{id}/use-template
Update
- PUT
/api/v1/{tenant}/blueprints/flows/{id} - PUT
/api/v1/{tenant}/blueprints/custom/{id}(deprecated)
Delete
- DELETE
/api/v1/{tenant}/blueprints/flows/{id} - DELETE
/api/v1/{tenant}/blueprints/custom/{id}(deprecated)
Notes
- Community blueprint endpoints under
/api/v1/{tenant}/blueprints/community/...do not use BLUEPRINT permission.
APP
Scope: Global (tenant) with namespace checks on app definitions
CRUD meaning
- Create: create apps and import apps.
- Read: view app source, search, export apps.
- Update: update apps and enable or disable apps.
- Delete: delete apps.
Endpoints
Create
- POST
/api/v1/{tenant}/apps - POST
/api/v1/{tenant}/apps/import - POST
/api/v1/{tenant}/apps/preview(requires global APP CREATE)
Read
- GET
/api/v1/{tenant}/apps/search - GET
/api/v1/{tenant}/apps/catalog(private apps also require APPEXECUTION READ) - GET
/api/v1/{tenant}/apps/tags - GET
/api/v1/{tenant}/apps/{uid} - POST
/api/v1/{tenant}/apps/export
Update
- PUT
/api/v1/{tenant}/apps/{uid} - POST
/api/v1/{tenant}/apps/{uid}/enable - POST
/api/v1/{tenant}/apps/{uid}/disable - POST
/api/v1/{tenant}/apps/enable - POST
/api/v1/{tenant}/apps/disable
Delete
- DELETE
/api/v1/{tenant}/apps/{uid} - DELETE
/api/v1/{tenant}/apps
APPEXECUTION
Scope: Namespace (checked when app access is PRIVATE)
CRUD meaning
- Create: not used for apps (execution happens via app dispatch).
- Read: view apps and read execution artifacts through apps.
- Update: dispatch app actions and stream updates.
- Delete: not used.
Endpoints
Read
- GET
/api/v1/{tenant}/apps/view/{uid}(PRIVATE apps require APPEXECUTION READ) - GET
/api/v1/{tenant}/apps/view/{id}/file/preview - GET
/api/v1/{tenant}/apps/view/{id}/file/meta - GET
/api/v1/{tenant}/apps/view/{id}/file/download - GET
/api/v1/{tenant}/apps/view/{uid}/logs/download
Update
- POST
/api/v1/{tenant}/apps/view/{id}/dispatch/{dispatch} - GET
/api/v1/{tenant}/apps/view/{id}/streams/{stream}
Notes
- App view endpoints are anonymous for PUBLIC apps; PRIVATE apps require APPEXECUTION permissions and, if configured, group membership.
ASSET
Scope: Global (tenant) with namespace checks when an asset has a namespace
CRUD meaning
- Create: create assets.
- Read: view assets, search assets, and dependency or usage graphs.
- Update: not used (create or replace is done via POST).
- Delete: delete assets.
Endpoints
Create
- POST
/api/v1/{tenant}/assets
Read
- GET
/api/v1/{tenant}/assets/{id} - GET
/api/v1/{tenant}/assets/{id}/dependencies - GET
/api/v1/{tenant}/assets/search - GET
/api/v1/{tenant}/assets/usages/search
Delete
- DELETE
/api/v1/{tenant}/assets/{id} - DELETE
/api/v1/{tenant}/assets/by-ids - DELETE
/api/v1/{tenant}/assets/by-query
TEST
Scope: Namespace
CRUD meaning
- Create: create tests or run tests.
- Read: view tests and test results.
- Update: update tests or enable or disable tests.
- Delete: delete tests.
Endpoints
Create
- POST
/api/v1/{tenant}/tests - POST
/api/v1/{tenant}/tests/{namespace}/{id}/run - POST
/api/v1/{tenant}/tests/run
Read
- GET
/api/v1/{tenant}/tests/{namespace}/{id} - GET
/api/v1/{tenant}/tests/search - POST
/api/v1/{tenant}/tests/validate - GET
/api/v1/{tenant}/tests/results/{id} - POST
/api/v1/{tenant}/tests/results/search/last - GET
/api/v1/{tenant}/tests/results/search
Update
- PUT
/api/v1/{tenant}/tests/{namespace}/{id} - POST
/api/v1/{tenant}/tests/disable/by-ids - POST
/api/v1/{tenant}/tests/enable/by-ids
Delete
- DELETE
/api/v1/{tenant}/tests/{namespace}/{id} - DELETE
/api/v1/{tenant}/tests/by-ids
AUDITLOG
Scope: Global (tenant)
CRUD meaning
- Read: search and export audit logs; read resource history and diffs.
Endpoints
Read
- GET
/api/v1/{tenant}/auditlogs/search - POST
/api/v1/{tenant}/auditlogs/find - GET
/api/v1/{tenant}/auditlogs/history/{detailId}(requires READ on the underlying resource) - GET
/api/v1/{tenant}/auditlogs/{id}/diff(requires READ on the underlying resource or AUDITLOG READ; superadmin-only for certain resources) - GET
/api/v1/{tenant}/auditlogs/export
Notes
- Cross-tenant audit log endpoints under
/api/v1/auditlogs/...are superadmin-only and are not controlled by AUDITLOG permissions.
USER
Scope: Global (tenant)
CRUD meaning
- Create, Read, Update, Delete: manage users via SCIM provisioning endpoints.
Endpoints
Create
- POST
/api/v1/{tenant}/integrations/{integration}/scim/v2/Users
Read
- GET
/api/v1/{tenant}/integrations/{integration}/scim/v2/Users - GET
/api/v1/{tenant}/integrations/{integration}/scim/v2/Users/{id}
Update
- PUT
/api/v1/{tenant}/integrations/{integration}/scim/v2/Users/{id} - PATCH
/api/v1/{tenant}/integrations/{integration}/scim/v2/Users/{id}
Delete
- DELETE
/api/v1/{tenant}/integrations/{integration}/scim/v2/Users/{id}
Notes
- IAM user management endpoints under
/api/v1/usersare superadmin-only and do not use USER permissions.
SERVICE_ACCOUNT
Scope: Global (tenant)
CRUD meaning
- Create: create service accounts.
- Read: list or view service accounts and API tokens.
- Update: update service accounts and create API tokens.
- Delete: delete service accounts or API tokens.
Endpoints
Create
- POST
/api/v1/{tenant}/service-accounts
Read
- GET
/api/v1/{tenant}/service-accounts/{id} - GET
/api/v1/{tenant}/service-accounts/{id}/api-tokens
Update
- PUT
/api/v1/{tenant}/service-accounts/{id} - POST
/api/v1/{tenant}/service-accounts/{id}/api-tokens
Delete
- DELETE
/api/v1/{tenant}/service-accounts/{id} - DELETE
/api/v1/{tenant}/service-accounts/{id}/api-tokens/{tokenId}
Notes
- Superadmin-only service account endpoints under
/api/v1/service-accountsdo not use SERVICE_ACCOUNT permissions.
GROUP
Scope: Global (tenant)
CRUD meaning
- Create, Read, Update, Delete: manage groups.
Endpoints
Create
- POST
/api/v1/{tenant}/groups
Read
- GET
/api/v1/{tenant}/groups/{id} - GET
/api/v1/{tenant}/groups/search - POST
/api/v1/{tenant}/groups/autocomplete - POST
/api/v1/{tenant}/groups/ids
Update
- PUT
/api/v1/{tenant}/groups/{id}
Delete
- DELETE
/api/v1/{tenant}/groups/{id}
Notes
- SCIM group endpoints under
/api/v1/{tenant}/integrations/{integration}/scim/v2/Groupsuse GROUP permissions for CRUD.
GROUP_MEMBERSHIP
Scope: Global (tenant)
CRUD meaning
- Create: add users to groups.
- Read: list group members.
- Update: update membership roles or replace a user’s group list.
- Delete: remove users from groups.
Endpoints
Create
- PUT
/api/v1/{tenant}/groups/{id}/members/{userId}
Read
- GET
/api/v1/{tenant}/groups/{id}/members
Update
- PUT
/api/v1/{tenant}/groups/{id}/members/membership/{userId} - PUT
/api/v1/{tenant}/users/{id}/groups
Delete
- DELETE
/api/v1/{tenant}/groups/{id}/members/{userId}
Notes
- Group owners can manage membership without GROUP_MEMBERSHIP permission; non-owners require it.
ROLE
Scope: Global (tenant)
CRUD meaning
- Create, Read, Update, Delete: manage roles.
Endpoints
Create
- POST
/api/v1/{tenant}/roles
Read
- GET
/api/v1/{tenant}/roles/{id} - GET
/api/v1/{tenant}/roles/search - POST
/api/v1/{tenant}/roles/autocomplete - POST
/api/v1/{tenant}/roles/ids - GET
/api/v1/{tenant}/acls/permissions(any action; no action check) - GET
/api/v1/{tenant}/acls/actions(any action; no action check)
Update
- PUT
/api/v1/{tenant}/roles/{id}
Delete
- DELETE
/api/v1/{tenant}/roles/{id}
BINDING
Scope: Global (tenant)
CRUD meaning
- Create, Read, Delete: manage bindings between users, groups, and roles.
Endpoints
Create
- POST
/api/v1/{tenant}/bindings - POST
/api/v1/{tenant}/bindings/bulk
Read
- GET
/api/v1/{tenant}/bindings/{id} - GET
/api/v1/{tenant}/bindings/search
Delete
- DELETE
/api/v1/{tenant}/bindings/{id}
INVITATION
Scope: Global (tenant)
CRUD meaning
- Create: create invitations.
- Read: list or view invitations.
- Delete: delete invitations.
Endpoints Create
- POST
/api/v1/{tenant}/invitations
Read
- GET
/api/v1/{tenant}/invitations/search - GET
/api/v1/{tenant}/invitations/email/{email} - GET
/api/v1/{tenant}/invitations/{id}
Delete
- DELETE
/api/v1/{tenant}/invitations/{id}
TENANT_ACCESS
Scope: Global (tenant)
CRUD meaning
- Create: grant a user access to a tenant.
- Read: list tenant access or fetch a user’s tenant access.
- Delete: revoke tenant access.
Endpoints
Create
- PUT
/api/v1/{tenant}/tenant-access/{userId} - POST
/api/v1/{tenant}/tenant-access
Read
- GET
/api/v1/{tenant}/tenant-access - POST
/api/v1/{tenant}/tenant-access/autocomplete - GET
/api/v1/{tenant}/tenant-access/{userId}
Delete
- DELETE
/api/v1/{tenant}/tenant-access/{userId}
Notes
GET /tenant-access/{userId}is allowed for the authenticated user without TENANT_ACCESS permission; all other access requires the permission.
IMPERSONATE
Scope: Global (tenant)
CRUD meaning
- Read: allow impersonation via the API header.
Endpoints
Read
- Use
X-Kestra-Impersonate: user@example.comon authenticated requests (requires IMPERSONATE READ).
Notes
- The IAM endpoint
POST /api/v1/users/{id}/impersonateis superadmin-only and does not use IMPERSONATE permission.
SETTING
Scope: Global (tenant)
CRUD meaning
- Create, Read, Update, Delete: reserved for webserver settings.
Endpoints
- No API endpoints currently enforce SETTING permissions.
AI_COPILOT
Scope: Global (tenant)
CRUD meaning
- Read: access AI flow generation.
Endpoints
Read
- POST
/api/v1/{tenant}/ai/generate/flow(any action; no action check)
Was this page helpful?