---
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-enterprise-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
      - `fileIds` integer[]: Task File Identifiers. Get via [List Files](#operation/api.projects.files.getMany) __Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously
      - `directoryIds` integer[]: Directory Identifiers. Get via [List Directories](#operation/api.projects.directories.getMany) __Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously
      - `branchIds` integer[]: Branch Identifiers. Get via [List Branches](#operation/api.projects.branches.getMany) __Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously
      - `type` 0 | 1: Task type: * 0 - translate * 1 - proofread __Note:__ One of fields `type` or `workflowStepId` is required. Both cannot be provided simultaneously
      - `workflowStepId` integer: Task workflow step id __Note:__ One of fields `type` or `workflowStepId` 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)
      - `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
      - `splitFiles` boolean: Split files for task. Use `splitContent` instead
      - `splitContent` boolean: Split content for task
      - `skipAssignedStrings` boolean: Skip strings already included in other tasks
      - `skipAssignedStringsScope` 'all' | 'sameWorkflowStep', nullable: Defines which other tasks the `skipAssignedStrings` filter considers: - "all" - tasks on any workflow step, and tasks not assigned to a workflow step - "sameWorkflowStep" - only tasks on the same workflow step as this task __Note:__ Can only be used when `skipAssignedStrings` is `true`. `sameWorkflowStep` requires a project with an assigned workflow and a task on a workflow step. Both values match only tasks in the same target language and the same task type group (translation or proofreading)
      - `assignees` EnterpriseTaskAssignee[]: Task assigned users
        - `id` integer, required: User Identifier. Get via [List Users](#operation/api.users.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
      - `assignedTeams` EnterpriseTaskAssignedTeams[]: Task assigned teams
        - `id` integer, required: Team Identifier. Get via [List Teams](#operation/api.teams.getMany)
        - `wordsCount` integer: Defines how many words (starting from 1) are assigned to each task assigned team * * __Note:__ Can be used only when 'splitContent' parameter is specified
      - `includePreTranslatedStringsOnly` boolean: Defines whether to export only pretranslated strings __Note:__ `true` value can't be used with `type=0` in same request
      - `deadline` string, date-time: Task deadline in UTC, ISO 8601
      - `startedAt` string, date-time: Defines task started date in UTC, ISO 8601
      - `dateFrom` string, date-time: Task date from in UTC, ISO 8601
      - `dateTo` string, date-time: Task date to in UTC, ISO 8601
      - `translationsUpdatedDateFrom` string, date-time: Defines start date for interval when translation were updated (proofread tasks only) in UTC, ISO 8601
      - `translationsUpdatedDateTo` string, date-time: Defines end date for interval when translation were updated (proofread tasks only) in 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.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`
      - `fields` EnterpriseAdditionalFields: Fields. Keys get via [List Fields](#operation/api.fields.getMany)
      - `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)
      - `type` 0 | 1: Task type: * 0 - translate * 1 - proofread __Note:__ One of fields `type` or `workflowStepId` is required. Both cannot be provided simultaneously
      - `workflowStepId` integer: Task workflow step id __Note:__ One of fields `type` or `workflowStepId` 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)
      - `status` 'todo' | 'in_progress': Task status
      - `description` string: Task description
      - `splitFiles` boolean: Split files for task. Use `splitContent` instead
      - `splitContent` boolean: Split content for task
      - `skipAssignedStrings` boolean: Skip strings already included in other tasks
      - `skipAssignedStringsScope` 'all' | 'sameWorkflowStep', nullable: Defines which other tasks the `skipAssignedStrings` filter considers: - "all" - tasks on any workflow step, and tasks not assigned to a workflow step - "sameWorkflowStep" - only tasks on the same workflow step as this task __Note:__ Can only be used when `skipAssignedStrings` is `true`. `sameWorkflowStep` requires a project with an assigned workflow and a task on a workflow step. Both values match only tasks in the same target language and the same task type group (translation or proofreading)
      - `assignees` EnterpriseTaskAssignee[]: Task assigned users
        - `id` integer, required: User Identifier. Get via [List Users](#operation/api.users.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
      - `assignedTeams` EnterpriseTaskAssignedTeams[]: Task assigned teams
        - `id` integer, required: Team Identifier. Get via [List Teams](#operation/api.teams.getMany)
        - `wordsCount` integer: Defines how many words (starting from 1) are assigned to each task assigned team * * __Note:__ Can be used only when 'splitContent' parameter is specified
      - `includePreTranslatedStringsOnly` boolean: Defines whether to export only pretranslated strings __Note:__ `true` value can't be used with `type=0` in same request
      - `deadline` string, date-time: Task deadline in UTC, ISO 8601
      - `startedAt` string, date-time: Defines task started date in UTC, ISO 8601
      - `dateFrom` string, date-time: Task date from in UTC, ISO 8601
      - `dateTo` string, date-time: Task date to in UTC, ISO 8601
      - `translationsUpdatedDateFrom` string, date-time: Defines start date for interval when translation were updated (proofread tasks only) in UTC, ISO 8601
      - `translationsUpdatedDateTo` string, date-time: Defines end date for interval when translation were updated (proofread tasks only) in 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.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`
      - `fields` EnterpriseAdditionalFields: Fields. Keys get via [List Fields](#operation/api.fields.getMany)
      - `batchId` integer, nullable: Task Batch Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany). Allows grouping tasks into a batch
  - union
    - object
      - `fileIds` integer[]: Task File Identifiers. Get via [List Files](#operation/api.projects.files.getMany) __Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously
      - `directoryIds` integer[]: Directory Identifiers. Get via [List Directories](#operation/api.projects.directories.getMany) __Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously
      - `branchIds` integer[]: Branch Identifiers. Get via [List Branches](#operation/api.projects.branches.getMany) __Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously
      - `workflowStepId` integer, required: Task workflow step id with type `Translate by Vendor` or `Proofread by Vendor`
      - `title` string, required: Task title
      - `languageId` string, required: Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
      - `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
      - `description` string: Task description
      - `skipAssignedStrings` boolean: Skip strings already included in other tasks
      - `skipAssignedStringsScope` 'all' | 'sameWorkflowStep', nullable: Defines which other tasks the `skipAssignedStrings` filter considers: - "all" - tasks on any workflow step, and tasks not assigned to a workflow step - "sameWorkflowStep" - only tasks on the same workflow step as this task __Note:__ Can only be used when `skipAssignedStrings` is `true`. `sameWorkflowStep` requires a project with an assigned workflow and a task on a workflow step. Both values match only tasks in the same target language and the same task type group (translation or proofreading)
      - `includePreTranslatedStringsOnly` boolean: Defines whether to export only pretranslated strings __Note:__ `true` value can't be used with `type=0` in same request
      - `deadline` string, date-time: Task deadline in UTC, ISO 8601
      - `startedAt` string, date-time: Defines task started date in UTC, ISO 8601
      - `dateTo` string, date-time: Task date to in UTC, ISO 8601
      - `translationsUpdatedDateFrom` string, date-time: Defines start date for interval when translation were updated (proofread tasks only) in UTC, ISO 8601
      - `translationsUpdatedDateTo` string, date-time: Defines end date for interval when translation were updated (proofread tasks only) in 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.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`
      - `fields` EnterpriseAdditionalFields: Fields. Keys get via [List Fields](#operation/api.fields.getMany)
    - object
      - `stringIds` integer[], required: Task String Identifiers. Get via [List Strings](#operation/api.projects.strings.getMany)
      - `workflowStepId` integer, required: Task workflow step id with type `Translate by Vendor` or `Proofread by Vendor`
      - `title` string, required: Task title
      - `languageId` string, required: Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)
      - `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
      - `description` string: Task description
      - `skipAssignedStrings` boolean: Skip strings already included in other tasks
      - `skipAssignedStringsScope` 'all' | 'sameWorkflowStep', nullable: Defines which other tasks the `skipAssignedStrings` filter considers: - "all" - tasks on any workflow step, and tasks not assigned to a workflow step - "sameWorkflowStep" - only tasks on the same workflow step as this task __Note:__ Can only be used when `skipAssignedStrings` is `true`. `sameWorkflowStep` requires a project with an assigned workflow and a task on a workflow step. Both values match only tasks in the same target language and the same task type group (translation or proofreading)
      - `includePreTranslatedStringsOnly` boolean: Defines whether to export only pretranslated strings __Note:__ `true` value can't be used with `type=0` in same request
      - `deadline` string, date-time: Task deadline in UTC, ISO 8601
      - `startedAt` string, date-time: Defines task started date in UTC, ISO 8601
      - `dateTo` string, date-time: Task date to in UTC, ISO 8601
      - `translationsUpdatedDateFrom` string, date-time: Defines start date for interval when translation were updated (proofread tasks only) in UTC, ISO 8601
      - `translationsUpdatedDateTo` string, date-time: Defines end date for interval when translation were updated (proofread tasks only) in 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.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`
      - `fields` EnterpriseAdditionalFields: Fields. Keys get via [List Fields](#operation/api.fields.getMany)
  - EnterprisePendingTaskCreateForm
    - `precedingTaskId` integer, required: Translate Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)
    - `type` 1 | 3: Task type: * 1 - proofread * 3 - proofread by vendor (requires `vendor` field) __Note:__ One of fields `type` or `workflowStepId` is required. Both cannot be provided simultaneously
    - `workflowStepId` integer: Task workflow step id __Note:__ One of fields `type` or `workflowStepId` is required. Both cannot be provided simultaneously
    - `title` string, required: Task title
    - `description` string: Task description
    - `vendor` string, nullable: Vendor identifier. Required when `type` is `3`. Get via [List Vendors](#operation/api.projects.vendors.getMany)
    - `assignees` EnterpriseTaskAssignee[]: Task assigned users
      - `id` integer, required: User Identifier. Get via [List Users](#operation/api.users.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
    - `assignedTeams` EnterpriseTaskAssignedTeams[]: Task assigned teams
      - `id` integer, required: Team Identifier. Get via [List Teams](#operation/api.teams.getMany)
      - `wordsCount` integer: Defines how many words (starting from 1) are assigned to each task assigned team * * __Note:__ Can be used only when 'splitContent' parameter is specified
    - `deadline` string, date-time: Defines task deadline date __Format:__ UTC, ISO 8601

## Response `201`

Task was successfully created

- EnterpriseFileBasedTaskResource: 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` EnterpriseTask, 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
    - `filesCount` integer
    - `fileIds` integer[]
    - `fields` EnterpriseAdditionalFields: Fields. Keys get via [List Fields](#operation/api.fields.getMany)
    - `syncScope` object, nullable: How a shared task's words split while it syncs to the vendor. `null` when the task is fully synced, is not shared, or its counterpart task is unavailable. __Note:__ Re-read on every fetch — a synced task can start syncing again
      - `syncedWords` integer: Words already synced into the vendor task.
      - `pendingWords` integer: Words routed to the vendor and awaiting sync.
      - `skippedWords` integer: Words the client's workflow does not share with the vendor; they will never sync.

## Other responses

- `400`: Invalid Request Parameters
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Project, workflow step, 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-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)
