Программное размещение и отслеживание заказов на сертифицированный перевод документов. REST API по протоколу HTTPS с аутентификацией с помощью токена «bearer» и возвратом данных в формате JSON — с подписанными веб-хуками для каждого события.
curl -X POST https://www.rapidtranslate.org/api/v1/orders \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "reference=APO-10432" \
-F "source_language=Spanish" \
-F "target_language=English (US)" \
-F "translation_type=certified" \
-F "files[]=@document.pdf"
→ {
"id": "9b1c2d3e-…",
"status": "pending",
"livemode": true
} API RapidTranslate позволяет вашему приложению отправлять документы на заверенный перевод, получать актуальную информацию о статусе и стоимости, а также получать готовые файлы — при этом вашей команде не нужно взаимодействовать с нашей системой оформления заказов. Этот сервис предназначен для компаний, которые размещают заказы на перевод от имени своих клиентов.
Все запросы направляются по адресу https://www.rapidtranslate.org/api/v1 через HTTPS. Запросы и ответы передаются в формате JSON, за исключением создания заказа, при котором файлы загружаются в виде multipart/form-data. Все суммы возвращаются в виде целые центы в долларах США, а все временные метки указаны в формате UTC по стандарту ISO‑8601.
Предпочитаете сначала ознакомиться с API, прежде чем приступать к написанию кода? В нашей коллекции Postman все конечные точки уже настроены — включая аутентификацию, примеры тел запросов и параметры запроса.
apiKey в ключ из Настройки бизнеса → Ключи API.baseUrl для вашей среды — по умолчанию установлено значение «production».Аутентифицируйте каждый запрос с помощью своего секретного ключа API в качестве токена «bearer» и запросите ответ в формате JSON. Оба заголовка являются обязательными:
Авторизация: Bearer YOUR_API_KEY
Принимаемые форматы: application/json Создавайте и обновляйте ключи в панели управления в разделе «Настройки бизнеса» → «Ключи API». Ключи отображаются только один раз при создании и хранятся в хешированном виде — если вы потеряли ключ, обновите его. Каждый ключ относится к одному режиму («Производственная среда» или «Тестовая среда») и имеет фиксированный набор областей доступа.
Каждому конечному пункту требуется определённая способность ключа. Если у ключа отсутствует требуемый диапазон, возвращается 403 запрещённый_область_применения.
| Область применения | Гранты |
|---|---|
заказы:запись | Создание и утверждение заказов |
заказы:прочитать | Получить и отобразить заказы |
цена:читать | Ознакомьтесь с прайс-листом |
Тестовый режим является свойством ключа, а не вашей учетной записи. Ключ «Sandbox» работает в полностью смоделированной среде; ключ «Live» использует для размещения реальных заказов, подлежащих оплате. Вы можете использовать оба ключа одновременно.
Заказы в тестовой среде проходят ту же проверку, сопоставление полей и расчет реальной стоимости, но при этом не включают хранение файлов, OCR и выполнение заказа. При создании заказ в тестовой среде автоматически проходит весь свой жизненный цикл (обработка → завершена), запуская те же веб-хуки, что и при обработке реального заказа, и, наконец, предоставляя статический образец документа.
Каждый ответ и веб-хук содержит режим реального времени Укажите этот флаг, чтобы ваша интеграция могла создавать ветки без проверки ключа:
livemode: true — реальный заказ, подлежащий выставлению счетаlivemode: false — тестовая среда / тестовый заказНа количество запросов на одну организацию установлено ограничение. По умолчанию разрешено 120 запросов в минуту. При превышении этого значения возвращается 429 rate_limited; попробуйте ещё раз через некоторое время. Если для вашей интеграции требуется более высокий лимит, обратитесь к support@rapidtranslate.org.
Каждый успешный ответ упаковывает свои данные в данные ключ. В конец списка добавьте мета блок с пагинацией.
{
"data": {
"id": "9b1c...-uuid",
"reference": "APO-10432",
"status": "processing",
"total": 11270,
"currency": "USD"
}
} {
"data": [ ... ],
"meta": {
"current_page": 1,
"per_page": 25,
"total": 134,
"last_page": 6
}
} Ошибки используют стандартные коды статуса HTTP и возвращают стабильный, машиночитаемый код_ошибки наряду с текстом, введенным пользователем. Ошибки проверки добавляют поле с ключом ошибки объект.
{
"message": "The given data was invalid.",
"error_code": "validation_failed",
"errors": {
"source_language": ["The selected source language is invalid."]
}
} | HTTP | код_ошибки | Значение |
|---|---|---|
| 400 | bad_request | Некорректный текст запроса |
| 401 | без аутентификации | Отсутствующий, недействительный или отозванный ключ |
| 402 | оплата не прошла | Заказ утвержден, но оплату не удалось принять |
| 402 | credit_hold | Сумма заказа превышает ваш кредитный лимит |
| 403 | запрещённая_область | Key не имеет необходимого объема |
| 403 | аккаунт_заблокирован | Организация приостановлена за неуплату счетов |
| 404 | not_found | Для этой организации такого заказа нет |
| 409 | дубликат_ссылки | Ссылка использована повторно для другого заказа |
| 409 | не_ожидает_утверждения | Заказ не ожидает вашего одобрения |
| 422 | проверка не прошла | Отсутствующие или недопустимые поля |
| 429 | rate_limited | Превышен лимит запросов |
| 500 | ошибка_сервера | Неожиданная ошибка сервера |
| 503 | Ошибка обработки | Ошибка при последующей обработке (OCR / определение цены) |
Порядок статус проходит стабильный жизненный цикл. Эти пять значений также являются теми, которые приняты в статус включить фильтр Список заказов:
| Статус | Значение |
|---|---|
в процессе рассмотрения | Получено; расчет стоимости ещё не завершён. всего возможно null. |
ожидание_утверждения | Стоимость рассчитана, ждем вашего подтверждения итоговой суммы (только в случае, если требуется подтверждение). |
обработка | Утверждено и находится в активном состоянии; перевод ведётся. |
завершено | Работа завершена; переведенные документы готовы. |
отменено | Заказ был отменен. |
Пока выполняется заказ, используются более детализированные метки (например, Назначено переводчику, Перевод, Отправлено) также может появиться. Если требуется утверждение, в заказе может быть кратко указано оплата не прошла или credit_hold если оплату не удалось принять — уточните способ оплаты и подтвердите заказ заново.
ПОЛУЧИТЬ /языки
Возвращает список всех поддерживаемых языков. Используйте имя дословно перевести как исходный язык / target_language при создании заказа — заказы сопоставляются по названию языка, а не по коду.
Требуется ключ с авторизацией.
curl https://www.rapidtranslate.org/api/v1/languages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" {
"data": [
{ "code": "english-uk", "name": "English (UK)", "active": true },
{ "code": "spanish", "name": "Spanish", "active": true }
]
} ПОЛУЧИТЬ /цены
Возвращает прайс-лист по базовым тарифам для США в долларах США, на основании которого выставляются счета за ваши заказы. Суммы представлены в виде десятичных строк. Цены сгруппированы по перевод тип (каждый с обычный и быстрый на‑единица цена), доставка метод, и апостиль — те же значения, которые вы указываете при оформлении заказа.
Область применения: цена:читать
{
"data": {
"country": { "code": "US", "name": "United States" },
"currency": { "code": "USD", "symbol": "$" },
"translation": {
"certified": { "unit": "page", "regular": "27.99", "rapid": "37.99" },
"standard": { "unit": "word", "regular": "0.11", "rapid": "0.15" },
"specialized": { "unit": "page", "regular": "47.99", "rapid": "57.99" },
"naati": { "unit": "page", "regular": "42.99", "rapid": "52.99" },
"sworn": {
"unit": "page",
"note": "Sworn pricing depends on the language pair.",
"language_pairs": [
{ "languages": ["Spanish","English"], "unit": "page", "regular": "57.99", "rapid": "67.99" },
{ "languages": ["Polish","English"], "unit": "page", "regular": "46.99", "rapid": "56.99" }
]
}
},
"delivery": {
"email": "0.00", "notarized_email": "19.99",
"mail_standard": "29.99", "mail_next_day": "55.00"
},
"apostille": { "base": "79.00", "additional_document": "15.00" }
}
} Официальные цены. Стоимость присяжного перевода рассчитывается за каждую языковую пару. языковые пары содержит список всех пар, имеющих право на присягу, с указанием для каждой из них обычный/быстрый цена. Допускается любой вариант английского языка (английский (США/Великобритания/Австралия/Канада)), и каждая пара работает в обоих направлениях, если только она не содержит "bidirectional": false.
ПОСТ /заказы
Создает заказ на перевод и загружает исходные файлы. Поскольку этот конечный пункт передаёт файлы, он использует multipart/form-data (не JSON). Для вложенных полей используется запись в квадратных скобках, например: клиент[имя].
Область применения: заказы:запись
| Поле | Тип | Примечания |
|---|---|---|
ссылка | строка обязательна | Ваш уникальный идентификатор заказа. Повторный вызов с этим идентификатором возвращает существующий заказ (см. идемпотентность). |
клиент[имя] | строка обязательна | Полное имя конечного клиента. |
клиент[email] | строка обязательна | Электронная почта конечного клиента. |
исходный язык | строка обязательна | Точная формулировка имя из Список языков. |
target_language | строка обязательна | Точная формулировка имя из Список языков. |
тип_перевода | строка обязательна | Один из сертифицированный, стандартный, специализированный, под присягой, наати. |
разворот | строка обязательна | обычный или быстрый. |
доставка[способ] | строка обязательна | Один из электронная почта, нотариально заверенное электронное письмо, mail_standard, доставка_на_следующий_день. |
доставка[адрес][...] | объект | Требуется для mail_standard / доставка_на_следующий_день: улица, город, почтовый_индекс, страна (государство (необязательно). страна — это код ISO, например: США. |
апостиль [включено] | логическое значение | Добавить услугу оформления апостиля. См. правила ниже. |
апостиль [документы] | целое число | Количество документов, подлежащих апостилированию. Указывается при необходимости. |
апостиль [страна назначения] | строка | Страна, для которой предназначена апостиль. |
примечания | строка | Инструкции в виде свободного текста. |
код_купона | строка | Код скидки для применения. Явно недействительные или неприменимые коды отклоняются на этапе создания с помощью 422 Ошибка проверки; сама скидка фиксируется после определения стоимости заказа (см. примечание ниже). |
файлы[] | file[] — обязательный параметр | 1–20 файлов. Допустимые форматы: pdf, jpg, jpeg, png, doc, docx, tiff, heic. Максимальный размер каждого файла — 20 МБ. |
ссылка является уникальным для каждой организации. Повторное выполнение команды создания с теми же ссылка возвращает существующий заказ с 200 вместо того, чтобы создавать дубликат (новый заказ возвращает 201). mail_standard способ доставки. доставка_на_следующий_день Доставка осуществляется только по адресам в США. curl -X POST https://www.rapidtranslate.org/api/v1/orders \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" \
-F "reference=APO-10432" \
-F "customer[name]=Jane Doe" \
-F "customer[email]=jane@example.com" \
-F "source_language=Spanish" \
-F "target_language=English (US)" \
-F «translation_type=certified» \
-F «turnaround=regular» \
-F «delivery[method]=email» \
-F «files[]=@/path/to/birth-certificate.pdf» {
"data": {
"id": "9b1c2d3e-...-uuid",
"reference": "APO-10432",
"livemode": true,
"status": "pending",
"source_language": "Spanish",
"target_language": "English (US)",
"translation_type": "certified",
"turnaround": "regular",
"total": null,
"currency": "USD",
"created_at": "2026-08-28T10:15:00+00:00"
}
} Вновь созданный заказ начинается как в процессе рассмотрения с null Общая сумма при расчете цены. Опрос Получить заказ или прислушаться к статус_заказа веб-хук для просмотра обновлений цены и статуса.
Купоны. A код_купона проверяется в два этапа. На этапе создания мы проверяем то, что не зависит от объёма документа — правильность кода, ограничения по использованию и типы переводов/услуг, к которым он применяется — и сразу отклоняем некорректный код. Правила, зависящие от количества страниц или слов (а также от самой суммы скидки), применяются после подсчёта объёма документа, поэтому скидка отображается на по цене общая сумма, а не начальная в процессе рассмотрения ответ. Если после определения количества товара выясняется, что купон не действует, заказ всё равно оформляется по полной цене и помечается для проверки нашей командой.
ПОЛУЧИТЬ /orders/{id}
Извлекает один заказ по его id (UUID, возвращаемый при создании). Возвращает 404 не найдено если заказ не относится к вашей организации.
Область применения: заказы:прочитать
curl https://www.rapidtranslate.org/api/v1/orders/9b1c2d3e-...-uuid \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ" \
-H "Accept: application/json" ПОЛУЧИТЬ /заказы
Возвращает заказы вашей организации, начиная с самых новых, с разбиением на страницы в мета. Все параметры запроса являются необязательными.
Область применения: заказы:прочитать
| Запрос | Примечания |
|---|---|
статус | Один из в процессе рассмотрения, ожидание_утверждения, обработка, завершено, отменено. |
ссылка | Отфильтруйте по своему справочному номеру. |
исходный язык / target_language | Фильтрация по названию языка. |
created_from / created_to | Диапазон дат (включительно). |
сортировать | -created_at (по умолчанию, сначала самые новые) или created_at (сначала самые старые). |
на страницу | 1–100. По умолчанию используется стандартный размер страницы. |
страница | Номер страницы. |
curl "https://www.rapidtranslate.org/api/v1/orders?status=completed&per_page=50" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" ПОСТ /orders/{id}/approve
Утверждает рассчитанную общую сумму заказа, которая составляет ожидание_утверждения, запуская его для выполнения. Это необходимо только в том случае, если для вашей учетной записи требуется одобрение перед началом работы. Вызов является идемпотентным.
Область применения: заказы:запись
curl -X POST https://www.rapidtranslate.org/api/v1/orders/9b1c2d3e-...-uuid/approve \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" В случае успешного выполнения возвращается обновленный заказ. Если заказ не находится на рассмотрении, вы получаете 409 не_ожидает_утверждения; если требуется выполнить операцию, но она завершается с ошибкой, вы получаете 402 Ошибка оплаты или 402 credit_hold.
Фиксированные наборы, принимаемые при создании заказа.
| Значение | Описание |
|---|---|
сертифицированный | Заверенный перевод (оплата за страницу). |
стандартный | Стандартный перевод (оплата за слово). |
специализированный | Специализированный / экспертный перевод (за страницу). |
под присягой | Заверенный перевод (за страницу). |
наати | Перевод, сертифицированный NAATI (за страницу). |
| Значение | Описание |
|---|---|
обычный | Стандартный срок выполнения заказа. |
быстрый | Ускоренное выполнение заказа. |
| Значение | Адрес | Описание |
|---|---|---|
электронная почта | Нет | Цифровая доставка по электронной почте (бесплатно). |
нотариально заверенное электронное письмо | Нет | Нотариально заверенная электронная доставка. |
mail_standard | Да | Почтовая доставка; отправка в страны, входящие в список поддерживаемых. |
доставка_на_следующий_день | Да | Доставка на следующий рабочий день (только по адресам в США). |
Вместо периодического опроса настройте конечную точку веб-хука для получения событий по мере их возникновения. Укажите URL-адрес и просмотрите секретный ключ подписи в разделе «Настройки бизнеса» → «Веб-хуки». Веб-хуки — это удобный инструмент: запрос «Получить заказ» всегда является достоверным источником информации.
| Событие | Отправлено, когда |
|---|---|
статус_заказа | Статус заказа изменился. |
отзыв клиента | Заказ просчитан и ожидает вашего утверждения (только в режиме утверждения). |
доставка документов | Переведенные документы готовы, указаны ссылки для скачивания. |
оплата не прошла | Невозможность взыскания суммы по утвержденному поручению влечет за собой сбой блок (причина, сообщение). Обновите данные в карточке кошелька и подтвердите еще раз. |
credit_hold | Утверждённый заказ превысит ваш кредитный лимит — это влечёт за собой credit_hold блок (сообщение). Оплатите счета или подайте заявку на увеличение лимита. |
Каждая посылка упакована в одинаковый конверт: мероприятие блок (включая режим реального времени) и специфичный для данного события данные блок.
{
"event": {
"type": "order_status",
"id": "evt_9b1c...",
"livemode": true,
"sent_at": "2026-08-28T10:20:00+00:00"
},
"data": {
"order": {
"id": "9b1c2d3e-...-uuid",
"reference": "APO-10432",
"status": "completed"
}
}
} The доставка документов событие добавляет документы массив (каждый из которых содержит имя, download_url, версия, статус) и портал ссылка. The отзыв клиента событие добавляет подробный список ценообразование блок и actions.approve объект с URL-адресом для вызова.
Каждый запрос подписывается, чтобы вы могли убедиться, что он поступил от RapidTranslate. Мы отправляем три заголовка:
| Заголовок | Значение |
|---|---|
X-RapidTranslate-Signature | sha256=<hmac> |
X-RapidTranslate-Время_создания | В подписи используется временная метка Unix |
X-RapidTranslate-Event | Уникальный идентификатор события |
Вычислить ожидаемую сигнатуру как HMAC-SHA256 от этой строки "{timestamp}.{raw_request_body}" используя секретный ключ подписи веб-хука, а затем сравните его со значением в заголовке:
// PHP
$expected = 'sha256=' . hash_hmac(
'sha256',
$timestamp . '.' . $rawBody,
$webhookSecret
);
$valid = hash_equals($expected, $signatureHeader); Node.js (Express) — подключить маршрут с помощью парсера необработанного тела запроса, чтобы сохранить точные байты:
// app.use('/webhooks/rapidtranslate', express.raw({ type: 'application/json' }))
const crypto = require('crypto');
const timestamp = req.get('X-RapidTranslate-Timestamp');
const received = req.get('X-RapidTranslate-Signature'); // "sha256=..."
const rawBody = req.body; // Buffer, untouched
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(`${timestamp}.${rawBody}`)
.digest('hex');
const valid = received &&
crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected)); Есть три вещи, которые ставят людей в тупик:
X-RapidTranslate-Signature заголовок содержит sha256= префикс. Либо сравнить с 'sha256=' + yourHmac (как указано выше) либо удалите префикс перед сравнением — не сравнивайте сам шестнадцатеричный код со всем заголовком целиком.hash_equals / crypto.timingSafeEqual), но никогда с == или ===.The {timestamp} является частью подписанной строки, поэтому его следует прочитать из заголовка и добавить в начало перед хешированием. Это также позволяет отклонять устаревшие или повторно отправленные сообщения — например, те, у которых метка времени старше пяти минут.
В случае сбоя доставки повторяется с использованием экспоненциальной задержки (до 5 попыток). Ответьте с помощью 2xx статус для подтверждения получения.