HTTP API Voicee (0.18.0)
API Voicee - предоставляет программный доступ к услугам транскрибации, перевода, составления краткого содержания (саммари), субтитров и их перевода.
Модель voicee/transcribe возвращает транскрипт в выбранном формате и до 8 параллельных бесплатных постобработок через список post_process: текстовых (саммари, перевод, протокол…) и медиа (слайды, видео с субтитрами, караоке, монтаж, сепарация голоса).
Отдельные модели — переозвучка видео, синтез речи, песни, изображения и видео (раздел «Модели»). Файл можно передать ссылкой или загрузить во время запроса.
Наше API асинхронное - это значит, что одним запросом вы ставите задачу на транскрибацию и серией других запросов (polling) вы узнаете статус задачи и получаете ее результат. Мы стараемся, чтобы результат был готов в течение нескольких минут и работаем над улучшением этой метрики. Для уведомлений о завершении задачи используйте webhook; доставка может повторяться. Если вам важно получать уведомления в браузере или вы просто больше любите уведомления по websocket - напишите нам: мы готовы повысить приоритет этой задачи.
Для того чтобы облегчить интеграцию наше API совместимо с клиентом сервиса replicate. Это означает что вы можете использовать их клиент для любой платформы для взаимодействия с нашим сервисом. Будьте внимательны: компания replicate не имеет никакого отношения к нашим сервисам и в случае неработоспособности вам стоит связываться с нашей поддержкой а не поддержкой сервиса replicate.
API-ключ можно получить в кабинете my.voicee.ru: «Настройки» → «API» → «Получить ключ». При перевыпуске старый ключ отзывается в течение 5 минут. Ключ также выдаётся в Telegram-боте Войси: меню «API», кнопка «Получить токен». Передавайте ключ в заголовке Authorization: Bearer ключ.
Поставить обработку в очередь
Если есть ссылка на аудио файл: можно отправить классический запрос с JSON в теле
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer tk-..." https://api.voicee.ru/v1/replicate/v1/models/voicee/transcribe/predictions -d '{"input": {"audio": "https://example.com/audio.mp3", "language": "ru", "output_format": "json"}}'Если вы хотите загрузить файл внутри запроса
Мы поддерживаем загрузку файлов в 2 форматах:
multipart/form-dataиapplication/octet-stream. Ограничение на размер файла - 300MiB.multipart/form-data
Описание формата можно посмотреть на википедии: https://ru.wikipedia.org/wiki/Multipart/form-data
curl -X POST https://api.voicee.ru/v1/replicate/v1/models/voicee/transcribe/predictions -H "Authorization: Bearer tk-<token here>" -F "input.audio=@/path-to-file/audio.mp4"при этом
/path-to-file/audio.mp4- это путь к файлу на вашем компьютере, а собачка перед путем обязательна - она подсказывает утилитеcurl, что это файл.application/octet-stream
Если у вас нет под рукой клиента, который уже поддерживает мультипарт запросы, возможно самым простым вариантом будет отправка файла как есть в теле запроса. При этом нашей модели понадобится подсказка в какой параметр подложить этот файл - ее следует передать в заголовке
X-Voicee-Body-Field:curl https://api.voicee.ru/v1/replicate/v1/models/voicee/transcribe/predictions -H "Authorization: Bearer tk-<token here>" -H "X-Voicee-Body-Field: input.audio" -H "Content-Type: application/octet-stream" --data-binary "@/path-to-file/audio.mp4"
В ответ вы получите айди задачки и статус:
{"id": "<prediction_id>", "status": "processing", ...}Узнать статус обработки и получить результат
Опрашивать статус обработки можно по айди задачки:
curl https://api.voicee.ru/v1/replicate/v1/predictions/<prediction_id> -H "Authorization: Bearer tk-<token here>"Конечными статусами являются
failedиsucceeded.Формат вывода
Ответом основной нашей модели является сложный словарь с траснкриптом разделенным на сегменты. Иногда такая сложность не нужна и нужно получить просто текст Вывод можно контролировать с заголовком
X-Voicee-Output-Transformers. Пример:X-Voicee-Output-Transformers: text?speakers=false×tamps=false&pauses=false
Рядом с обычным API мы публикуем replicate совместимый API, чтобы вы могли использовать готовые библиотеки для работы с нашим API на множестве языков.
Полный список библиотек можно посмотреть на странице библиотек.
API ключ - используйте тот же ключ, который используете для обычного API
При создании клиента укажите baseUrl = https://api.voicee.ru/v1/replicate
В качестве модели используйте voicee/transcribe. Передайте обязательный input.audio (HTTP(S)-ссылка), при необходимости input.language; input.output_format принимает json (по умолчанию), json2, text, srt или lrc. Для дополнительных результатов передайте список input.post_process.
Пример для Python:
- Установите библиотеку
pip install 'replicate<0.32.0'
- Установите токен и базовый URL в переменные окружения
export REPLICATE_API_TOKEN=<ваш ключ>
export REPLICATE_BASE_URL=https://api.voicee.ru/v1/replicate
или, если у вас уже есть .env файл с переменными окружения - добавьте их в него:
REPLICATE_API_TOKEN=<ваш ключ>
REPLICATE_BASE_URL=https://api.voicee.ru/v1/replicate
или, вы можете указать эти настройки прямо в коде приложения:
from replicate import Client
client = Client(base_url='https://api.voicee.ru/v1/replicate', api_token='Ваш ключ')
# дальше используйте client.run(...) вместо replicate.run(...)
- Запустите транскрибацию
import replicate
audio_file_url = "https://example.com/audio.mp3"
result = replicate.models.run(
"voicee/transcribe",
input={"audio": audio_file_url},
)
print(result)
# output example TBD
Запустить обработку файла
Начать новую обработку с учетом выбранной модели (version) и входных данных. Тот же заказ принимает путь /v1/models/voicee/<модель>/predictions — модель берётся из пути. Неизвестная модель — 404 model not found.
Authorizations:
Request Body schema: application/json
required | object Входные данные модели в виде JSON объекта. Схема входных данных зависит от выбранной модели. |
| version required | string ID модели, которую вы хотите использовать для обработки. Value: "voicee/transcribe" |
| webhook | string HTTPS URL для получения веб-хука об изменении статуса обработки файла. |
| webhook_events_filter | Array of arrays На ваш URL веб-хука отправляются только события завершения обработки файла (статусы succeeded, failed, canceled и aborted); события о логах не отправляются. Доставка может повторяться, учитывайте повторные уведомления при обработке. |
Responses
Request samples
- Payload
{- "input": {
- "language": null,
- "speakers": null,
- "output_format": "json",
- "domain": "auto",
- "efficiency": "fast",
- "multilingual": true,
- "prompt": "string",
- "hotwords": "string",
- "cut_start": "0",
- "cut_duration": "-1",
- "post_process": [
- "summary",
- "action_items",
- "speaker_names"
], - "custom_prompt": "string",
- "target_language": "string",
- "post_process_options": {
- "karaoke": {
- "color": "string",
- "frame": "landscape",
- "position": "bottom"
}, - "montage": {
- "burn_subtitles": true,
- "color": "string",
- "karaoke": true,
- "oneword": true,
- "position": "bottom",
- "segments": [
- {
- "end": 0,
- "start": 0
}
]
}, - "subtitles_video": {
- "color": "string",
- "karaoke": true,
- "oneword": true,
- "position": "bottom",
- "subtitles": "string",
- "text_removal_mode": "string"
}
}, - "source_prediction": "string"
}, - "version": "voicee/transcribe",
- "webhook": "string",
- "webhook_events_filter": [ ]
}Response samples
- 200
- 401
- 404
- 409
- 413
- 422
- 429
{- "id": "string",
- "model": "voicee/transcribe",
- "version": "voicee/transcribe",
- "status": "succeeded",
- "output": "string",
- "error": "string",
- "input": { },
- "created_at": "2019-08-24T14:15:22Z",
- "started_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z"
}Получить информацию об обработке файла
Получить текущее состояние обработки файла.
Authorizations:
path Parameters
| prediction_id required | string ID обработки файла для получения информации. |
Responses
Response samples
- 200
- 401
- 404
{- "id": "string",
- "model": "voicee/transcribe",
- "version": "voicee/transcribe",
- "status": "succeeded",
- "output": "string",
- "error": "string",
- "input": { },
- "created_at": "2019-08-24T14:15:22Z",
- "started_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z"
}Отменить обработку
Запросить отмену обработки любой модели. До запуска работы заказ завершается со статусом canceled без списания. Отмена запущенной работы — по возможности: если воркер её уже не останавливает, prediction завершится обычным результатом и списанием.
Authorizations:
path Parameters
| prediction_id required | string ID обработки файла для отмены. |
Responses
Response samples
- 200
- 401
- 404
{- "id": "string",
- "model": "voicee/transcribe",
- "version": "voicee/transcribe",
- "status": "succeeded",
- "output": "string",
- "error": "string",
- "input": { },
- "created_at": "2019-08-24T14:15:22Z",
- "started_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z"
}Эндпоинты памяти голосов позволяют назвать спикеров расшифровки и запомнить их голоса: присвоенное имя подставляется в выбранную обработку и автоматически появляется в будущих обработках того же голоса. Совпадение ищется по голосу, а не по метке спикера, поэтому один и тот же человек сохраняет имя в разных записях, даже если метка в них другая. Два разных человека, названных одинаково, остаются разными профилями.
Память привязана к ключу API: ключ определяется по заголовку Authorization,
передавать его или ID ключа в теле запроса не нужно. У каждого ключа своя память:
другой ключ того же аккаунта и повторно выпущенный ключ видят отдельную пустую память,
а обработки одного ключа недоступны другому ключу на чтение и переименование.
При перевыпуске ключа память начинается заново. После отзыва старого ключа его
обработки с ID gpa: больше недоступны через API: сохраните нужные результаты
до перевыпуска. Обработки, созданные до привязки к ключу, доступны владельцу
как прежде, но память голосов не пополняют.
Профили голосов сохраняются, даже если исходные файлы уже недоступны, и живут, пока вы не удалите их сами или пока не отзовётся ключ. Список профилей возвращает имя, число образцов и время обновления, но не векторы голосов. Удаление профиля действует только на будущее: готовые результаты не переписываются.
Эти эндпоинты не входят в клиенты replicate - используйте прямые HTTP-запросы.
Создать обработку и дождаться результата
curl --request POST 'https://api.voicee.ru/v1/replicate/v1/predictions' \ --header "Authorization: Bearer ${VOICEE_API_KEY}" \ --header 'Content-Type: application/json' \ --data '{"version":"voicee/transcribe","input":{"audio":"https://example.com/interview.mp3","output_format":"json","post_process":["speaker_names"]}}'Опрашивайте
GET /v1/replicate/v1/predictions/<prediction_id>до терминального статусаsucceeded:{ "id": "<prediction_id>", "status": "succeeded", "output": { "transcript": { "segments": [ {"start": 0.0, "end": 4.2, "speaker": "A", "text": "Добрый день."}, {"start": 4.4, "end": 9.1, "speaker": "B", "text": "Здравствуйте!"} ] }, "results": {"speaker_names": {"A": null, "B": null}} } }Метки спикеров (
A,B) локальны для этой обработки. Соберите разные значенияsegments[].speaker, чтобы узнать их.Присвоить имя спикеру
curl --request PATCH 'https://api.voicee.ru/v1/replicate/v1/predictions/<prediction_id>/speakers/A' \ --header "Authorization: Bearer ${VOICEE_API_KEY}" \ --header 'Content-Type: application/json' \ --data '{"name":"Алексей"}'{ "speaker_id": "A", "name": "Алексей", "profile_id": "<profile_id>", "remembered": true, "names": {"A": "Алексей"} }remembered: trueозначает, что образец голоса сохранён и имя будет автоматически подставляться в будущих обработках. Если образец голоса в этой записи недоступен, имя в неё всё равно подставится, но ответ вернётremembered: falseиreasonс пояснением; профиль при этом не создаётся.Имя появляется в результате этой обработки и будущих обработок того же голоса: в json — в карте
namesрядом сsegments, в json2 — в полеnameвнутриspeakersпо метке, в text/srt имя заменяет метку спикера. Формат lrc содержит только текст и временные метки, без имён спикеров.Новая запись того же голоса получит имя сама
Создайте обычную обработку новой записи с
post_process: ["speaker_names"]. Если голос уже назван, метки получат имена без ручного переименования:{"results": {"speaker_names": {"A": "Алексей", "B": null}}}Другой ключ видит отдельную память
Та же ссылка под другим ключом вернёт неназванные метки, а список голосов этого ключа будет пуст:
{"results": {"speaker_names": {"A": null}}}Список сохранённых голосов и удаление
curl 'https://api.voicee.ru/v1/replicate/v1/speakers' \ --header "Authorization: Bearer ${VOICEE_API_KEY}"[ {"id": "<profile_id>", "name": "Алексей", "samples": 2, "created_at": "2026-10-23T10:00:00Z", "updated_at": "2026-10-23T10:05:00Z"} ]Удалите профиль, чтобы будущие обработки перестали узнавать голос. Готовые результаты это не меняет:
curl --request DELETE 'https://api.voicee.ru/v1/replicate/v1/speakers/<profile_id>' \ --header "Authorization: Bearer ${VOICEE_API_KEY}"
Пример на Python:
import os, time
import requests
BASE = "https://api.voicee.ru/v1/replicate"
HEADERS = {"Authorization": f"Bearer {os.environ['VOICEE_API_KEY']}"}
# создать обработку и дождаться результата
resp = requests.post(f"{BASE}/v1/predictions", headers=HEADERS, json={
"version": "voicee/transcribe",
"input": {"audio": "https://example.com/interview.mp3",
"output_format": "json", "post_process": ["speaker_names"]},
})
prediction_id = resp.json()["id"]
while True:
data = requests.get(f"{BASE}/v1/predictions/{prediction_id}", headers=HEADERS).json()
if data["status"] in ("succeeded", "failed", "canceled", "aborted"):
break
time.sleep(5)
if data["status"] != "succeeded":
raise RuntimeError(f"Обработка завершилась: {data['status']}")
# метки спикеров этой записи
labels = sorted({s["speaker"] for s in data["output"]["transcript"]["segments"]})
# назвать спикера
requests.patch(f"{BASE}/v1/predictions/{prediction_id}/speakers/{labels[0]}",
headers=HEADERS, json={"name": "Алексей"})
# список сохранённых голосов и удаление профиля
profiles = requests.get(f"{BASE}/v1/speakers", headers=HEADERS).json()
requests.delete(f"{BASE}/v1/speakers/{profiles[0]['id']}", headers=HEADERS)
Ошибки возвращаются с понятным detail: 401 - ключ не передан или недействителен;
404 - обработка, спикер или профиль не найдены; 409 - обработка ещё не завершилась
успешно; 422 - некорректное имя (пустое или длиннее 120 печатных символов);
503 - сервис временно недоступен.
Назвать спикера в обработке
Присвоить имя спикеру обработки по его метке (например A). Имя подставляется в эту обработку и в будущие обработки того же голоса; уже готовые прошлые обработки не переписываются. Ключ определяется по заголовку Authorization, передавать его в теле запроса не нужно.
Authorizations:
path Parameters
| prediction_id required | string ID обработки файла. |
| speaker_id required | string Метка спикера внутри этой обработки, например A. |
Request Body schema: application/jsonrequired
| name required | string [ 1 .. 120 ] characters Имя спикера: от 1 до 120 печатных символов. |