---
title: "Update a member's role — owner changes admins or members, admin changes members only"
method: PUT
path: "/projects/{project_id}/members/{member_id}"
tags: ["projects"]
---

# Update a member's role — owner changes admins or members, admin changes members only

`PUT /projects/{project_id}/members/{member_id}`

## Request

- Base URL: `https://api.focusbear.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.focusbear.io/projects/{project_id}/members/{member_id}`
- Auth: HTTP bearer

## Path parameters

- `project_id` string, uuid, required
- `member_id` string, uuid, required

## Request body

- UpdateProjectMemberDto
  - `role` 'admin' | 'member', required

## Response `200`

- ProjectMemberResponseDto
  - `id` string, required
  - `user_id` string
  - `email` string
  - `role` 'owner' | 'admin' | 'member', required
  - `invitation_status` 'pending' | 'accepted' | 'declined' | 'failed', required
  - `invitation_sent_at` string, date-time
  - `invitation_responded_at` string, date-time
  - `created_at` string, required
  - `updated_at` string, required

## Other responses

- `400`: Cannot change or assign the owner role
- `403`: Caller is not an owner/admin, or an admin targeted another admin

---

[API](https://skmtc.dev/focusbear/apis/focusbear-api.md) - [All operations](https://skmtc.dev/focusbear/apis/focusbear-api/llms.txt) - [OpenAPI document](https://skmtc.dev/focusbear/apis/focusbear-api/revisions/3a83a3b9a811?raw)
