COSMOSCRIBE
Справочник для разработчиков

Документация API

Всё, что нужно для интеграции: как выпустить ключ, отправить первый запрос, принять вебхук и что означает каждый код ответа.

Базовый URL
https://cosmoscribe.ru/api/v1
Версия
v1 · 1.0.0
Аутентификация
X-API-Key
Пять минут

Быстрый старт

От пустого проекта до готовой расшифровки — четыре шага. Всё, что нужно из инструментов, — curl.

  1. 1

    Выпустите ключ

    Профиль → «Безопасность» → «API-ключи» → «Выпустить ключ». Ключ показывается один раз: мы храним только его отпечаток, восстановить значение невозможно. Раздел доступен на тарифе «Бизнес» — программный доступ входит именно в него.

  2. 2

    Проверьте ключ

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

    bash
    export COSMIC_API_KEY="csk_ваш_ключ"
    
    curl https://cosmoscribe.ru/api/v1/account \
      -H "X-API-Key: $COSMIC_API_KEY"
  3. 3

    Отправьте запись

    Ответ приходит сразу, до окончания обработки: в нём log_id и статус queued. Сохраните log_id — по нему забирается результат.

    bash
    curl -X POST https://cosmoscribe.ru/api/v1/transcriptions \
      -H "X-API-Key: $COSMIC_API_KEY" \
      -H "Idempotency-Key: order-1042" \
      -F "file=@meeting.mp3" \
      -F "language=ru" \
      -F "webhook_url=https://example.ru/hooks/cosmic"
  4. 4

    Заберите результат

    Правильный способ — вебхук: сервис сам постучится на ваш адрес, когда запись готова. Если принимать входящие запросы негде, опрашивайте статус с параметром poll=1 — не чаще одного раза в 10–15 секунд. С этим параметром ответ содержит только статус и прогресс, без растущего текста; готовая запись отдаётся целиком тем же запросом.

    bash
    curl https://cosmoscribe.ru/api/v1/transcriptions/$LOG_ID \
      -H "X-API-Key: $COSMIC_API_KEY"
    
    curl "https://cosmoscribe.ru/api/v1/transcriptions/$LOG_ID/export?format=srt" \
      -H "X-API-Key: $COSMIC_API_KEY" -o meeting.srt

Машинная спецификация

Спецификация OpenAPI 3.1 собирается из того же описания методов, что и эта страница, поэтому не расходится с реальностью. Импортируйте её в Postman, Insomnia или генератор клиентов — коллекция и SDK получатся сами.

openapi.json
Ключи

Аутентификация

Постоянный ключ вида csk_… — без OAuth, без истекающих токенов и без обновления по расписанию. Ключ действует, пока вы его не отзовёте.

Заголовок Значение Описание
X-API-Key csk_… Основной способ: ключ передаётся как есть, без префиксов.
Authorization Bearer csk_… Альтернатива для клиентов и SDK, которые умеют только Bearer.

Что важно знать

  • Ключ равен доступу ко всем записям аккаунта. Держите его в переменных окружения или в менеджере секретов, не в репозитории и не в мобильном приложении.
  • Значение показывается один раз при выпуске. В базе лежит только отпечаток, поэтому потерянный ключ не восстанавливается — выпустите новый и отзовите старый.
  • Отзыв мгновенный и необратимый: отозванный ключ сразу получает 401, включить его обратно нельзя.
  • Ключей можно держать несколько — по одному на среду или на интеграцию. Тогда компрометация одного не останавливает остальные.
  • Белый список IP настраивается на каждый ключ в профиле: адреса и подсети в формате CIDR. Пустой список означает «с любого адреса».
  • Запросы с ключом видят только записи своего аккаунта; на чужие приходит 403 или 404.
Базовые правила

Соглашения

Одинаково устроено во всех методах — дальше в справочнике это не повторяется.

Асинхронная обработка

Методы создания отвечают 202 и идентификатором, не дожидаясь распознавания. Статус записи проходит путь queued → processing → completed или failed. Час записи обрабатывается заметно быстрее часа, но точное время зависит от длины и загрузки очереди.

Идентификаторы

Записи, краткие содержания, переводы и группы адресуются UUID. Записи словаря — целыми числами.

Форматы данных

Загрузка файлов — multipart/form-data, остальные запросы с телом — JSON в UTF-8. Даты и время — ISO 8601 с явным часовым поясом: сервер отдаёт UTC, то есть смещение +00:00. Длительности — в секундах.

Ошибки

У любой ошибки есть поле message на русском; там, где случай различим машинно, добавляется поле code. У статуса 422 приходит ещё и errors с разбором по полям. Ошибки всегда возвращаются JSON-ом — заголовок Accept можно не присылать, HTML-страниц и редиректов в ответах API не бывает.

Усечение вместо отказа

Если запись длиннее остатка минут, она не отклоняется: расшифровывается доступная часть и в ответе приходит is_partial = true. Остаток дочитывается методом resume после пополнения минут — файл заново загружать не нужно.

Совместимость

Версия зафиксирована в пути: /api/v1. Внутри версии мы только добавляем поля и методы, поэтому разбирайте ответы устойчиво к появлению новых полей и не полагайтесь на их порядок.

Справочник

Методы

Полный список методов версии v1 с параметрами и кодами ответов. Все запросы требуют ключ.

Транскрибация

Создание записей, статус, результат и экспорт. Идентификаторы записей — UUID.

POST /api/v1/transcriptions

Загрузить файл

Принимает аудио или видео и ставит расшифровку в очередь.

Тело — multipart/form-data. Ответ приходит сразу, до окончания обработки: запись создаётся в статусе queued. Из видео на сервере остаётся только аудиодорожка. Лимит размера файла зависит от тарифа, для видео он выше — фактические значения возвращает GET /account.

Параметры
Параметр Тип Обяз. Описание
file
в форме
file да Аудио- или видеофайл: MP3, WAV, M4A, AAC, OGG, OPUS, FLAC, MP4, MOV, MKV, AVI, WEBM и другие.
language
в форме
string нет Язык записи. auto — определить автоматически по началу записи; для записей с длинной тишиной в начале надёжнее указать язык явно.
значения: auto, ru, en
по умолчанию: ru
group_id
в форме
uuid нет Группа, в которую попадёт запись. Должна принадлежать вашему аккаунту.
denoise_enabled
в форме
boolean нет Шумоподавление перед распознаванием. Игнорируется, если тариф его не включает.
по умолчанию: false
webhook_url
в форме
string нет Адрес для уведомления именно об этой записи. Перебивает адрес по умолчанию с ключа.
Заголовки
  • Idempotency-Key Защита от дублей при повторе запроса. Подробнее — в разделе об идемпотентности.
