---
title: "Create a role"
method: POST
path: "/v2/roles"
tags: ["Roles"]
---

# Create a role

`POST /v2/roles`

Create a new custom role for the authenticated user's account.

**Payload Requirements**
- `name` is required and must be unique within the account.
- `permissions` is required and must contain at least one valid permission
  identifier (e.g. `PROJECT_READ`, `DATASET_CREATE`).
- System-managed fields (`id`, `created_at`, `updated_at`, `is_predefined`)
  are rejected if provided.

**Valid example**
```json
{
  "name": "Data Scientist",
  "description": "Can read and create datasets and experiments.",
  "permissions": ["PROJECT_READ", "DATASET_READ", "DATASET_CREATE"]
}
```

**Invalid example** (missing required `permissions`)
```json
{
  "name": "Data Scientist"
}
```

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

## Request body

- CreateRoleRequest
  - `name` string, required — Human-readable name for the role. Must be unique within the account.
  - `description` string — Optional description of the role's purpose. Omitted from the response if empty.
  - `permissions` Permission[], required — List of permissions to grant. At least one permission is required. Each value must be a valid permission identifier (e.g. `PROJECT_READ`, `DATASET_CREATE`).

## Response `201`

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`). Returned only to callers with `ROLE_READ`.
  - `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

## Changes

> 16 revisions in range; 1 not diffed.

- **2026-08-28** `f63ac334fd4a` — 1 info
  - added the non-success response with the status `404`
- **2026-08-21** `c26a00e9b318` — 4 warning, 4 info
  - added the new `AGENT_ROLE_CREATE` enum value to the `permissions/items/` response property for the response status `201`
  - added the new `AGENT_ROLE_DELETE` enum value to the `permissions/items/` response property for the response status `201`
  - added the new `AGENT_ROLE_READ` enum value to the `permissions/items/` response property for the response status `201`
  - added the new `AGENT_ROLE_UPDATE` enum value to the `permissions/items/` response property for the response status `201`
  - …4 more
- **2026-08-20** `ddf93df2c295` — 4 warning, 4 info
  - added the new `ROLE_CREATE` enum value to the `permissions/items/` response property for the response status `201`
  - added the new `ROLE_DELETE` enum value to the `permissions/items/` response property for the response status `201`
  - added the new `ROLE_READ` enum value to the `permissions/items/` response property for the response status `201`
  - added the new `ROLE_UPDATE` enum value to the `permissions/items/` response property for the response status `201`
  - …4 more

[Change history](https://skmtc.dev/arize-ai/apis/arize-rest-api/changes/v2/roles/post.md)

---

[API](https://skmtc.dev/arize-ai/apis/arize-rest-api.md) · [All operations](https://skmtc.dev/arize-ai/apis/arize-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/arize-ai/arize-rest-api/revisions/6521535a37bb/schema)
