# General Translation Platform: Enviar diferencias de archivos URL: https://generaltranslation.com/es/docs/platform/openapi/reference/files/submit-diffs.mdx --- title: Enviar diferencias de archivos description: Envía diferencias del contenido de origen o del contenido traducido modificado a un proyecto de General Translation en lugar de subir archivos completos. Referencia de la API para Enviar diferencias de archivos. method: POST --- Sobrescribe las traducciones almacenadas con contenido editado localmente para los archivos que han cambiado. Envía una entrada por cada archivo y configuración regional modificados, para que puedas sincronizar las ediciones locales sin volver a subir todos los archivos. ## Descripción general [#overview] ```http POST https://api2.gtx.dev/v2/project/files/diffs ``` **Permiso** `project:files:write` · **Límite de solicitudes** Medio (120/min) Envía a un proyecto las ediciones de traducción local. Para sustituir archivos completos, usa [Cargar traducciones](/docs/platform/openapi/reference/files/upload-translations). ## Cómo funciona [#how-it-works] * Las entradas se agrupan por `branchId`, `fileId`, `versionId` y `locale`. Solo se aplica la primera entrada de cada grupo, por lo que en una misma solicitud se eliminan los grupos duplicados. * Se omiten las entradas con `localContent` vacío. * En cada grupo restante, la traducción almacenada se sobrescribe con `localContent`. Si falta `branchId`, se usa la rama predeterminada. * La respuesta indica cuántas traducciones se procesaron y cuántas entradas se recibieron. ## Solicitud [#request] ### Cabeceras | Cabecera | Descripción | Obligatorio | | ----------------- | --------------------------------------------------------------- | ----------- | | `x-gt-api-key` | Clave de API del proyecto o de Organization. | Sí | | `x-gt-project-id` | ID del proyecto. Obligatorio al usar una clave de Organization. | No | ### Body **Tipo de contenido** `application/json` | Campo | Descripción | Tipo | Opcional | Predeterminado | | ----------------- | ------------------------------------------------ | ---------- | -------- | -------------- | | [`diffs`](#diffs) | Lista de entradas de diff; no puede estar vacía. | `object[]` | No | — | #### `diffs` [#diffs] **Tipo** `object[]` · **Obligatorio** Cada elemento describe un archivo modificado y una configuración regional: | Campo | Descripción | Tipo | Opcional | Predeterminado | | -------------- | ----------------------------------------------------------------------------- | -------- | -------- | ------------------- | | `localContent` | El contenido local completo (editado) que se almacenará para esta traducción. | `string` | No | — | | `locale` | Configuración regional del contenido editado; no puede estar vacía. | `string` | No | — | | `fileId` | Identificador estable del archivo. | `string` | No | — | | `versionId` | Identificador de la versión de este contenido. | `string` | No | — | | `diff` | Diff del contenido modificado. | `string` | No | — | | `branchId` | Rama a la que está asociado el archivo. | `string` | Sí | Rama predeterminada | ## Respuesta [#response] **Estado** `200 OK` ```json title="Response" { "filesProcessed": 1, "entriesReceived": 1, "message": "Processed 1 translation(s)" } ``` ## Errores [#errors] | Estado | Causa | | ------ | --------------------------------------------------------------------- | | `400` | El cuerpo de la solicitud no es válido o la lista `diffs` está vacía. | | `401` | Falta la clave de API o no es válida. | | `403` | La clave de API no tiene `project:files:write`. | | `429` | Se superó el límite de solicitudes. | ## Ejemplo [#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\"}" } ] }' ```