---
title: "Edit Project"
method: PATCH
path: "/projects/{projectId}"
tags: ["Projects and Groups"]
---

# Edit Project

`PATCH /projects/{projectId}`

## Request

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

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

## Path parameters

- `projectId` integer, required

## Request body

- ProjectSettingOperation[]: A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>
  - `op` 'add' | 'replace' | 'remove' | 'test', required: Patch operation to perform
  - `path` '/groupId' | '/name' | '/targetLanguageIds' | '/cname' | '/description' | '/translateDuplicates' | '/isMtAllowed' | '/taskBasedAccessControl' | '/taskReviewerIds' | '/autoSubstitution' | '/skipUntranslatedStrings' | '/skipUntranslatedFiles' | '/exportWithMinApprovalsCount' | '/exportStringsThatPassedWorkflow' | '/autoTranslateDialects' | '/showTmSuggestionsDialects' | '/tmApprovedSuggestionsOnly' | '/glossaryAccess' | '/glossaryAccessOption' | '/publicDownloads' | '/hiddenStringsProofreadersAccess' | '/normalizePlaceholder' | '/saveMetaInfoInSource' | '/inContext' | '/inContextProcessHiddenStrings' | '/inContextPseudoLanguageId' | '/qaCheckIsActive' | '/qaApprovalsCount' | '/qaCheckCategories' | '/externalQaChecksIgnorable' | '/externalQaChecksIgnorable/{checkId}' | '/qaCheckCategories/{category}' | '/qaChecksIgnorableCategories' | '/qaChecksIgnorableCategories/{category}' | '/languageMapping' | '/languageMapping/{languageId}' | '/languageMapping/{languageId}/{mappingKey}' | '/pseudoLanguageId' | '/notificationSettings/translatorNewStrings' | '/notificationSettings/managerNewStrings' | '/notificationSettings/managerLanguageCompleted' | '/defaultTmId' | '/defaultGlossaryId' | '/assignedStyleGuides' | '/assignedGlossaries' | '/assignedTms' | '/assignedTms/{tmId}' | '/tmPenalties/{penaltyKey}' | '/tmContextType' | '/fields' | '/fields/{fieldSlug}' | '/tm' | '/preTranslationAiPromptId' | '/editorSuggestionAiPromptId' | '/alignmentActionAiPromptId' | '/qaCheckActionAiPromptId' | '/contextReviewAiPromptId' | '/savingsReportSettingsTemplateId' | '/templateId' | '/steps' | '/vendorId' | '/mtEngineId', json-pointer, required: Where `languageId` is one of project's languages and `mappingKey` is one of language-based export pattern fields. <p>Also `vendorId` and `mtEngineId` can't be used with `steps` in same request</p> <p>Use `add` to set `/externalQaChecksIgnorable/{checkId}` for a check that has no entry yet</p> <p>A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a></p>

## Response `200`

Project was successfully updated

