Update a role
/roles/{id}Changes the name, label or description you send and returns the role. The same uniqueness and reserved-name rules as create apply: a taken name or label returns 422 unique. A role that carries super admin can be changed only by a super admin (403 missing_permission otherwise). A global role is read-only and returns 403 forbidden; another organisation's role returns 404. Permissions change through /roles/{id}/permissions. dry_run shows the result without saving it. Emits role.updated with the changed fields, and nothing when nothing changed. It sends no email. Sending the previous values undoes it.
Path parameters
The role's id, a whole number from 1 to 2147483647. An unknown role, another organisation's role and a service role return 404.
Query parameters
Validate and run the call without committing it, returning what the real call would return with
meta.dry_runset.
Request body
application/json, required · RoleUpdate
The new unique name.
The new label.
The new description.
{
"label": "Senior Deal Manager"
}Responses
{
"data": {
"id": 1,
"name": "string",
"label": "string",
"description": "string",
"global": true,
"permission_ids": [
1
],
"created_at": "2026-06-12T10:00:00+00:00",
"updated_at": "2026-06-12T10:00:00+00:00"
}
}Authorization failed. error.code is forbidden when the role is global and so read-only, missing_permission when the caller may not grant, take away or delete what the call touches, with the permissions in details, or one of missing_scope, scope_disabled, org_disabled, ip_blocked, user_disabled.
The request can't be processed (HTTP 422): validation_failed with one ErrorDetail per
problem, or a code documented on the operation.
Examples
curl -X PATCH https://your-org-domain/kong/core/api/v2/roles/{id}\
-H "Authorization: Bearer $HELM_API_KEY"\
-H "Content-Type: application/json"\
-d '{
"label": "Senior Deal Manager"
}'