Ответы
  • 202 Запись создана и поставлена в очередь.
  • 402 Лимит записей или минут тарифа исчерпан. limit_transcriptions
  • 409 Запрос с этим Idempotency-Key ещё выполняется. idempotency_in_flight
  • 422 Файл не прошёл валидацию: формат, размер или неверный webhook_url.
Пример запроса
curl -X POST https://cosmoscribe.ru/api/v1/transcriptions \
  -H "X-API-Key: $COSMIC_API_KEY" \
  -H "Idempotency-Key: order-1042" \
  -F "file=@meeting.mp3" \
  -F "language=ru" \
  -F "webhook_url=https://example.ru/hooks/cosmic"
Пример ответа
{
  "message": "Транскрибация поставлена в очередь",
  "log_id": "9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70",
  "status": "queued"
}
POST /api/v1/transcriptions/url

Импортировать по ссылке

Скачивает запись по ссылке и расшифровывает её.

Российские источники (VK Видео, RuTube, Одноклассники, Дзен, Mail.ru, Telegram, Яндекс.Диск) доступны на всех тарифах; зарубежные (YouTube, Vimeo, Twitch, SoundCloud, Dailymotion, Apple Podcasts и другие) — с тарифа «Профессионал». Прямые ссылки на файл проходят проверку хоста от подмены на внутренний адрес. Скачивание асинхронное: ответ приходит до его окончания.

Параметры
Параметр Тип Обяз. Описание
url
в теле
string да Ссылка на запись или прямая ссылка на файл, до 2048 символов.
language
в теле
string нет Язык записи.
значения: auto, ru, en
по умолчанию: ru
group_id
в теле
uuid нет Группа для записи.
webhook_url
в теле
string нет Адрес уведомления об этой записи.
Заголовки
  • Idempotency-Key Защита от повторного импорта одной ссылки.
Ответы
  • 202 Скачивание поставлено в очередь.
  • 402 Лимит тарифа исчерпан либо платформа требует тариф выше. forbidden_platform_tier
  • 403 Хост заблокирован или запись закрыта. private_content
  • 413 Запись длиннее или больше лимита тарифа. size_exceeded
  • 415 Платформа не поддерживается. unsupported_platform
  • 422 Ссылка не разобрана, ведёт на прямую трансляцию или не содержит звука. invalid_url
  • 504 Источник не ответил вовремя. timeout
Пример запроса
curl -X POST https://cosmoscribe.ru/api/v1/transcriptions/url \
  -H "X-API-Key: $COSMIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://vk.com/video-1_1","language":"ru"}'
POST /api/v1/transcriptions/url/preview

Проверить ссылку

Возвращает платформу, название и длительность без создания записи.

Полезно, чтобы показать пользователю, что именно будет расшифровано, и заранее убедиться, что ссылка поддерживается. Минуты не списываются.

Параметры
Параметр Тип Обяз. Описание
url
в теле
string да Проверяемая ссылка.
Ответы
  • 200 Поля ok, platform, host, url и meta с заголовком, длительностью и размером записи.
  • 415 Платформа не поддерживается. unsupported_platform
  • 422 Ссылка не разобрана. invalid_url
POST /api/v1/transcriptions/batch

Пакетная загрузка

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

Количество файлов за раз и суммарный размер ограничены настройками сервиса. Уведомление придёт по каждой записи отдельно. Заголовок Idempotency-Key этот метод не поддерживает: за один вызов создаётся несколько записей, повторять его вслепую нельзя — при обрыве сверьтесь со списком записей.

Параметры
Параметр Тип Обяз. Описание
files[]
в форме
file[] да Массив файлов, минимум один.
language
в форме
string нет Язык для всех файлов пакета.
значения: auto, ru, en
по умолчанию: ru
group_id
в форме
uuid нет Группа для всех записей пакета.
denoise_enabled
в форме
boolean нет Шумоподавление для всех файлов пакета.
по умолчанию: false
webhook_url
в форме
string нет Адрес для уведомлений по всем записям пакета. Перебивает адрес по умолчанию с ключа.
Ответы
  • 202 Массив items: имя файла, log_id и статус по каждой записи.
  • 402 Не хватает лимита на весь пакет. limit_transcriptions
  • 422 Превышено число файлов, размер одного файла или суммарный размер, либо неверный webhook_url.
GET /api/v1/transcriptions/{id}

Статус и результат

Отдаёт статус, текст, сегменты и спикеров.

Один метод на весь жизненный цикл: пока запись не готова, поля с текстом пустые, а status равен queued или processing. К тексту уже применён словарь терминов. Опрашивать метод в цикле не нужно, если настроен вебхук.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи из ответа на создание.
poll
в строке запроса
boolean нет Лёгкий ответ для опроса статуса: без текста, сегментов и ссылки на аудио, зато с прогрессом по кускам. Если всё же опрашиваете длинную запись — делайте это с poll=1, иначе каждый запрос тянет растущий транскрипт целиком. На готовой записи флаг игнорируется, поэтому тем же запросом, которым вы увидели completed, вы получите и результат.
по умолчанию: false
Ответы
  • 200 Объект записи в поле data.
  • 403 Запись принадлежит другому аккаунту.
  • 404 Записи с таким идентификатором нет.
Пример запроса
curl https://cosmoscribe.ru/api/v1/transcriptions/9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70 \
  -H "X-API-Key: $COSMIC_API_KEY"
Пример ответа
{
  "data": {
    "id": "9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70",
    "status": "completed",
    "original_filename": "meeting.mp3",
    "language": "ru",
    "clean_text": "Добрый день. Начнём с плана на квартал…",
    "formatted_text": "[00:00] Спикер 1: Добрый день…",
    "segments": [
      {
        "start": 0.48,
        "end": 4.12,
        "text": "Добрый день. Начнём с плана на квартал.",
        "speaker": "SPEAKER_00",
        "words": [
          { "word": "Добрый", "start": 0.48, "end": 0.91 },
          { "word": "день.", "start": 0.94, "end": 1.32 }
        ]
      }
    ],
    "is_partial": false,
    "audio_duration_seconds": 1847,
    "full_duration_seconds": 1847,
    "group_id": null,
    "source_type": "upload"
  }
}
GET /api/v1/transcriptions/history

Список записей

Постраничный список записей аккаунта с фильтрами.

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

