Расшифровать ссылку
Отправьте URL (например, видео YouTube) через source-import — мы скачаем и расшифруем, а вы заберёте готовый transcript_id.
Собрать краткое содержание
Запросите Smart Report типа summary по готовой расшифровке и заберите готовый отчёт или его экспорт в файл.
Подписаться на событие
Создайте вебхук на transcript.completed — и получайте уведомление автоматически, без опроса.
Расшифровать ссылку или запись звонка
Вместо ручной загрузки файла можно отправить публичный URL или попросить бота записать встречу. И то и другое возвращает задание, которое нужно опросить; по готовности появляется transcript_id — читайте его как обычную расшифровку.
# Ingest a public URL (a video, a podcast, a file link).
# scope imports:write; rate-limit 30/h.
curl -X POST https://api.vibe2text.ru/api/v1/source-imports/ \
-H 'Authorization: Bearer v2t_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{ "url": "https://rutube.ru/video/...", "language": "ru" }'
# Poll the import; once it finishes it carries a transcript_id you can read
# exactly like step 6 above.
curl https://api.vibe2text.ru/api/v1/source-imports/{id} \
-H 'Authorization: Bearer v2t_YOUR_TOKEN'
Ответ
{
"id": "0d5e8f12-3a4b-4c5d-9e0f-112233445566",
"url": "https://rutube.ru/video/...",
"provider": "rutube",
"status": "queued",
"transcript_id": null,
"created_at": "2026-06-04T00:41:00Z"
}
# Send a bot to record a live meeting (scope recordings:write).
# Check GET /recording-jobs/platforms for supported platforms.
curl -X POST https://api.vibe2text.ru/api/v1/recording-jobs/ \
-H 'Authorization: Bearer v2t_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{ "platform": "yandex_telemost", "meet_url": "https://telemost.yandex.ru/j/..." }'
# Poll the job; when done it links to a transcript_id.
curl https://api.vibe2text.ru/api/v1/recording-jobs/{id} \
-H 'Authorization: Bearer v2t_YOUR_TOKEN'
Ответ
{
"id": "a1b2c3d4-5e6f-4071-8293-aabbccddeeff",
"platform": "yandex_telemost",
"meet_url": "https://telemost.yandex.ru/j/...",
"status": "scheduled",
"transcript_id": null,
"created_at": "2026-06-04T00:41:00Z"
}
Собрать отчёт
Запросите отчёт по готовой расшифровке (краткое содержание, задачи, темы), опросите его статус и при необходимости поставьте экспорт в файл.
# Ask for a report on a ready transcript (scopes reports:write + reports:read).
# "type" is required. Pass transcript_id (one) OR transcript_ids (several).
# An Idempotency-Key dedupes retries; you may have 3 LLM jobs in flight (else 429).
curl -X POST https://api.vibe2text.ru/api/v1/smart-reports/ \
-H 'Authorization: Bearer v2t_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: report-9f3e4d3a' \
-d '{ "transcript_id": "9f3e4d3a-1b2c-4d5e-8f90-aabbccddeeff", "type": "summary" }'
Ответ
{
"id": "59d0af3f-926a-435b-adc4-b1b766bb87bc",
"transcript_id": "9f3e4d3a-1b2c-4d5e-8f90-aabbccddeeff",
"transcript_ids": ["9f3e4d3a-1b2c-4d5e-8f90-aabbccddeeff"],
"type": "summary",
"status": "pending",
"render_mode": "constructor",
"intent": {
"requested_type": "summary",
"render_mode": "auto",
"style_hint": "summary",
"instructions": null,
"model": null,
"transcript_ids": ["9f3e4d3a-1b2c-4d5e-8f90-aabbccddeeff"]
},
"plan": null,
"template_id": null,
"content_md": null,
"created_at": "2026-06-04T00:41:00Z"
}
# Poll the report and read its rendered content.
curl https://api.vibe2text.ru/api/v1/smart-reports/{id} \
-H 'Authorization: Bearer v2t_YOUR_TOKEN'
Ответ
{
"id": "c7d7a0d3-...",
"transcript_id": "9f3e4d3a-...",
"transcript_ids": ["9f3e4d3a-..."],
"type": "summary",
"status": "completed",
"render_mode": "text",
"content_md": "## Счёт от одного до десяти\n\nВ записи звучит последовательный счёт от 1 до 10.",
"content_blocks": null,
"tokens_input": 420,
"tokens_output": 38,
"error": null,
"created_at": "2026-06-04T00:17Z",
"completed_at": "2026-06-04T00:17Z"
}
# Need a file? Queue an export (scopes exports:write + exports:read):
curl -X POST https://api.vibe2text.ru/api/v1/exports/ \
-H 'Authorization: Bearer v2t_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{ "transcript_id": "9f3e4d3a-1b2c-4d5e-8f90-aabbccddeeff", "format": "pdf" }'
# Then GET /exports/{id} (poll) and GET /exports/{id}/download for the url.
Ответ
# POST /exports/ →
{
"id": "b0d7ef8b-1f21-4448-8b50-29e3d06df0b8",
"transcript_id": "9f3e4d3a-1b2c-4d5e-8f90-aabbccddeeff",
"format": "pdf",
"status": "pending",
"size_bytes": null,
"error": null,
"expires_at": "2026-06-11T00:41:18Z",
"created_at": "2026-06-04T00:41:18Z"
}
# GET /exports/{id}/download →
{ "url": "https://media.vibe2text.ru/<pre-signed-download-url>", "expires_in": 3600 }
Структура итогового отчёта описана отдельным файлом JSON Schema — пригодится, если вы хотите валидировать ответы у себя: /schemas/report-document.schema.json
Подписаться на уведомления
Укажите свой URL и список интересных событий — мы будем сами присылать туда уведомление, как только что-то будет готово.
# Subscribe to events (scopes webhooks:write + webhooks:read).
# The response includes a secret shown ONCE — store it to verify signatures.
curl -X POST https://api.vibe2text.ru/api/v1/webhooks/ \
-H 'Authorization: Bearer v2t_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://hooks.your-app.com/vibe2text",
"events": ["transcript.completed", "smart_report.generated"]
}'
# Lost the secret? POST /webhooks/{id}/regenerate-secret.
# Test the endpoint with POST /webhooks/{id}/retest. Inspect deliveries
# with GET /webhooks/{id}/logs. (There is no DELETE — disable via PATCH.)
Ответ
{
"id": "0550f52d-...",
"url": "https://example.com/hook",
"events": ["transcript.completed"],
"secret_hint": "p4-X...zkvI",
"is_active": true,
"last_delivery_at": null,
"last_status_code": null,
"created_at": "2026-06-04T00:41:21Z",
"secret": "whsec_xxxxxxxxxxxxxxxxxxxx"
}
# "secret" is returned ONLY on create (and regenerate-secret) — store it.
# Later reads show only "secret_hint".
Проверка подписи
К каждому уведомлению мы добавляем подпись в заголовке X-Signature (формат sha256=<hex>). Сверяйте её с секретом вебхука по сырым байтам тела (до json.loads) — так вы убедитесь, что письмо действительно от нас.
# Verify the signature on every incoming webhook.
# We send the signature in the "X-Signature" request header, formatted as
# "sha256=<hex>". Pass the RAW body bytes (before json.loads) to HMAC.
import hashlib
import hmac
def verify(raw_body: bytes, x_signature_header: str, secret: str) -> bool:
if not x_signature_header or not x_signature_header.startswith("sha256="):
return False
expected = hmac.new(
key=secret.encode("utf-8"),
msg=raw_body, # raw bytes, BEFORE json.loads(...)
digestmod=hashlib.sha256,
).hexdigest()
provided = x_signature_header.removeprefix("sha256=")
return hmac.compare_digest(expected, provided)
Список событий
transcript.createdtranscript.completedtranscript.failedsmart_report.generatedexport.completedaction_item.createdpayment.succeededpayment.failed