Speech to text API для ваших аудио- и видеозаписей

Через speech to text API вы загружаете аудио или видео и получаете транскрипт с временными метками и языком каждого сегмента. При необходимости добавьте определение говорящих. Файлы до 95 МБ можно отправить одним запросом, до 2 ГБ — частями с продолжением после обрыва связи.

  • До 95 МБ одним запросом
  • До 2 ГБ частями, с продолжением загрузки
  • Удаляем исходный файл через 24 часа после завершения задачи

Сначала проверьте размер и длительность записи

Аудио и видео без лишней конвертации
Принимаем mp3, wav, m4a, flac, ogg, opus, mp4, mov, webm и mkv. В файле должна быть звуковая дорожка.
Небольшой файл одним запросом
Отправьте multipart/form-data на POST /v1/transcriptions. Этот способ подходит для файлов до 95 МБ.
Большой файл по частям
Сначала создайте загрузку, затем отправьте части размером около 8 MiB и подтвердите завершение. После обрыва можно продолжить, а не загружать весь файл заново.
Записи до 5 часов
Для распознавания речи принимаем записи длительностью до 5 часов. Более длинная запись завершится с ошибкой media_too_long без списания кредитов.
Файл и текст хранятся по-разному
Через 24 часа после конечного статуса удаляем загруженное аудио или видео. Транскрипт остаётся, пока вы сами его не удалите.

Загрузите запись через API транскрибации аудио

Поместите байты записи в multipart-поле file. При необходимости добавьте language, diarize, source и webhook_url. Пример загрузки одним запросом показывает формат полей. О готовности можно узнавать через вебхук.

Если запись уже лежит на вашем сервере, начните с multipart. Границы частей пусть задаёт HTTP-клиент. Нужны сами байты файла: строка с локальным путём внутри JSON их не заменит. Пустой файл или неподдерживаемое расширение нужно исправить, а не отправлять повторно.

Размер и длительность проверяйте отдельно. Сжатая запись может весить меньше 95 МБ, но идти дольше 5 часов. Короткое видео в высоком разрешении, наоборот, может не поместиться в один запрос. По размеру выбирайте способ загрузки, по длительности проверяйте, подходит ли запись для распознавания.

cURL
curl -X POST "https://api.transcript1.com/v1/transcriptions?wait=60" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY" \
  -F [email protected] \
  -F language=auto

Создайте загрузку для большого файла

Передайте имя и размер файла. В ответ придут план загрузки и X-Upload-Token для отправки частей. Полная последовательность запросов есть в руководстве по загрузке частями.

Следуйте плану из ответа: у каждой части есть индекс, смещение и размер. Читайте из файла именно этот диапазон байтов. Последняя часть может оказаться короче остальных. Для бинарных PUT используйте X-Upload-Token, а не API-ключ: токен действует 1 час и только для этой загрузки.

Сохраните Idempotency-Key, с которым создали загрузку. Если токен истёк, повторите исходный запрос с тем же ключом и параметрами. Вы получите новый токен для существующей загрузки. Не создавайте новую после каждого обрыва: так вы потеряете связь с уже отправленными частями.

Запрос на создание загрузки
curl -X POST "https://api.transcript1.com/v1/transcriptions" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY" \
  -H "Idempotency-Key: interview-2026-10-13" \
  -H "Content-Type: application/json" \
  -d '{"upload":{"filename":"interview.m4a","size":48210334,"mime_type":"audio/mp4"}}'

Отправьте недостающие части и завершите загрузку

Отправьте каждую часть методом PUT на её адрес с токеном загрузки. Затем подтвердите завершение: transcript1 проверит части и поставит запись в очередь на транскрибацию. Адреса запросов перечислены в документации API.

Перед продолжением запросите GET /v1/transcriptions/:id/upload. Сравните received_chunks с планом и отправьте только недостающие части. Повторная отправка заменяет часть; её размер должен совпадать с планом. Ответ 401 может означать, что токен истёк, а не что файл испорчен.

При 409 upload_incomplete ответ укажет индексы недостающих частей. Дошлите их и завершите загрузку. После постановки в очередь проверяйте статус транскрибации или ждите вебхук. В интерфейсе разделяйте передачу файла и обработку записи: это разные этапы.

Отправка части и подтверждение загрузки
curl -X PUT "https://api.transcript1.com/v1/transcriptions/tr_8fK2Lm0PqRsTuVwXyZaBcD/upload/chunks/0" \
  -H "X-Upload-Token: t1u_..." \
  -H "Content-Type: application/octet-stream" \
  --data-binary @chunk-0.bin

curl -X POST "https://api.transcript1.com/v1/transcriptions/tr_8fK2Lm0PqRsTuVwXyZaBcD/upload/complete" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY"

Что происходит до и после обработки

Статус awaiting_upload означает, что запись ещё не стоит в очереди на распознавание. Сначала передайте байты, затем завершите загрузку. Если связь оборвалась после подтверждения, прочитайте статус задачи, прежде чем отправлять подтверждение повторно.

У команды может быть до 20 незавершённых загрузок одновременно. Через 24 часа отменяем те, которые не завершили, и удаляем их части. Для обработанной записи срок другой: исходный файл удаляем через 24 часа после конечного статуса. Текст хранится до вашего удаления. Если приложению нужен плеер с записью, храните оригинал у себя.

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

Попробуйте бесплатно: 60 минут на старт

Подтвердите почту и получите 60 бесплатных минут. Банковская карта не нужна.

Получить API-ключ

Частые вопросы

Остались вопросы? Напишите в поддержку

Какие файлы принимает API?

mp3, wav, m4a, flac, ogg, opus, mp4, mov, webm и mkv со звуковой дорожкой. Для другого расширения API вернёт 422 unsupported_media.

Какой максимальный размер файла?

До 95 МБ одним запросом или до 2 ГБ частями. Тариф может устанавливать меньший предел. Если файл слишком большой, вернём 413 media_too_large.

Когда удаляются загруженные записи?

Через 24 часа после конечного статуса транскрибации. Если вы не завершили загрузку за 24 часа, отменим её и удалим части. Готовый транскрипт хранится, пока вы его не удалите.

Можно разделить реплики по говорящим?

Да. Передайте diarize=true: сегменты получат метки Speaker 1, Speaker 2 и так далее. Загруженные файлы всегда обрабатываем через распознавание речи.