Belin Doc IconBelin Doc

Belin Doc · Открытая платформа

API переводчик

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

Базовый URL
https://belindoc.com/api
Заголовок авторизации
X-Api-Key
Метод
POST · application/json
Эндпоинтов
21
Обновлено
2026-09-04
Содержание
Начало работы

Быстрый старт

Четыре шага от исходного PDF до готового перевода. Видеоэндпоинты устроены так же.

  1. 01

    Создать API-ключ

    Войдите на belindoc.com, откройте меню аватара в правом верхнем углу, выберите «Центр разработчика» и создайте ключ. Ключи начинаются с ft_, полное значение показывается только один раз — сразу после создания.

  2. 02

    Загрузить файл

    Сначала запросите предподписанную ссылку, затем отправьте файл на неё методом PUT. Ссылка живёт 10 минут; возвращённый objectKey понадобится на следующем шаге.

    bash
    # 1. Получить предподписанный URL для загрузки (действует 10 минут)
    curl -X POST https://belindoc.com/api/external/translate/batchPresignedUploadUrl \
      -H "X-Api-Key: $BELINDOC_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"fileNameList": ["contract.pdf"]}'
    
    # → data[0].persignedUploadUrl / data[0].objectKey
    
    # 2. Загрузить файл прямо по этому URL методом PUT
    curl -X PUT "<persignedUploadUrl>" --upload-file contract.pdf
  3. 03

    Отправить на перевод

    Поля fileList, sourceLanguage, targetLanguage и model обязательны. Значение AnyLanguage включает автоопределение языка оригинала, а список моделей берите из getModelList, а не из констант в коде.

    bash
    curl -X POST https://belindoc.com/api/external/translate/batchSubmitTranslateTask \
      -H "X-Api-Key: $BELINDOC_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "fileList": [{ "fileName": "contract.pdf", "fileObjectKey": "<objectKey>" }],
        "sourceLanguage": "AnyLanguage",
        "targetLanguage": "zh-CN",
        "model": "Gemini-2.5-Flash"
      }'
    
    # → { "code": "200", "data": { "batchNo": "...", "fileList": [ ... ] } }
  4. 04

    Опросить статус и скачать

    Опрашивайте по batchNo, пока status не станет 3, затем запросите ссылку на скачивание. Этот эндпоинт отвечает потоком SSE — ссылка приходит в событии [DONE].

    bash
    # Опрос задачи: status = 3 — перевод готов
    curl -X POST https://belindoc.com/api/external/translate/searchTranslateFileByBatchNo \
      -H "X-Api-Key: $BELINDOC_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"batchNo": "<batchNo>"}'
    
    # Получить ссылку на скачивание: ответ SSE, ссылка приходит в событии [DONE]
    curl -N -X POST https://belindoc.com/api/external/translate/getTranslateS3DownloadUrl \
      -H "X-Api-Key: $BELINDOC_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"translateOrderNo": "<translateOrderNo>", "urlType": 2}'
    
    # event:[DONE]
    # data:{"url":"https://..."}
Начало работы

Авторизация

Открытые эндпоинты живут под /external/ и определяют вызывающего только по ключу. Всё остальное — тело запроса, значения по умолчанию, структура ответа — совпадает с веб-интерфейсом.

http
POST /api/external/translate/getModelList HTTP/1.1
Host: belindoc.com
Content-Type: application/json
X-Api-Key: ft_xxxxxxxxxxxxxxxxxxxxxxxx
language: zh

{}
json
{
  "code": "200",
  "msg": null,
  "requestId": "8f1c…",
  "data": { }
}
Заголовок X-Api-Key
Передавайте ключ в каждом запросе. Отсутствующий, отключённый, просроченный ключ или IP вне белого списка отбрасываются ещё до бизнес-логики.
Заголовок language
Необязательный. Задаёт язык поля msg в ответе, по умолчанию en. Допустимы 9 языков сайта: en, zh, zh-Hant, ja, ko, fr, ru, de, ar.
Ключ действует от лица личного аккаунта
Ключ всегда разрешается в тот личный аккаунт, который его создал. Файлы попадают в хранилище платформы, а задачи списывают квоту этого аккаунта — приватное пространство организации через API не адресуется.
Единая структура ответа
Все эндпоинты отвечают одной и той же обёрткой. code, равный 200, означает успех; любое другое значение — бизнес-ошибка, а в msg лежит локализованный текст.
Ни JWT, ни подписи запроса
Фильтры токена и подписи, защищающие веб-эндпоинты, пропускают /external/ без проверок. Ключ — единственный реквизит доступа: храните его как пароль и только на сервере.
/external/translate9 эндпоинтов

