# General Translation Platform: API-клиент
URL: https://generaltranslation.com/ru/docs/platform/core/reference/api-client.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Создание типизированного клиента для General Translation API и вызов сгенерированных вспомогательных функций эндпоинтов. Справочник API по createApiClient.

Импортируйте TypeScript-клиент из `generaltranslation/api`, когда нужен контроль на уровне эндпоинтов без самостоятельного формирования HTTP-запросов. Модуль объединяет аутентифицированный транспорт с поддержкой версий и повторных попыток, сгенерированные вспомогательные функции эндпоинтов, а также подключаемые по желанию утилиты для пакетной обработки и опроса задач перевода.

`generaltranslation/api` доступен в `generaltranslation` начиная с версии 9.2.0. Приведённые ниже примеры рассчитаны на `generaltranslation` 9.5.4 и эквивалентный автономный пакет `@generaltranslation/api` 0.5.2.

Сгенерированные вспомогательные функции соответствуют установленной версии пакета, которая может отличаться от текущего размещённого [публичного контракта OpenAPI](/docs/platform/openapi/overview). Проверяйте по публичному справочнику, какие эндпоинты и форматы файлов доступны в данный момент.

## Обзор [#overview]

| Экспорт                                                                           | Описание                                                                                         |
| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| [`createApiClient`](#create-client)                                               | Создаёт аутентифицированный клиент с поддержкой версионирования, повторных попыток и тайм-аутов. |
| [`ApiClientConfig`](#client-config)                                               | Настраивает транспорт клиента и общие заголовки запросов.                                        |
| [`API_VERSION`](#api-version)                                                     | Текущая версия контракта API, отправляемая по умолчанию.                                         |
| [Вспомогательные функции эндпоинта](#endpoint-helpers)                            | Типизированные функции для публичных операций, перечисленных ниже.                               |
| [`paginate`](#pagination)                                                         | Перебирает все элементы операции, возвращающей список.                                           |
| [`awaitJobs`](#job-polling) и [`pollJobs`](#job-polling)                          | Опрашивают задачи перевода до их завершения или истечения тайм-аута.                             |
| [`processBatches`](#batch-processing) и [`DEFAULT_BATCH_SIZE`](#batch-processing) | Обрабатывают входной массив пакетами настраиваемого размера.                                     |
| [`ApiError`](#api-error)                                                          | Ошибка, выбрасываемая при неуспешном HTTP-ответе.                                                |
| [Сгенерированные типы](#types-errors)                                             | Описывают данные эндпоинтов, ответы, ошибки и контракты клиента.                                 |
| [Публичная спецификация OpenAPI](#openapi-spec)                                   | Актуальный контракт размещённого API.                                                            |

## `createApiClient` [#create-client]

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

Клиент добавляет к каждому запросу заданную версию API, API-ключ и ID проекта. Передайте его в сгенерированную вспомогательную функцию эндпоинта:

```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);
```

В примерах ниже используется этот же настроенный `client`.

## `ApiClientConfig` [#client-config]

| Option                        | Описание                                                                   | Type                                  | необязательно | Default            |
| ----------------------------- | -------------------------------------------------------------------------- | ------------------------------------- | -------- | ------------------ |
| [`apiKey`](#apikey)           | API-ключ, передаваемый в заголовке `Authorization`.                        | `string`                              | Да       | —                  |
| [`apiVersion`](#apiversion)   | Версия контракта, передаваемая в `gt-api-version`.                         | `ApiVersion`                          | Да       | `API_VERSION`      |
| [`baseUrl`](#baseurl)         | Базовый адрес API.                                                         | `string`                              | Нет      | —                  |
| [`fetch`](#fetch)             | Пользовательская реализация Fetch API.                                     | `typeof fetch`                        | Да       | `globalThis.fetch` |
| [`projectId`](#projectid)     | ID проекта, передаваемый в `gt-project-id`.                                | `string`                              | Да       | —                  |
| [`retryPolicy`](#retrypolicy) | Стратегия задержки между повторными попытками.                             | `'exponential' \| 'linear' \| 'none'` | Да       | `'exponential'`    |
| [`timeoutMs`](#timeoutms)     | Тайм-аут на одну попытку или `false`, чтобы отключить встроенный тайм-аут. | `number \| false`                     | Да       | `60000`            |

### `apiKey`

**Тип** `string` · **Необязательно**

API-ключ, передаваемый в виде `Authorization: Bearer <api-key>`. Клиент не читает переменные окружения автоматически.

### `apiVersion`

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

Версия контракта API, передаваемая в header `gt-api-version`.

### `baseUrl`

**Тип** `string` · **Обязательно**

Origin (базовый адрес) API. Для облачного General Translation API используйте `https://api.gtx.dev`.

### `fetch`

**Type** `typeof fetch` · **Опционально** · **Default** `globalThis.fetch`

Пользовательская реализация Fetch API. Используйте её для инструментирования, тестирования или в средах выполнения, где нет глобальной реализации fetch.

### `projectId`

**Type** `string` · **необязательно**

ID проекта, передаваемый в заголовке `gt-project-id`. Организационным ключам этот заголовок необходим для эндпоинтов с областью проекта, которые не содержат ID проекта в пути.

### `retryPolicy`

**Тип** `'exponential' | 'linear' | 'none'` · **Необязательно** · **По умолчанию** `'exponential'`

Запросы GET, HEAD, OPTIONS, PUT и DELETE при сетевых ошибках и ответах `5xx` повторяются до трёх раз после первой попытки. Запросы POST при таких сбоях не повторяются, даже если операция по своей логике только читает данные. Повтор при ответе `429` возможен для всех методов. Чтобы отключить повторные попытки на транспортном уровне, установите значение `'none'`.

Для `429` задержка берётся из `Retry-After` (в секундах или в виде HTTP-даты), затем из `RateLimit-Reset` (в секундах), а если их нет, используется резервное значение в 60 секунд. В остальных случаях экспоненциальные задержки составляют 500, 1000 и 2000 мс, линейные — 500, 1000 и 1500 мс. Ожидание перед повтором не реагирует на сигнал прерывания, поэтому отмена не гарантирует, что ожидание прервётся сразу.

Runtime-перевод на основе класса отключает эти повторные попытки на транспортном уровне, включая `429`. Сгенерированный вспомогательный модуль runtime-перевода вместо этого использует политику повторов переданного клиента.

### `timeoutMs`

**Type** `number | false` · **необязательно** · **Default** `60000`

Тайм-аут в миллисекундах для каждой попытки запроса. Если параметр не указан, используется 60000; значение `0` означает именно ноль. Укажите `false`, чтобы отключить встроенный таймер; отмена со стороны вызывающего кода или собственной реализации fetch при этом продолжает работать. Это не общий лимит времени на всю операцию, включая повторные попытки и обработку ответа. Реализации fetch должны учитывать переданный сигнал.

Эти настройки не являются параметрами конструктора [`GT`](/docs/platform/core/reference/gt-class/constructor). (См. [Конфигурация перевода](/docs/platform/core/reference/types/translation-config).)

## `API_VERSION` [#api-version]

**Тип** `ApiVersion`

Текущая версия контракта по умолчанию — `2026-03-06.v1`. Если интеграция должна работать со старым контрактом ответа, передайте другую поддерживаемую версию в `apiVersion`.

## Вспомогательные функции эндпоинта [#endpoint-helpers]

Сгенерированные вспомогательные функции эндпоинта принимают один объект с общим `client` и соответствующими полями эндпоинта: `body`, `headers`, `path` и `query`. По умолчанию они возвращают `{ 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);
```

Обычно генерируются следующие параметры:

| Option          | Описание                                                               | тип                      | необязательно | Default    |
| --------------- | ---------------------------------------------------------------------- | ------------------------- | ------------- | ---------- |
| `client`        | Клиент, возвращаемый `createApiClient`.                                | `Client`                  | Нет           | —          |
| `body`          | Типизированное тело JSON-запроса.                                      | Зависит от эндпоинта      | Зависит       | —          |
| `path`          | Типизированные параметры пути.                                         | Зависит от эндпоинта      | Зависит       | —          |
| `query`         | Типизированные параметры строки запроса.                               | Зависит от эндпоинта      | Зависит       | —          |
| `headers`       | Заголовки отдельного вызова, переопределяющие общие заголовки клиента. | Зависит от эндпоинта      | Да            | —          |
| `throwOnError`  | Выбрасывать исключение при неуспешном ответе вместо возврата `error`.  | `boolean`                 | Да            | `false`    |
| `responseStyle` | Возвращать все поля ответа или только разобранные данные.              | `'fields' \| 'data'`      | Да            | `'fields'` |
| `signal`        | Отмена запроса с помощью сигнала Fetch API.                            | `AbortSignal`             | Да            | —          |
| `meta`          | Значения, доступные пользовательским интеграциям клиента.              | `Record<string, unknown>` | Да            | —          |

Установленный SDK версии 0.5.2 предоставляет сгенерированные вспомогательные функции для следующих 48 публичных операций:

| Функция                                                                                                               | Операция                                                                      |
| --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [`listProjects`](/docs/platform/openapi/reference/project/list-projects)                                              | Получить одну страницу проектов, выбранных по привязке API-ключа.             |
| [`listOrgs`](/docs/platform/openapi/reference/project/list-orgs)                                                      | Получить организацию, связанную с API-ключом организации или проекта.         |
| [`createProject`](/docs/platform/openapi/reference/project/create-project)                                            | Создать проект в выбранной организации.                                       |
| [`createProjectApiKey`](/docs/platform/openapi/reference/project/create-api-key)                                      | Создать API-ключ проекта с разрешениями, делегированными вызывающей стороной. |
| [`uploadSourceFiles`](/docs/platform/openapi/reference/files/upload-source)                                           | Загрузить исходные файлы.                                                     |
| [`uploadTranslations`](/docs/platform/openapi/reference/files/upload-translations)                                    | Загрузить переведённые файлы, связанные с существующими исходными файлами.    |
| `uploadAssets`                                                                                                        | Загрузить ресурсы проекта.                                                    |
| `submitUserEditDiffs`                                                                                                 | Отправить локальные правки перевода.                                          |
| `generateProjectContext`                                                                                              | Сгенерировать контекст проекта.                                               |
| `enqueueFileTranslations`                                                                                             | Поставить загруженные файлы в очередь на перевод.                             |
| `publishFiles`                                                                                                        | Опубликовать файлы или снять их с публикации.                                 |
| [`downloadFile`](/docs/platform/openapi/reference/files/download)                                                     | Скачать один файл.                                                            |
| `downloadFiles`                                                                                                       | Скачать несколько файлов.                                                     |
| `getBranchInfo`                                                                                                       | Получить информацию о ветке.                                                  |
| `createBranch`                                                                                                        | Создать ветку.                                                                |
| [`createTag`](/docs/platform/openapi/reference/project/upsert-tag)                                                    | Создать или обновить тег.                                                     |
| `getProjectInfo`                                                                                                      | Получить информацию о проекте.                                                |
| `updateProjectInfo`                                                                                                   | Обновить информацию о проекте.                                                |
| `getTranslationJobInfo`                                                                                               | Получить статус задачи перевода.                                              |
| [`translate`](/docs/platform/openapi/reference/translation/translate-runtime)                                         | Перевести контент во время выполнения.                                        |
| `getFileInfo`                                                                                                         | Получить метаданные файла.                                                    |
| `getTranslationStatus`                                                                                                | Получить статус перевода файла.                                               |
| `processFileMoves`                                                                                                    | Переместить или переименовать файлы.                                          |
| `getOrphanedFiles`                                                                                                    | Найти осиротевшие файлы.                                                      |
| [`listContextGroups`](/docs/platform/openapi/reference/context-management/list-groups)                                | Получить список контекстных групп в организации.                              |
| [`createContextGroup`](/docs/platform/openapi/reference/context-management/create-group)                              | Создать контекстную группу.                                                   |
| [`getContextGroup`](/docs/platform/openapi/reference/context-management/get-group)                                    | Получить контекстную группу.                                                  |
| [`updateContextGroup`](/docs/platform/openapi/reference/context-management/update-group)                              | Обновить контекстную группу.                                                  |
| [`deleteContextGroup`](/docs/platform/openapi/reference/context-management/delete-group)                              | Удалить контекстную группу.                                                   |
| [`listProjectContextGroups`](/docs/platform/openapi/reference/context-management/list-project-groups)                 | Получить список контекстных групп, назначенных проекту.                       |
| [`getProjectContextGroup`](/docs/platform/openapi/reference/context-management/get-project-group)                     | Получить одну назначенную контекстную группу.                                 |
| [`assignContextGroup`](/docs/platform/openapi/reference/context-management/assign-group)                              | Назначить контекстную группу проекту.                                         |
| [`unassignContextGroup`](/docs/platform/openapi/reference/context-management/unassign-group)                          | Снять контекстную группу с проекта.                                           |
| [`reorderContextGroup`](/docs/platform/openapi/reference/context-management/reorder-group)                            | Изменить приоритет назначенной контекстной группы.                            |
| [`listContextGlossary`](/docs/platform/openapi/reference/context-management/list-glossary)                            | Получить список терминов Glossary в контекстной группе.                       |
| [`upsertContextGlossary`](/docs/platform/openapi/reference/context-management/upsert-glossary)                        | Создать или обновить термины Glossary.                                        |
| [`getContextGlossaryEntry`](/docs/platform/openapi/reference/context-management/get-glossary-entry)                   | Получить один термин Glossary.                                                |
| [`updateContextGlossaryEntry`](/docs/platform/openapi/reference/context-management/update-glossary-entry)             | Обновить один термин Glossary.                                                |
| [`deleteContextGlossaryEntry`](/docs/platform/openapi/reference/context-management/delete-glossary-entry)             | Удалить один термин Glossary.                                                 |
| [`listContextGlossaryTranslations`](/docs/platform/openapi/reference/context-management/list-glossary-translations)   | Получить список переводов термина Glossary.                                   |
| [`setContextGlossaryTranslation`](/docs/platform/openapi/reference/context-management/set-glossary-translation)       | Задать перевод термина Glossary.                                              |
| [`deleteContextGlossaryTranslation`](/docs/platform/openapi/reference/context-management/delete-glossary-translation) | Удалить перевод термина Glossary.                                             |
| [`listContextCustomPrompts`](/docs/platform/openapi/reference/context-management/list-custom-prompts)                 | Получить список Custom Prompts в контекстной группе.                          |
| [`upsertContextCustomPrompts`](/docs/platform/openapi/reference/context-management/upsert-custom-prompts)             | Создать или обновить Custom Prompts.                                          |
| [`updateContextCustomPrompt`](/docs/platform/openapi/reference/context-management/update-custom-prompt)               | Обновить один Custom Prompt.                                                  |
| [`deleteContextCustomPrompt`](/docs/platform/openapi/reference/context-management/delete-custom-prompt)               | Удалить один Custom Prompt.                                                   |
| [`importContextContent`](/docs/platform/openapi/reference/context-management/import-content)                          | Импортировать термины Glossary и Custom Prompts.                              |
| [`exportContextContent`](/docs/platform/openapi/reference/context-management/export-content)                          | Экспортировать термины Glossary и Custom Prompts.                             |

<Callout type="info">
  **Изменено в v0.5.2:** в сгенерированный клиент добавлены вспомогательные функции Context Management для работы с контекстными группами, их назначениями, терминами глоссария, Custom Prompts, а также для импорта и экспорта.

  **Изменено в v0.5.0:** ответы со списками теперь возвращают `items` вместо `projects` или `orgs` — в соответствии с текущим API. При неудачных вызовах с `throwOnError` выбрасывается исключение [`ApiError`](#api-error), а не декодированное тело ответа.

  **Изменено в v0.3.0:** `encodeBase64`, `decodeBase64`, `encodeFileContent` и `decodeFileContent` больше не экспортируются. Кодируйте содержимое файла перед передачей в сгенерированную вспомогательную функцию загрузки.

  **Изменено в v0.2.1:** [`createProject`](/docs/platform/openapi/reference/project/create-project) теперь требует `path.orgId` и обращается к `POST /v2/orgs/{orgId}/projects`. В этой версии также добавлена функция [`createProjectApiKey`](/docs/platform/openapi/reference/project/create-api-key) и удалены `shouldGenerateProjectContext` и `getProjectContextGenerationStatus`.
</Callout>

Для задач генерации контекста используйте `generateProjectContext` вместе с `getTranslationJobInfo`. Вспомогательная функция [`downloadFile`](/docs/platform/openapi/reference/files/download) по-прежнему считается устаревшей; для пакетного скачивания и скачивания отдельных файлов используйте `downloadFiles`.

Актуальные сведения о разрешениях эндпоинтов, ограничениях частоты запросов, схемах и кодах состояния см. в [публичном справочнике OpenAPI](/docs/platform/openapi/overview).

### Обнаружение и подготовка ресурсов

Используйте [`listOrgs`](/docs/platform/openapi/reference/project/list-orgs), чтобы найти организацию, связанную с вашим API-ключом. Подойдут как ключи организации, так и ключи проекта; разрешение на создание проектов для этого запроса не требуется.

При обнаружении проектов возвращается одна страница, которая определяется привязкой API-ключа: для ключа проекта возвращается его проект, а для ключа организации (Organization key) — проекты этой организации. Разрешения на ресурсы не требуются. Чтобы перебрать все проекты, используйте [`paginate`](#pagination):

```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);
}
```

Для создания проекта требуется ключ организации (Organization key) с разрешением `org:projects:create`; операция принимает `path: { orgId }` и `body: { name, defaultLocale, cdnEnabled? }`.

Для [`createProjectApiKey`](/docs/platform/openapi/reference/project/create-api-key) явно укажите `permissions` по принципу минимальных привилегий. Если их опустить, будут запрошены все делегируемые разрешения проекта, которыми обладает вызывающая сторона; при этом у вас должно быть каждое из выбранных разрешений. Храните возвращённый секрет в надёжном месте и никогда не записывайте его в логи.

Эти сгенерированные вспомогательные функции для обнаружения и создания не являются методами [`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` последовательно возвращает каждый элемент list-операции, например [`listProjects`](/docs/platform/openapi/reference/project/list-projects) или [`listOrgs`](/docs/platform/openapi/reference/project/list-orgs), передавая `options` в запрос каждой страницы. Следующая страница запрашивается только тогда, когда до неё доходит итерация, поэтому при выходе из цикла дальнейшие запросы не выполняются. Чтобы продолжить с места остановки, передайте сохранённый `nextCursor` в `query.cursor`. Если загрузить страницу не удалось, выбрасывается исключение — так же, как при вызове с `throwOnError`.

Страницы считываются независимо друг от друга, поэтому элементы, изменившиеся во время итерации, могут быть пропущены или получены повторно.

## Опрос задач [#job-polling]

[`awaitJobs`](#job-polling) с помощью настроенного клиента вызывает `getTranslationJobInfo` до тех пор, пока каждая запрошенная задача не будет завершена, не завершится с ошибкой, не окажется в неизвестном состоянии или не будет найдена, либо пока не истечёт общий тайм-аут.

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

| Опция                    | Описание                                                                                     | Тип                                                 | Необязательно | По умолчанию |
| ------------------------ | -------------------------------------------------------------------------------------------- | --------------------------------------------------- | ------------- | ------------ |
| `pollingIntervalSeconds` | Задержка между запросами статуса.                                                            | `number`                                            | Да            | `5`          |
| `timeoutSeconds`         | Общий тайм-аут опроса.                                                                       | `number`                                            | Да            | `600`        |
| `onPoll`                 | Получает каждый успешный необработанный ответ со статусами до обработки финальных состояний. | `(statuses: GetTranslationJobInfoResponse) => void` | Да            | —            |

```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` содержит поле `complete`, которое равно `false` только при истечении времени ожидания опроса, и поле `jobs` с последним результатом для каждого запрошенного идентификатора. Отсутствующая задача получает статус `unknown`. Передача пустого массива сразу разрешается значением `{ complete: true, jobs: [] }`.

Ошибка API или загрузчика статусов до наступления общего дедлайна приводит к отклонению промиса опроса. Если запрос завершается неудачей уже после истечения дедлайна, опрос возвращает последние результаты с `complete: false`.

`pollJobs` предоставляет тот же цикл опроса с внедряемым загрузчиком статусов:

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

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

Используйте этот вариант, когда требуется собственная нормализация запросов или ошибок. Опросы выполняются последовательно, и в каждом запрашиваются только идентификаторы задач, которые ещё ожидают завершения. Загрузчик получает сигнал прерывания, ограниченный оставшимся общим дедлайном и лимитом в 60 секунд на один опрос. Результаты, пришедшие с опозданием, отбрасываются; при тайм-ауте возвращаются последние принятые статусы, среди которых могут остаться задачи в очереди, в обработке или с изначально неизвестным статусом. Загрузчик, игнорирующий сигнал, может задержать разрешение промиса.

`complete: true` означает, что ожидающих задач не осталось, но не гарантирует, что все задачи завершились успешно. Перед использованием результатов проверяйте статус каждой задачи. Обе вспомогательные функции опроса API принимают `onPoll`, а параметры метода класса [`awaitJobs`](/docs/platform/core/reference/gt-class-methods/translation/await-jobs) — нет. Ни один параметр опроса не позволяет передать сигнал вызывающей стороны, а остановка локального опроса не отменяет задачи на сервере.

## Пакетная обработка [#batch-processing]

`processBatches` разбивает входной массив на части, вызывает ваш обработчик для каждой части и «схлопывает» возвращённые массивы в один в порядке следования пакетов.

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

| Option      | Описание                                                                  | Type      | Optional | Default              |
| ----------- | ------------------------------------------------------------------------- | --------- | -------- | -------------------- |
| `batchSize` | Количество входных значений в каждом batch. Укажите значение больше нуля. | `number`  | Да       | `DEFAULT_BATCH_SIZE` |
| `parallel`  | Обрабатывать все batch параллельно, а не последовательно.                 | `boolean` | Да       | `true`               |

`DEFAULT_BATCH_SIZE` равен `100`.

Если обработчик batch завершается с ошибкой, `processBatches` тоже завершается с ошибкой. При параллельной обработке остальные уже запущенные batch продолжают выполняться независимо.

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

// Сгенерированные вспомогательные функции эндпоинтов ожидают содержимое файла, закодированное для передачи.
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;
});
```

## Типы и ошибки [#types-errors]

Модуль экспортирует `Client`, `Options`, `ApiClientConfig`, `ApiVersion`, `RetryPolicy`, `AwaitJobsOptions`, `AwaitJobsResult`, `GetJobStatuses`, `JobResult`, `BatchOptions`, `RuntimeFileFormat`, а также сгенерированные типы OpenAPI для перечисленных выше публичных операций.

Для каждой перечисленной выше публичной операции пакет экспортирует:

* `<Operation>Data` — типизированные входные данные: `body`, `headers`, `path` и `query`.
* `<Operation>Errors` — карту документированных ошибок по кодам состояния.
* `<Operation>Error` — объединение документированных ошибок.
* `<Operation>Responses` — карту документированных успешных ответов по кодам состояния.
* `<Operation>Response` — объединение документированных успешных ответов.

При значении по умолчанию `throwOnError: false` сгенерированная операция возвращает либо `data`, либо `error`, а также `request` из Fetch API. Если получен HTTP-ответ, доступно поле `response`; если сбой произошёл до получения ответа, оно остаётся неопределённым. При `throwOnError: true` HTTP-ответ с ошибкой от клиента `createApiClient` выбрасывает исключение [`ApiError`](#api-error). При сбоях сети и отмене выбрасывается исходная ошибка; при срабатывании встроенного тайм-аута выбрасывается исключение `Error('Request timed out after <timeoutMs>ms')`.

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

При использовании клиента `createApiClient` неуспешные HTTP-ответы в вызовах с `throwOnError`, в [`paginate`](#pagination), [`awaitJobs`](#job-polling) и в методах класса [`GT`](/docs/platform/core/reference/gt-class/constructor) приводят к выбрасыванию исключения `ApiError` с полями `name: 'ApiError'`, `code` (числовой HTTP-статус) и `message`. Импортируйте его из `generaltranslation/api` или `generaltranslation/errors`. Вызовы без `throwOnError` по-прежнему возвращают декодированное тело ответа в `error`. Сетевые ошибки, ошибки конфигурации, отмена и превышение тайм-аута могут приводить к отклонению (reject) всего вызова метода класса; это не обязательно означает сбой перевода отдельных элементов.

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

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

## Спецификация OpenAPI [#openapi-spec]

Актуальный контракт публичного API, размещённого на хостинге, доступен по адресу [`/openapi.json`](/openapi.json). В [справочнике OpenAPI](/docs/platform/openapi/overview) описаны разрешения эндпоинтов, схемы запросов и ответы.

## Sitemap

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