Загрузите запись через API транскрибации аудио
Поместите байты записи в multipart-поле file. При необходимости добавьте language, diarize, source и webhook_url. Пример загрузки одним запросом показывает формат полей. О готовности можно узнавать через вебхук.
Если запись уже лежит на вашем сервере, начните с multipart. Границы частей пусть задаёт HTTP-клиент. Нужны сами байты файла: строка с локальным путём внутри JSON их не заменит. Пустой файл или неподдерживаемое расширение нужно исправить, а не отправлять повторно.
Размер и длительность проверяйте отдельно. Сжатая запись может весить меньше 95 МБ, но идти дольше 5 часов. Короткое видео в высоком разрешении, наоборот, может не поместиться в один запрос. По размеру выбирайте способ загрузки, по длительности проверяйте, подходит ли запись для распознавания.
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 часа после конечного статуса. Текст хранится до вашего удаления. Если приложению нужен плеер с записью, храните оригинал у себя.
Для пользовательской формы пригодится руководство по расшифровке аудио: как подготовить запись и проверить текст. Для исследовательского инструмента — работа с интервью, где важно сохранить связь реплик с участниками и исходником.