Перевод документов

Весь путь для документов: загрузка, отправка, опрос, скачивание — плюс списки моделей и языков, которые стоит читать отсюда, а не хранить в константах.

  • status: 0 в очереди · 1 разбор · 2 переводится · 3 готово · 4 ошибка · 5 отменено
  • urlType: 1 исходный файл · 2 перевод · 3 параллельно по горизонтали · 4 по вертикали · -1 предпросмотр EPUB
01

Получить ссылки для загрузки

POST

/external/translate/batchPresignedUploadUrl

Получить предподписанные ссылки для загрузки одного или нескольких файлов.

Параметры

ПолеТипОбяз.Описание
fileNameListarray[string]обяз.Имена файлов для ссылок загрузки

Ответ · data

ПолеТипОписание
persignedUploadUrlstringПредподписанная ссылка PUT, 10 минут
objectKeystringКлюч хранилища для отправки
fileNamestringИсходное имя файла
storageTypenumberТип хранилища файла
Пример
запрос
{
  "fileNameList": ["contract.pdf"]
}
ответ
{
  "code": "200",
  "data": [
    {
      "persignedUploadUrl": "https://s3.../contract.pdf?X-Amz-Signature=…",
      "objectKey": "translate/10086/2026/contract.pdf",
      "fileName": "contract.pdf",
      "storageType": 1
    }
  ]
}
02

Определить скан

POST

/external/translate/isOcr

Определить до отправки, является ли загруженный файл сканом, чтобы включать OCR только там, где он действительно нужен.

Параметры

ПолеТипОбяз.Описание
fileObjectKeystringобяз.objectKey из ответа на предподписание
storageTypenumberобяз.Тип хранилища файла

Ответ · data

ПолеТипОписание
isOcrnumber1 — файл является сканом
isDoubleDecknumber1 — в скане уже есть текстовый слой
Пример
запрос
{
  "fileObjectKey": "translate/10086/2026/contract.pdf",
  "storageType": 1
}
ответ
{
  "code": "200",
  "data": { "isOcr": 1, "isDoubleDeck": 0 }
}
03

Отправить перевод

POST

/external/translate/batchSubmitTranslateTask

Отправить пакет на перевод; возвращает batchNo и номер заказа для каждого файла.

Параметры

ПолеТипОбяз.Описание
fileListarrayобяз.Файлы на перевод
fileNamestringобяз.Исходное имя файла
fileObjectKeystringобяз.objectKey из ответа на предподписание
isOcrFilenumber1 — считать файл сканом; берите значение из isOcr
sourceLanguagestringобяз.Код языка оригинала; AnyLanguage — автоопределение
targetLanguagestringобяз.Код целевого языка
modelstringобяз.Версия модели из getModelList
isOcrnumber1 включает OCR; по умолчанию 0
isMathnumber1 сохраняет вёрстку формул; по умолчанию 0
translateStylenumberПресет стиля перевода
terminologyCollectionIdstringID глоссария для применения; создавать и вести глоссарии пока можно только в веб-приложении

Ответ · data

ПолеТипОписание
batchNostringНомер пакета из ответа на отправку
fileListarrayФайлы на перевод
balanceHintnumber1 предупреждает, что квота на исходе
Пример
запрос
{
  "fileList": [
    { "fileName": "contract.pdf", "fileObjectKey": "translate/10086/2026/contract.pdf" }
  ],
  "sourceLanguage": "AnyLanguage",
  "targetLanguage": "zh-CN",
  "model": "Gemini-2.5-Flash",
  "isOcr": 0,
  "terminologyCollectionId": "66f1c2a4b8d3e5f7a9c1b2d3"
}
ответ
{
  "code": "200",
  "data": {
    "batchNo": "B20260828173001",
    "fileList": [
      { "fileName": "contract.pdf", "fileObjectKey": "translate/10086/2026/contract.pdf" }
    ],
    "balanceHint": 0
  }
}
04

Задачи пакета

POST

/external/translate/searchTranslateFileByBatchNo

Получить все задачи пакета — именно этот эндпоинт используют для опроса.

Параметры

ПолеТипОбяз.Описание
batchNostringобяз.Номер пакета из ответа на отправку

