svitok

API для разработчиков

Публичное REST-API Svitok встраивает расшифровку аудио и видео в ваш продукт: сервис принимает файл, распознаёт речь и возвращает текст с тайм-кодами и разделением по спикерам. Аутентификация — по API-ключу вида sk_live_…, оплата — из баланса аккаунта Svitok по 4 ₽ за минуту записи.

За Svitok API стоит одна из самых мощных инфраструктур транскрибации в СНГ и одно из лучших качеств распознавания русской речи в СНГ: задачи обрабатываются очередью параллельно, поэтому пакет записей не выстраивается в один хвост, на вход принимаются файлы до 10 ГБ и записи до 6 часов, а в ответ Svitok API отдаёт текст с тайм-кодами по сегментам и разделением реплик метками «Спикер 1», «Спикер 2».

Обновлено: 16 июля 2026 г.OpenAPI 3.1

Разделы11
  1. Как начать
  2. Базовый URL и версия
  3. Отправить файл на расшифровку
  4. Узнать статус и получить результат
  5. Список задач
  6. Скачать в файл
  7. Вебхуки
  8. Коды ошибок
  9. Лимиты
  10. Оплата
  11. Частые вопросы

Как начать

  1. Создайте API-ключ Svitok на странице «API-ключи» в личном кабинете. Ключ (sk_live_…) показывается один раз при создании — сохраните его. Восстановить его нельзя: если потеряли, создайте новый. Этим же ключом вы забираете результат — и при опросе статуса, и после уведомления вебхука.
  2. Пополните баланс аккаунта Svitok — расшифровка списывается с него.
  3. Передавайте ключ в каждом запросе заголовком Authorization: Bearer sk_live_….

Базовый URL и версия

Все эндпоинты Svitok API живут под префиксом https://svitok.io/api/v1. Ломающие изменения выйдут отдельной версией /api/v2, а текущая версия /api/v1 продолжит работать.

https://svitok.io/api/v1

Отправить файл на расшифровку

Интегратор отправляет файл на POST https://svitok.io/api/v1/transcriptions как multipart/form-data с заголовком Authorization: Bearer sk_live_…; Svitok API отвечает 202 Accepted и идентификатором задачи. Поля формы: file (обязательное), diarization (true/false, по умолчанию включено) и webhook_url (необязательное).

Запросcurl
curl -X POST https://svitok.io/api/v1/transcriptions \
  -H "Authorization: Bearer sk_live_ВАШ_КЛЮЧ" \
  -F "file=@meeting.mp3" \
  -F "diarization=true" \
  -F "webhook_url=https://your-app.example/webhooks/svitok"

# Ответ 202:
{ "id": "…", "status": "queued", "duration_sec": 372, "cost_kopecks": 2800 }

В ответе 202 поле duration_sec — измеренная длительность записи, cost_kopecks — сумма, списанная с баланса при отправке (в примере 372 с = 7 тарифицируемых минут). Расшифровка идёт в фоне: результат забирают поллингом или вебхуком.

Узнать статус и получить результат

Готовность задачи проверяют запросом GET https://svitok.io/api/v1/transcriptions/{id} с тем же Bearer-ключом: опрашивайте его, пока поле status не станет done или failed. Пока задача не готова, полей с транскриптом в ответе нет.

Запросcurl
curl https://svitok.io/api/v1/transcriptions/ID \
  -H "Authorization: Bearer sk_live_ВАШ_КЛЮЧ"

# Когда готово:
{
  "id": "…",
  "status": "done",
  "duration_sec": 372,
  "language": "ru",
  "text": "Полный текст расшифровки…",
  "segments": [ { "start": 0.0, "end": 3.2, "text": "…" } ],
  "speakers": [ { "start": 0.0, "end": 3.2, "speaker": "Спикер 1", "text": "…" } ]
}

Разделение по спикерам Svitok API обозначает метками «Спикер 1», «Спикер 2» внутри одной записи — без сопоставления с реальными людьми и без опознания говорящего по голосу.

