---
title: "Upload Translations"
method: POST
path: "/projects/{projectId}/translations/{languageId}"
tags: ["Translations"]
deprecated: true
---

# Upload Translations

`POST /projects/{projectId}/translations/{languageId}`

## Request

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

> **Deprecated.**

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

Use [Import Translations](#tag/Translations/operation/api.projects.translations.enterprise.imports) instead.

## Path parameters

- `projectId` integer, required
- `languageId` string, required

## Request body

- EnterpriseTranslationUploadForm
  - `storageId` integer, required: Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)
  - `fileId` integer: File Identifier for import. Get via [List Files](#operation/api.projects.files.getMany) <br> **Note:** Required for content in all formats except XLIFF
  - `importEqSuggestions` boolean: Defines whether to add translation if it's the same as the source string
  - `autoApproveImported` boolean: Mark uploaded translations as approved
  - `translateHidden` boolean: Allow translations upload to hidden source strings
  - `addToTm` boolean: Defines whether to add translation to TM
  - `markAddedTranslationsAsDone` boolean: Strings marked as done follow your project's workflow and appear on the corresponding step

## Response `200`

Translations were successfully uploaded

- FileBasedTranslationFileImportResource: 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` FileBasedTranslationFileImport, required
    - `projectId` integer
    - `storageId` integer
    - `languageId` string
    - `fileId` integer
    - `info` object
      - `imported` object
        - `strings` integer
        - `words` integer
      - `approved` object
        - `strings` integer
        - `words` integer
      - `skipped` SkippedInfo
        - `translation_eq_source` integer: Translation is the same as the source string
        - `qa_check` integer: Did not pass QA checks
        - `hidden_strings` integer: Hidden strings
        - `ai_error` integer: AI responded with an error
      - `skippedQaCheckCategories` SkippedQaCheckCategories

## Other responses

- `400`: Invalid Request Parameters
- `401`: Unauthorized
- `402`: Payment required
- `403`: Forbidden
- `404`: Project, language, storage, or file with specified id was not found
- `405`: Method Not Allowed
- `422`: Unprocessable Entity
- `500`: Internal Server Error

---

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