Ответ · объект задачи

ПолеТипОписание
translateOrderNostringНомер заказа задачи
batchNostringНомер пакета из ответа на отправку
sourceFileNamestringИсходное имя файла
statusnumberСтатус задачи — см. легенду
textNumbernumberСимволов, учтённых по задаче
targetFileUrlstringСсылка на перевод
targetFileUrl2stringРезервная ссылка для материкового Китая
xComparisonS3UrlstringФайл параллельного сравнения по горизонтали
yComparisonS3UrlstringФайл сравнения по вертикали
freeTranslateQuotanumberСтраниц списано с бесплатной квоты
walletTranslateQuotanumberСтраниц списано с платной квоты
createTimenumberСоздано, epoch в миллисекундах
startTimenumberНачато, epoch в миллисекундах
endTimenumberЗавершено, epoch в миллисекундах
errorCodestringКод ошибки, когда status равен 4
Пример
запрос
{
  "batchNo": "B20260828173001"
}
ответ
{
  "code": "200",
  "data": [
    {
      "translateOrderNo": "T20260828173002",
      "batchNo": "B20260828173001",
      "sourceFileName": "contract.pdf",
      "status": 3,
      "textNumber": 4820,
      "targetFileUrl": "https://s3.../contract_zh-CN.pdf?X-Amz-Signature=…"
    }
  ]
}
05

История переводов

POST

/external/translate/searchTranslateFilePage

Постранично просмотреть историю переводов аккаунта.

Параметры

ПолеТипОбяз.Описание
pageNumnumberобяз.Номер страницы, с 1
pageSizenumberобяз.Записей на странице
statusnumberСтатус задачи — см. легенду
fileTypestringФильтр по типу файла, напр. PDF
sourceFileNamestringФильтр по имени файла

Ответ · data

ПолеТипОписание
recordsarrayЗаписи текущей страницы
totalnumberВсего записей
currentnumberТекущая страница
pagesnumberВсего страниц
06

Детали задачи

POST

/external/translate/getTranslateFileDetail

Получить одну задачу по номеру заказа.

Параметры

ПолеТипОбяз.Описание
translateOrderNostringобяз.Номер заказа задачи

Ответ · объект задачи

ПолеТипОписание
translateOrderNostringНомер заказа задачи
batchNostringНомер пакета из ответа на отправку
sourceFileNamestringИсходное имя файла
statusnumberСтатус задачи — см. легенду
textNumbernumberСимволов, учтённых по задаче
targetFileUrlstringСсылка на перевод
targetFileUrl2stringРезервная ссылка для материкового Китая
xComparisonS3UrlstringФайл параллельного сравнения по горизонтали
yComparisonS3UrlstringФайл сравнения по вертикали
freeTranslateQuotanumberСтраниц списано с бесплатной квоты
walletTranslateQuotanumberСтраниц списано с платной квоты
createTimenumberСоздано, epoch в миллисекундах
startTimenumberНачато, epoch в миллисекундах
endTimenumberЗавершено, epoch в миллисекундах
errorCodestringКод ошибки, когда status равен 4
07

Получить ссылку на файл

POST

/external/translate/getTranslateS3DownloadUrl

Получить ссылку на исходник, перевод или файл сравнения (ответ SSE).

Параметры

ПолеТипОбяз.Описание
translateOrderNostringобяз.Номер заказа задачи
urlTypenumberобяз.Какой файл забрать — см. легенду
isWatermarknumber0 убирает водяной знак, если позволяет тариф

Ответ · события SSE

ПолеТипОписание
urlstringСсылка на скачивание в событии [DONE]
url2stringРезервная ссылка для материкового Китая, если есть
Пример
запрос
{
  "translateOrderNo": "T20260828173002",
  "urlType": 2,
  "isWatermark": 0
}
ответ
event:[PROCESS]
data:

event:[DONE]
data:{"translateOrderNo":"T20260828173002","url":"https://s3.../contract_zh-CN.pdf?X-Amz-Signature=…"}
08

Список моделей

POST

/external/translate/getModelList

Получить допустимые значения model и их коэффициенты списания квоты.

Параметры

Без параметров — отправьте пустое тело JSON.

Ответ · data

ПолеТипОписание
versionstringЗначение для поля model
modelTypenumberВнутреннее семейство модели
vipTypenumberТребуемый тариф
coefficientnumberКоэффициент списания модели
groupTypenumberГруппа в списке
09

