# General Translation Platform: Отправка различий файлов URL: https://generaltranslation.com/ru/docs/platform/openapi/reference/files/submit-diffs.mdx --- title: Отправка различий файлов description: Отправляйте различия для изменённого исходного или переведённого контента в проект General Translation вместо загрузки файлов целиком. Справочник API для отправки различий файлов. method: POST --- Перезаписывает сохранённые переводы локально изменённым контентом для файлов, в которые были внесены изменения. Отправляйте по одной записи для каждого изменённого файла и локали, чтобы синхронизировать локальные правки без повторной загрузки всех файлов. ## Обзор [#overview] ```http POST https://api2.gtx.dev/v2/project/files/diffs ``` **Разрешение** `project:files:write` · **Лимит запросов** Средний (120/мин) Отправляет изменения локальных переводов обратно в проект. Чтобы полностью заменить файлы, используйте [Загрузка переводов](/docs/platform/openapi/reference/files/upload-translations). ## Как это работает [#how-it-works] * Записи группируются по `branchId`, `fileId`, `versionId` и `locale`. Для каждой группы применяется только первая запись, поэтому повторяющиеся группы в рамках одного запроса дедуплицируются. * Записи с пустым `localContent` пропускаются. * Для каждой оставшейся группы сохранённый перевод перезаписывается значением `localContent`. Если `branchId` не указан, используется ветка по умолчанию. * В ответе указывается, сколько переводов было обработано и сколько записей было получено. ## Запрос [#request] ### Заголовки | Заголовок | Описание | Обязательно | | ----------------- | ----------------------------------------------------------- | ----------- | | `x-gt-api-key` | API-ключ проекта или организации. | Да | | `x-gt-project-id` | ID проекта. Обязателен при использовании ключа организации. | Нет | ### Тело **Тип контента** `application/json` | Поле | Описание | Тип | Необязательное | По умолчанию | | ----------------- | ------------------------------------------ | ---------- | -------------- | ------------ | | [`diffs`](#diffs) | Массив записей diff; не может быть пустым. | `object[]` | Нет | — | #### `diffs` [#diffs] **Тип** `object[]` · **Обязательно** Каждый элемент описывает один изменённый файл и локаль: | Поле | Описание | Тип | Необязательно | По умолчанию | | -------------- | -------------------------------------------------------------------------------------------- | -------- | ------------- | ------------------ | | `localContent` | Полное локальное (отредактированное) содержимое, которое нужно сохранить для этого перевода. | `string` | Нет | — | | `locale` | Локаль отредактированного содержимого; не может быть пустой. | `string` | Нет | — | | `fileId` | Стабильный идентификатор файла. | `string` | Нет | — | | `versionId` | Идентификатор версии этого содержимого. | `string` | Нет | — | | `diff` | Разница в изменённом содержимом. | `string` | Нет | — | | `branchId` | Ветка, к которой привязан файл. | `string` | Да | Ветка по умолчанию | ## Ответ [#response] **Статус** `200 OK` ```json title="Response" { "filesProcessed": 1, "entriesReceived": 1, "message": "Processed 1 translation(s)" } ``` ## Ошибки [#errors] | Статус | Причина | | ------ | ---------------------------------------------------------- | | `400` | Недопустимое тело запроса или пустой массив `diffs`. | | `401` | Отсутствует API-ключ или указан недействительный API-ключ. | | `403` | У API-ключа нет разрешения `project:files:write`. | | `429` | Превышен лимит запросов. | ## Пример [#example] ```bash curl -X POST https://api2.gtx.dev/v2/project/files/diffs \ -H "x-gt-api-key: gtx-api-..." \ -H "Content-Type: application/json" \ -d '{ "diffs": [ { "fileId": "file_...", "versionId": "ver_...", "locale": "es", "diff": "@@ -1 +1 @@\n-Hola\n+Hola, mundo", "localContent": "{\"hello\": \"Hola, mundo\"}" } ] }' ```