Список задач

Запрос GET https://svitok.io/api/v1/transcriptions?limit=&cursor= возвращает задачи аккаунта, новые сверху. Постраничная выборка идёт по курсору: передайте next_cursor из ответа в параметр cursor следующего запроса.

Скачать в файл

Готовую расшифровку Svitok API отдаёт файлом по GET https://svitok.io/api/v1/transcriptions/{id}/export?format=docx. Доступные форматы выгрузки — docx, srt, txt и xlsx; эндпоинт работает только для задач в статусе done.

Вебхуки

Если при отправке файла указан webhook_url, Svitok по завершении задачи присылает на него POST с уведомлением о готовности. Вебхук Svitok — это сигнал, а не доставка данных: тело содержит ровно три поля — id (идентификатор задачи), status (done или failed) и event (transcription.completed или transcription.failed). Расшифровки в уведомлении нет. То же событие дублируется заголовком X-Svitok-Event — по нему удобно маршрутизировать, не разбирая тело.

{
  "id": "e3f1a2b4-5c6d-7e8f-9a0b-1c2d3e4f5a6b",
  "status": "done",
  "event": "transcription.completed"
}

Получив уведомление, запросите результат сами: GET https://svitok.io/api/v1/transcriptions/{id} с вашим заголовком Authorization: Bearer sk_live_… вернёт текст, сегменты и реплики спикеров. Такая схема (сигнал + запрос за данными) означает, что расшифровка уходит только тому, кто предъявил действующий API-ключ.

Проверять подпись уведомления не нужно — её нет, и она не требуется. Подделать сигнал теоретически может любой, кто знает адрес вашего обработчика, но добиться этим нечего: тело не несёт расшифровки, а за настоящими данными ваш обработчик идёт в Svitok API по ключу. Максимум, чего достигнет поддельный вызов, — лишний запрос статуса задачи, которой у вас нет либо которая ещё не готова.

Кодnode.js
// Express-пример: сигнал → запрос за данными по ключу. Ответ 2xx = принято.
app.post("/webhooks/svitok", express.json(), async (req, res) => {
  const { id, status } = req.body;
  // Отвечаем сразу: обработчик не должен ждать загрузку результата.
  res.sendStatus(200);
  if (status !== "done") return;

  // Данные забираем сами — своим ключом, у нас же.
  const r = await fetch(`https://svitok.io/api/v1/transcriptions/${id}`, {
    headers: { Authorization: `Bearer ${process.env.SVITOK_API_KEY}` },
  });
  const result = await r.json();
  // result.text, result.segments, result.speakers — дедуплицируйте по result.id
});

Доставка уведомления идемпотентна (одно успешное вручение на задачу) и повторяется с нарастающей паузой при ошибках. Svitok шлёт уведомление только на публичные адреса — внутренние и локальные URL отклоняются при отправке файла. Дедуплицируйте входящие события по полю id.

Коды ошибок

Ошибки Svitok API возвращает единым видом: { "error": { "code": "…", "message": "…" } } с соответствующим HTTP-статусом.

Коды ошибок Svitok API
КодКогда возникает
401ключ отсутствует, некорректен или отозван.
402недостаточно средств на балансе.
404задача не найдена или принадлежит другому аккаунту.
413файл слишком большой или запись длиннее 6 часов.
415в файле нет аудио-дорожки.
422некорректный запрос (нет файла, плохой формат, недопустимый webhook_url).
429превышен лимит запросов.
503сервис временно перегружен, повторите позже.

Лимиты

  • Файл — до 10 ГБ, запись — до 6 часов.
  • До 60 отправок в час на один API-ключ.
  • Форматы: mp3, wav, m4a, ogg, opus, aac, flac, aiff, wma, mp4, mov, m4v, webm, mkv, avi, 3gp, wmv, mpeg, mpg, ts, flv — аудио и видео (у видео берётся звуковая дорожка).