Список языков

POST

/external/translate/getLanguageEnum

Получить 79 поддерживаемых кодов языков с локализованными названиями.

Параметры

Без параметров — отправьте пустое тело JSON.

Ответ · data

ПолеТипОписание
{locale}objectлокаль → код языка → название
Пример
ответ
{
  "code": "200",
  "data": {
    "en": {
      "AnyLanguage": "Any language",
      "zh-CN": "Simplified Chinese",
      "…": "…"
    },
    "zh": {
      "AnyLanguage": "任意语言",
      "zh-CN": "简体中文",
      "…": "…"
    },
    "…": {}
  }
}
/external/videoTranslate10 эндпоинтов

Перевод видео

Перевод видео целиком: оценить стоимость, отправить, следить за прогрессом, поправить субтитры и пересобрать.

  • status: 0 не начато · 1 выполняется · 2 готово · 3 ошибка · 4 отменено
  • step: 1 распознавание речи · 2 перевод субтитров · 3 синтез речи
  • stepStatus: 0 не начато · 1 выполняется · 2 готово · 3 ошибка
  • subtitleType: 0 без субтитров · 1 перевод · 2 оригинал · 3 оба
01

Получить ссылки для загрузки

POST

/external/videoTranslate/batchPresignedUploadUrl

Получить предподписанные ссылки для загрузки видеофайлов.

Параметры

ПолеТипОбяз.Описание
fileNameListarray[string]обяз.Имена файлов для ссылок загрузки

Ответ · data

ПолеТипОписание
persignedUploadUrlstringПредподписанная ссылка PUT, 10 минут
objectKeystringКлюч хранилища для отправки
fileNamestringИсходное имя файла
02

Отправить видео

POST

/external/videoTranslate/submitVideoTranslate

Отправить видео на перевод; videoTaskParam содержит настройки голоса, субтитров и шрифта.

Параметры

ПолеТипОбяз.Описание
sourceLanguagestringобяз.Код языка оригинала; AnyLanguage — автоопределение
targetLanguagestringобяз.Код целевого языка
sourceFileObjectKeystringобяз.objectKey загруженного видео
videoFileNamestringобяз.Исходное имя видеофайла
videoTaskParamobjectобяз.Настройки голоса, субтитров и шрифта
voiceRolestringГолос озвучки; clone повторяет оригинал
subtitleTypenumberКакие субтитры вшивать — см. легенду
Остальные поля videoTaskParam (25, все необязательные)
ПолеТипОписание
recognTypenumberДвижок распознавания речи, по умолчанию 12 — не меняйте
modelNamestringМодель распознавания, по умолчанию tiny
splitTypestringРежим сегментации, по умолчанию all
isCudabooleanУскорение на GPU, по умолчанию false
translateTypenumberДвижок перевода субтитров, по умолчанию 14 — не меняйте
ttsTypenumberДвижок синтеза речи, по умолчанию 15 — не меняйте
voiceRatestringТемп озвучки, например +10%, по умолчанию +0%
volumestringГромкость озвучки, например +10%, по умолчанию +0%
pitchstringТон озвучки, например +5Hz, по умолчанию +0Hz
voiceAutoratebooleanПодгонять озвучку под тайминг оригинала, по умолчанию true
videoAutoratebooleanПодгонять видео под тайминг озвучки, по умолчанию true
appendVideobooleanЗацикливать видеоряд, если он короче, по умолчанию true
isSeparatebooleanВыводить голос и фон отдельно, по умолчанию false
onlyVideobooleanТолько видео, без файлов субтитров, по умолчанию false
fontsizenumberРазмер шрифта субтитров, по умолчанию 14
fontnamestringНазвание шрифта; без него — шрифт сервера
fontcolorstringЦвет текста, #RRGGBB или цвет ASS
fontboldbooleanЖирные субтитры
subtitlePosYnumberОтступ от нижнего края, 0-90 %; без него — снизу
subtitlePosXnumberЦентр по горизонтали от левого края, 5-95 %; 50 — по центру
fontbordercolorstringЦвет обводки, #RRGGBB / #RRGGBBAA / цвет ASS
backgroundcolorstringЦвет фоновой плашки, #RRGGBB / #RRGGBBAA / цвет ASS
outlinenumberТолщина обводки 0-10; 0 отключает обводку
shadownumberРазмер тени 0-10; 0 отключает тень
borderStylenumberСтиль рамки: 1 обводка/тень, 3 плашка на каждой строке

