# Update a member's roles

## `PATCH /v1/members/{memberId}`

Updates the roles assigned to a specific organization member. Organization owners cannot have their roles modified.

### Path parameters

- `memberId` (integer, required): The user ID of the member

### Header parameters

- `Authorization` (string, required): `Bearer <token>`. [Authentication](https://spice.ai/docs/cloud/api/management#authentication) lists the tokens it accepts.
- `X-Org-Name` (string, optional): The organization to act on, by handle. Omit it to act on the organization the credential is bound to; sending it blank is a 400, not the same as omitting it. A user credential may name any organization its owner belongs to; a machine credential is pinned to its own. A portal session token is bound to none, so it must send this header on every route but `GET /v1/orgs` (400 `org_assertion_required` otherwise). Pattern: `^[A-Za-z0-9._-]{1,255}$`.

### Request body

Required.

Content type: `application/json`

- `roles` (array of string, required): New roles to assign to the member

### Example request

```bash
curl -X PATCH "https://api.spice.ai/v1/members/<memberId>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "roles": [
      "string"
    ]
  }'
```

```http
PATCH /v1/members/<memberId> HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 33

{
  "roles": [
    "string"
  ]
}
```

### Responses

**200 OK**

Member roles updated successfully

Content type: `application/json`

- `user_id` (integer)
- `username` (string)
- `roles` (array of string)
- `created_at` (string (date-time))

**400 Bad Request**

Invalid request body

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope, not an org admin/owner, cannot modify owner, only owners can modify/assign admin or owner roles

**404 Not Found**

Member not found, or the membership was removed before the role change was written

**413 Content Too Large**

Request body too large

**500 Internal Server Error**

The organization could not be read, or the role change failed

## `PATCH /v1/orgs/{orgId}/members/{memberId}`

The org is `orgId` in the path. Updates the roles assigned to a specific organization member. Organization owners cannot have their roles modified.

### Path parameters

- `orgId` (integer, required): The org id from GET /v1/orgs. Minimum: `1`.
- `memberId` (integer, required): The user ID of the member

### Header parameters

- `Authorization` (string, required): `Bearer <token>`. [Authentication](https://spice.ai/docs/cloud/api/management#authentication) lists the tokens it accepts.
- `X-Org-Name` (string, optional): When present, X-Org-Name must name the same org as orgId. Otherwise the request returns org\_path\_mismatch (400). Pattern: `^[A-Za-z0-9._-]{1,255}$`.

### Request body

Required.

Content type: `application/json`

- `roles` (array of string, required): New roles to assign to the member

### Example request

```bash
curl -X PATCH "https://api.spice.ai/v1/orgs/<orgId>/members/<memberId>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "roles": [
      "string"
    ]
  }'
```

```http
PATCH /v1/orgs/<orgId>/members/<memberId> HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 33

{
  "roles": [
    "string"
  ]
}
```

### Responses

**200 OK**

Member roles updated successfully

Content type: `application/json`

- `user_id` (integer)
- `username` (string)
- `roles` (array of string)
- `created_at` (string (date-time))

**400 Bad Request**

Invalid request body. orgId is not a valid org id (`invalid_org_id`), or X-Org-Name does not name that org (`org_path_mismatch`).

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope, not an org admin/owner, cannot modify owner, only owners can modify/assign admin or owner roles. The caller is not a member of the org (`org_forbidden`). A machine credential named a different org (`org_assertion_mismatch`). The org is deleted (`org_deleted`).

**404 Not Found**

Member not found, or the membership was removed before the role change was written

**413 Content Too Large**

Request body too large

**500 Internal Server Error**

The organization could not be read, or the role change failed

OpenAPI: [api.spice.ai/openapi.json](https://api.spice.ai/openapi.json)
