Skip to content
Try the API

Manage users and roles

Automate user administration for your Elastio tenant: find users, add and invite new ones, disable leavers, and organise access with user groups, account groups and role assignments.

  • These operations live under /rbac/api/v1/…. Use a token issued by a tenant admin with the admin category (write for any change). See Automate personal access tokens.
  • Every user has a built-in role of admin or viewer, and a status of active, disabled or invited.
  • Separately, the tenant can define named roles (/rbac/api/v1/roles) and assign them to users. User groups apply a role to a set of users, and account groups bundle cloud accounts (by account_id and provider_type) so access can be scoped to them.

List users, optionally filtered with q (matches email, name, status or role). Deleted users are excluded unless you pass status=all. For a dedicated free-text search, use GET /rbac/api/v1/users/search?search_query=….

GET
/rbac/api/v1/usersList all users
Try it
Terminal window
curl -G "https://acme.app.elastio.com/rbac/api/v1/users" \
-H "Authorization: Bearer $ELASTIO_TOKEN" \
--data-urlencode "q=viewer"

The response is an array of users:

[
{
"id": "5e8f9a10-1111-4222-8333-444455556666",
"email": "jane.doe@example.com",
"last_logged_in": "2026-10-11T08:12:44Z",
"status": "active",
"role": "viewer",
"user_groups": ["SOC analysts"],
"account_groups": ["Production AWS"]
},
{
"id": "9d1c2b3a-4e5f-4061-8a7b-8c9d0e1f2a3b",
"email": "new.hire@example.com",
"last_logged_in": null,
"status": "invited",
"role": "viewer",
"user_groups": [],
"account_groups": []
}
]

Create a user with an email address, built-in role and optional groups. The request schema marks id (a UUID) as required; the spec doesn’t describe how this value is assigned, so check the reference for your tenant’s behaviour. Groups can be passed as user_groups_ids, userGroups and accountGroups arrays.

POST
/rbac/api/v1/usersCreate a new user
Try it
Terminal window
curl -X POST "https://acme.app.elastio.com/rbac/api/v1/users" \
-H "Authorization: Bearer $ELASTIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"id": "9d1c2b3a-4e5f-4061-8a7b-8c9d0e1f2a3b",
"email": "new.hire@example.com",
"role": "viewer",
"user_groups_ids": ["2c4e6a80-1b3d-4f5a-8c7e-9d0f1a2b3c4d"]
}'
{ "status": "ok" }

If a user still shows status: "invited", send the invitation email again:

POST
/rbac/api/v1/users/resend-inviteResend an invitation email
Try it
Terminal window
curl -X POST "https://acme.app.elastio.com/rbac/api/v1/users/resend-invite" \
-H "Authorization: Bearer $ELASTIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "email_address": "new.hire@example.com" }'

Disable one or many users in a single call by sending a JSON array of user IDs. The response reports a status per user. PATCH /rbac/api/v1/users/enable takes the same body to restore access.

PATCH
/rbac/api/v1/users/disableDisable one or many users by ID
Try it
Terminal window
curl -X PATCH "https://acme.app.elastio.com/rbac/api/v1/users/disable" \
-H "Authorization: Bearer $ELASTIO_TOKEN" \
-H "Content-Type: application/json" \
-d '["5e8f9a10-1111-4222-8333-444455556666", "9d1c2b3a-4e5f-4061-8a7b-8c9d0e1f2a3b"]'
[
{ "user_id": "5e8f9a10-1111-4222-8333-444455556666", "status": "…" },
{ "user_id": "9d1c2b3a-4e5f-4061-8a7b-8c9d0e1f2a3b", "status": "…" }
]

A user group gives every member the same built-in role and can be linked to account groups. name and role are required; add members with users_ids (or userIds), or by email with users_emails.

POST
/rbac/api/v1/userGroupsCreate a user group
Try it
Terminal window
curl -X POST "https://acme.app.elastio.com/rbac/api/v1/userGroups" \
-H "Authorization: Bearer $ELASTIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "SOC analysts",
"description": "Read-only access for the security operations team",
"role": "viewer",
"users_emails": ["jane.doe@example.com"],
"account_groups_ids": ["7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d"]
}'

The response is 201 with the group and its members:

{
"id": "2c4e6a80-1b3d-4f5a-8c7e-9d0f1a2b3c4d",
"name": "SOC analysts",
"description": "Read-only access for the security operations team",
"role": "viewer",
"user_ids": ["5e8f9a10-1111-4222-8333-444455556666"],
"users": [
{ "id": "5e8f9a10-1111-4222-8333-444455556666", "email": "jane.doe@example.com", "role": "viewer" }
],
"account_groups_names": ["Production AWS"]
}

Account groups referenced above are created with POST /rbac/api/v1/accountGroups, which takes a name, optional description and an accounts array of {account_id, provider_type} objects. provider_type is one of aws, ova, azure, ibm or gcp.

List the tenant’s roles with GET /rbac/api/v1/roles (or create one with POST /rbac/api/v1/roles, which takes name and optional description), then assign it by role_id.

POST
/rbac/api/v1/users/{userId}/rolesAssign role to user
Try it
Terminal window
curl -X POST "https://acme.app.elastio.com/rbac/api/v1/users/5e8f9a10-1111-4222-8333-444455556666/roles" \
-H "Authorization: Bearer $ELASTIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "role_id": "c3d4e5f6-a7b8-4c9d-8e0f-1a2b3c4d5e6f" }'
{ "status": "ok" }

GET /rbac/api/v1/users/{userId}/roles returns the user’s roles:

[
{
"id": "c3d4e5f6-a7b8-4c9d-8e0f-1a2b3c4d5e6f",
"name": "Incident responders",
"description": null,
"created_at": "2026-09-01T12:00:00Z",
"updated_at": "2026-09-01T12:00:00Z"
}
]

Users

15 operations in the reference →

User Groups

7 operations in the reference →

Roles

5 operations in the reference →

Account Groups

8 operations in the reference →