Ответ · объект задачи

ПолеТипОписание
videoTranslateOrderNostringНомер заказа видеозадачи
videoFileNamestringИсходное имя видеофайла
videoDurationnumberДлительность видео в секундах
statusnumberСтатус задачи — см. легенду
stepnumberТекущий этап обработки — см. легенду
stepStatusnumberСтатус текущего этапа — см. легенду
targetFileUrlstringСсылка на перевод
sourceSubtitlesUrlstringСсылка на исходные субтитры
targetSubtitlesUrlstringСсылка на переведённые субтитры
freeTranslateQuotanumberСтраниц списано с бесплатной квоты
walletTranslateQuotanumberСтраниц списано с платной квоты
errorMessagestringПричина сбоя
Пример
запрос
{
  "sourceLanguage": "ja",
  "targetLanguage": "zh-CN",
  "sourceFileObjectKey": "video/10086/2026/lecture.mp4",
  "videoFileName": "lecture.mp4",
  "videoTaskParam": { "voiceRole": "clone", "subtitleType": 1 }
}
03

Оценить стоимость видео

POST

/external/videoTranslate/videoTranslateQuotaCalculate

До отправки оценить расход квоты по длительности, голосу и типу субтитров.

Параметры

ПолеТипОбяз.Описание
videoDurationnumberобяз.Длительность видео в секундах
voiceRolestringобяз.Голос озвучки; clone повторяет оригинал
subtitleTypenumberобяз.Какие субтитры вшивать — см. легенду

Ответ · data

ПолеТипОписание
translateQuotanumberВсего списывается за задачу
videoDurationTranslateQuotanumberКвота по длительности
thirtySecondQuotanumberКвота за 30 секунд
quotaCoefficientnumberПрименяемый коэффициент
04

История видео

POST

/external/videoTranslate/searchVideoTranslatePage

Постранично просмотреть историю переводов видео аккаунта.

Параметры

ПолеТипОбяз.Описание
pageNumnumberобяз.Номер страницы, с 1
pageSizenumberобяз.Записей на странице
statusnumberСтатус задачи — см. легенду

Ответ · data

ПолеТипОписание
recordsarrayЗаписи текущей страницы
totalnumberВсего записей
currentnumberТекущая страница
pagesnumberВсего страниц
05

Детали задачи

POST

/external/videoTranslate/getVideoTranslateDetail

Получить одну видеозадачу вместе с прогрессом и ссылками на результат.

Параметры

ПолеТипОбяз.Описание
videoTranslateOrderNostringобяз.Номер заказа видеозадачи

Ответ · объект задачи

ПолеТипОписание
videoTranslateOrderNostringНомер заказа видеозадачи
videoFileNamestringИсходное имя видеофайла
videoDurationnumberДлительность видео в секундах
statusnumberСтатус задачи — см. легенду
stepnumberТекущий этап обработки — см. легенду
stepStatusnumberСтатус текущего этапа — см. легенду
targetFileUrlstringСсылка на перевод
sourceSubtitlesUrlstringСсылка на исходные субтитры
targetSubtitlesUrlstringСсылка на переведённые субтитры
freeTranslateQuotanumberСтраниц списано с бесплатной квоты
walletTranslateQuotanumberСтраниц списано с платной квоты
errorMessagestringПричина сбоя
06

Отменить задачу

POST

/external/videoTranslate/cancelVideoTranslateHistory

Отменить незавершённую видеозадачу.

Параметры

ПолеТипОбяз.Описание
videoTranslateOrderNostringобяз.Номер заказа видеозадачи
07

Получить субтитры

POST

/external/videoTranslate/getVideoTranslateSubtitles

Получить исходные и переведённые субтитры для редактирования.

Параметры

ПолеТипОбяз.Описание
videoTranslateOrderNostringобяз.Номер заказа видеозадачи

Ответ · data

ПолеТипОписание
sourceSubtitlesUrlstringСсылка на исходные субтитры
targetSubtitlesUrlstringСсылка на переведённые субтитры
08

Отправить правки субтитров

POST

/external/videoTranslate/submitVideoRewrite

Отправить отредактированные субтитры и пересобрать видео.

Параметры

