---
title: "Replace Project Member Permissions"
method: PUT
path: "/projects/{projectId}/members/{memberId}"
tags: ["Users"]
---

# Replace Project Member Permissions

`PUT /projects/{projectId}/members/{memberId}`

## Request

- Base URL: `https://api.crowdin.com/api/v2`
- URL: `https://api.crowdin.com/api/v2/projects/{projectId}/members/{memberId}`
- Auth: none declared
- TypeScript: <https://skmtc.dev/crowdin/apis/crowdin-api-v2/docs/projects/:projectId/members/:memberId/put.ts> (a function with typed inputs; its response is checked against the schema)

**Required scopes:** `project.member` (Read and Write).

## Path parameters

- `projectId` integer, required
- `memberId` integer, required

## Request body

- ReplaceProjectMemberForm: __Note:__ `managerAccess`, `developerAccess` and`roles` parameters are mutually exclusive
  - `managerAccess` boolean: Grant manager access to a project
  - `developerAccess` boolean: Grant developer access to a project
  - `roles` CrowdinRolePermission[]: Array of objects
    - `name` string: Role name. `translator`, `proofreader` or `language_coordinator` __Note:__ In projects with a custom workflow, proofreaders are always assigned to the last proofreading step.
    - `permissions` object: Role permission configuration
      - `allLanguages` boolean: `true` or `false`. `true` means that user will have access to all languages
      - `languagesAccess` object: needed if `allLanguages` equal `false`
        - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
          - `allContent` boolean: Must be set to `true`
        - `uk` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
          - `allContent` boolean: Must be set to `true`

## Response `200`

Members permissions were successfully replaced

- CrowdinUserResource: Base schema of resource container. Container is a wrapper object that contains payload in required `data` property and provides space for adding any other metadata.
  - `data` CrowdinUser, required
    - `id` integer: Member Identifier
    - `username` string
    - `fullName` string, nullable: First Name
    - `role` 'owner' | 'manager' | 'proofreader' | 'translator' | 'blocked': Use field `roles` instead
    - `permissions` object
      - `uk` string
      - `it` string
      - `en` string
    - `roles` CrowdinRolePermission[]: Array of objects
      - `name` string: Role name. `translator`, `proofreader` or `language_coordinator` __Note:__ In projects with a custom workflow, proofreaders are always assigned to the last proofreading step.
      - `permissions` object: Role permission configuration
        - `allLanguages` boolean: `true` or `false`. `true` means that user will have access to all languages
        - `languagesAccess` object: needed if `allLanguages` equal `false`
          - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
            - `allContent` boolean: Must be set to `true`
          - `uk` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
            - `allContent` boolean: Must be set to `true`
    - `avatarUrl` string: Member Avatar
    - `joinedAt` string, date-time
    - `timezone` string, nullable

## Other responses

- `400`: Invalid Request Parameters
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Project or language was not found
- `405`: Method Not Allowed
- `409`: Conflict

---

[API](https://skmtc.dev/crowdin/apis/crowdin-api-v2.md) - [All operations](https://skmtc.dev/crowdin/apis/crowdin-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/crowdin/apis/crowdin-api-v2/revisions/27aae7751699?raw)