Параметры
Параметр Тип Обяз. Описание
limit
в строке запроса
integer нет Размер страницы, от 1 до 100.
по умолчанию: 50
include_text
в строке запроса
boolean нет Включать ли clean_text, formatted_text и segments в каждый элемент. Значение 0 отдаёт только метаданные — ответ становится меньше в десятки раз.
по умолчанию: true
page
в строке запроса
integer нет Номер страницы.
по умолчанию: 1
search
в строке запроса
string нет Поиск по названию и тексту, до 200 символов.
group_id
в строке запроса
uuid нет Фильтр по группе. Пустая строка — записи без группы.
date_from
в строке запроса
date нет Начало периода.
date_to
в строке запроса
date нет Конец периода.
date_preset
в строке запроса
string нет Готовый период вместо пары дат.
значения: today, week, month
has_summary
в строке запроса
boolean нет Только записи с готовым кратким содержанием.
Ответы
  • 200 Поля data и meta с current_page, last_page, per_page и total.
GET /api/v1/transcriptions/{id}/export

Экспорт

Отдаёт готовую расшифровку в одном из пяти форматов.

Формат json возвращает JSON с текстом и сегментами, остальные — файл на скачивание. Текстовые форматы отдаются в UTF-8 с BOM, чтобы Windows-редакторы не ломали кириллицу. Если у записи есть пословные тайм-коды, srt и vtt режутся по границам слов: карточка не длиннее 7 секунд и не шире двух строк по 42 символа, разрыв предпочитается на конце предложения. Без пословных данных реплика отдаётся одной карточкой, как раньше. Если у записи распознаны спикеры, srt получает имя в начале карточки при смене говорящего, а vtt — тег <v Имя> в каждой карточке; на записях без спикеров вывод прежний.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
format
в строке запроса
string да Формат выгрузки.
значения: txt, srt, vtt, json, doc
Ответы
  • 200 Файл или JSON в зависимости от формата.
  • 409 Запись ещё не готова. not_completed
Пример запроса
curl -L "https://cosmoscribe.ru/api/v1/transcriptions/9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70/export?format=srt" \
  -H "X-API-Key: $COSMIC_API_KEY" -o meeting.srt
PUT /api/v1/transcriptions/{id}

Правка записи

Меняет название, текст, сегменты или группу.

Правка текста через API — то же действие, что редактирование в интерфейсе: сохранённый текст становится источником для экспорта и поиска.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
title
в теле
string нет Название записи, до 200 символов.
clean_text
в теле
string нет Полный текст расшифровки.
segments
в теле
array нет Массив сегментов. Меняйте вместе с текстом, иначе таймкоды разойдутся.
group_id
в теле
uuid нет Новая группа записи; null — вынести из группы.
Ответы
  • 200 Поля message, clean_text, segments, group_id, group и source_metadata. Полную запись отдаёт GET того же адреса.
  • 422 Ошибка валидации.
DELETE /api/v1/transcriptions/{id}

Удалить запись

Удаляет запись вместе с аудиофайлом.

Действие необратимо: удаляются и текст, и файл в хранилище.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
Ответы
  • 200 Запись удалена.
POST /api/v1/transcriptions/{id}/resume

Докрутить остаток

Расшифровывает часть записи, отрезанную по лимиту минут.

Нужен, когда в ответе пришло is_partial = true. Метод дочитывает запись с того места, где остановился прошлый прогон, и склеивает сегменты. Доступен, пока исходный файл не удалён по сроку хранения тарифа. По окончании придёт ещё одно уведомление transcription.completed — уже с is_partial = false.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор усечённой записи.
Ответы
  • 202 Докрутка поставлена в очередь; в ответе planned_to_seconds и new_seconds.
  • 402 Минут на продолжение не хватает. audio_budget_exceeded
  • 410 Исходный файл уже удалён по сроку хранения. audio_unavailable
  • 422 Запись расшифрована полностью.
POST /api/v1/transcriptions/{id}/retry

Повторить обработку

Перезапускает расшифровку записи со статусом failed.

Запись возвращается в очередь, и по её новому исходу придёт ещё одно уведомление — transcription.completed или transcription.failed.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
Ответы
  • 200 Запись поставлена в очередь повторно.
  • 404 Аудиофайл не найден в хранилище.
  • 422 Повтор возможен только для статуса failed.
GET /api/v1/transcriptions/{id}/audio

Аудио записи

Отдаёт исходное аудио потоком.

Файл расшифровывается на лету, поддерживаются частичные запросы по Range для перемотки в плеере.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
Ответы
  • 200 Поток аудио.
  • 404 Файл уже удалён по сроку хранения.
GET /api/v1/transcriptions/{id}/waveform

Пики волны

Готовые пики для отрисовки дорожки без декодирования файла.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
Ответы
  • 200 Массив пиков и длительность.
POST /api/v1/transcriptions/assign

Перенести в группу

Меняет группу у нескольких записей сразу.

Параметры
Параметр Тип Обяз. Описание
ids
в теле
uuid[] да Идентификаторы записей, минимум один.
group_id
в теле
uuid нет Целевая группа; null — вынести из групп.
Ответы
  • 200 Поля status и updated с числом перенесённых записей. Чужие идентификаторы молча пропускаются, поэтому сверяйте updated с длиной своего списка.
POST /api/v1/transcriptions/bulk-delete

Массовое удаление

Удаляет до 100 записей за запрос.

Параметры
Параметр Тип Обяз. Описание
ids
в теле
uuid[] да Идентификаторы записей, от 1 до 100.
Ответы
  • 200 Поля message и deleted с числом удалённых записей. Чужие идентификаторы молча пропускаются.
POST /api/v1/transcriptions/bulk-download

Массовая выгрузка

Собирает ZIP-архив с расшифровками выбранных записей.

Параметры
Параметр Тип Обяз. Описание
ids
в теле
uuid[] да Идентификаторы записей, от 1 до 100.
format
в теле
string да Формат файлов внутри архива.
значения: txt, srt, vtt
Ответы
  • 200 Поток ZIP-архива.
POST /api/v1/transcriptions/{id}/share

Публичная ссылка

Создаёт ссылку на расшифровку со сроком жизни и паролем.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
expires_in
в теле
string да Срок жизни ссылки.
значения: 1h, 1d, 1w
password
в теле
string нет Пароль на ссылку, от 4 символов. Доступен на платных тарифах.
Ответы
  • 200 Токен, готовый share_url и дата истечения.
  • 402 Лимит публичных ссылок тарифа исчерпан. limit_share_links
  • 402 Пароль на ссылку не входит в тариф. feature_share_password_disabled

AI поверх записи

Краткие содержания и перевод. Оба метода асинхронные: создают объект в статусе queued и наполняют его позже.

POST /api/v1/transcriptions/{id}/summaries

Создать краткое содержание

Ставит в очередь пересказ записи по готовому шаблону или по своему промпту.

