# General Translation Platform: Cliente de API
URL: https://generaltranslation.com/es/docs/platform/core/reference/api-client.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Crea un cliente tipado para la General Translation API y llama a los helpers de endpoints generados. Referencia de API para createApiClient.

Importa el cliente de TypeScript desde `generaltranslation/api` cuando necesites control a nivel de endpoint sin tener que construir tú mismo las solicitudes HTTP. El módulo combina un transporte autenticado, versionado y con reintentos con helpers de endpoints generados y utilidades opt-in para batching y sondeo de trabajos de traducción.

`generaltranslation/api` está disponible a partir de `generaltranslation` 9.2.0. Los ejemplos siguientes apuntan a `generaltranslation` 9.5.4 y al paquete standalone equivalente `@generaltranslation/api` 0.5.2.

Los helpers generados reflejan la versión del paquete instalado, que puede diferir del [contrato público de OpenAPI](/docs/platform/openapi/overview) alojado actualmente. Consulta la referencia pública para comprobar qué endpoints y formatos de archivo están activos.

## Descripción general [#overview]

| Export                                                                            | Descripción                                                                                    |
| --------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| [`createApiClient`](#create-client)                                               | Crea un cliente autenticado con gestión de versión, reintentos y tiempo de espera.             |
| [`ApiClientConfig`](#client-config)                                               | Configura el transporte del cliente y las cabeceras de solicitud compartidas.                  |
| [`API_VERSION`](#api-version)                                                     | Versión actual del contrato de la API que se envía de forma predeterminada.                    |
| [Helpers de endpoints](#endpoint-helpers)                                         | Funciones tipadas para las operaciones públicas que se enumeran a continuación.                |
| [`paginate`](#pagination)                                                         | Itera por todos los elementos de una operación de listado.                                     |
| [`awaitJobs`](#job-polling) y [`pollJobs`](#job-polling)                          | Sondean los trabajos de traducción hasta que finalizan o se agota el tiempo de espera.         |
| [`processBatches`](#batch-processing) y [`DEFAULT_BATCH_SIZE`](#batch-processing) | Procesan una lista de entrada en lotes configurables.                                          |
| [`ApiError`](#api-error)                                                          | Error que se lanza cuando una respuesta HTTP falla.                                            |
| [Tipos generados](#types-errors)                                                  | Describen los datos de los endpoints, las respuestas, los errores y los contratos del cliente. |
| [Especificación OpenAPI pública](#openapi-spec)                                   | Contrato actual de la API, publicado en línea.                                                 |

## `createApiClient` [#create-client]

```ts
function createApiClient(config: ApiClientConfig): Client;
```

El cliente añade la versión de API configurada, la API Key y el ID del Project a cada solicitud. Pásalo a un helper de endpoint generado:

```ts title="project-info.ts"
import { createApiClient, getProjectInfo } from 'generaltranslation/api';

const projectId = process.env.GT_PROJECT_ID!;
const client = createApiClient({
  apiKey: process.env.GT_API_KEY,
  baseUrl: 'https://api.gtx.dev',
  projectId,
});

const result = await getProjectInfo({
  client,
  path: { projectId },
});

if (result.error) {
  throw new Error('Could not load Project information');
}

console.log(result.data);
```

Los siguientes ejemplos reutilizan este `client` ya configurado.

## `ApiClientConfig` [#client-config]

| Option                        | Descripción                                                                            | tipo                                  | Opcional | Predeterminado     |
| ----------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------- | -------- | ------------------ |
| [`apiKey`](#apikey)           | API Key enviada en la cabecera `Authorization`.                                        | `string`                              | Sí       | —                  |
| [`apiVersion`](#apiversion)   | Versión del contrato enviada como `gt-api-version`.                                    | `ApiVersion`                          | Sí       | `API_VERSION`      |
| [`baseUrl`](#baseurl)         | Origen de la API.                                                                      | `string`                              | No       | —                  |
| [`fetch`](#fetch)             | Implementación personalizada de la Fetch API.                                          | `typeof fetch`                        | Sí       | `globalThis.fetch` |
| [`projectId`](#projectid)     | ID del Project enviado como `gt-project-id`.                                           | `string`                              | Sí       | —                  |
| [`retryPolicy`](#retrypolicy) | Estrategia de retardo entre reintentos.                                                | `'exponential' \| 'linear' \| 'none'` | Sí       | `'exponential'`    |
| [`timeoutMs`](#timeoutms)     | Tiempo de espera por intento, o `false` para desactivar el tiempo de espera integrado. | `number \| false`                     | Sí       | `60000`            |

### `apiKey`

**Tipo** `string` · **Opcional**

API Key que se envía como `Authorization: Bearer <api-key>`. El cliente no lee las variables de entorno automáticamente.

### `apiVersion`

**Type** `ApiVersion` · **Optional** · **Default** `API_VERSION`

Versión del contrato de la API que se envía en la cabecera `gt-api-version`.

### `baseUrl`

**Tipo** `string` · **Obligatorio**

Origen de la API. Usa `https://api.gtx.dev` para la General Translation API alojada.

### `fetch`

**Type** `typeof fetch` · **Opcional** · **Predeterminado** `globalThis.fetch`

Implementación personalizada de la Fetch API. Úsala para instrumentación, pruebas o en un runtime que no cuente con una implementación global de fetch.

### `projectId`

**tipo** `string` · **Opcional**

ID del Project que se envía en la cabecera `gt-project-id`. Las Organization keys requieren esta cabecera para los endpoints con alcance de Project que no incluyen el ID del Project en el path.

### `retryPolicy`

**Tipo** `'exponential' | 'linear' | 'none'` · **Opcional** · **Predeterminado** `'exponential'`

GET, HEAD, OPTIONS, PUT y DELETE reintentan los errores de red y las respuestas `5xx` hasta tres veces después del primer intento. POST no reintenta estos fallos, ni siquiera en operaciones que lógicamente son de solo lectura. Todos los métodos pueden reintentar las respuestas `429`. Establece este valor en `'none'` para desactivar los reintentos de transporte.

Para `429`, el retraso se obtiene de `Retry-After` (en segundos o como fecha HTTP); si no está disponible, de `RateLimit-Reset` (en segundos) y, en última instancia, se aplica un valor alternativo de 60 segundos. Los demás retrasos exponenciales son de 500, 1000 y 2000 ms; los lineales, de 500, 1000 y 1500 ms. Las esperas entre reintentos no tienen en cuenta las señales de cancelación, por lo que no se garantiza que cancelar interrumpa una espera de inmediato.

La traducción en runtime de la clase desactiva estos reintentos de transporte, incluidos los de `429`. En cambio, el helper de traducción en runtime generado usa la política de reintentos del cliente proporcionado.

### `timeoutMs`

**Tipo** `number | false` · **Opcional** · **Predeterminado** `60000`

Tiempo de espera en milisegundos para cada intento de solicitud. Si se omite, se usa 60000; `0` significa literalmente cero. Establécelo en `false` para desactivar el temporizador integrado; esto no desactiva la cancelación por parte del llamador ni la de un `fetch` personalizado. No es un plazo límite para toda la operación que incluya los reintentos y el procesamiento de la respuesta. Las implementaciones de `fetch` deben respetar la señal proporcionada.

Estos ajustes no son opciones del constructor de [`GT`](/docs/platform/core/reference/gt-class/constructor). (Consulta [Configuración de traducción](/docs/platform/core/reference/types/translation-config)).

## `API_VERSION` [#api-version]

**Type** `ApiVersion`

La versión de contrato predeterminada actual es `2026-03-06.v1`. Pasa otra versión compatible mediante `apiVersion` cuando mantengas una integration basada en un contrato de respuesta anterior.

## Helpers de endpoint [#endpoint-helpers]

Los helpers generados aceptan un objeto con el `client` compartido más los campos `body`, `headers`, `path` y `query` del endpoint, según corresponda. De forma predeterminada, devuelven `{ data, error, request, response }`.

```ts title="project-info.ts"
import { getProjectInfo } from 'generaltranslation/api';

const result = await getProjectInfo({
  client,
  path: { projectId: 'your-project-id' },
  throwOnError: true,
});

console.log(result.data.name);
```

Entre las opciones generadas más comunes se incluyen:

| Option          | Description                                                                  | Tipo                      | Optional | Default    |
| --------------- | ---------------------------------------------------------------------------- | ------------------------- | -------- | ---------- |
| `client`        | Cliente devuelto por `createApiClient`.                                      | `Client`                  | No       | —          |
| `body`          | Cuerpo tipado de la solicitud JSON.                                          | Específico del endpoint   | Varía    | —          |
| `path`          | Parámetros de ruta tipados.                                                  | Específico del endpoint   | Varía    | —          |
| `query`         | Parámetros de consulta tipados.                                              | Específico del endpoint   | Varía    | —          |
| `headers`       | Cabeceras por llamada que reemplazan las cabeceras compartidas del cliente.  | Específico del endpoint   | Sí       | —          |
| `throwOnError`  | Lanza una excepción ante una respuesta fallida en lugar de devolver `error`. | `boolean`                 | Sí       | `false`    |
| `responseStyle` | Devuelve todos los campos de la respuesta o solo los datos analizados.       | `'fields' \| 'data'`      | Sí       | `'fields'` |
| `signal`        | Cancela la solicitud con una señal de la Fetch API.                          | `AbortSignal`             | Sí       | —          |
| `meta`          | Valores expuestos a integraciones de cliente personalizadas.                 | `Record<string, unknown>` | Sí       | —          |

El SDK 0.5.2 instalado proporciona helpers generados para estas 48 operaciones públicas:

| Function                                                                                                              | Operation                                                                             |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| [`listProjects`](/docs/platform/openapi/reference/project/list-projects)                                              | Listar una página de proyectos seleccionados según la vinculación de la clave de API. |
| [`listOrgs`](/docs/platform/openapi/reference/project/list-orgs)                                                      | Listar la Organization asociada a una clave de API de Organization o de proyecto.     |
| [`createProject`](/docs/platform/openapi/reference/project/create-project)                                            | Crear un proyecto en una Organization seleccionada.                                   |
| [`createProjectApiKey`](/docs/platform/openapi/reference/project/create-api-key)                                      | Crear una clave de API de proyecto con los permisos delegados por quien llama.        |
| [`uploadSourceFiles`](/docs/platform/openapi/reference/files/upload-source)                                           | Subir archivos fuente.                                                                |
| [`uploadTranslations`](/docs/platform/openapi/reference/files/upload-translations)                                    | Subir archivos traducidos vinculados a archivos fuente existentes.                    |
| `uploadAssets`                                                                                                        | Subir recursos del proyecto.                                                          |
| `submitUserEditDiffs`                                                                                                 | Enviar cambios de traducción locales.                                                 |
| `generateProjectContext`                                                                                              | Generar el contexto del proyecto.                                                     |
| `enqueueFileTranslations`                                                                                             | Poner en cola archivos subidos para su traducción.                                    |
| `publishFiles`                                                                                                        | Publicar o dejar de publicar archivos.                                                |
| [`downloadFile`](/docs/platform/openapi/reference/files/download)                                                     | Descargar un archivo.                                                                 |
| `downloadFiles`                                                                                                       | Descargar varios archivos.                                                            |
| `getBranchInfo`                                                                                                       | Leer la información de la rama.                                                       |
| `createBranch`                                                                                                        | Crear una rama.                                                                       |
| [`createTag`](/docs/platform/openapi/reference/project/upsert-tag)                                                    | Crear o actualizar una etiqueta.                                                      |
| `getProjectInfo`                                                                                                      | Leer la información del proyecto.                                                     |
| `updateProjectInfo`                                                                                                   | Actualizar la información del proyecto.                                               |
| `getTranslationJobInfo`                                                                                               | Leer el estado de un trabajo de traducción.                                           |
| [`translate`](/docs/platform/openapi/reference/translation/translate-runtime)                                         | Traducir contenido en tiempo de ejecución.                                            |
| `getFileInfo`                                                                                                         | Leer los metadatos de un archivo.                                                     |
| `getTranslationStatus`                                                                                                | Leer el estado de traducción de un archivo.                                           |
| `processFileMoves`                                                                                                    | Mover o renombrar archivos.                                                           |
| `getOrphanedFiles`                                                                                                    | Buscar archivos huérfanos.                                                            |
| [`listContextGroups`](/docs/platform/openapi/reference/context-management/list-groups)                                | Listar los Context Groups de una Organization.                                        |
| [`createContextGroup`](/docs/platform/openapi/reference/context-management/create-group)                              | Crear un Context Group.                                                               |
| [`getContextGroup`](/docs/platform/openapi/reference/context-management/get-group)                                    | Leer un Context Group.                                                                |
| [`updateContextGroup`](/docs/platform/openapi/reference/context-management/update-group)                              | Actualizar un Context Group.                                                          |
| [`deleteContextGroup`](/docs/platform/openapi/reference/context-management/delete-group)                              | Eliminar un Context Group.                                                            |
| [`listProjectContextGroups`](/docs/platform/openapi/reference/context-management/list-project-groups)                 | Listar los Context Groups asignados a un proyecto.                                    |
| [`getProjectContextGroup`](/docs/platform/openapi/reference/context-management/get-project-group)                     | Leer un Context Group asignado.                                                       |
| [`assignContextGroup`](/docs/platform/openapi/reference/context-management/assign-group)                              | Asignar un Context Group a un proyecto.                                               |
| [`unassignContextGroup`](/docs/platform/openapi/reference/context-management/unassign-group)                          | Desasignar un Context Group de un proyecto.                                           |
| [`reorderContextGroup`](/docs/platform/openapi/reference/context-management/reorder-group)                            | Cambiar la prioridad de un Context Group asignado.                                    |
| [`listContextGlossary`](/docs/platform/openapi/reference/context-management/list-glossary)                            | Listar los términos del glosario de un Context Group.                                 |
| [`upsertContextGlossary`](/docs/platform/openapi/reference/context-management/upsert-glossary)                        | Crear o actualizar términos del glosario.                                             |
| [`getContextGlossaryEntry`](/docs/platform/openapi/reference/context-management/get-glossary-entry)                   | Leer un término del glosario.                                                         |
| [`updateContextGlossaryEntry`](/docs/platform/openapi/reference/context-management/update-glossary-entry)             | Actualizar un término del glosario.                                                   |
| [`deleteContextGlossaryEntry`](/docs/platform/openapi/reference/context-management/delete-glossary-entry)             | Eliminar un término del glosario.                                                     |
| [`listContextGlossaryTranslations`](/docs/platform/openapi/reference/context-management/list-glossary-translations)   | Listar las traducciones de un término del glosario.                                   |
| [`setContextGlossaryTranslation`](/docs/platform/openapi/reference/context-management/set-glossary-translation)       | Establecer la traducción de un término del glosario.                                  |
| [`deleteContextGlossaryTranslation`](/docs/platform/openapi/reference/context-management/delete-glossary-translation) | Eliminar la traducción de un término del glosario.                                    |
| [`listContextCustomPrompts`](/docs/platform/openapi/reference/context-management/list-custom-prompts)                 | Listar las instrucciones personalizadas de un Context Group.                          |
| [`upsertContextCustomPrompts`](/docs/platform/openapi/reference/context-management/upsert-custom-prompts)             | Crear o actualizar instrucciones personalizadas.                                      |
| [`updateContextCustomPrompt`](/docs/platform/openapi/reference/context-management/update-custom-prompt)               | Actualizar una instrucción personalizada.                                             |
| [`deleteContextCustomPrompt`](/docs/platform/openapi/reference/context-management/delete-custom-prompt)               | Eliminar una instrucción personalizada.                                               |
| [`importContextContent`](/docs/platform/openapi/reference/context-management/import-content)                          | Importar términos del glosario e instrucciones personalizadas.                        |
| [`exportContextContent`](/docs/platform/openapi/reference/context-management/export-content)                          | Exportar términos del glosario e instrucciones personalizadas.                        |

<Callout type="info">
  **Cambios en la v0.5.2:** el cliente generado añadió helpers de Context Management para Context Groups, asignaciones, Glossary terms, Custom Prompts, e importaciones y exportaciones.

  **Cambios en la v0.5.0:** las respuestas de listado devuelven `items` en lugar de `projects` u `orgs`, en consonancia con la API actual. Las llamadas con `throwOnError` que fallan lanzan [`ApiError`](#api-error) en lugar del cuerpo de respuesta decodificado.

  **Cambios en la v0.3.0:** `encodeBase64`, `decodeBase64`, `encodeFileContent` y `decodeFileContent` ya no se exportan. Codifica el contenido del archivo antes de pasarlo a un helper de subida generado.

  **Cambios en la v0.2.1:** [`createProject`](/docs/platform/openapi/reference/project/create-project) ahora requiere `path.orgId` y llama a `POST /v2/orgs/{orgId}/projects`. Esta versión también añadió [`createProjectApiKey`](/docs/platform/openapi/reference/project/create-api-key) y eliminó `shouldGenerateProjectContext` y `getProjectContextGenerationStatus`.
</Callout>

Usa `generateProjectContext` junto con `getTranslationJobInfo` para los trabajos de contexto. El helper [`downloadFile`](/docs/platform/openapi/reference/files/download) sigue obsoleto; usa `downloadFiles` tanto para descargas por lotes como de un solo archivo.

Consulta la [referencia pública de OpenAPI](/docs/platform/openapi/overview) para ver en tiempo real los permisos de los endpoints, los límites de solicitudes, los esquemas y los códigos de estado.

### Descubrimiento y aprovisionamiento

Usa [`listOrgs`](/docs/platform/openapi/reference/project/list-orgs) para encontrar la Organization asociada a tu API Key. Sirven tanto las Organization keys como las claves de Project; esta búsqueda no requiere permiso para crear proyectos.

El descubrimiento de proyectos devuelve una sola página determinada por la vinculación de la API Key: una clave de Project devuelve su proyecto y una Organization key devuelve los proyectos de su Organization. No se requiere ningún permiso de recurso. Usa [`paginate`](#pagination) para recorrer todos los proyectos:

```ts title="list-projects.ts"
import { listProjects, paginate } from 'generaltranslation/api';

for await (const project of paginate(listProjects, {
  client,
  query: { limit: 100 },
})) {
  console.log(project.id, project.name);
}
```

Para crear proyectos se necesita una Organization key con `org:projects:create`, y la operación recibe `path: { orgId }` y `body: { name, defaultLocale, cdnEnabled? }`.

Para [`createProjectApiKey`](/docs/platform/openapi/reference/project/create-api-key), especifica de forma explícita los `permissions` según el principio de mínimo privilegio. Si los omites, se solicitarán todos los permisos de proyecto delegables que tenga quien realiza la llamada; debes contar con cada uno de los permisos seleccionados. Guarda el secreto devuelto de forma segura y nunca lo escribas en los logs.

Estos helpers generados de descubrimiento y creación no son métodos de [`GT`](/docs/platform/core/reference/gt-class/constructor).

## `paginate` [#pagination]

```ts
function paginate<
  Options extends {
    client?: Client;
    query?: { cursor?: string; limit?: number };
  },
  Item,
>(
  list: (options: Options & { throwOnError: true }) => Promise<{
    data: { items: Item[]; nextCursor: string | null };
  }>,
  options: Options
): AsyncGenerator<Item>;
```

`paginate` devuelve uno a uno todos los elementos de una operación de listado como [`listProjects`](/docs/platform/openapi/reference/project/list-projects) o [`listOrgs`](/docs/platform/openapi/reference/project/list-orgs), y pasa `options` a cada solicitud de página. Solo solicita la página siguiente cuando la iteración llega a ella, por lo que salir del bucle evita nuevas solicitudes. Para reanudar, pasa un `nextCursor` guardado como `query.cursor`. Si una página falla, se lanza una excepción igual que en una llamada con `throwOnError`.

Las páginas se leen de forma independiente, por lo que los elementos que cambien durante la iteración pueden omitirse o aparecer repetidos.

## Sondeo de trabajos [#job-polling]

[`awaitJobs`](#job-polling) utiliza un cliente configurado para llamar a `getTranslationJobInfo` hasta que todos los trabajos solicitados se hayan completado, hayan fallado, sean desconocidos o no existan, o hasta que expire el tiempo de espera global.

```ts
function awaitJobs(
  client: Client,
  jobIds: readonly string[],
  options?: AwaitJobsOptions
): Promise<AwaitJobsResult>;
```

| Opción                   | Descripción                                                                                                        | Tipo                                                | Opcional | Predeterminado |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------- | -------- | -------------- |
| `pollingIntervalSeconds` | Intervalo entre solicitudes de estado.                                                                             | `number`                                            | Sí       | `5`            |
| `timeoutSeconds`         | Límite de tiempo total del sondeo.                                                                                 | `number`                                            | Sí       | `600`          |
| `onPoll`                 | Recibe cada respuesta de estado sin procesar que se obtenga correctamente, antes de registrar los estados finales. | `(statuses: GetTranslationJobInfoResponse) => void` | Sí       | —              |

```ts
import {
  awaitJobs,
  enqueueFileTranslations,
} from 'generaltranslation/api';

const result = await enqueueFileTranslations({
  client,
  body: {
    files: [{ fileId: 'homepage', versionId: 'version-1' }],
    sourceLocale: 'en',
    targetLocales: ['es'],
  },
  throwOnError: true,
});

if (!('jobData' in result.data)) {
  throw new Error('Expected the current enqueue response');
}

const jobs = await awaitJobs(client, Object.keys(result.data.jobData));

if (!jobs.complete) {
  console.warn('Translation jobs did not finish before the timeout');
}
```

`AwaitJobsResult` contiene `complete`, que es `false` únicamente cuando el sondeo agota el tiempo de espera, y `jobs`, que contiene el último resultado de cada ID solicitado. Un trabajo que no exista recibe el estado `unknown`. Pasar una lista vacía se resuelve de inmediato con `{ complete: true, jobs: [] }`.

Un error de la API o del cargador de estado antes del plazo límite general rechaza la promesa del sondeo. Si la solicitud falla una vez vencido el plazo, el sondeo devuelve los últimos resultados con `complete: false`.

`pollJobs` expone el mismo bucle de sondeo con un cargador de estado inyectado:

```ts
function pollJobs(
  jobIds: readonly string[],
  getJobStatuses: GetJobStatuses,
  options?: AwaitJobsOptions
): Promise<AwaitJobsResult>;

type GetJobStatuses = (
  jobIds: string[],
  signal: AbortSignal
) => Promise<GetTranslationJobInfoResponse>;
```

Úsalo cuando necesites una normalización personalizada de solicitudes o errores. Los sondeos son secuenciales y solo solicitan los ID pendientes. El cargador recibe una señal de cancelación limitada por el tiempo restante del plazo global y por un límite de 60 segundos por sondeo. Los resultados que llegan tarde se descartan; si se agota el tiempo de espera, se devuelven los últimos estados aceptados, que aún pueden estar en cola, en procesamiento o ser desconocidos desde el inicio. Un cargador que ignore la señal puede retrasar la resolución.

`complete: true` significa que no hay trabajos pendientes, no que todos los trabajos se hayan completado correctamente. Revisa cada estado antes de usar los resultados. Ambos helpers de sondeo de la API aceptan `onPoll`; las opciones del método [`awaitJobs`](/docs/platform/core/reference/gt-class-methods/translation/await-jobs) de la clase no. Ninguna opción de sondeo expone una señal del llamador, y detener el sondeo local no cancela los trabajos remotos.

## Procesamiento por lotes [#batch-processing]

`processBatches` divide una lista de entrada en fragmentos, invoca tu procesador para cada fragmento y aplana las listas devueltas en el orden de los lotes.

```ts
function processBatches<TInput, TOutput>(
  items: readonly TInput[],
  processBatch: (batch: TInput[]) => Promise<TOutput[]>,
  options?: BatchOptions
): Promise<TOutput[]>;
```

| Option      | Description                                                                      | Type      | Optional | Default              |
| ----------- | -------------------------------------------------------------------------------- | --------- | -------- | -------------------- |
| `batchSize` | Número de valores de entrada en cada batch. Proporciona un valor mayor que cero. | `number`  | Sí       | `DEFAULT_BATCH_SIZE` |
| `parallel`  | Procesa todos los batches de forma concurrente en lugar de secuencial.           | `boolean` | Sí       | `true`               |

`DEFAULT_BATCH_SIZE` es `100`.

Si un procesador de batch es rechazado, `processBatches` también lo es. Con el procesamiento en paralelo, los demás batches que ya se habían iniciado continúan de forma independiente.

```ts
import { Buffer } from 'node:buffer';
import {
  processBatches,
  uploadSourceFiles,
} from 'generaltranslation/api';

// Los helpers de endpoint generados esperan que el contenido del archivo esté codificado para su transporte.
const content = Buffer.from('{"greeting":"Hello"}', 'utf8').toString('base64');
const files = [{
  source: {
    content,
    fileName: 'en.json',
    fileFormat: 'JSON' as const,
    locale: 'en',
  },
}];

const results = await processBatches(files, async (batch) => {
  const result = await uploadSourceFiles({
    client,
    body: { data: batch },
    throwOnError: true,
  });
  return result.data.uploadedFiles;
});
```

## Tipos y errores [#types-errors]

El módulo exporta `Client`, `Options`, `ApiClientConfig`, `ApiVersion`, `RetryPolicy`, `AwaitJobsOptions`, `AwaitJobsResult`, `GetJobStatuses`, `JobResult`, `BatchOptions`, `RuntimeFileFormat` y los tipos de OpenAPI generados para las operaciones públicas indicadas arriba.

Para cada operación pública indicada arriba, el paquete exporta:

* `<Operation>Data` para la entrada tipada de `body`, `headers`, `path` y `query`.
* `<Operation>Errors` para el mapa de códigos de estado de los errores documentados.
* `<Operation>Error` para la unión de los errores documentados.
* `<Operation>Responses` para el mapa de códigos de estado de las respuestas correctas documentadas.
* `<Operation>Response` para la unión de las respuestas correctas documentadas.

Con el valor predeterminado `throwOnError: false`, una operación generada devuelve `data` o `error`, además del `request` de la Fetch API. Una respuesta HTTP incluye `response`; si se produce un fallo antes de recibir una respuesta, este queda como `undefined`. Con `throwOnError: true`, una respuesta de error HTTP de un cliente creado con `createApiClient` lanza un [`ApiError`](#api-error). Los fallos de red y de cancelación lanzan su error original; si se agota el tiempo de espera integrado, se lanza `Error('Request timed out after <timeoutMs>ms')`.

### `ApiError` [#api-error]

Con un cliente creado mediante `createApiClient`, las respuestas HTTP fallidas de las llamadas con `throwOnError`, de [`paginate`](#pagination), de [`awaitJobs`](#job-polling) y de los métodos de la clase [`GT`](/docs/platform/core/reference/gt-class/constructor) lanzan un `ApiError` con `name: 'ApiError'`, el código de estado HTTP como `code` numérico y un `message`. Impórtalo desde `generaltranslation/api` o `generaltranslation/errors`. Las llamadas sin `throwOnError` siguen devolviendo el cuerpo de la respuesta decodificado en `error`. Los fallos de red, de configuración, de cancelación y de tiempo de espera pueden rechazar por completo la llamada al método de la clase; no se trata necesariamente de fallos de traducción de elementos individuales.

```ts
import { ApiError } from 'generaltranslation/errors';

export function describeFailure(error: unknown): string {
  return error instanceof ApiError
    ? `${error.code}: ${error.message}`
    : String(error);
}
```

## Especificación de OpenAPI [#openapi-spec]

Usa [`/openapi.json`](/openapi.json) para consultar el contrato actual de la API pública alojada. La [referencia de OpenAPI](/docs/platform/openapi/overview) documenta los permisos de cada endpoint, los esquemas de solicitud y las respuestas.

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
