---
title: "Add Team To Project"
method: POST
path: "/projects/{projectId}/teams"
tags: ["Teams"]
---

# Add Team To Project

`POST /projects/{projectId}/teams`

## Request

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

- AddProjectTeamForm
  - `teamId` integer, required: Team Identifier. Get via [List Teams](#operation/api.teams.getMany)
  - `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)
            - unknown

## Response `201`

Team was successfully added

- union
  - object: 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` ProjectTeam
      - `id` integer: Team Identifier
      - `name` string: Team Name
      - `hasManagerAccess` boolean
      - `hasDeveloperAccess` boolean
      - `hasAccessToAllWorkflowSteps` boolean
      - `permissions` object
        - `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)
      - `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)
              - …
    - `added` object
  - object: 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` object
    - `updated` ProjectTeam
      - `id` integer: Team Identifier
      - `name` string: Team Name
      - `hasManagerAccess` boolean
      - `hasDeveloperAccess` boolean
      - `hasAccessToAllWorkflowSteps` boolean
      - `permissions` object
        - `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)
      - `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)
              - …
    - `added` ProjectTeam
      - `id` integer: Team Identifier
      - `name` string: Team Name
      - `hasManagerAccess` boolean
      - `hasDeveloperAccess` boolean
      - `hasAccessToAllWorkflowSteps` boolean
      - `permissions` object
        - `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)
      - `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)
              - …

## 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

## Changes

- **2026-11-06** `dc68744c5384`: 3 info
  - added the optional property `oneOf[#/components/schemas/ProjectTeamResourceAdded]/allOf[subschema #2]/added/name` to the response with the `201` status
  - added the optional property `oneOf[#/components/schemas/ProjectTeamResourceAdded]/allOf[subschema #2]/updated/name` to the response with the `201` status
  - added the optional property `oneOf[#/components/schemas/ProjectTeamResourceSkipped]/allOf[subschema #2]/skipped/name` to the response with the `201` status
- **2026-02-15** `2735b2531529`: 1 breaking
  - the `teamId` request property type changed from no type to `integer`

[Operation history](https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2/changes/projects/:projectId/teams/post.md)

---

[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)
