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

# 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-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` '/name' | '/targetLanguageIds' | '/cname' | '/visibility' | '/languageAccessPolicy' | '/glossaryAccess' | '/glossaryAccessOption' | '/description' | '/translateDuplicates' | '/isMtAllowed' | '/taskBasedAccessControl' | '/autoSubstitution' | '/skipUntranslatedStrings' | '/exportApprovedOnly' | '/autoTranslateDialects' | '/publicDownloads' | '/hiddenStringsProofreadersAccess' | '/useGlobalTm' | '/showTmSuggestionsDialects' | '/tmApprovedSuggestionsOnly' | '/inContext' | '/inContextProcessHiddenStrings' | '/inContextPseudoLanguageId' | '/qaCheckIsActive' | '/qaCheckCategories' | '/qaCheckCategories/{category}' | '/qaChecksIgnorableCategories' | '/qaChecksIgnorableCategories/{category}' | '/normalizePlaceholder' | '/languageMapping' | '/languageMapping/{languageId}' | '/languageMapping/{languageId}/{mappingKey}' | '/notificationSettings/translatorNewStrings' | '/notificationSettings/managerNewStrings' | '/notificationSettings/managerLanguageCompleted' | '/pseudoLanguageId' | '/defaultTmId' | '/defaultGlossaryId' | '/assignedStyleGuides' | '/assignedGlossaries' | '/assignedTms' | '/assignedTms/{tmId}' | '/tmPenalties/{penaltyKey}' | '/tmPreTranslate' | '/mtPreTranslate' | '/aiPreTranslate' | '/preTranslationAiPromptId' | '/editorSuggestionAiPromptId' | '/qaCheckActionAiPromptId' | '/contextReviewAiPromptId' | '/savingsReportSettingsTemplateId', json-pointer, required: Where `languageId` is one of project's languages and `mappingKey` is one of language-based export pattern fields. <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

- CrowdinStringBasedProjectResource: 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` CrowdinStringBasedProjectSettingsResponse, required
    - `id` integer
    - `type` integer
    - `userId` integer
    - `sourceLanguageId` string
    - `targetLanguageIds` string[]
    - `languageAccessPolicy` string
    - `name` string
    - `cname` string, nullable
    - `identifier` string
    - `description` string
    - `visibility` string
    - `logo` string
    - `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
    - `savingsReportSettingsTemplateId` integer
    - `translateDuplicates` integer
    - `tagsDetection` integer
    - `glossaryAccess` boolean
    - `glossaryAccessOption` 'readOnly' | 'fullAccess' | 'manageDrafts'
    - `isMtAllowed` boolean
    - `taskBasedAccessControl` boolean
    - `hiddenStringsProofreadersAccess` boolean
    - `autoSubstitution` boolean
    - `exportTranslatedOnly` boolean
    - `skipUntranslatedStrings` boolean
    - `exportApprovedOnly` boolean
    - `autoTranslateDialects` boolean
    - `useGlobalTm` boolean
    - `showTmSuggestionsDialects` boolean
    - `tmApprovedSuggestionsOnly` boolean
    - `isSuspended` boolean
    - `qaCheckIsActive` boolean
    - `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
    - `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
    - `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
    - `normalizePlaceholder` boolean
    - `tmPreTranslate` TmPreTranslateProjectSettings: Translates only new strings. Changing this setting or adding a target language does not translate existing strings; use [Apply Auto-Translation](#operation/api.projects.pre-translations.post) for them.
      - `enabled` boolean
      - `autoApproveOption` 'all' | 'perfectMatchOnly' | 'exceptAutoSubstituted' | 'perfectMatchApprovedOnly' | 'none'
      - `minimumMatchRatio` 'perfect' | '100'
    - `mtPreTranslate` MtPreTranslateProjectSettings: Translates only new strings. Changing this setting or adding a target language does not translate existing strings; use [Apply Auto-Translation](#operation/api.projects.pre-translations.post) for them.
      - `enabled` boolean
      - `mts` EngineMtPreTranslateProjectSettings[]
        - `mtId` integer
        - `languageIds` string[]: Specify an array of languageIds to use specific languages, or use the string `all` to include all supported languages. Retrieve languageIds via the [List Supported Languages](#operation/api.languages.getMany) endpoint
    - `aiPreTranslate` AiPreTranslateProjectSettings: Translates only new strings. Changing this setting or adding a target language does not translate existing strings; use [Apply Auto-Translation](#operation/api.projects.pre-translations.post) for them.
      - `enabled` boolean
      - `aiPrompts` PromptAiPreTranslateProjectSettings[]
        - `aiPromptId` integer: AI Prompt Identifier. Get via [List AI Prompts](#operation/api.ai.prompts.getMany)
        - `languageIds` string[]: Specify an array of languageIds to use specific languages, or use the string `all` to include all supported languages. Retrieve languageIds via the [List Supported Languages](#operation/api.languages.getMany) endpoint
    - `preTranslationAiPromptId` integer, nullable
    - `editorSuggestionAiPromptId` 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

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