---
title: "Update member project access"
method: PUT
path: "/workspace/{workspaceId}/members/{userId}/project-access"
tags: ["Workspaces"]
---

# Update member project access

`PUT /workspace/{workspaceId}/members/{userId}/project-access`

## Request

- Base URL: `https://cloud.kaneo.app/api`
- URL: `https://cloud.kaneo.app/api/workspace/{workspaceId}/members/{userId}/project-access`
- Auth: HTTP bearer

Give a member access to every project, or limit them to selected projects. Owners always access every project, and you can't change your own access or give access to projects you can't access yourself.

## Path parameters

- `workspaceId` string, required
- `userId` string, required

## Request body

- object
  - `projectAccess` 'all' | 'selected', required: "all" gives access to every project in the workspace, including future ones. "selected" limits the member to projectIds.
  - `projectIds` string[]: Projects the member can access when projectAccess is "selected".

## Response `200`

The member's project access

- MemberProjectAccess
  - `userId` string, required
  - `projectAccess` 'all' | 'selected', required
  - `projectIds` string[], required

## Other responses

- `400`: Invalid body, the member is an owner, or a project is not in this workspace
- `401`: Missing or invalid credentials
- `403`: Missing member:update permission, changing your own access, or granting a project you can't access
- `404`: Workspace or member not found
- `429`: The API key exceeded its rate limit or usage quota. Wait the number of seconds in Retry-After before retrying. The X-RateLimit headers are sent only when the rate limit was hit.

## Changes

- **2026-10-08** `c7b8a842601b`: 4 breaking, 5 info
  - removed the media type `text/plain` for the response with the status `400`
  - removed the media type `text/plain` for the response with the status `403`
  - removed the media type `text/plain` for the response with the status `404`
  - removed the media type `text/plain` for the response with the status `429`
  - …5 more
- **2026-10-08** `2ed51b8af657`: 4 breaking, 4 info
  - removed the media type `application/json` for the response with the status `400`
  - removed the media type `application/json` for the response with the status `401`
  - removed the media type `application/json` for the response with the status `403`
  - removed the media type `application/json` for the response with the status `404`
  - …4 more
- **2026-10-07** `df1439c724ee`: 3 breaking, 4 info
  - removed the media type `text/plain` for the response with the status `400`
  - removed the media type `text/plain` for the response with the status `403`
  - removed the media type `text/plain` for the response with the status `404`
  - added the media type `application/json` for the response with the status `400`
  - …3 more
- **2026-10-05** `0e68a173996c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/workspace/:workspaceId/members/:userId/project-access/put.md)

---

[API](https://skmtc.dev/usekaneo/apis/kaneo-api.md) - [All operations](https://skmtc.dev/usekaneo/apis/kaneo-api/llms.txt) - [OpenAPI document](https://skmtc.dev/usekaneo/apis/kaneo-api/revisions/93f78789100c?raw)
