---
title: "Add Project Member"
method: POST
path: "/projects/{projectId}/members"
tags: ["Users"]
---

# Add Project Member

`POST /projects/{projectId}/members`

## Request

- Base URL: `https://api.crowdin.com/api/v2`
- URL: `https://api.crowdin.com/api/v2/projects/{projectId}/members`
- Auth: none declared
- TypeScript: <https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2/docs/projects/:projectId/members/post.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

## Request body

- union
  - object
    - `userIds` integer[], required: User Identifier. Get via [List Users](#operation/api.users.getMany) __Note:__ One of fields `userIds`, `usernames` or `emails` is required
    - `usernames` string[]: User Names. Get via [List Users](#operation/api.users.getMany) __Note:__ One of fields `userIds`, `usernames` or `emails` is required
    - `emails` string[]: User Emails. __Note:__ One of fields `userIds`, `usernames` or `emails` is required
    - `accessToAllWorkflowSteps` boolean: Grant access to all project languages, translation, and proofreading workflow steps (current and future) __Note:__ This property is deprecated. Use `roles` instead
    - `managerAccess` boolean: Grant manager access to a project
    - `developerAccess` boolean: Grant developer access to a project
    - `permissions` object: Specify permissions for each language and workflow steps __Note:__ `managerAccess`, `developerAccess`, `accessToAllWorkflowSteps`, `permissions` and`roles` parameters are mutually exclusive __Note:__ This property is deprecated. Use `roles` instead
      - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
        - `workflowStepIds` integer[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
      - `de` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
        - `workflowStepIds` string: You cat set `all` value to grant permissions for all workflow steps for current language
    - `roles` RolePermission[]: Array of objects __Note:__ `managerAccess`, `developerAccess`, `accessToAllWorkflowSteps`, `permissions` and`roles` parameters are mutually exclusive
      - `name` string: Role name. `translator`, `proofreader` or `language_coordinator`
      - `permissions` object: Role permission configuration
        - `allLanguages` boolean: `true` or `false`. `true` means that user will have access to all languages and workflow steps
        - `languagesAccess` object: needed if `allLanguages` equal `false`
          - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
            - `allContent` boolean: `true` or `false`. `true` means that user will have access to all workflow steps for given language
            - `workflowStepIds` integer[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
          - `uk` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
            - `allContent` boolean: `true` or `false`. `true` means that user will have access to all workflow steps for given language
            - `workflowStepIds` unknown[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
              - …
  - object
    - `userIds` integer[]: User Identifier. Get via [List Users](#operation/api.users.getMany) __Note:__ One of fields `userIds`, `usernames` or `emails` is required
    - `usernames` string[], required: User Names. Get via [List Users](#operation/api.users.getMany) __Note:__ One of fields `userIds`, `usernames` or `emails` is required
    - `emails` string[]: User Emails. __Note:__ One of fields `userIds`, `usernames` or `emails` is required
    - `accessToAllWorkflowSteps` boolean: Grant access to all project languages, translation, and proofreading workflow steps (current and future) __Note:__ This property is deprecated. Use `roles` instead
    - `managerAccess` boolean: Grant manager access to a project
    - `developerAccess` boolean: Grant developer access to a project
    - `permissions` object: Specify permissions for each language and workflow steps __Note:__ `managerAccess`, `developerAccess`, `accessToAllWorkflowSteps`, `permissions` and`roles` parameters are mutually exclusive __Note:__ This property is deprecated. Use `roles` instead
      - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
        - `workflowStepIds` integer[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
      - `de` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
        - `workflowStepIds` string: You cat set `all` value to grant permissions for all workflow steps for current language
    - `roles` RolePermission[]: Array of objects __Note:__ `managerAccess`, `developerAccess`, `accessToAllWorkflowSteps`, `permissions` and`roles` parameters are mutually exclusive
      - `name` string: Role name. `translator`, `proofreader` or `language_coordinator`
      - `permissions` object: Role permission configuration
        - `allLanguages` boolean: `true` or `false`. `true` means that user will have access to all languages and workflow steps
        - `languagesAccess` object: needed if `allLanguages` equal `false`
          - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
            - `allContent` boolean: `true` or `false`. `true` means that user will have access to all workflow steps for given language
            - `workflowStepIds` integer[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
          - `uk` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
            - `allContent` boolean: `true` or `false`. `true` means that user will have access to all workflow steps for given language
            - `workflowStepIds` unknown[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
              - …
  - object
    - `userIds` integer[]: User Identifier. Get via [List Users](#operation/api.users.getMany) __Note:__ One of fields `userIds`, `usernames` or `emails` is required
    - `usernames` string[]: User Names. Get via [List Users](#operation/api.users.getMany) __Note:__ One of fields `userIds`, `usernames` or `emails` is required
    - `emails` string[], required: User Emails. __Note:__ One of fields `userIds`, `usernames` or `emails` is required
    - `accessToAllWorkflowSteps` boolean: Grant access to all project languages, translation, and proofreading workflow steps (current and future) __Note:__ This property is deprecated. Use `roles` instead
    - `managerAccess` boolean: Grant manager access to a project
    - `developerAccess` boolean: Grant developer access to a project
    - `permissions` object: Specify permissions for each language and workflow steps __Note:__ `managerAccess`, `developerAccess`, `accessToAllWorkflowSteps`, `permissions` and`roles` parameters are mutually exclusive __Note:__ This property is deprecated. Use `roles` instead
      - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
        - `workflowStepIds` integer[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
      - `de` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
        - `workflowStepIds` string: You cat set `all` value to grant permissions for all workflow steps for current language
    - `roles` RolePermission[]: Array of objects __Note:__ `managerAccess`, `developerAccess`, `accessToAllWorkflowSteps`, `permissions` and`roles` parameters are mutually exclusive
      - `name` string: Role name. `translator`, `proofreader` or `language_coordinator`
      - `permissions` object: Role permission configuration
        - `allLanguages` boolean: `true` or `false`. `true` means that user will have access to all languages and workflow steps
        - `languagesAccess` object: needed if `allLanguages` equal `false`
          - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
            - `allContent` boolean: `true` or `false`. `true` means that user will have access to all workflow steps for given language
            - `workflowStepIds` integer[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
          - `uk` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
            - `allContent` boolean: `true` or `false`. `true` means that user will have access to all workflow steps for given language
            - `workflowStepIds` unknown[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
              - …

## Response `201`

Members were successfully added

- AddProjectTeamMemberCollectionResource: 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.
  - `skipped` ProjectTeamMemberResource[]
    - `data` ProjectTeamMember, required
      - `id` integer: User Identifier
      - `username` string
      - `firstName` string, nullable: First Name
      - `lastName` string, nullable: Last Name
      - `roles` RolePermission[]: Array of objects
        - `name` string: Role name. `translator`, `proofreader` or `language_coordinator`
        - `permissions` object: Role permission configuration
          - `allLanguages` boolean: `true` or `false`. `true` means that user will have access to all languages and workflow steps
          - `languagesAccess` object: needed if `allLanguages` equal `false`
            - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
              - …
            - `uk` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
              - …
      - `isManager` boolean
      - `isDeveloper` boolean
      - `isAdmin` boolean: Whether the user is an admin of the organization
      - `managerOfGroup` object, nullable
        - `id` integer
        - `name` string
      - `accessToAllWorkflowSteps` boolean
      - `permissions` object, nullable
        - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
          - `workflowStepIds` integer[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
      - `givenAccessAt` string, date-time, nullable
  - `updated` ProjectTeamMemberResource[]
    - `data` ProjectTeamMember, required
      - `id` integer: User Identifier
      - `username` string
      - `firstName` string, nullable: First Name
      - `lastName` string, nullable: Last Name
      - `roles` RolePermission[]: Array of objects
        - `name` string: Role name. `translator`, `proofreader` or `language_coordinator`
        - `permissions` object: Role permission configuration
          - `allLanguages` boolean: `true` or `false`. `true` means that user will have access to all languages and workflow steps
          - `languagesAccess` object: needed if `allLanguages` equal `false`
            - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
              - …
            - `uk` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
              - …
      - `isManager` boolean
      - `isDeveloper` boolean
      - `isAdmin` boolean: Whether the user is an admin of the organization
      - `managerOfGroup` object, nullable
        - `id` integer
        - `name` string
      - `accessToAllWorkflowSteps` boolean
      - `permissions` object, nullable
        - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
          - `workflowStepIds` integer[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
      - `givenAccessAt` string, date-time, nullable
  - `added` ProjectTeamMemberResource[]
    - `data` ProjectTeamMember, required
      - `id` integer: User Identifier
      - `username` string
      - `firstName` string, nullable: First Name
      - `lastName` string, nullable: Last Name
      - `roles` RolePermission[]: Array of objects
        - `name` string: Role name. `translator`, `proofreader` or `language_coordinator`
        - `permissions` object: Role permission configuration
          - `allLanguages` boolean: `true` or `false`. `true` means that user will have access to all languages and workflow steps
          - `languagesAccess` object: needed if `allLanguages` equal `false`
            - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
              - …
            - `uk` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
              - …
      - `isManager` boolean
      - `isDeveloper` boolean
      - `isAdmin` boolean: Whether the user is an admin of the organization
      - `managerOfGroup` object, nullable
        - `id` integer
        - `name` string
      - `accessToAllWorkflowSteps` boolean
      - `permissions` object, nullable
        - `it` object: Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
          - `workflowStepIds` integer[]: Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)
      - `givenAccessAt` string, date-time, nullable
  - `pagination` Pagination: Pagination Response Model
    - `offset` integer
    - `limit` integer

## Other responses

- `400`: Invalid Request Parameters
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Project, language, or workflow step specified id was not found
- `405`: Method Not Allowed

---

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