# 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.8 y al paquete standalone equivalente `@generaltranslation/api` 0.5.5.

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. Los helpers que llaman a una ruta `2026-03-06.v1` enlazan a la página de esa versión.

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

| Opción          | Description                                                                  | Tipo                      | Opcional | predeterminado    |
| --------------- | ---------------------------------------------------------------------------- | ------------------------- | -------- | ---------- |
| `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.5 instalado proporciona helpers generados para estas 48 operaciones públicas:

| Función                                                                                                             | Operación                                                                              |
| ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| [`listProjects`](/docs/platform/openapi/reference/projects/list-projects)                                           | Lista una página de proyectos seleccionados según la vinculación de la clave de API.   |
| [`listOrgs`](/docs/platform/openapi/reference/organizations/list-orgs)                                              | Lista la Organization asociada a una clave de API de Organization o de proyecto.       |
| [`createProject`](/docs/platform/openapi/reference/projects/create-project)                                         | Crea un proyecto en la Organization seleccionada.                                      |
| [`createProjectApiKey`](/docs/platform/openapi/reference/projects/create-project-api-key)                           | Crea una clave de API de proyecto con permisos delegados por quien realiza la llamada. |
| [`uploadSourceFiles`](/docs/platform/openapi/reference/versions/2026-03-06.v1/files/upload-source-files)            | Sube archivos de origen.                                                               |
| [`uploadTranslations`](/docs/platform/openapi/reference/versions/2026-03-06.v1/files/upload-translations)           | Sube archivos traducidos vinculados a archivos de origen existentes.                   |
| `uploadAssets`                                                                                                      | Sube recursos del proyecto.                                                            |
| `submitUserEditDiffs`                                                                                               | Envía las ediciones locales de traducciones.                                           |
| `generateProjectContext`                                                                                            | Genera el contexto del proyecto.                                                       |
| `enqueueFileTranslations`                                                                                           | Encola archivos subidos para su traducción.                                            |
| `publishFiles`                                                                                                      | Publica archivos o los retira de publicación.                                          |
| [`downloadFile`](/docs/platform/openapi/reference/versions/2026-03-06.v1/files/get-file-content)                    | Descarga un archivo.                                                                   |
| `downloadFiles`                                                                                                     | Descarga varios archivos.                                                              |
| `getBranchInfo`                                                                                                     | Obtiene información de la rama.                                                        |
| `createBranch`                                                                                                      | Crea una rama.                                                                         |
| [`createTag`](/docs/platform/openapi/reference/versions/2026-03-06.v1/branches/set-tag)                             | Crea o actualiza una etiqueta.                                                         |
| `getProjectInfo`                                                                                                    | Obtiene información del proyecto.                                                      |
| `updateProjectInfo`                                                                                                 | Actualiza la información del proyecto.                                                 |
| `getTranslationJobInfo`                                                                                             | Obtiene el estado del trabajo de traducción.                                           |
| [`translate`](/docs/platform/openapi/reference/versions/2026-03-06.v1/translation/translate-content)                | Traduce contenido en tiempo de ejecución.                                              |
| `getFileInfo`                                                                                                       | Obtiene los metadatos de un archivo.                                                   |
| `getTranslationStatus`                                                                                              | Obtiene el estado de traducción de un archivo.                                         |
| `processFileMoves`                                                                                                  | Mueve o renombra archivos.                                                             |
| `getOrphanedFiles`                                                                                                  | Busca archivos huérfanos.                                                              |
| [`listContextGroups`](/docs/platform/openapi/reference/context-groups/list-context-groups)                          | Lista los grupos de contexto de una Organization.                                      |
| [`createContextGroup`](/docs/platform/openapi/reference/context-groups/create-context-group)                        | Crea un grupo de contexto.                                                             |
| [`getContextGroup`](/docs/platform/openapi/reference/context-groups/get-context-group)                              | Obtiene un grupo de contexto.                                                          |
| [`updateContextGroup`](/docs/platform/openapi/reference/context-groups/update-context-group)                        | Actualiza un grupo de contexto.                                                        |
| [`deleteContextGroup`](/docs/platform/openapi/reference/context-groups/delete-context-group)                        | Elimina un grupo de contexto.                                                          |
| [`listProjectContextGroups`](/docs/platform/openapi/reference/context-groups/list-project-context-groups)           | Lista los grupos de contexto asignados a un proyecto.                                  |
| [`getProjectContextGroup`](/docs/platform/openapi/reference/context-groups/get-project-context-group)               | Obtiene un grupo de contexto asignado.                                                 |
| [`assignContextGroup`](/docs/platform/openapi/reference/context-groups/assign-context-group)                        | Asigna un grupo de contexto a un proyecto.                                             |
| [`unassignContextGroup`](/docs/platform/openapi/reference/context-groups/unassign-context-group)                    | Desasigna un grupo de contexto de un proyecto.                                         |
| [`reorderContextGroup`](/docs/platform/openapi/reference/context-groups/reorder-context-group)                      | Cambia la prioridad de un grupo de contexto asignado.                                  |
| [`listContextGlossary`](/docs/platform/openapi/reference/glossary/list-context-glossary)                            | Enumera los términos del glosario de un grupo de contexto.                             |
| [`upsertContextGlossary`](/docs/platform/openapi/reference/glossary/upsert-context-glossary)                        | Crea o actualiza términos del glosario.                                                |
| [`getContextGlossaryEntry`](/docs/platform/openapi/reference/glossary/get-context-glossary-entry)                   | Obtiene un término del glosario.                                                       |
| [`updateContextGlossaryEntry`](/docs/platform/openapi/reference/glossary/update-context-glossary-entry)             | Actualiza un término del glosario.                                                     |
| [`deleteContextGlossaryEntry`](/docs/platform/openapi/reference/glossary/delete-context-glossary-entry)             | Elimina un término del glosario.                                                       |
| [`listContextGlossaryTranslations`](/docs/platform/openapi/reference/glossary/list-context-glossary-translations)   | Enumera las traducciones de un término del glosario.                                   |
| [`setContextGlossaryTranslation`](/docs/platform/openapi/reference/glossary/set-context-glossary-translation)       | Define la traducción de un término del glosario.                                       |
| [`deleteContextGlossaryTranslation`](/docs/platform/openapi/reference/glossary/delete-context-glossary-translation) | Elimina la traducción de un término del glosario.                                      |
| [`listContextCustomPrompts`](/docs/platform/openapi/reference/custom-prompts/list-context-custom-prompts)           | Enumera los prompts personalizados de un grupo de contexto.                            |
| [`upsertContextCustomPrompts`](/docs/platform/openapi/reference/custom-prompts/upsert-context-custom-prompts)       | Crea o actualiza prompts personalizados.                                               |
| [`updateContextCustomPrompt`](/docs/platform/openapi/reference/custom-prompts/update-context-custom-prompt)         | Actualiza un prompt personalizado.                                                     |
| [`deleteContextCustomPrompt`](/docs/platform/openapi/reference/custom-prompts/delete-context-custom-prompt)         | Elimina un prompt personalizado.                                                       |
| [`importContextContent`](/docs/platform/openapi/reference/context-groups/import-context-content)                    | Importa términos del glosario y prompts personalizados.                                |
| [`exportContextContent`](/docs/platform/openapi/reference/context-groups/export-context-content)                    | Exporta términos del glosario y prompts personalizados.                                |

<Callout type="info">
  **Cambios en la v0.5.4:** [`ApiError`](#api-error) ya no usa una página de error HTML como mensaje; recurre al texto de estado de la respuesta o, si no lo hay, al código de estado HTTP.

  **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/projects/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/projects/create-project-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/versions/2026-03-06.v1/files/get-file-content) 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/organizations/list-orgs) para encontrar la Organization asociada a tu API Key. Sirven tanto las Organization keys como las claves de Project; no se requiere ningún permiso de recurso.

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/projects/create-project-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/projects/list-projects) o [`listOrgs`](/docs/platform/openapi/reference/organizations/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` cuando existe otro trabajo en la misma solicitud de estado. Si no existe ninguno de los trabajos de una solicitud de estado, la solicitud falla con un error 404 y la promesa del sondeo se rechaza con un [`ApiError`](#api-error). 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`. El mensaje es la cadena `error` del cuerpo decodificado o un cuerpo de texto que no sea HTML; en su defecto, el texto de estado de la respuesta y, por último, `HTTP <status>`, de modo que una página de error HTML nunca acaba siendo el mensaje.

Importa `ApiError` desde `generaltranslation/api` o `generaltranslation/errors`. Las llamadas sin `throwOnError` siguen devolviendo el cuerpo de la respuesta decodificado en `error`. Con la versión predeterminada de la API, ese cuerpo JSON también incluye un `code` de tipo cadena que indica la causa; `ApiError` no lo copia, por lo que `ApiError.code` sigue siendo el código de estado HTTP numérico. (Consulta [Errores](/docs/platform/openapi/overview#errors)). 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.