- EnterpriseFileBasedProjectResponse
  - `id` integer
  - `groupId` integer
  - `type` integer
  - `userId` integer
  - `sourceLanguageId` string
  - `targetLanguageIds` string[]
  - `name` string
  - `identifier` string
  - `description` string
  - `logo` string
  - `background` string, nullable
  - `isExternal` boolean
  - `externalType` 'proofread' | 'translate', nullable
  - `externalProjectId` integer, nullable
  - `externalOrganizationId` integer, nullable
  - `workflowId` integer
  - `hasCrowdsourcing` boolean
  - `publicDownloads` boolean, nullable
  - `createdAt` string, date-time, nullable
  - `updatedAt` string, date-time, nullable
  - `lastActivity` string, date-time, nullable
  - `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
  - `webUrl` string
  - `publicUrl` string, nullable: Specify the URL to a crowdsourcing project
  - `savingsReportSettingsTemplateId` integer
  - `fields` EnterpriseAdditionalFields: Fields. Keys get via [List Fields](#operation/api.fields.getMany)
  - `clientOrganizationId` integer
  - `translateDuplicates` integer
  - `tagsDetection` integer
  - `glossaryAccess` boolean
  - `glossaryAccessOption` 'readOnly' | 'fullAccess' | 'manageDrafts'
  - `isMtAllowed` boolean
  - `taskBasedAccessControl` boolean
  - `taskReviewerIds` integer[]
  - `hiddenStringsProofreadersAccess` boolean
  - `autoSubstitution` boolean
  - `showTmSuggestionsDialects` boolean
  - `tmApprovedSuggestionsOnly` boolean
  - `exportTranslatedOnly` boolean
  - `skipUntranslatedStrings` boolean
  - `exportWithMinApprovalsCount` integer
  - `exportStringsThatPassedWorkflow` boolean
  - `autoTranslateDialects` boolean
  - `normalizePlaceholder` boolean
  - `isSuspended` boolean
  - `qaCheckIsActive` boolean
  - `qaApprovalsCount` integer
  - `qaCheckCategories` QaCheckCategories
    - `empty` boolean
    - `size` boolean
    - `tags` boolean
    - `spaces` boolean
    - `variables` boolean
    - `punctuation` boolean
    - `symbolRegister` boolean
    - `specialSymbols` boolean
    - `wrongTranslation` boolean
    - `spellcheck` boolean
    - `icu` boolean
    - `terms` boolean
    - `duplicate` boolean
    - `ftl` boolean
    - `android` boolean
    - `numbers` boolean
    - `ai` boolean
    - `outdated` boolean
    - `mdx` boolean
    - `unifiedPlaceholders` boolean
  - `qaChecksIgnorableCategories` QaChecksIgnorableCategories
    - `empty` boolean
    - `size` boolean
    - `tags` boolean
    - `spaces` boolean
    - `variables` boolean
    - `punctuation` boolean
    - `symbolRegister` boolean
    - `specialSymbols` boolean
    - `wrongTranslation` boolean
    - `spellcheck` boolean
    - `icu` boolean
    - `terms` boolean
    - `duplicate` boolean
    - `ftl` boolean
    - `android` boolean
    - `numbers` boolean
    - `ai` boolean
    - `outdated` boolean
    - `mdx` boolean
    - `unifiedPlaceholders` boolean
  - `customQaCheckIds` integer[]
  - `externalQaCheckIds` integer[]
  - `externalQaChecksIgnorable` object: External QA check IDs mapped to whether a failure of the check can be ignored. `false` blocks saving a translation when the check fails, and only a synchronous check can be `false`. A check without an entry can be ignored. The entry is kept while the check is not enabled in `externalQaCheckIds`
  - `languageMapping` object
    - `uk` LanguageMappingUk
      - `name` string
      - `two_letters_code` string
      - `three_letters_code` string
      - `locale` string
      - `locale_with_underscore` string
      - `android_code` string
      - `osx_code` string
      - `osx_locale` string
  - `delayedWorkflowStart` boolean
  - `notificationSettings` object
    - `translatorNewStrings` boolean: Notify translators about new strings
    - `managerNewStrings` boolean: Notify project managers about new strings
    - `managerLanguageCompleted` boolean: Notify project managers about language translation/validation completion
  - `defaultTmId` integer
  - `defaultGlossaryId` integer
  - `assignedTms` object
    - `1` AssignedTm
      - `priority` integer
  - `assignedGlossaries` integer[]
  - `assignedStyleGuides` integer[]
  - `tmPenalties` object
    - `autoSubstitution` integer
    - `tmPriority` object
      - `priority` integer
      - `penalty` integer
    - `multipleTranslations` integer
    - `timeSinceLastUsage` object
      - `months` integer
      - `penalty` integer
    - `timeSinceLastModified` object
      - `months` integer
      - `penalty` integer
  - `preTranslationAiPromptId` integer, nullable
  - `editorSuggestionAiPromptId` integer, nullable
  - `alignmentActionAiPromptId` integer, nullable
  - `qaCheckActionAiPromptId` integer, nullable
  - `contextReviewAiPromptId` integer, nullable
  - `inContext` boolean
  - `inContextProcessHiddenStrings` boolean
  - `inContextPseudoLanguageId` string, nullable
  - `inContextPseudoLanguage` LanguageUk
    - `id` string
    - `name` string
    - `editorCode` string
    - `twoLettersCode` string
    - `threeLettersCode` string
    - `locale` string
    - `androidCode` string
    - `osxCode` string
    - `osxLocale` string
    - `pluralCategoryNames` string[]
    - `pluralRules` string
    - `pluralExamples` string[]
    - `textDirection` string
    - `dialectOf` string, nullable
  - `saveMetaInfoInSource` boolean
  - `skipUntranslatedFiles` boolean
  - `tmContextType` string

## Other responses

- `400`: Invalid Request Body
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Project with 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)
