Видео в вашем продукте — один API
Live-стримы, VOD-хостинг и видеозвонки через WebRTC. Загружайте, доставляйте и масштабируйте видео без собственных CDN и медиасерверов. Все эндпоинты опубликованы — интегрируйтесь уже сегодня.
$ curl -s -X POST https://api.vidora.io/v1/live \ -H "Authorization: Bearer $VIDORA_TOKEN" \ -d '{ "name": "DevConf 2026", "latency_mode": "low" }' # ответ { "id": "live_Tm4xPq9wRz", "status": "idle", "ingest": { "rtmp_url": "rtmp://ingest.vidora.io/live", "stream_key": "sk_e4c1a97f2b6d" }, "playback": "https://watch.vidora.io/pb_Nw5rYt3uKm" }
Вся видео-инфраструктура из одной точки
Не нужно склеивать инкодировщик, CDN, сигналинг и биллинг. Vidora закрывает весь путь видео: от загрузки до зрителя.
Live-стримы
Приём RTMP и SRT, отдача в HLS/DASH, режим низкой задержки, DVR-перемотка и автоматическая запись эфира.
VOD-хостинг
Прямая загрузка файлов до 500 ГБ, транскодирование в 6 профилей, постеры, субтитры и подписанные ссылки.
Видеозвонки
WebRTC-комнаты до 100 участников: демонстрация экрана, запись, токены с грантами прав и TURN-серверы в комплекте.
Аналитика в реальном времени
Зрители, битрейт, QoE, география и пиковые онлайны — по API и в дашборде, с точностью до секунды.
Webhooks
Мгновенные события о готовности видео, старте эфира и записи звонков. Подпись HMAC SHA-256 из коробки.
Безопасность
JWT-токены, подписанные URL с TTL, шифрование при передаче и хранении, готовность к подключению DRM.
REST API, готовый к интеграции
Предсказуемый ресурс-ориентированный API, JSON везде, понятные ошибки и идемпотентность. Спецификация заморожена и войдёт в v1.0 без изменений.
Все эндпоинты публичны
Полный список методов, доступных уже сейчас участникам закрытой беты. Нажмите на эндпоинт, чтобы увидеть тело запроса и пример ответа.
От первого запроса до продакшена за один день
Готовые сценарии на cURL, JavaScript и Python. Скопируйте и запустите прямо сейчас — песочница принимает те же запросы.
1. Загрузка видео в три шага
Файл уходит напрямую в хранилище Vidora по подписанному URL — минуя ваш сервер.
# 1. Создаём ассет и получаем подписанный URL для загрузки
curl -s -X POST https://api.vidora.io/v1/videos \
-H "Authorization: Bearer $VIDORA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Презентация продукта",
"privacy": "private",
"callback_url": "https://example.com/hooks/vidora"
}'
# 2. Загружаем файл напрямую в хранилище (URL живёт 24 часа)
curl -s -X PUT --upload-file ./presentation.mp4 \
"https://upload.vidora.io/u/eyJhbGciOiJIUzI1NiJ9..."
# 3. Готовность придёт событием video.ready — либо поллинг статуса
curl -s https://api.vidora.io/v1/videos/vid_8Kf3Lm2pQr \
-H "Authorization: Bearer $VIDORA_TOKEN"const API = 'https://api.vidora.io/v1';
const token = process.env.VIDORA_TOKEN;
// 1. Создаём ассет
const asset = await fetch(API + '/videos', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
},
body: JSON.stringify({ title: 'Презентация продукта', privacy: 'private' })
}).then(r => r.json());
// 2. Загружаем файл, не прогоняя его через свой сервер
await fetch(asset.upload.url, {
method: 'PUT',
body: fileInput.files[0]
});
// 3. Ждём событие video.ready в webhook — или поллим GET /v1/videos/{id}import requests
API = "https://api.vidora.io/v1"
headers = {"Authorization": f"Bearer {TOKEN}"}
# 1. Создаём ассет
asset = requests.post(API + "/videos", headers=headers, json={
"title": "Презентация продукта",
"privacy": "private",
}).json()
# 2. Прямая загрузка файла в хранилище
with open("presentation.mp4", "rb") as f:
requests.put(asset["upload"]["url"], data=f)
# 3. Ожидаем событие video.ready в webhook2. Видеозвонок в браузере
Токен участника выпускается на вашем бэкенде, браузер подключается к сигналингу и обменивается SDP.
// Токен участника выпускает ВАШ сервер: POST /v1/rooms/{room_id}/tokens
const token = await myBackend.getCallToken('room_x7Kp2mWq', 'user_123');
// Подключаемся к сигналингу Vidora
const ws = new WebSocket('wss://rtc.vidora.io/v1/ws?token=' + token);
ws.onopen = () => ws.send(JSON.stringify({
type: 'join',
room: 'room_x7Kp2mWq',
tracks: { cam: true, mic: true, screen: false }
}));
ws.onmessage = (e) => {
const ev = JSON.parse(e.data);
if (ev.type === 'offer') startWebRTC(ev.sdp, ev.identity);
if (ev.type === 'participant.left') removeTile(ev.identity);
};
// Видео-дорожки идут P2P/SFU по WebRTC, TURN-креды: GET /v1/rtc/turnimport requests
def issue_call_token(room_id: str, user_id: str) -> str:
r = requests.post(
f"https://api.vidora.io/v1/rooms/{room_id}/tokens",
headers={"Authorization": f"Bearer {TOKEN}"},
json={
"identity": user_id,
"ttl_s": 7200,
"grants": {"cam": True, "mic": True, "screen": True, "record": False},
},
)
r.raise_for_status()
return r.json()["token"]3. Проверка подписи webhook
Каждое событие подписывается секретом подписки. Всегда проверяйте подпись и таймстемп.
import crypto from 'node:crypto';
// Заголовок: X-Vidora-Signature: t=1754380800,v1=5257a869c4e1...
export function verifyVidora(req, secret) {
const header = req.headers['x-vidora-signature'] || '';
const parts = Object.fromEntries(header.split(',').map(s => s.split('=')));
const expected = crypto
.createHmac('sha256', secret)
.update(parts.t + '.' + JSON.stringify(req.body))
.digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(parts.v1), Buffer.from(expected));
}Официальные SDK на подходе
JavaScript и Python SDK выйдут одновременно с публичным запуском. Остальные — в дорожной карте Q4 2026.
Прозрачные цены с бесплатным порогом
Считаем только трафик и хранилище. Во время беты все лимиты удвоены.
Hobby
- 50 ГБ трафика в месяц
- 10 ГБ VOD-хранилища
- 3 комнаты звонков одновременно
- Webhooks и аналитика
- Поддержка сообщества
Pro
- 1 ТБ трафика в месяц
- 500 ГБ VOD-хранилища
- 50 комнат × 100 участников
- Запись звонков и стримов
- Low-latency режим стримов
- Приоритетная поддержка 24/7
Enterprise
- Выделенный инджест и CDN-ноды
- SLA 99.99% с компенсациями
- DRM и SSO / SCIM
- On-premise и частные регионы
- Персональный инженер
Что уже сделано
SRT-инджест и запись комнат v0.9.2
Добавлен приём SRT-потоков, эндпоинты записи видеозвонков и поле renditions в ответе видео.
Третья волна закрытой беты v0.9.1
Выдано ещё 400+ ключей. Открыт sandbox, rate limit поднят до 120 запросов/мин.
MVP видеозвонков v0.9.0
Комнаты до 50 участников, TURN-серверы во Франкфурте и Алматы, демонстрация экрана.
Первый публичный API v0.8.0
Анонс платформы: HLS/DASH-плейбек, webhooks и загрузка VOD для первых 100 тестировщиков.
- СейчасЗакрытая бета, API v0.9 — спека заморожена
- 15.09.2026Публичный запуск: API v1.0, JS/Python SDK, дашборд
- Q4 2026SDK iOS/Android, Go, DRM, ultra-low-latency ~200 мс для стримов
Частые вопросы
Можно ли использовать Vidora в продакшене уже сейчас?
Да, участникам закрытой беты мы даём SLA 99.9% и канал прямой связи с инженерами. Спецификация API заморожена и не изменится к релизу v1.0.
Какие протоколы поддерживаются?
Инджест: RTMP, SRT, WebRTC (для звонков). Доставка: HLS, DASH, WebRTC. Воспроизведение — в любом стандартном плеере (hls.js, Shaka, ExoPlayer, AVPlayer).
Где хранятся данные?
Регион выбирается при создании проекта: Франкфурт, Москва, Алматы или Сингапур. Данные шифруются при передаче (TLS 1.3) и в состоянии покоя (AES-256).
Сколько это стоит после запуска?
50 ГБ трафика в месяц — бесплатно навсегда. Дальше — по объёму трафика и хранилища, тарифы зафиксированы на этой странице и не изменятся для ранних пользователей в течение года.
Есть ли лимиты в бете?
Во время беты все лимиты удвоены: 100 ГБ трафика, 20 ГБ хранилища, 6 комнат звонков. Ограничений на количество запросов к документации нет.
Получите API-ключ одним из первых
Оставьте почту — вышлем приглашение в закрытую бету, тестовый ключ и доступ к песочнице. Выдача идёт в порядке очереди.
Не терпится попробовать? Сгенерируйте демо-ключ песочницы:
Ваш номер в очереди — #—.
Приглашение и ключ песочницы придут на почту в течение 2–3 рабочих дней. Следите за статусом: status.vidora.io