Расшифровка как обычный HTTP-запрос
Один ключ, асинхронные задачи и та же цена за минуту, что и на сайте. Без отдельного тарифа «Enterprise» и без разговора с отделом продаж.
Один ключ, асинхронные задачи и та же цена за минуту, что и на сайте. Без отдельного тарифа «Enterprise» и без разговора с отделом продаж.
# вернёт job_id сразу, без ожидания
curl -X POST https://transkriba.ru/api/v1/transcribe \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{
"url": "https://youtube.com/watch?v=…",
"language": "ru",
"diarize": true,
"webhook": "https://ваш-сервис/hook"
}'{
"id": "cm4x…",
"status": "completed",
"duration_sec": 1861,
"billed_minutes": 32,
"segments": [
{ "start": 4.1, "end": 9.8,
"speaker": "SPEAKER_00",
"text": "Начнём с того, что сроки…" }
]
}Байты не проходят через сервер приложения: вы кладёте файл прямо в Yandex Object Storage по подписанной ссылке. Затем обработчик Modal забирает запись для распознавания. Действуют лимиты размера и длительности.
FILE="созвон.mp4"
SIZE_BYTES=$(wc -c < "$FILE" | tr -d ' ')
# 1. попросить ссылку на загрузку
curl -X POST https://transkriba.ru/api/v1/uploads \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d "{"file_name":"созвон.mp4","content_type":"video/mp4","size_bytes":$SIZE_BYTES}"
# 2. положить файл прямо в хранилище
curl -X PUT "<upload_url>" \
-H "Content-Type: <content_type>" \
-H "Content-Length: <content_length>" \
--upload-file "$FILE"
# 3. завести задачу по полученному ключу
curl -X POST https://transkriba.ru/api/v1/transcribe \
-H "Authorization: Bearer sk_live_…" \
-d '{"s3_key":"<s3_key>","file_name":"созвон.mp4"}'Очереди повторов нет. Если ваш сервер в этот момент лежал, уведомление потеряется — источник истины всегда GET /api/v1/jobs/{id}.
Фоновый обработчик проверяет новые задачи примерно каждые 30 секунд и отправляет вебхук после завершения. Вебхук делается один раз, поэтому GET /api/v1/jobs/{id} остаётся источником истины.
Не по заявленной длительности, а по измеренной после расшифровки, с округлением вверх до минуты. Неудавшаяся задача не списывает ничего.
Ставится в кабинете. Перед запуском API учитывает уже списанные минуты и длительность текущих API-задач; если новая задача не помещается, отвечает 429 до полуночи UTC.
До завершения segments равен null. Готовый ответ содержит длительность, списанные минуты и сегменты с полями start, end, text и необязательным speaker. Верхнеуровневые массивы words, confidence модели, имя модели и версия схемы пока не обещаны, поэтому игнорируйте незнакомые поля.
Фиксированного публичного лимита одновременных задач нет. Сохраняйте job_id, отправляйте работу асинхронно и предусмотрите повтор с задержкой для временных ответов 502 и 503.
| Код | Когда | Что делать |
|---|---|---|
| 202 | Задача принята | Опрашивать /jobs/{id} |
| 401 | Ключ неверен или отозван | Проверить заголовок Authorization |
| 402 | Кончились минуты | Пополнить баланс на /pricing |
| 409 | Формат запрошен раньше времени | Дождаться status=completed |
| 429 | Исчерпан суточный лимит ключа | Поднять лимит или ждать полуночи UTC |
| 503 | Хранилище или импорт не настроены | Повторить позже |