ПолеТипОбяз.Описание
videoTranslateOrderNostringобяз.Номер заказа видеозадачи
sourceSubtitlesTxtstringобяз.Отредактированные исходные субтитры
targetSubtitlesTxtstringобяз.Отредактированные переведённые субтитры
videoTaskParamobjectНастройки голоса, субтитров и шрифта
Остальные поля videoTaskParam (25, все необязательные)
ПолеТипОписание
recognTypenumberДвижок распознавания речи, по умолчанию 12 — не меняйте
modelNamestringМодель распознавания, по умолчанию tiny
splitTypestringРежим сегментации, по умолчанию all
isCudabooleanУскорение на GPU, по умолчанию false
translateTypenumberДвижок перевода субтитров, по умолчанию 14 — не меняйте
ttsTypenumberДвижок синтеза речи, по умолчанию 15 — не меняйте
voiceRatestringТемп озвучки, например +10%, по умолчанию +0%
volumestringГромкость озвучки, например +10%, по умолчанию +0%
pitchstringТон озвучки, например +5Hz, по умолчанию +0Hz
voiceAutoratebooleanПодгонять озвучку под тайминг оригинала, по умолчанию true
videoAutoratebooleanПодгонять видео под тайминг озвучки, по умолчанию true
appendVideobooleanЗацикливать видеоряд, если он короче, по умолчанию true
isSeparatebooleanВыводить голос и фон отдельно, по умолчанию false
onlyVideobooleanТолько видео, без файлов субтитров, по умолчанию false
fontsizenumberРазмер шрифта субтитров, по умолчанию 14
fontnamestringНазвание шрифта; без него — шрифт сервера
fontcolorstringЦвет текста, #RRGGBB или цвет ASS
fontboldbooleanЖирные субтитры
subtitlePosYnumberОтступ от нижнего края, 0-90 %; без него — снизу
subtitlePosXnumberЦентр по горизонтали от левого края, 5-95 %; 50 — по центру
fontbordercolorstringЦвет обводки, #RRGGBB / #RRGGBBAA / цвет ASS
backgroundcolorstringЦвет фоновой плашки, #RRGGBB / #RRGGBBAA / цвет ASS
outlinenumberТолщина обводки 0-10; 0 отключает обводку
shadownumberРазмер тени 0-10; 0 отключает тень
borderStylenumberСтиль рамки: 1 обводка/тень, 3 плашка на каждой строке

Ответ · data

ПолеТипОписание
videoTranslateRewriteOrderNostringНомер заказа пересборки
statusnumberСтатус задачи — см. легенду
targetFileUrlstringСсылка на перевод
09

Ход пересборки

POST

/external/videoTranslate/getVideoTranslateRewriteDetail

Получить статус пересборки видео после правки субтитров.

Параметры

ПолеТипОбяз.Описание
videoTranslateRewriteOrderNostringобяз.Номер заказа пересборки

Ответ · data

ПолеТипОписание
statusnumberСтатус задачи — см. легенду
targetFileUrlstringСсылка на перевод
targetSubtitlesUrlstringСсылка на переведённые субтитры
errorMessagestringПричина сбоя
10

Стоимость пересборки

POST

/external/videoTranslate/videoTranslateRewriteQuotaCalculate

Оценить расход квоты на пересборку видео после правки субтитров.

Параметры

ПолеТипОбяз.Описание
videoTranslateRewriteOrderNostringобяз.Номер заказа пересборки

Ответ · data

ПолеТипОписание
translateQuotanumberВсего списывается за задачу
quotaCoefficientnumberПрименяемый коэффициент
/external/user2 эндпоинтов

Аккаунт

Квота и тариф аккаунта, которому принадлежит ключ. Интеграция проверяет остаток до отправки, а не узнаёт о нём из ошибки.

  • subscriptionStatus: 1 в обработке · 2 активна · 3 отписка · 4 отменена
  • interval: 1 день · 2 неделя · 3 месяц · 4 год
01

Проверить остаток квоты

POST

/external/user/getMyWalletInfo

Кошелёк за этим ключом: страничная квота, квота OCR, снятия водяного знака и реферальный баланс.

Параметры

Без параметров — отправьте пустое тело JSON.

Ответ · data