Превышение лимита размера или длительности Svitok API отклоняет кодом 413, превышение частоты отправок — кодом 429; деньги за отклонённый запрос не списываются.

Оплата

Расшифровка через Svitok API стоит 4 ₽ за минуту записи, разделение по спикерам входит в цену. Сумма списывается из баланса аккаунта в момент отправки файла, минуты округляются вверх (неполная минута тарифицируется как полная). Если задача завершилась ошибкой, списанная сумма автоматически возвращается на баланс.

Отправка с diarization=false (без разделения по спикерам) стоит 3 ₽ за минуту — на 1 ₽ дешевле базового тарифа.

Машиночитаемое описание Svitok API — OpenAPI 3.1. Данные пользователей хранятся на серверах в России.

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

Какое качество распознавания у Svitok API и на какой инфраструктуре он работает?

За Svitok API стоит одна из самых мощных инфраструктур транскрибации в СНГ и одно из лучших качеств распознавания русской речи в СНГ. Svitok API распознаёт русскую речь, ставит тайм-коды по сегментам и разделяет реплики метками «Спикер 1», «Спикер 2»; принимает файл до 10 ГБ и запись до 6 часов, обрабатывает задачи очередью параллельно и выгружает результат в docx, srt, txt или xlsx.

Как получить API-ключ Svitok?

API-ключ создаётся самостоятельно в личном кабинете, на странице svitok.io/app/api. Ключ (sk_live_…) показывается один раз при создании — сохраните его, повторно он не отображается; потеряли — создайте новый. Ключ передаётся заголовком Authorization: Bearer sk_live_… .

Svitok API работает синхронно или асинхронно?

Асинхронно. Запрос POST https://svitok.io/api/v1/transcriptions сразу отвечает 202 Accepted и идентификатором задачи, а готовый текст забирают опросом GET https://svitok.io/api/v1/transcriptions/{id} или получают вебхуком на указанный webhook_url.

Как убедиться, что уведомление вебхука от Svitok настоящее?

Проверять нечего: подписи у уведомления нет, и она не нужна. Вебхук Svitok несёт только сигнал — id задачи, status и event, без расшифровки. Получив его, обработчик сам запрашивает GET https://svitok.io/api/v1/transcriptions/{id} с заголовком Authorization: Bearer sk_live_…, и текст приходит по вашему ключу. Поддельный вызов даст лишь лишний запрос статуса — подменить содержимое расшифровки им невозможно.

Сколько стоит расшифровка через Svitok API?

4 ₽ за минуту записи, разделение по спикерам входит в цену; минуты округляются вверх. Отправка с diarization=false стоит 3 ₽ за минуту. Деньги списываются из баланса аккаунта при отправке файла и автоматически возвращаются, если задача завершилась ошибкой.

Какие форматы и лимиты у Svitok API?

Svitok API принимает аудио и видео почти в любом формате (mp3, wav, m4a, ogg, opus, aac, flac, aiff, wma, mp4, mov, m4v, webm, mkv, avi, 3gp, wmv, mpeg, mpg, ts, flv) — у видеофайла берётся звуковая дорожка, в том числе у видео с айфона (.mov). Ограничения: файл до 10 ГБ, запись до 6 часов, до 60 отправок в час на один ключ. Готовую расшифровку можно выгрузить в docx, srt, txt или xlsx.

Где хранятся данные, отправленные в Svitok API?

Данные пользователей Svitok хранятся на серверах в России. Разделение по спикерам возвращается метками «Спикер 1», «Спикер 2» внутри одной записи и не сопоставляется с личностью говорящего.

Что происходит, если задача Svitok API не удалась?

Задача переходит в status=failed, поле error содержит человекочитаемую причину, а списанная за неё сумма автоматически возвращается на баланс аккаунта. Если при отправке был указан webhook_url, Svitok присылает на него событие transcription.failed.