Запись должна быть готова и содержать не меньше 50 символов текста. По одной записи можно держать несколько шаблонов одновременно. Метод асинхронный: если у записи или у ключа настроен вебхук, о готовности придёт событие summary.completed, опрашивать GET /summaries/{id} не нужно. Шаблон custom требует поля custom_instruction — текстового описания нужного разбора; формат ответа при этом остаётся тем же, а поле metadata у такого пересказа всегда пустое.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
template
в теле
string да Шаблон под формат записи. Расшифровка шаблонов — в разделе о кратких содержаниях.
значения: general, meeting, interview, lecture, podcast, sales_call, support_call, voice_note, brainstorm, highlights, custom
custom_instruction
в теле
string нет Описание нужного разбора для template=custom: от 10 до 2000 символов. Задаёт, что искать в записи и на чём сделать акцент; схему ответа и запрет на выдумывание фактов не отменяет.
Ответы
  • 202 Объект краткого содержания в статусе queued.
  • 422 Запись не готова, текста мало или шаблон неизвестен.
  • 429 Месячный лимит кратких содержаний тарифа исчерпан. limit_summaries
  • 429 Краткие содержания не входят в тариф. feature_summaries_disabled
Пример запроса
curl -X POST https://cosmoscribe.ru/api/v1/transcriptions/9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70/summaries \
  -H "X-API-Key: $COSMIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"template":"meeting"}'

curl -X POST https://cosmoscribe.ru/api/v1/transcriptions/9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70/summaries \
  -H "X-API-Key: $COSMIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"template":"custom","custom_instruction":"Выпиши все возражения клиента и как на них ответили."}'
GET /api/v1/transcriptions/{id}/summaries

Краткие содержания записи

Все пересказы одной записи со статусами.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
Ответы
  • 200 Массив кратких содержаний.
GET /api/v1/summaries/{id}

Готовое краткое содержание

Текст пересказа, тезисы, задачи и темы.

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

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор краткого содержания.
Ответы
  • 200 Объект краткого содержания.
Пример ответа
{
  "id": "b4c9a1d2-77e3-4f10-8c55-1a2b3c4d5e6f",
  "transcription_log_id": "9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70",
  "template": "meeting",
  "status": "completed",
  "summary_text": "Обсудили план на квартал…",
  "key_points": ["Запуск переносится на март"],
  "action_items": [
    { "task": "Прислать смету", "assignee": "Иван", "due_date": "2026-09-01", "completed": false }
  ],
  "topics": ["Планирование"],
  "language": "ru",
  "generated_at": "2026-08-25T12:44:19+00:00"
}
PUT /api/v1/summaries/{id}

Отметить задачи

Обновляет список задач в готовом кратком содержании.

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

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор краткого содержания.
action_items
в теле
array да Массив объектов с полями task, assignee, due_date и completed.
Ответы
  • 200 Обновлённое краткое содержание.
  • 422 Пересказ не готов или шаблон не поддерживает задачи.
DELETE /api/v1/summaries/{id}

Удалить краткое содержание

Удаляет пересказ, сама запись остаётся.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор краткого содержания.
Ответы
  • 200 Удалено.
POST /api/v1/transcriptions/{id}/translations

Перевести расшифровку

Ставит в очередь перевод текста и сегментов.

Перевод сохраняет разбиение на сегменты, поэтому из него получаются субтитры. Повторный запрос того же языка вернёт существующий перевод, а не создаст второй. Метод асинхронный: о готовности придёт событие translation.completed, если у записи или у ключа настроен вебхук.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
target_language
в теле
string нет Язык перевода.
значения: ru, en, de, fr, es, it, pt, zh, tr, ar, kk, uk
по умолчанию: ru
Ответы
  • 202 Объект перевода в статусе queued. Тот же код вернётся, если перевод на этот язык уже готовится.
  • 422 Запись не готова, текста мало, он длиннее лимита модели или язык записи совпадает с языком перевода.
  • 429 Месячный лимит переводов тарифа исчерпан. limit_translations
  • 429 AI-перевод не входит в тариф. feature_translation_disabled
GET /api/v1/transcriptions/{id}/translations

Переводы записи

Все переводы одной записи со статусами.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор записи.
Ответы
  • 200 Массив переводов.
GET /api/v1/translations/{id}

Готовый перевод

Переведённый текст и сегменты.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор перевода.
Ответы
  • 200 Объект перевода.
DELETE /api/v1/translations/{id}

Удалить перевод

Удаляет перевод, сама запись остаётся.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор перевода.
Ответы
  • 200 Удалено.

Словарь терминов

Замены применяются к тексту при выдаче: имена, бренды, аббревиатуры. Требуется тариф со словарём.

GET /api/v1/dictionary

Список замен

Все пары «как распознано» и «как должно быть».

Чтение словаря тарифом не ограничено: если функция уже отключилась при понижении тарифа, накопленные пары всё равно видно и можно выгрузить.

Ответы
  • 200 Массив объектов с полями id, from, to и created_at.
POST /api/v1/dictionary

Добавить замену

Создаёт или обновляет пару замены.

Если пара с таким from уже есть, обновится только to — повторный вызов безопасен. Запись требует тарифа со словарём, чтение — нет.

Параметры
Параметр Тип Обяз. Описание
from
в теле
string да Как слово распознаётся сейчас, до 500 символов.
to
в теле
string да Как его нужно писать, до 500 символов.
Ответы
  • 201 Созданная или обновлённая запись.
  • 402 Лимит записей словаря исчерпан. limit_dictionary_entries
  • 402 Словарь не входит в тариф. feature_dictionary_disabled
GET /api/v1/dictionary/export

Выгрузить словарь

Пары from и to в порядке алфавита — готовый бэкап.

Ответы
  • 200 Массив пар.
POST /api/v1/dictionary/import

Загрузить словарь

Массовое добавление до 1000 пар за запрос.

Параметры
Параметр Тип Обяз. Описание
data
в теле
array да Массив объектов с полями from и to, до 1000 элементов.
Ответы
  • 200 Поля imported и updated: сколько пар добавлено и сколько перезаписано. Пары сверх лимита тарифа молча пропускаются — сверяйтесь с этими числами.
  • 402 Словарь не входит в тариф. feature_dictionary_disabled
DELETE /api/v1/dictionary/{id}

Удалить замену

Убирает одну пару из словаря.

Параметры
Параметр Тип Обяз. Описание
id
в пути
integer да Идентификатор записи словаря.
Ответы
  • 204 Удалено, тело ответа пустое.

Группы записей

Папки для записей: передавайте group_id при создании или переносите записи методом assign.

GET /api/v1/groups

Список групп

Группы аккаунта с числом записей.

Ответы
  • 200 Поле data: массив групп с полями id, name, description, color и logs_count.
POST /api/v1/groups

Создать группу

