---
title: "Update an Existing Project Role"
method: PUT
path: "/access/api/v1/projects/{projectKey}/roles/{role}"
tags: ["Roles"]
---

# Update an Existing Project Role

`PUT /access/api/v1/projects/{projectKey}/roles/{role}`

Updates an existing project role.

**Security:** Requires Platform Admin or Project Admin with Manage
Members privilege.

## Path parameters

- `projectKey` string, required
- `role` string, required

## Request body

- ProjectRoleUpdate
  - `type` string, required — Role type. Must be 'CUSTOM' for project-specific roles. Only custom roles can be updated.
  - `description` string
  - `environments` string[]
  - `actions` string[]

## Response `200`

Role updated

- ProjectRole
  - `name` string — Role name
  - `description` string — Role description
  - `type` 'PREDEFINED' | 'CUSTOM' | 'CUSTOM_GLOBAL' — Role type. `PREDEFINED` = built-in role, `CUSTOM` = project-scoped custom role, `CUSTOM_GLOBAL` = global custom role.
  - `environments` string[] — Environments for the role
  - `actions` string[] — Actions permitted by this role

## Other responses

- `400` — Bad Request - Invalid input
- `401` — Bad Credentials - Invalid credentials
- `403` — Permission Denied - Insufficient permissions
- `404` — Not Found - Project or role not found

---

[API](https://skmtc.dev/jfrog/apis/jfrog-platform-projects-api.md) · [All operations](https://skmtc.dev/jfrog/apis/jfrog-platform-projects-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/jfrog/jfrog-platform-projects-api/revisions/1c6bb09154a9/schema)
