List the custom roles of an organization
GET /v1/organizations/{org_id}/roles · permission roles:read
Lists the organization's custom roles, oldest first. Only forward pagination is supported: before and an order other than asc return 422. The cursor is bound to this list. Organization roles are visible only in their organization and are not part of the environment list. The role's permission set is not returned in this release.
Request
| Field | Type | Required | Description |
|---|---|---|---|
org_id |
path | yes | Organization ID (org_…). |
limit |
query | no | 1–100, default 20. |
after |
query | no | Cursor from list_metadata.after. |
No request body.
Response
200 OK with a page of roles.
{
"data": [
{
"id": "rol_01j9xr7s1t2w6x8y0z2a4b6c8e",
"organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
"key": "billing-admin",
"name": "Billing admin",
"description": "",
"is_privileged": false,
"assignable_in_self_service": true,
"permission_ids": [],
"created_at": "2026-10-12T09:31:00.123456Z",
"updated_at": "2026-10-12T09:31:00.123456Z",
"version": 1
}
],
"list_metadata": {
"before": null,
"after": null
}
}
Errors
| HTTP | code | When |
|---|---|---|
| 400 | invalid_cursor |
The cursor is invalid or belongs to another list. |
| 404 | not_found |
The organization does not exist in this environment. |
| 422 | validation_failed |
limit is out of range, or before or a non-asc order was given. |
| 401 | unauthenticated |
The credential is missing, invalid or revoked. |
| 403 | insufficient_permissions |
The credential lacks the required permission. |
| 429 | rate_limited |
The rate limit was exceeded; retry after the Retry-After period. |
| 503 | service_unavailable |
A dependency is temporarily unavailable; retry after the Retry-After period. |
Example
curl -i "https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/roles?limit=20" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"