ПолеТипОписание
userIdnumberАккаунт, которому принадлежит ключ
translateQuotanumberОстаток страничной квоты
advancedTranslateQuotanumberОстаток квоты продвинутых моделей
ocrTranslateQuotanumberОстаток квоты OCR
accelerationCardNumbernumberОстаток карт ускорения
totalFreeTranslateQuotanumberБесплатных страниц выдано за период
useFreeTranslateQuotanumberБесплатных страниц израсходовано за период
totalFreeOcrTranslateQuotanumberБесплатных страниц OCR выдано за период
useFreeOcrTranslateQuotanumberБесплатных страниц OCR израсходовано
freeWatermarkQuotanumberОстаток снятий водяного знака
daysFreeWatermarkQuotanumberСнятий водяного знака в сутки
usedDaysFreeWatermarkQuotanumberИзрасходовано за сегодня
rewardBalancenumberРеферальный баланс
rewardTotalnumberВсего начислено по рефералам
Пример
запрос
{}
ответ
{
  "code": "200",
  "data": {
    "userId": 10086,
    "translateQuota": 12000,
    "advancedTranslateQuota": 0,
    "ocrTranslateQuota": 800,
    "totalFreeTranslateQuota": 500,
    "useFreeTranslateQuota": 132
  }
}
02

Проверить тариф

POST

/external/user/getMySubscriptionInfo

Тариф за этим ключом: уровень, текущий период и его лимиты — параллельные задачи, размер файла, длительность видео.

Параметры

Без параметров — отправьте пустое тело JSON.

Ответ · data

ПолеТипОписание
vipNamestringНазвание тарифа
vipTypenumberУровень тарифа
subscriptionStatusnumberСостояние подписки — см. легенду выше
intervalnumberПериод оплаты — см. легенду выше
startTimenumberНачало периода, epoch в миллисекундах
endTimenumberКонец периода, epoch в миллисекундах
translateQuotanumberСтраниц выдаётся за период
advancedTranslateQuotanumberСтраниц продвинутых моделей за период
freeTranslateQuotanumberБесплатных страниц за цикл
freeTranslateQuotaIntervalnumberЦикл сброса бесплатных страниц: 1 день · 2 неделя · 3 месяц
concurrenceTasknumberОдновременных задач по документам
uploadFileSizenumberПредел размера файла, МБ
videoDurationLimitnumberПредел длительности видео, минуты
videoTranslateConcurrencynumberОдновременных задач по видео
videoFileSizenumberПредел размера видео, МБ
Приложение

Коды ошибок

Ошибки уровня ключа тоже приходят с HTTP 200, а бизнес-код лежит в теле ответа. Вот те, что интеграция обязана обрабатывать.

КодЗначениеЧто делать
30306Недействительный API-ключПроверьте, что ключ скопирован целиком, вместе с префиксом ft_. Удалённые ключи возвращают тот же код.
30307Ключ отключёнВключите его снова в Центре разработчика или используйте другой ключ.
30308Срок действия ключа истёкПродлите срок действия или создайте новый ключ.
30309IP вызова вне белого спискаДобавьте исходящий IP сервера в белый список ключа или очистите список.
30312Ключ заблокирован администраторомОбратитесь в поддержку — из Центра разработчика такую блокировку снять нельзя.

У ошибок самого перевода — нехватка квоты, неподдерживаемый файл, повторная отправка — свои коды, и msg всегда приходит на языке из заголовка language. Ветвитесь по code, а не по msg.

Приложение

Квоты и ограничения

API — это ещё один вход, а не другой продукт. Эти правила он наследует у веб-интерфейса.

Та же квота, без отдельной тарификации
Вызовы API списывают ту же квоту страниц и видео, что и веб-интерфейс, с теми же коэффициентами моделей. Отдельного тарифа для API нет.
Те же правила водяного знака
На бесплатном тарифе переведённые PDF содержат водяной знак — ровно как в браузере. Обращение через API его не убирает.
В счётчик идут только отправки
Счётчик вызовов ключа растёт только на batchSubmitTranslateTask, submitVideoTranslate и submitVideoRewrite. Запросы статуса и деталей можно опрашивать свободно.
Одна отправка за раз
Отправки сериализуются по аккаунту. Вторая отправка, пока принимается первая, вернёт код ошибки о повторной задаче — повторите чуть позже, а не параллельно.
OCR по умолчанию выключен
Ставьте isOcr только для сканов. OCR списывает отдельную подквоту сверх страничной, поэтому на текстовом PDF он расходует квоту дважды. Если не уверены, сначала вызовите эндпоинт isOcr.

Не хочется возиться с HTTP?

Те же возможности доступны как инструменты MCP: ИИ-агент переведёт документ, а вам не придётся писать ни одного HTTP-вызова.