Новая папка для записей.

Параметры
Параметр Тип Обяз. Описание
name
в теле
string да Название, до 255 символов.
description
в теле
string нет Описание группы.
color
в теле
string нет Цвет метки в формате #RRGGBB.
по умолчанию: #000000
Ответы
  • 200 Поля message и group с созданной группой.
  • 402 Лимит групп тарифа исчерпан. limit_groups
GET /api/v1/groups/{id}

Группа

Одна группа и число записей в ней.

Сами записи метод не возвращает — их отдаёт GET /transcriptions/history с параметром group_id, постранично и с фильтрами.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор группы.
Ответы
  • 200 Поле data с объектом группы и logs_count.
  • 403 Группа принадлежит другому аккаунту.
PUT /api/v1/groups/{id}

Изменить группу

Меняет название, описание или цвет.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор группы.
name
в теле
string нет Новое название.
description
в теле
string нет Новое описание.
color
в теле
string нет Новый цвет в формате #RRGGBB.
Ответы
  • 200 Поля message и group с обновлённой группой.
  • 403 Группа принадлежит другому аккаунту.
DELETE /api/v1/groups/{id}

Удалить группу

Удаляет папку; записи остаются без группы.

Параметры
Параметр Тип Обяз. Описание
id
в пути
uuid да Идентификатор группы.
Ответы
  • 200 Группа удалена; записи остались, но без группы.
  • 403 Группа принадлежит другому аккаунту.

Ключ и вебхук

Состояние ключа, лимиты тарифа и адрес доставки уведомлений.

GET /api/v1/account

Состояние ключа

Лимиты ключа, расход, остаток минут тарифа и секрет вебхука.

Первый запрос, которым стоит проверить интеграцию: если он вернул 200, ключ рабочий. Дальше это метод «влезет ли следующий файл»: plan отдаёт лимиты тарифа, usage — израсходованное и остатки по каждому из них, period — границы текущего расчётного периода (он считается от даты оплаты, а не с первого числа). Расход самого ключа — в полях requests_today и requests_this_month.

Ответы
  • 200 Объекты client, webhook, plan, usage и period.
Пример запроса
curl https://cosmoscribe.ru/api/v1/account -H "X-API-Key: $COSMIC_API_KEY"
Пример ответа
{
  "client": {
    "id": "3f2a1b0c-1111-2222-3333-444455556666",
    "name": "Продакшен",
    "status": "active",
    "rpm_limit": 60,
    "daily_limit": 5000,
    "monthly_limit": 100000,
    "requests_today": 412,
    "requests_this_month": 9310
  },
  "webhook": {
    "url": "https://example.ru/hooks/cosmic",
    "secret": "8f14e45fceea167a5a36dedd4bea2543",
    "signature_header": "X-Cosmic-Signature",
    "signature_algo": "hmac-sha256(raw_body, secret), hex"
  },
  "plan": {
    "plan": "Бизнес",
    "max_file_mb": 500,
    "max_video_file_mb": 2000,
    "max_audio_duration_min": 300,
    "monthly_audio_minutes": 1200,
    "features": { "has_summaries": true, "has_translation": true }
  },
  "usage": {
    "audio_minutes_this_month": 730,
    "audio_minutes_limit": 1200,
    "audio_minutes_remaining": 470,
    "transcriptions_this_month": 96,
    "transcriptions_remaining": 104,
    "summaries_this_month": 41,
    "summaries_remaining": 159
  },
  "period": {
    "start": "2026-08-14T00:00:00+00:00",
    "end": "2026-09-13T00:00:00+00:00"
  }
}
PUT /api/v1/account/webhook

Адрес и секрет вебхука

Задаёт адрес доставки по умолчанию и ротирует секрет.

Адрес по умолчанию работает для всех записей ключа, включая пакетную загрузку. Ротация секрета мгновенная: подписи со старым секретом перестанут совпадать, поэтому меняйте секрет и настройки приёмника вместе. То же самое можно сделать в профиле, без обращения к API.

Параметры
Параметр Тип Обяз. Описание
webhook_url
в теле
string нет Публичный http/https-адрес; пустая строка убирает адрес.
rotate_secret
в теле
boolean нет Сгенерировать новый секрет подписи.
по умолчанию: false
Ответы
  • 200 Актуальные адрес и секрет.
  • 422 Адрес недоступен или указывает на приватный хост. webhook_invalid
Без поллинга

Вебхуки

Укажите адрес при создании записи или задайте общий адрес на ключе — и сервис сам сообщит о готовности. Тело уведомления компактное: сам текст забирается отдельным запросом, чтобы уведомление доставлялось быстро и надёжно.

События
  • transcription.completed

    Запись расшифрована. Текст забирается отдельным GET по ссылке из links.result.

  • transcription.failed

    Обработка завершилась ошибкой; причина — в data.error.

  • summary.completed

    Краткое содержание готово. Приходит, только если разбор был запрошен через API.

  • summary.failed

    Краткое содержание не сделано; причина — в data.error.

  • translation.completed

    Перевод готов. Приходит, только если перевод был запрошен через API.

  • translation.failed

    Перевод не сделан; причина — в data.error.

  • webhook.test

    Проверочное уведомление, отправленное кнопкой в профиле. Записи за ним нет — отвечайте 2xx и игнорируйте.

Заголовки уведомления
  • X-Cosmic-Event

    Имя события — то же, что в поле event тела.

  • X-Cosmic-Delivery

    UUID события. Одинаковый у всех попыток доставки одного события — по нему и дедуплицируйте. Повторный запуск обработки даёт новое событие с новым идентификатором.

  • X-Cosmic-Signature

    hex-строка hmac_sha256(сырое тело, секрет ключа).

