Документация KolWrite API
Авторизуйтесь ключом API, запустите задание и получите результат: расшифровки с таймингом каждого слова и метками говорящих в JSON, TXT или SRT.
Аутентификация
Все запросы к API необходимо аутентифицировать с помощью вашего уникального ключа API. Передавайте его в заголовках запроса:
x-api-key: YOUR_API_KEY
Чтобы создавать ключи API и управлять ими, откройте Консоль KolWrite после создания аккаунта.
Быстрый старт
Быстро начните работу с помощью этих простых примеров.
1. Запустите расшифровку
Отправьте POST-запрос на эндпоинт `/transcribe`, указав URL аудиофайла, который нужно расшифровать.
Запрос:
POST https://app.kolwrite.com/transcribe
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"audio_url": "https://salford.figshare.com/ndownloader/files/14630270"
}
Ответ:
API возвращает `jobId`, по которому можно получить результаты расшифровки.
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57"
}
2. Получите результат расшифровки
С Send a GET request по the `/transcribe/{jobId}` endpoint using the `jobId` received from the previous step.
Запрос:
GET https://app.kolwrite.com/transcribe/34c63d45-4cb5-473b-bc60-25c175e69c57
x-api-key: YOUR_API_KEY
Ответ (пример):
Когда заданию присвоен статус COMPLETED, ответ будет содержать сведения о расшифровке.
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"result": {
"language": "en",
"segments": [
{
"start": 0.5,
"end": 3.2,
"text": "Hello everyone, welcome to today's meeting.",
"speaker": "Speaker 1",
"words": [
{
"start": 0.5,
"end": 0.8,
"word": "Hello"
},
{
"start": 0.9,
"end": 1.4,
"word": "everyone"
},
{
"start": 1.5,
"end": 1.9,
"word": "welcome"
}
]
}
]
}
}
Модели и кредиты
Использование модели тарифицируется в кредитах посекундно без минимальной платы. При оплате, в квитанциях и налоговых документах указывается фактическая валюта покупки.
1 кредит — это расчетная единица API, которая ранее отображалась в консоли API как $1.00.
Соответствующие требованиям платежные аккаунты в Израиле приобретают кредиты в ILS по цене ILS 3.60 за кредит без НДС. Перед оплатой отображаются количество кредитов, сумма без налога, НДС и итоговая сумма в ILS. Остальные аккаунты приобретают кредиты в USD по цене USD 1.20 за кредит, если отдельными условиями заказа не предусмотрено иное.
| Модель | Значение API | Кредиты / час | Лучше всего подходит для |
|---|---|---|---|
| Base | base | 0.40 | Недорогая расшифровка, временные метки слов и разделение спикеров |
| Oracle Mini | oracle_mini | 0.80 | Быстрая транскрибация Oracle с дополнительным переводом на любой поддерживаемый целевой язык, диаризацией и разделением каналов; самый доступный вариант Oracle с переводом |
| Oracle | oracle | 1.20 | Промышленная расшифровка и многоязычные процессы |
| Oracle Pro | oracle_pro | 1.40 | Премиальное качество для профессиональных задач |
| Oracle Max | oracle_max | 3.00 | Максимальное качество для сложного аудио и ответственных задач |
| Core | core | 1.00 | Универсальная расшифровка предыдущего поколения |
| Edge | edge | 1.20 | Высокоточная расшифровка предыдущего поколения |
Дополнения: Стандартная диаризация спикеров и разделение по каналам в режиме standard включены в стоимость. Pro-диаризация спикеров добавляет 0.20 кредита за час аудио. overlap
разделение каналов тарифицируется по ставке выбранной модели за большее из двух значений: длительность записи или суммарное время обнаруженной речи по её физическим каналам; ни один режим каналов не добавляет доплату за диаризацию. Oracle Mini автоматически включает выравнивание временных меток при выборе диаризации говорящих или разделения каналов.
Эндпоинты API
POST /upload
Загрузите локальный аудио- или видеофайл и используйте возвращённое значение fileUrl как audio_url в POST /transcribe. Для небольших файлов выберите встроенную загрузку Base64, а для файлов большего размера — прямую загрузку в хранилище.
Встроенная загрузка Base64 (до 4 MiB)
Для файлов размером до 4 MiB (4,194,304 байта), отправьте байты медиафайла в кодировке Base64 одним запросом API.
POST /upload
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"filename": "clip.mp3",
"contentType": "audio/mpeg",
"content": "<base64-encoded media bytes>"
}
contentType необязателен и при отсутствии определяется по имени файла. Отправьте необработанные байты медиафайла в Base64 в поле content, без префикса data:...;base64, . Ограничение 4 MiB применяется к декодированному медиафайлу.
Ответ содержит fileUrl. Используйте его как audio_url при создании задания транскрипции.
Прямая загрузка в хранилище (до 100 MiB)
Для файлов большего размера запросите подписанную форму для нашего S3-совместимого хранилища, загрузите файл напрямую, а затем создайте задание транскрипции. Максимальный размер загрузки: 100 MiB (104,857,600 байт). Подписанная форма действительна 60 минут. Возвращённый URL для чтения действителен 24 часа — этого достаточно, чтобы служба транскрипции получила медиафайл.
1. Запросите подписанную форму загрузки
POST /upload
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"filename": "meeting.mp3",
"contentType": "audio/mpeg"
}
contentType необязателен и при отсутствии определяется по имени файла. API возвращает uploadUrl, uploadFields, fileUrl и uploadExpiresIn.
Использовать uploadUrl для загрузки файла в наше S3-совместимое хранилище. Затем используйте fileUrl как audio_url при создании задания транскрипции.
2. Загрузите файл непосредственно в хранилище
// upload is the JSON response from POST /upload
const form = new FormData();
for (const [name, value] of Object.entries(upload.uploadFields)) {
form.append(name, value);
}
form.append('file', file, file.name);
await fetch(upload.uploadUrl, { method: 'POST', body: form });
Передайте поля точно в полученном виде и не добавляйте пользовательский заголовок авторизации в POST-запрос к хранилищу.
3. Создайте задание транскрипции
POST /transcribe
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"audio_url": "<fileUrl returned by POST /upload>",
"model": "oracle"
}
POST /transcribe
Отправляет аудиофайл на асинхронную расшифровку с необязательной диаризацией спикеров.
Параметры тела запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| audio_url | string | Обязательно | Общедоступный URL аудио- или видеофайла для расшифровки. |
| language | string | Необязательно | Подсказка с кодом языка (например, "he", "en", "es"). Если не указать, язык будет определен автоматически. Default: "auto" |
| translate_to | string | Необязательно | Код языка, на который нужно перевести расшифровку (например, "en", "es", "fr"). Если код указан, результирующий текст будет на этом языке. Примечание: Этот параметр работает только с семейством моделей Oracle. |
| word_timestamps | boolean | Необязательно | Следует ли включать временные метки на уровне слов в JSON или SRT, когда выбранная модель поддерживает выравнивание слов. Oracle Mini автоматически включает выравнивание для диаризации говорящих и разделения каналов; обычная транскрибация Oracle Mini возвращает метки на уровне сегментов. Не влияет на вывод TXT. По умолчанию: true |
| model | string | Необязательно | Указывает, какую модель расшифровки использовать: Текущие модели: • base: недорогая расшифровка с временными метками слов и необязательной диаризацией, 0.40 кредита/час• oracle_mini: самый доступный тариф Oracle с переводом и дополнительной обработкой говорящих, 0.80 кредита/час• oracle: уровень Oracle для рабочих задач, 1.20 кредита/час• oracle_pro: премиальный уровень Oracle, 1.40 кредита/час• oracle_max: уровень Oracle с максимальным качеством, 3.00 кредита/часУстаревшие модели: • core: более быстрая модель предыдущего поколения, 1.00 кредита/час
• edge: более точная модель предыдущего поколения, 1.20 кредита/часDefault: "core" |
| output_format | string | Необязательно | Требуемый формат результата расшифровки: • json: подробный результат с сегментами и временными метками• txt: расшифровка обычным текстом• srt: формат субтитров SubRipDefault: "json" |
| include_diarization | boolean | Необязательно | Следует ли включить диаризацию говорящих (определение разных говорящих в аудио). При включении сегменты содержат метки говорящих. Oracle Mini автоматически включает выравнивание временных меток для этого режима. По умолчанию: false |
| pro_diarization | boolean | Необязательно | Включает премиальную модель диаризации говорящих для более высокой точности, особенно на сложном аудио. Добавляет 0,20 кредита за час аудио. Oracle Mini автоматически включает выравнивание временных меток для этого режима. По умолчанию: false |
| num_speakers | integer | Необязательно | Ожидаемое число спикеров в аудио. Используется только тогда, когда
include_diarization имеет значение true. Если параметр не указан, система автоматически определит число спикеров.По умолчанию: auto |
| channel_speaker_separation | string | Необязательно | Разделяет стерео- или многоканальное аудио из audio_url по физическим аудиодорожкам. Используйте standard для спикеров, говорящих по очереди, или overlap для перекрывающейся речи. Не может сочетаться с диаризацией. Oracle Mini автоматически включает выравнивание временных меток для любого режима каналов.Default: "off" |
| channel_labels | object | Необязательно | Необязательное сопоставление индексов каналов с нумерацией от нуля, например {"0":"Agent","1":"Customer"}. Метки возвращаются для каждого сегмента и слова. |
| webhook_url | string | Необязательно | Общедоступный HTTPS URL, на который отправляется POST после успешного или неуспешного завершения задания расшифровки. В ответ верните любой код класса 2xx для подтверждения доставки. |
| webhook_secret | string | Необязательно | Необязательный секрет для подписи полезной нагрузки вебхуков. Заголовок подписи имеет формат sha256=<hex digest>. |
Пример запроса (с диаризацией):
{
"audio_url": "https://salford.figshare.com/ndownloader/files/14630270",
"word_timestamps": true,
"model": "edge",
"output_format": "json",
"include_diarization": true,
"num_speakers": 2
}
Ответ:
Возвращает объект с `jobId` отправленного задания расшифровки.
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57"
}
GET /transcribe/{jobId}
Получает статус и результат указанного задания расшифровки.
Параметры пути
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| jobId | string | Обязательно | Идентификатор задания расшифровки, полученный из ответа POST /transcribe. |
Тело ответа
| Поле | Тип | Описание |
|---|---|---|
| jobId | string | Идентификатор запрошенного задания расшифровки. |
| status | string | Текущий статус задания: PENDING, IN_PROGRESS, COMPLETED или FAILED |
| result | object | string | Результат расшифровки (присутствует только при статусе COMPLETED). Структура зависит от запрошенного значения output_format. |
| error | string | Сообщение об ошибке (присутствует только при статусе FAILED). |
Пример ответа (результат JSON с диаризацией спикеров):
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"result": {
"language": "en",
"segments": [
{
"start": 0.5,
"end": 3.2,
"text": "Hello everyone, welcome to today's meeting.",
"speaker": "Speaker 1",
"words": [
{
"start": 0.5,
"end": 0.8,
"word": "Hello"
},
{
"start": 0.9,
"end": 1.4,
"word": "everyone"
}
]
},
{
"start": 4.1,
"end": 6.8,
"text": "Thank you. Let's begin with the quarterly review.",
"speaker": "Speaker 2",
"words": [
{
"start": 4.1,
"end": 4.5,
"word": "Thank"
},
{
"start": 4.6,
"end": 4.9,
"word": "you"
}
]
}
]
}
}
Диаризация спикеров
Диаризация спикеров — это определение и разделение разных спикеров в аудиозаписи. Когда функция включена, KolWrite анализирует аудио, обнаруживает смену спикеров и соответствующим образом помечает каждый сегмент.
Диаризация говорящих и разделение каналов доступны для всех перечисленных моделей. Oracle Mini автоматически включает выравнивание временных меток при каждом выборе режима говорящих.
Как включить диаризацию
Чтобы включить диаризацию спикеров, установите параметр include_diarization равным true в запросе на расшифровку:
{
"audio_url": "https://example.com/meeting-audio.mp3",
"include_diarization": true,
"num_speakers": 3
}
Оптимизация по числу спикеров
Для наилучшего результата укажите ожидаемое число спикеров с помощью параметра num_speakers — если точное число неизвестно, можно:
- Не указывать параметр (система определит автоматически)
- Укажите примерный диапазон на основе своей оценки
Pro-диаризация
Для более точного определения спикеров, особенно при сложной акустике, можно включить Pro-диаризацию. Эта функция стоит дополнительно 0.20 кредита за час аудио.
Чтобы использовать эту функцию, установите параметр pro_diarization равным true. Этот параметр можно использовать вместе с include_diarization.
{
"audio_url": "https://example.com/panel-discussion.mp3",
"include_diarization": true,
"pro_diarization": true
}
Разделение спикеров по каналам
При разделении по каналам каждая физическая аудиодорожка расшифровывается отдельно, а возвращаемые сегменты и слова помечаются физическими полями channel и speaker. Требуется источник с двумя–восемью каналами, указанный в audio_url и не может сочетаться с обычной или Pro-диаризацией. Oracle Mini автоматически включает выравнивание временных меток для любого режима каналов.
Использовать standard когда спикеры говорят по очереди; применяется один тариф выбранной модели для аудио. Используйте overlap когда спикеры могут говорить одновременно; тарификация по выбранной модели выполняется за большее из двух значений: длительность записи или суммарное время обнаруженной речи по её физическим каналам.
{
"audio_url": "https://example.com/stereo-call.wav",
"model": "oracle",
"channel_speaker_separation": "overlap",
"channel_labels": {"0": "Agent", "1": "Customer"}
}
Вебхуки завершения
Задайте webhook_url для получения событий transcription.completed и transcription.failed — при сбоях доставки выполняются повторные попытки, но клиентам следует по-прежнему поддерживать GET /transcribe/{jobId} как единственный достоверный источник.
{
"audio_url": "https://example.com/meeting-audio.mp3",
"output_format": "json",
"webhook_url": "https://example.com/kolwrite-webhook",
"webhook_secret": "replace-with-your-secret"
}
Каждая доставка содержит X-KolWrite-Event, X-KolWrite-Job-Id, X-KolWrite-Delivery-Id и X-KolWrite-Timestamp. Доставка выполняется как минимум один раз; при повторных попытках используется тот же ID доставки, поэтому удаляйте дубликаты событий по X-KolWrite-Delivery-Id. Если настроен секрет, вычислите HMAC-SHA256 для timestamp + "." + raw_request_body и сравните его с X-KolWrite-Signature.
{
"event": "transcription.completed",
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"createdAt": "2026-07-10T09:30:00+00:00",
"model": "base",
"output_format": "json",
"result_available": true,
"result_omitted": false,
"result_size_bytes": 12480,
"result": { "language": "en", "segments": [] }
}
При output_format: "json", поле вебхука result представляет собой объект JSON. Результаты TXT и SRT возвращаются в виде строк.
Для больших результатов параметр result_omitted может принимать значение true; полный результат можно получить из GET /transcribe/{jobId}. Неуспешные события содержат поле error поле.
Формат результата с диаризацией
Когда диаризация включена, каждый сегмент в результате JSON содержит поле speaker с меткой спикера (например, "Speaker 1", "Speaker 2" и т. д.).
Форматы результата
Формат JSON
Подробный результат с сегментами, временными метками и необязательными данными на уровне слов.
Формат TXT
Расшифровка обычным текстом с метками спикеров (если включена диаризация).
Формат SRT
Формат субтитров SubRip с временными метками, совместимый с видеоплеерами и редакторами субтитров.
Состояние сервиса
См. страницу состояния KolWrite API для просмотра текущей доступности, истории работоспособности и инцидентов уровня обслуживания.
GET /health не требует ключа API и возвращает текущее состояние API, приёма заданий и обработки транскрипции. Ответ 200 означает, что служба работает нормально или с ограничениями; ответ 503 означает, что текущее состояние неизвестно или недоступно. Оба ответа содержат сведения о состоянии в формате JSON.
GET /health/history?period=24h возвращает краткую историю доступности. Поддерживаемые периоды: 24h, 7d и 30d.
Коды статуса
| Статус | Описание |
|---|---|
| PENDING | Задание ожидает обработки в очереди. |
| IN_PROGRESS | Задание обрабатывается сервисом расшифровки. |
| COMPLETED | Задание успешно завершено. Результаты доступны в ответе. |
| FAILED | Не удалось обработать задание. Подробности приведены в сообщении об ошибке. |