---
title: "Update workspace member roles in bulk"
method: PUT
path: "/api/workspace/members/bulk/role"
---

# Update workspace member roles in bulk

`PUT /api/workspace/members/bulk/role`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/workspace/members/bulk/role`
- Auth: HTTP bearer

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Changes the roles of up to 200 members at once, the same way as [Update workspace member role](/api-reference/update-workspace-member-role).

You can't change your own role or the owner's. A role that a group grants can only be changed at the group, with [Update workspace group](/api-reference/update-workspace-group) or by changing its members. `admin` needs the Business plan or higher. Moving someone to `viewer` removes their own credit limit, and promoting a guest makes them a full member.

Every item is checked before anything changes. If any item can't be applied, nothing changes and the request returns a `400` whose `detail.errors` lists each rejected item with its `email`, a `message`, and an `error_code` when there is one. A member who isn't in the workspace, or a change you couldn't make on the single-member endpoint, is reported there rather than as a `403` or `404`.

A `200` has one entry in `results` per item, in request order. An item whose member changed while the request ran comes back with `status` `skipped` and wasn't applied. Count only `success` entries as done. A member whose role a group took over, or whose membership changed, is skipped and keeps their role.

This is limited to 5 requests per minute, shared by [Update workspace member roles in bulk](/api-reference/update-workspace-member-roles-in-bulk), [Remove workspace members in bulk](/api-reference/remove-workspace-members-in-bulk), and [Set member credit limits in bulk](/api-reference/set-member-credit-limits-in-bulk). A signed-in session has its own limit, and every personal access token for the workspace shares one. Some workspaces have a different limit.

<Note>Call this as an owner or admin of the workspace, with a personal access token for that workspace sent as a Bearer token, or from a signed-in session. A read-only token is refused, and workspace API keys aren't accepted.</Note>

## Query parameters

- `workspaceId` string, required: ID of the workspace. With a personal access token, use the token's workspace. Get it from `organization_id` in [Get app](/api-reference/get-app).

## Request body

- BulkUpdateMemberRoleRequest: Role changes to apply in one request.
  - `items` BulkMemberRoleItem[], required: The role changes, 1 to 200. Each email can appear once.
    - `email` string, required: Email of the member, exactly as `email` in [List workspace members](/api-reference/list-workspace-members) returns it. Matching is exact, including case.
    - `role` 'admin' | 'editor' | 'viewer', required: The member's new role. `admin` needs the Business plan or higher.

## Response `200`

The outcome for each member.

- BulkMemberOperationResponse: The outcome of each item.
  - `results` BulkMemberResult[], required: One entry per item, in request order.
    - `email` string, required: Email of the member.
    - `status` 'success' | 'skipped', required: `success` when the change was applied, `skipped` when the member changed while the request ran and nothing was applied.
    - `message` string, required: Short explanation. Its wording can change, so don't parse it.

## Other responses

- `400`: At least one item can't be applied, and nothing changed. `detail.errors` lists each one.
- `401`: Missing or invalid credentials.
- `403`: You aren't an owner or admin of the workspace, your token is for a different workspace or is read-only, or your credential can't be used on this endpoint.
- `409`: Your workspace requires an unlocked SSO session.
- `422`: Validation Error
- `429`: Rate limit exceeded.

## Changes

- **2026-10-11** `80287813ab84`: 1 info
  - the endpoint scheme security `PersonalAccessTokenAuth` was added to the API
- **2026-10-07** `dddf17e0f9f0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/base44/apis/base44-app-management-api/changes/api/workspace/members/bulk/role/put.md)

---

[API](https://skmtc.dev/base44/apis/base44-app-management-api.md) - [All operations](https://skmtc.dev/base44/apis/base44-app-management-api/llms.txt) - [OpenAPI document](https://skmtc.dev/base44/apis/base44-app-management-api/revisions/c534f09cf314?raw)