Правила доставки
  • Секрет вебхука виден в профиле рядом с ключом и в GET /account; там же он ротируется.
  • Считайте подпись от сырого тела запроса до любого парсинга JSON — пересборка тела даёт другую подпись.
  • Сравнивайте подписи функцией постоянного времени (hash_equals, hmac.compare_digest, crypto.timingSafeEqual).
  • Отбрасывайте запросы со старым occurred_at (например, старше часа): подпись подтверждает, что тело наше, но не защищает от переигрывания перехваченного запроса.
  • Отвечайте кодом 2xx как можно быстрее. Таймаут ответа — 10 секунд, установка соединения — 5.
  • При не-2xx доставка повторяется до 5 раз с интервалами 1, 5, 15 и 60 минут.
  • Редиректы не выполняются: ответ 3xx считается ошибкой доставки — указывайте конечный URL.
  • На один исход обработки приходит одно уведомление: после успешного ответа повторов по нему не будет.
  • Доставка гарантируется «хотя бы один раз»: если наш POST дошёл, а ваш ответ потерялся, событие придёт снова с тем же X-Cosmic-Delivery. Запоминайте обработанные идентификаторы — это дешевле, чем сверять содержимое.
  • Поле occurred_at — время самого события, а не время отправки, и у повторов оно не меняется.
  • Повторный запуск обработки начинает новый цикл: после POST /retry придёт ещё одно уведомление об исходе, после POST /resume — ещё одно transcription.completed, уже с is_partial = false.
  • События summary.* и translation.* приходят только по тем разборам и переводам, которые запрошены через API. То, что владелец аккаунта сделал на сайте, ваш эндпоинт не трогает.
  • Готовьтесь к незнакомым именам событий: отвечайте 2xx и пропускайте всё, чего не ждёте, — иначе новое событие уйдёт в повторы.
  • Адрес доставки для записи — её webhook_url, иначе адрес по умолчанию у ключа, которым запись создана. События summary.* и translation.* уходят на адрес того ключа, которым запрошена сама операция: если ключ один, это один и тот же адрес.
Тело уведомления
{
  "event": "transcription.completed",
  "occurred_at": "2026-08-25T12:41:07+00:00",
  "data": {
    "id": "9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70",
    "status": "completed",
    "language": "ru",
    "original_filename": "meeting.mp3",
    "source_type": "upload",
    "is_partial": false,
    "audio_duration_seconds": 1847,
    "full_duration_seconds": 1847
  },
  "links": {
    "result": "https://cosmoscribe.ru/api/v1/transcriptions/9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70",
    "export": "https://cosmoscribe.ru/api/v1/transcriptions/9f1c2f7e-5a44-4c0e-9b1e-2d3c4b5a6f70/export?format=json"
  }
}

Проверка подписи

Подпись гарантирует, что уведомление отправили мы. Считайте HMAC-SHA256 от сырого тела запроса и сравнивайте с заголовком X-Cosmic-Signature функцией постоянного времени.

PHP
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_COSMIC_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $payload, $secret);

if (!hash_equals($expected, $signature)) {
    http_response_code(403);
    exit;
}

$event = json_decode($payload, true);
// $event['data']['id'] — идентификатор записи
Python
import hashlib
import hmac

from flask import abort, request

@app.post("/hooks/cosmic")
def cosmic_hook():
    payload = request.get_data()
    signature = request.headers.get("X-Cosmic-Signature", "")
    expected = hmac.new(SECRET.encode(), payload, hashlib.sha256).hexdigest()

    if not hmac.compare_digest(expected, signature):
        abort(403)

    event = request.get_json()
    return "", 200
Node.js
import crypto from "node:crypto";

app.post(
  "/hooks/cosmic",
  express.raw({ type: "application/json" }),
  (req, res) => {
    const signature = req.get("X-Cosmic-Signature") ?? "";
    const expected = crypto
      .createHmac("sha256", SECRET)
      .update(req.body)
      .digest("hex");

    if (
      expected.length !== signature.length ||
      !crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))
    ) {
      return res.sendStatus(403);
    }

    const event = JSON.parse(req.body.toString("utf8"));
    res.sendStatus(200);
  }
);

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

Для AI-ассистентов

MCP-сервер

Если вы работаете в Claude, ChatGPT, Cursor или другом ассистенте с поддержкой Model Context Protocol, подключите к нему свой аккаунт — и спрашивайте про встречи и звонки прямо в диалоге, без копирования расшифровок. Отдельная интеграция для этого не нужна: подойдёт тот же API-ключ.

Адрес сервера
https://cosmoscribe.ru/api/mcp
Что получает ассистент
  • search_transcripts
    Поиск по расшифровкам

    Ищет релевантные фрагменты по всем расшифровкам аккаунта Cosmo Scribe (или в пределах одной группы либо одной записи). Возвращает куски текста с тайм-кодами, спикером и ссылкой на запись — по ним можно отвечать на вопросы о том, что обсуждалось на встречах и звонках. Отвечать следует только по возвращённым фрагментам.

  • list_transcriptions
    Список записей

    Возвращает записи аккаунта Cosmo Scribe от новых к старым: название, дату, длительность, статус обработки и наличие саммари. Полезно, чтобы найти идентификатор нужной записи перед вызовом get_transcript.

  • get_transcript
    Расшифровка записи

    Возвращает полный текст одной записи Cosmo Scribe, а при наличии — её AI-саммари с ключевыми пунктами и договорённостями. Очень длинный текст усекается; для точечного поиска по большому архиву используйте search_transcripts.

  • list_commitments
    Договорённости со встреч

    Возвращает леджер обещаний, извлечённых из встреч и звонков: что было обещано, кем по метке спикера, к какому сроку и в каком статусе. Это перечень договорённостей по ходу встреч — он не является оценкой людей и не должен использоваться для выводов о качествах участников.

Как подключить
  • Cursor, Claude Code, VS Code и другие клиенты с файлом конфигурации

    Добавьте сервер в конфигурацию клиента как удалённый MCP по HTTP и передайте ключ заголовком — пример ниже.

  • claude.ai и другие веб-клиенты

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

Пример конфигурации клиента
{
  "mcpServers": {
    "cosmo-scribe": {
      "url": "https://cosmoscribe.ru/api/mcp",
      "headers": {
        "X-API-Key": "csk_…"
      }
    }
  }
}
Что нужно учесть
  • Авторизация та же, что у остального API: ключ в заголовке X-API-Key или Authorization: Bearer. Отдельный ключ для MCP не нужен, расход учитывается в общих лимитах ключа.
  • Все инструменты только читают данные: ничего создать, изменить или удалить через MCP нельзя.
  • Ассистент видит ровно те записи, которые видит владелец ключа. Поиск по всем записям входит в тариф «Профессионал» и выше; остальные инструменты доступны на любом тарифе.
  • Веб-клиенты обращаются к серверу со своей инфраструктуры, а не с компьютера пользователя. Если у ключа заполнен белый список IP, такой коннектор получит отказ — оставьте список пустым либо добавьте в него адреса клиента.
  • Расшифровки уходят в тот AI-сервис, который вы подключили. Сервис хранит данные в России, а передача их ассистенту — ваше решение как владельца ключа.
  • Транспорт — только POST на один адрес; GET и DELETE отвечают 405. Поддерживаются и текущая ревизия протокола, и клиенты постарше, работающие через initialize.
Повторы без дублей

Идемпотентность

