---
title: "Update a role"
method: PATCH
path: "/v2/roles/{role_id}"
tags: ["Roles"]
---

# Update a role

`PATCH /v2/roles/{role_id}`

Update a custom role by its ID. At least one field must be provided.
Predefined roles cannot be updated.

**Payload Requirements**
- At least one of `name`, `description`, or `permissions` must be provided.
- When `permissions` is provided, the existing permissions are fully replaced with the new set.
- `name`, if provided, must be unique within the account.
- System-managed fields (`id`, `created_at`, `updated_at`, `is_predefined`) cannot be modified.

**Valid example**
```json
{
  "name": "Senior Data Scientist",
  "permissions": ["PROJECT_READ", "DATASET_READ", "DATASET_CREATE", "DATASET_DELETE"]
}
```

**Invalid example** (no fields provided)
```json
{}
```

<Note>This endpoint is in beta, read more [here](https://arize.com/docs/ax/rest-reference#api-version-stages).</Note>

## Path parameters

- `role_id` string, required — A universally unique identifier (base64-encoded opaque string).

## Request body

- UpdateRoleRequest
  - `name` string — Updated name for the role. Must be unique within the account.
  - `description` string, nullable — Updated description of the role. Set to `null` to clear it.
  - `permissions` Permission[] — Replacement set of permissions. When provided, the existing permissions are fully replaced. Each value must be a valid permission identifier.

## Response `200`

A role object.

- Role
  - `id` string, required — Unique identifier for the role.
  - `name` string, required — Human-readable name of the role.
  - `description` string — A brief description of the role's purpose.
  - `permissions` Permission[], required — List of permissions granted by this role. Each value corresponds to a permission identifier (e.g. `PROJECT_READ`, `DATASET_CREATE`).
  - `is_predefined` boolean, required — Whether this role is a system-defined predefined role. Predefined roles cannot be updated or deleted.
  - `created_at` string, date-time, required — Timestamp when the role was created.
  - `updated_at` string, date-time, required — Timestamp when the role was last updated.

## Other responses

- `400` — Invalid request
- `401` — Authentication is required
- `403` — Insufficient permissions to access this resource
- `404` — Not found
- `409` — Resource conflict
- `422` — Unprocessable entity
- `429` — Rate limit exceeded

---

[API](https://skmtc.net/arize-ai/apis/arize-rest-api.md) · [All operations](https://skmtc.net/arize-ai/apis/arize-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/arize-ai/arize-rest-api/versions/2ce448f1de13/schema)
