---
title: "Add Project Task"
method: POST
path: "/projects/{projectId}/tasks"
tags: ["Tasks"]
---

# Add Project Task

`POST /projects/{projectId}/tasks`

## Request

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

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

## Path parameters

- `projectId` integer, required

## Request body

- union
  - union
    - object
      - `branchIds` integer[]: Branch Identifiers. Get via [List Branches](#operation/api.projects.branches.getMany) __Note:__ One of fields `branchIds` or `stringIds` is required. Both cannot be provided simultaneously
      - `title` string, required: Task title
      - `languageId` string, required: Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
      - `type` 0 | 1, required: Task type: * 0 - translate * 1 - proofread
      - `labelIds` integer[]: Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)
      - `labelMatchRule` 'all' | 'any', nullable: Match rule for labels: - "all" - all labels must be present in string - "any" - any of the labels must be present in string __Note:__ Can only be used when `labelIds` parameter is provided
      - `excludeLabelIds` integer[]: Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)
      - `excludeLabelMatchRule` 'all' | 'any', nullable: Match rule for excluded labels: - "all" - all labels must be present in string - "any" - any of the labels must be present in string __Note:__ Can only be used when `excludeLabelIds` parameter is provided
      - `status` 'todo' | 'in_progress': Task status
      - `description` string: Task description
      - `splitContent` boolean: Split content for task
      - `skipAssignedStrings` boolean: Skip strings already included in other tasks
      - `includePreTranslatedStringsOnly` boolean: Defines whether to export only pretranslated strings __Note:__ `true` value can't be used with `type=0` or `type=2` in same request
      - `assignees` CrowdinTaskAssignee[]
        - `id` integer, required: Project Member Identifier. Get via [List Project Members](#operation/api.projects.members.getMany)
        - `wordsCount` integer: Defines how many words (starting from 1) are assigned to each task assignee * * __Note:__ Can be used only when 'splitContent' parameter is specified
      - `deadline` string, date-time: Defines task deadline date __Format:__ UTC, ISO 8601
      - `startedAt` string, date-time: Defines task started date __Format:__ UTC, ISO 8601
      - `dateFrom` string, date-time: Defines start date for interval when strings were modified __Format:__ UTC, ISO 8601
      - `dateTo` string, date-time: Defines end date for interval when strings were modified __Format:__ UTC, ISO 8601
      - `translationsUpdatedDateFrom` string, date-time: Defines start date for interval when translation were updated (proofread tasks only) __Format:__ UTC, ISO 8601
      - `translationsUpdatedDateTo` string, date-time: Defines end date for interval when translation were updated (proofread tasks only) __Format:__ UTC, ISO 8601
      - `generateCostEstimate` boolean: Generate cost estimate report for the task. Requires `reportSettingsTemplateId`
      - `generateTranslationCost` boolean: Generate translation cost report for the task. Requires `reportSettingsTemplateId`
      - `reportSettingsTemplateId` integer, nullable: Report Settings Templates Identifier. Get via [List Report Settings Templates](#operation/api.projects.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`
      - `batchId` integer, nullable: Task Batch Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany). Allows grouping tasks into a batch
    - object
      - `stringIds` integer[], required: Task String Identifiers. Get via [List Strings](#operation/api.projects.strings.getMany)
      - `title` string, required: Task title
      - `languageId` string, required: Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
      - `type` 0 | 1, required: Task type: * 0 - translate * 1 - proofread
      - `status` 'todo' | 'in_progress': Task status
      - `description` string: Task description
      - `splitContent` boolean: Split content for task
      - `skipAssignedStrings` boolean: Skip strings already included in other tasks
      - `includePreTranslatedStringsOnly` boolean: Defines whether to export only pretranslated strings __Note:__ `true` value can't be used with `type=0` or `type=2` in same request
      - `assignees` CrowdinTaskAssignee[]
        - `id` integer, required: Project Member Identifier. Get via [List Project Members](#operation/api.projects.members.getMany)
        - `wordsCount` integer: Defines how many words (starting from 1) are assigned to each task assignee * * __Note:__ Can be used only when 'splitContent' parameter is specified
      - `deadline` string, date-time: Defines task deadline date __Format:__ UTC, ISO 8601
      - `startedAt` string, date-time: Defines task started date __Format:__ UTC, ISO 8601
      - `dateFrom` string, date-time: Defines start date for interval when strings were modified __Format:__ UTC, ISO 8601
      - `dateTo` string, date-time: Defines end date for interval when strings were modified __Format:__ UTC, ISO 8601
      - `translationsUpdatedDateFrom` string, date-time: Defines start date for interval when translation were updated (proofread tasks only) __Format:__ UTC, ISO 8601
      - `translationsUpdatedDateTo` string, date-time: Defines end date for interval when translation were updated (proofread tasks only) __Format:__ UTC, ISO 8601
      - `generateCostEstimate` boolean: Generate cost estimate report for the task. Requires `reportSettingsTemplateId`
      - `generateTranslationCost` boolean: Generate translation cost report for the task. Requires `reportSettingsTemplateId`
      - `reportSettingsTemplateId` integer, nullable: Report Settings Templates Identifier. Get via [List Report Settings Templates](#operation/api.projects.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`
      - `batchId` integer, nullable: Task Batch Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany). Allows grouping tasks into a batch
  - CrowdinPendingTaskCreateForm
    - `precedingTaskId` integer, required: Translate Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)
    - `type` 1 | 3, required: Task type: * 1 - proofread * 3 - proofread by vendor (requires `vendor` field)
    - `title` string, required: Task title
    - `description` string: Task description
    - `vendor` string, nullable: Vendor identifier. Required when `type` is `3`. Built-in vendors: `crowdin_language_service`, `oht`, `gengo`, `undertow`. For any other vendor, use its identifier from [Crowdin Store](https://crowdin.com/store/vendors).
    - `assignees` CrowdinTaskAssignee[]
      - `id` integer, required: Project Member Identifier. Get via [List Project Members](#operation/api.projects.members.getMany)
      - `wordsCount` integer: Defines how many words (starting from 1) are assigned to each task assignee * * __Note:__ Can be used only when 'splitContent' parameter is specified
    - `deadline` string, date-time: Defines task deadline date __Format:__ UTC, ISO 8601
  - union
    - object: Contains common fields shared across all vendors. Additional vendor-specific settings (e.g. expertise, tone, quality) depend on the selected vendor and are available at [Crowdin Store](https://crowdin.com/store/vendors).
      - `branchIds` integer[]: Branch Identifiers. Get via [List Branches](#operation/api.projects.branches.getMany) __Note:__ One of fields `branchIds` or `stringIds` is required. Both cannot be provided simultaneously
      - `title` string, required: Task title
      - `languageId` string, required: Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
      - `type` 2 | 3, required: Task type: * 2 - translate by vendor * 3 - proofread by vendor
      - `vendor` string, required: Vendor identifier. Built-in vendors: `crowdin_language_service`, `oht`, `gengo`, `undertow`. For any other vendor, use its identifier from [Crowdin Store](https://crowdin.com/store/vendors). __Note:__ Additional vendor-specific settings (e.g. expertise, tone, quality) are configured per vendor in the store.
      - `labelIds` integer[]: Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)
      - `labelMatchRule` 'all' | 'any', nullable: Match rule for labels: - "all" - all labels must be present in string - "any" - any of the labels must be present in string __Note:__ Can only be used when `labelIds` parameter is provided
      - `excludeLabelIds` integer[]: Label Identifiers to exclude. Get via [List Labels](#operation/api.projects.labels.getMany)
      - `excludeLabelMatchRule` 'all' | 'any', nullable: Match rule for excluded labels: - "all" - all labels must be present in string - "any" - any of the labels must be present in string __Note:__ Can only be used when `excludeLabelIds` parameter is provided
      - `status` 'todo' | 'in_progress': Task status
      - `description` string: Task description
      - `includePreTranslatedStringsOnly` boolean: Defines whether to include only pretranslated strings
      - `skipAssignedStrings` boolean: Skip strings already included in other tasks. __Note:__ Not supported by all vendors. Verify with your vendor.
      - `deadline` string, date-time: Defines task deadline date. __Format:__ UTC, ISO 8601 __Note:__ Not supported by all vendors. Verify with your vendor.
      - `dateFrom` string, date-time: Defines start date for interval when strings were modified __Format:__ UTC, ISO 8601
      - `dateTo` string, date-time: Defines end date for interval when strings were modified __Format:__ UTC, ISO 8601
      - `translationsUpdatedDateFrom` string, date-time: Defines start date for interval when translations were updated. For proofread tasks only. __Format:__ UTC, ISO 8601
      - `translationsUpdatedDateTo` string, date-time: Defines end date for interval when translations were updated. For proofread tasks only. __Format:__ UTC, ISO 8601
      - `generateCostEstimate` boolean: Generate cost estimate report for the task. Requires `reportSettingsTemplateId`
      - `generateTranslationCost` boolean: Generate translation cost report for the task. Requires `reportSettingsTemplateId`
      - `reportSettingsTemplateId` integer, nullable: Report Settings Templates Identifier. Get via [List Report Settings Templates](#operation/api.projects.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`
    - object: Contains common fields shared across all vendors. Additional vendor-specific settings (e.g. expertise, tone, quality) depend on the selected vendor and are available at [Crowdin Store](https://crowdin.com/store/vendors).
      - `stringIds` integer[], required: Task String Identifiers. Get via [List Strings](#operation/api.projects.strings.getMany)
      - `title` string, required: Task title
      - `languageId` string, required: Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
      - `type` 2 | 3, required: Task type: * 2 - translate by vendor * 3 - proofread by vendor
      - `vendor` string, required: Vendor identifier. Built-in vendors: `crowdin_language_service`, `oht`, `gengo`, `undertow`. For any other vendor, use its identifier from [Crowdin Store](https://crowdin.com/store/vendors). __Note:__ Additional vendor-specific settings (e.g. expertise, tone, quality) are configured per vendor in the store.
      - `labelIds` integer[]: Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)
      - `labelMatchRule` 'all' | 'any', nullable: Match rule for labels: - "all" - all labels must be present in string - "any" - any of the labels must be present in string __Note:__ Can only be used when `labelIds` parameter is provided
      - `excludeLabelIds` integer[]: Label Identifiers to exclude. Get via [List Labels](#operation/api.projects.labels.getMany)
      - `excludeLabelMatchRule` 'all' | 'any', nullable: Match rule for excluded labels: - "all" - all labels must be present in string - "any" - any of the labels must be present in string __Note:__ Can only be used when `excludeLabelIds` parameter is provided
      - `status` 'todo' | 'in_progress': Task status
      - `description` string: Task description
      - `includePreTranslatedStringsOnly` boolean: Defines whether to include only pretranslated strings
      - `skipAssignedStrings` boolean: Skip strings already included in other tasks. __Note:__ Not supported by all vendors. Verify with your vendor.
      - `deadline` string, date-time: Defines task deadline date. __Format:__ UTC, ISO 8601 __Note:__ Not supported by all vendors. Verify with your vendor.
      - `dateFrom` string, date-time: Defines start date for interval when strings were modified __Format:__ UTC, ISO 8601
      - `dateTo` string, date-time: Defines end date for interval when strings were modified __Format:__ UTC, ISO 8601
      - `translationsUpdatedDateFrom` string, date-time: Defines start date for interval when translations were updated. For proofread tasks only. __Format:__ UTC, ISO 8601
      - `translationsUpdatedDateTo` string, date-time: Defines end date for interval when translations were updated. For proofread tasks only. __Format:__ UTC, ISO 8601
      - `generateCostEstimate` boolean: Generate cost estimate report for the task. Requires `reportSettingsTemplateId`
      - `generateTranslationCost` boolean: Generate translation cost report for the task. Requires `reportSettingsTemplateId`
      - `reportSettingsTemplateId` integer, nullable: Report Settings Templates Identifier. Get via [List Report Settings Templates](#operation/api.projects.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`

## Response `201`

Task was successfully created

- CrowdinStringBasedTaskResource: 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` CrowdinStringBasedTask, required
    - `id` integer
    - `projectId` integer
    - `creatorId` integer
    - `type` integer
    - `status` 'todo' | 'in_progress' | 'done' | 'closed'
    - `title` string
    - `batchId` integer
    - `assignees` TaskAssignee[]
      - `id` integer
      - `username` string
      - `fullName` string
      - `avatarUrl` string
      - `wordsCount` integer
      - `wordsLeft` integer
      - `timeSpent` integer
    - `assignedTeams` TaskAssignedTeam[]
      - `id` integer
      - `wordsCount` integer
      - `timeSpent` integer
    - `progress` TaskProgress
      - `total` integer
      - `done` integer
      - `percent` integer
    - `translateProgress` TaskTranslateProgress
      - `total` integer
      - `done` integer
      - `percent` integer
    - `sourceLanguageId` string
    - `targetLanguageId` string
    - `description` string
    - `translationUrl` string
    - `webUrl` string
    - `wordsCount` integer: Number of words currently in the task
    - `originalWordsCount` integer: Number of words when the task was created. Preserved when source strings are later removed.
    - `commentsCount` integer
    - `deadline` string, date-time: in UTC
    - `startedAt` string, date-time: in UTC
    - `resolvedAt` string, date-time: in UTC
    - `timeRange` string
    - `translationsUpdatedTimeRange` string
    - `workflowStepId` integer
    - `buyUrl` string
    - `createdAt` string, date-time: in UTC
    - `updatedAt` string, date-time: in UTC
    - `sourceLanguage` Language: Class LanguageResponseModel
      - `id` string
      - `name` string
      - `editorCode` string: - alias of internal code
      - `twoLettersCode` string: alias of iso6391 code
      - `threeLettersCode` string: alias of iso6393 code
      - `locale` string
      - `androidCode` string
      - `bcp47Code` string
      - `osxCode` string
      - `osxLocale` string
      - `pluralCategoryNames` string[]: plural category names
      - `pluralRules` string: string with plural rules
      - `pluralExamples` string[]: plural examples array
      - `textDirection` 'ltr' | 'rtl'
      - `dialectOf` string, nullable
    - `targetLanguages` Language[]
      - `id` string
      - `name` string
      - `editorCode` string: - alias of internal code
      - `twoLettersCode` string: alias of iso6391 code
      - `threeLettersCode` string: alias of iso6393 code
      - `locale` string
      - `androidCode` string
      - `bcp47Code` string
      - `osxCode` string
      - `osxLocale` string
      - `pluralCategoryNames` string[]: plural category names
      - `pluralRules` string: string with plural rules
      - `pluralExamples` string[]: plural examples array
      - `textDirection` 'ltr' | 'rtl'
      - `dialectOf` string, nullable
    - `labelIds` integer[]
    - `labelMatchRule` 'all' | 'any', nullable
    - `excludeLabelIds` integer[]
    - `excludeLabelMatchRule` 'all' | 'any', nullable
    - `precedingTaskId` integer
    - `estimatedCost` EstimatedTaskCost
      - `cost` number, float
      - `date` string, date-time: in UTC
      - `currency` 'USD' | 'EUR' | 'JPY' | 'GBP' | 'AUD' | 'CAD' | 'CHF' | 'CNY' | 'SEK' | 'NZD' | 'MXN' | 'SGD' | 'HKD' | 'NOK' | 'KRW' | 'TRY' | 'RUB' | 'INR' | 'BRL' | 'ZAR' | 'GEL' | 'UAH' | 'DDK' | 'PLN'
    - `actualCost` ActualTaskCost
      - `cost` number, float
      - `date` string, date-time: in UTC
      - `currency` 'USD' | 'EUR' | 'JPY' | 'GBP' | 'AUD' | 'CAD' | 'CHF' | 'CNY' | 'SEK' | 'NZD' | 'MXN' | 'SGD' | 'HKD' | 'NOK' | 'KRW' | 'TRY' | 'RUB' | 'INR' | 'BRL' | 'ZAR' | 'GEL' | 'UAH' | 'DDK' | 'PLN'
    - `generateCostEstimate` boolean, nullable
    - `generateTranslationCost` boolean, nullable
    - `reportSettingsTemplateId` integer, nullable
    - `vendor` string
    - `branchIds` integer[]

## Other responses

- `400`: Invalid Request Parameters
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Project, language, or file with specified id was not found
- `405`: Method Not Allowed
- `409`: Conflict
- `503`: Service Unavailable

---

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