Сеть рвётся в самый неудачный момент — между отправкой файла и получением ответа. Заголовок Idempotency-Key делает повтор запроса безопасным.

  • Передайте свой уникальный ключ (до 255 символов) в заголовке Idempotency-Key при создании записи или импорте по ссылке. Обычно это идентификатор объекта в вашей системе.
  • Первый запрос обрабатывается как обычно. Повтор с тем же ключом не создаёт вторую запись, а возвращает 202 с log_id первой и полем idempotent_replayed = true.
  • Если первый запрос ещё выполняется, повтор получит 409 с кодом idempotency_in_flight — повторите через несколько секунд.
  • Если первый запрос оборвался и записи так и не создал, ключ освобождается сам: следующий повтор через несколько минут обрабатывается как новый запрос, а не упирается в 409 до конца суток.
  • Ключи уникальны в пределах одного API-ключа и живут не менее 48 часов, затем очищаются по расписанию — не рассчитывайте на точный момент истечения.
  • Без этого заголовка повторный запрос создаст вторую запись и спишет минуты второй раз.
bash
curl -X POST https://cosmoscribe.ru/api/v1/transcriptions \
  -H "X-API-Key: $COSMIC_API_KEY" \
  -H "Idempotency-Key: crm-deal-8842" \
  -F "file=@call.mp3"
Что ограничено

Лимиты

Два независимых контура: технические лимиты запросов защищают сервис от всплесков, тарифные лимиты минут списывают оплаченный объём.

Лимиты ключа

Значения по умолчанию для нового ключа. Фактические лимиты вашего ключа возвращает GET /account, а расход виден в профиле рядом с ключом.

Лимит По умолчанию Как считается
Запросов в минуту 60 Скользящее окно 60 секунд на ключ. Текущее значение — в GET /account.
Запросов в сутки 5000 Календарные сутки по UTC: счётчик обнуляется в 00:00 UTC, то есть в 03:00 по Москве.
Запросов в месяц 100000 Календарный месяц по UTC.

Лимиты отдельных методов

Дополняют лимиты ключа: срабатывает тот, который наступит раньше.

Метод Ограничение
Все методы v1 60 запросов в минуту
GET /transcriptions/history 60 запросов в минуту
GET /transcriptions/{id}/audio 60 запросов в минуту
POST /transcriptions/url 10 запросов в минуту и 60 запросов в час
POST /transcriptions/url/preview 30 запросов в минуту
POST /transcriptions/bulk-delete, /bulk-download 10 запросов в минуту
POST /transcriptions/{id}/summaries 5 запросов в минуту
POST /transcriptions/{id}/translations 3 запросов в минуту

Минуты и тариф

  • Технические лимиты запросов и тарифные лимиты минут — разные вещи: первые защищают сервис от всплесков, вторые списывают оплаченный объём.
  • Минуты аудио списываются из лимитов тарифа так же, как при загрузке через сайт: один и тот же счётчик на аккаунт.
  • Запись длиннее остатка минут не отклоняется, а усекается: в ответе придёт is_partial = true, остаток дочитывается методом POST /transcriptions/{id}/resume.
  • Каждый ответ на запрос с действующим ключом несёт заголовки минутного окна: X-RateLimit-Limit — лимит, X-RateLimit-Remaining — остаток, X-RateLimit-Reset — unix-время конца окна. Они приходят и на 429 по лимитам ключа, вместе с Retry-After в секундах.
  • Ответы 401 и 403 приходят без X-RateLimit-*: ключ не опознан, и говорить об остатке нечего.
  • Лимиты запросов и месячные лимиты AI-операций тарифа — разные вещи, хотя оба отдают 429. Первые различаются кодами rate_limit_* и несут Retry-After, вторые — коды limit_summaries, limit_translations и подобные, и повтор по ним поможет только в новом расчётном периоде.
Диагностика

Коды ошибок

Обрабатывайте ошибки по HTTP-статусу и полю code — текст message предназначен человеку и может меняться.

Статус code Что случилось Что делать
401 api_key_missing Заголовок с ключом не передан. Добавьте X-API-Key или Authorization: Bearer.
401 api_key_invalid Ключ не найден или отозван. Проверьте ключ; отозванный не восстанавливается — выпустите новый.
402 limit_transcriptions Месячный лимит записей или минут тарифа исчерпан. Купите пакет минут или поднимите тариф; тело ответа содержит человекочитаемую причину.
402 audio_budget_exceeded Докрутка невозможна: остатка минут нет. Пополните минуты и повторите POST /resume.
402 forbidden_platform_tier Платформа импорта недоступна на текущем тарифе. Зарубежные платформы — с тарифа «Профессионал».
402 limit_groups Лимит групп тарифа исчерпан. Удалите ненужную группу или поднимите тариф.
402 limit_dictionary_entries Лимит записей словаря исчерпан. Удалите неактуальные пары или поднимите тариф.
402 limit_share_links Лимит публичных ссылок исчерпан. Удалите старую ссылку или поднимите тариф.
402 feature_dictionary_disabled Словарь не входит в тариф. Словарь доступен с тарифа «Лайт».
402 feature_share_password_disabled Пароль на публичную ссылку не входит в тариф. Создайте ссылку без пароля или поднимите тариф.
403 ip_not_allowed IP запроса вне белого списка ключа. Добавьте адрес или подсеть в список IP ключа в профиле.
403 account_inactive Аккаунт, которому принадлежит ключ, деактивирован. Напишите в поддержку: ключи деактивированного аккаунта не работают, пока он не восстановлен.
403 — Объект принадлежит другому аккаунту. Ключ видит только данные своего аккаунта.
403 private_content Запись по ссылке закрыта настройками приватности источника. Откройте доступ на стороне источника или загрузите файл напрямую.
403 forbidden Источник отказал в доступе к записи. Проверьте, открывается ли ссылка без авторизации.
403 host_blocked Хост ссылки в чёрном списке. Загрузите файл напрямую.
403 private_network Ссылка ведёт во внутреннюю сеть — запрос заблокирован защитой от SSRF. Используйте публично доступный адрес.
404 — Объект не найден. Проверьте идентификатор — все они UUID.
404 not_found Запись по ссылке не найдена или удалена в источнике. Проверьте ссылку.
409 not_completed Экспорт запрошен до готовности записи. Дождитесь статуса completed — надёжнее по вебхуку.
409 idempotency_in_flight Запрос с этим Idempotency-Key ещё выполняется. Повторите через несколько секунд.
410 audio_unavailable Исходное аудио удалено по сроку хранения тарифа. Загрузите файл заново.
413 size_exceeded Файл по ссылке больше лимита тарифа. Уменьшите файл или поднимите тариф.
413 duration_exceeded Запись по ссылке длиннее лимита тарифа на один файл. Разбейте запись или поднимите тариф.
415 unsupported_platform Ссылка с неподдерживаемой платформы. Список платформ — в описании метода импорта.
415 youtube_not_supported Импорт с этой площадки выключен на стороне сервиса. Скачайте файл и загрузите его как обычную запись.
422 — Ошибка валидации; поле errors содержит разбор по параметрам. Исправьте параметры запроса.
422 invalid_url Ссылка не разобрана. Передайте прямую ссылку на страницу записи или на файл.
422 not_audio По ссылке нет звуковой дорожки или это папка, а не файл. Укажите ссылку на конкретный файл.
422 live_stream Прямые трансляции не расшифровываются. Дождитесь записи эфира и передайте ссылку на неё.
422 webhook_invalid webhook_url недоступен или указывает на приватный хост. Укажите публичный http/https-адрес без редиректов.
422 webhook_not_allowed webhook_url передан в запросе без API-ключа. Параметр работает только при аутентификации ключом.
429 rate_limit_rpm Превышен лимит запросов ключа в минуту. Дождитесь окна из заголовка Retry-After.
429 rate_limit_daily Превышен дневной лимит запросов ключа. Лимит сбрасывается в 00:00 UTC (03:00 по Москве); точное время ожидания — в заголовке Retry-After.
429 rate_limit_monthly Превышен месячный лимит запросов ключа. Напишите в поддержку, если объём вырос.
429 limit_summaries Месячный лимит кратких содержаний тарифа исчерпан. Дождитесь нового расчётного периода или поднимите тариф. Retry-After здесь не приходит — повтор через секунду не поможет.
429 feature_summaries_disabled Краткие содержания не входят в тариф. Повторять запрос бессмысленно до смены тарифа.
429 limit_translations Месячный лимит переводов тарифа исчерпан. Дождитесь нового расчётного периода или поднимите тариф.
429 feature_translation_disabled AI-перевод не входит в тариф. Повторять запрос бессмысленно до смены тарифа.
429 — Сработал общий троттлинг маршрута. Соблюдайте лимиты из раздела о лимитах.
500 tooling_missing На сервере не настроен инструмент, нужный для этого источника. Сообщите в поддержку — это не чинится на вашей стороне.
502 network_error Источник ответил ошибкой или оборвал соединение. Повторите позже; при повторяемости — проверьте доступность ссылки.
502 internal Не удалось разобрать ответ источника. Повторите позже или загрузите файл напрямую.
503 disabled Функция временно отключена на стороне сервиса. Повторите позже.
504 timeout Источник не ответил вовремя. Повторите позже.

Что повторять, а что нет

  • Повторять с задержкой стоит 429, 502, 503 и 504 — это временные состояния. Начните с интервала из заголовка Retry-After, дальше увеличивайте паузу.
  • Не повторять: 401, 403, 422 — запрос не изменится сам по себе, нужно править ключ или параметры.
  • Ошибку 402 повторяют не сразу, а после пополнения минут или смены тарифа.
  • Любой повтор запроса на создание записи отправляйте с тем же Idempotency-Key, иначе получите дубль и двойное списание минут.
Значения полей

Справочники

Допустимые значения параметров, на которые ссылается справочник методов.

Статусы записи

Значение Описание
queued Принята и ждёт своей очереди.
processing Обрабатывается: подготовка звука, распознавание, разделение по спикерам.
completed Готова: доступны текст, сегменты и экспорт.
failed Обработка не удалась; причина — в поле api_raw.error, запись можно перезапустить методом retry.

Форматы экспорта

Значение Описание
txt Чистый текст, UTF-8 с BOM
srt Субтитры SubRip: нарезка по границам слов, имя спикера при смене говорящего
vtt Субтитры WebVTT: та же нарезка, спикер тегом <v Имя> в каждой карточке
json Текст плюс массив сегментов со start/end, спикерами и пословными тайм-кодами
doc Оформленный документ Word с разделением по спикерам

Шаблоны кратких содержаний

Значение Описание
general Общее краткое содержание
meeting Встреча: решения, задачи, риски
interview Интервью: цитаты, заголовок-кандидат
lecture Лекция: тезисы, термины, примеры
podcast Подкаст: шоуноуты, гости
sales_call Звонок клиенту: возражения, сигналы, договорённости
support_call Звонок в поддержку: проблема, решение, обещания
voice_note Голосовая заметка: идеи, напоминания
brainstorm Мозговой штурм: идеи с плюсами и минусами
highlights Яркие моменты: 3–5 цитат с таймкодами
custom Свой промпт: разбор по вашему описанию (нужен custom_instruction)

Языки перевода

ru en de fr es it pt zh tr ar kk uk

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

Где взять API-ключ?
В профиле: «Безопасность» → «API-ключи» → «Выпустить ключ». Раздел доступен на тарифе «Бизнес». Ключ показывается один раз при выпуске, там же настраиваются адрес вебхука и белый список IP.
Как тарифицируются запросы?
Списываются минуты аудио из лимитов тарифа — так же, как при загрузке через сайт. Сами HTTP-запросы не тарифицируются, на них действуют только технические лимиты в минуту, день и месяц.
Сколько ждать результат?
Обработка асинхронная, время зависит от длительности записи и загрузки очереди. Не опрашивайте статус в плотном цикле — настройте вебхук, а поллинг оставьте как запасной вариант: интервал от 10 секунд и обязательно с параметром poll=1, иначе каждый запрос тянет растущий транскрипт целиком.
Почему в ответе пустой текст?
Скорее всего, статус ещё queued или processing: метод отдаёт один и тот же объект на всём жизненном цикле. Текст появится при статусе completed.
Что делать с is_partial = true?
Запись усечена по остатку минут тарифа. Пополните минуты и вызовите POST /transcriptions/{id}/resume — сервис дочитает остаток из уже загруженного файла и склеит сегменты. Пока файл не удалён по сроку хранения тарифа, повторная загрузка не нужна.
Вебхук не приходит — где искать?
Проверьте три вещи: адрес отвечает 2xx на POST от внешнего сервера; на нём нет редиректа (ответ 3xx считается ошибкой доставки); адрес публичный, а не внутренний. Убедиться, какой адрес известен сервису, можно запросом GET /account.
Можно ли обращаться к API из браузера?
Нет. Ключ даёт полный доступ к записям аккаунта, а в браузере его увидит любой пользователь. Вызывайте API со своего сервера, а браузеру отдавайте уже готовый результат.
Есть ли готовые SDK?
Отдельных библиотек мы не выпускаем: спецификация OpenAPI 3.1 позволяет сгенерировать клиент под нужный язык за минуту и импортировать коллекцию в Postman или Insomnia.

Готовы к первому запросу?

Выпустите ключ в профиле — он появится сразу, без заявок и переписки. Вопросы по интеграции и лимитам под ваш объём разберём в поддержке.