REST API
Базовый адрес:
https://videostat.ru/api/v1. В каждом запросеAuthorization: Bearer vs_…. Ключ создаётся в кабинете на тарифе «Про» и показывается целиком один раз. Этот текст собран из того же списка, что и сервер: расхождений с методами нет.
Методы
| Метод | Путь | Назначение |
|---|---|---|
GET | /api/v1/me | Тариф, лимиты и сколько уже занято |
GET | /api/v1/videos | Список видео |
POST | /api/v1/videos/import | Добавить видео по прямой ссылке на mp4, webm или m3u8 |
POST | /api/v1/videos | Загрузить видеофайл |
GET | /api/v1/videos/{id} | Карточка видео: настройки, файлы, статус обработки |
PATCH | /api/v1/videos/{id} | Название, папка, доступность страницы и настройки плеера |
DELETE | /api/v1/videos/{id} | Удалить видео. Файл удаляется, когда не остаётся копий |
POST | /api/v1/videos/{id}/duplicate | Копия: свой ключ, свои настройки и своя статистика, тот же файл |
POST | /api/v1/videos/{id}/retry | Повторить обработку, если она завершилась ошибкой |
POST | /api/v1/videos/{id}/copy-settings | Перенести настройки с другого своего видео |
POST | /api/v1/videos/{id}/assets | Загрузить обложку, картинку или субтитры |
DELETE | /api/v1/videos/{id}/assets/{assetId} | Удалить картинку или субтитры |
POST | /api/v1/videos/{id}/frame | Сохранить кадр загруженного видео картинкой |
GET | /api/v1/videos/{id}/stats | Статистика одного видео за период |
GET | /api/v1/videos/{id}/sessions | Сессии просмотра |
GET | /api/v1/videos/{id}/sessions/{sid} | Одна сессия: путь просмотра, события, продажи |
GET | /api/v1/stats | Сводка по всем видео за период |
GET | /api/v1/stats/live | Сколько человек смотрит прямо сейчас |
GET | /api/v1/compare | Сравнить от 2 до 5 видео |
GET | /api/v1/folders | Папки |
POST | /api/v1/folders | Создать папку |
PATCH | /api/v1/folders/{id} | Переименовать папку |
DELETE | /api/v1/folders/{id} | Удалить папку. Видео остаются в «Без папки» |
GET | /api/v1/leads | Лиды из форм плеера |
DELETE | /api/v1/leads/{id} | Удалить лид |
GET | /api/v1/conversions | Продажи |
POST | /api/v1/conversions | Сообщить о продаже |
GET | /api/v1/tests | Сплит-тесты |
POST | /api/v1/tests | Создать сплит-тест |
GET | /api/v1/tests/{id} | Один сплит-тест и его результаты |
PATCH | /api/v1/tests/{id} | Название, статус или победитель |
DELETE | /api/v1/tests/{id} | Удалить сплит-тест |
GET | /api/v1/webhooks | Вебхуки и последние отправки |
POST | /api/v1/webhooks | Подписка на события |
PATCH | /api/v1/webhooks/{id} | Изменить вебхук |
DELETE | /api/v1/webhooks/{id} | Удалить вебхук |
POST | /api/v1/webhooks/{id}/test | Поставить тестовую отправку в очередь |
Аккаунт
GET /me
Тариф, лимиты и сколько уже занято
curl -sS https://videostat.ru/api/v1/me \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"Видео
GET /videos
Список видео
curl -sS https://videostat.ru/api/v1/videos \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /videos/import
Добавить видео по прямой ссылке на mp4, webm или m3u8 Файл остаётся по ссылке, на диск VideoStat не копируется.
curl -sS -X POST https://videostat.ru/api/v1/videos/import \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"url": "...",
"title": "...",
"folderId": "..."
}'POST /videos
Загрузить видеофайл Тело запроса — multipart, поле file. Исходник перекодируется, затем удаляется. В query можно передать folderId и title. Двоичную загрузку MCP не принимает: её делает этот метод.
curl -sS -X POST https://videostat.ru/api/v1/videos \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-F "file=@video.mp4"GET /videos/{id}
Карточка видео: настройки, файлы, статус обработки
id — id видео или его публичный ключ
curl -sS https://videostat.ru/api/v1/videos/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"PATCH /videos/{id}
Название, папка, доступность страницы и настройки плеера settings сливается с текущими: присланная ветка заменяет одноимённую, остальные не трогаются. Массив (кнопки, главы, формы) заменяется целиком.
id — id видео или его публичный ключ
curl -sS -X PATCH https://videostat.ru/api/v1/videos/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"title": "...",
"publicTitle": "...",
"description": "..."
}'DELETE /videos/{id}
Удалить видео. Файл удаляется, когда не остаётся копий
id — id видео или его публичный ключ
curl -sS -X DELETE https://videostat.ru/api/v1/videos/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /videos/{id}/duplicate
Копия: свой ключ, свои настройки и своя статистика, тот же файл
id — id видео или его публичный ключ
curl -sS -X POST https://videostat.ru/api/v1/videos/КЛЮЧ/duplicate \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /videos/{id}/retry
Повторить обработку, если она завершилась ошибкой
id — id видео или его публичный ключ
curl -sS -X POST https://videostat.ru/api/v1/videos/КЛЮЧ/retry \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /videos/{id}/copy-settings
Перенести настройки с другого своего видео parts — имена веток: style, controls, seekBar, autoplay, resume, smartPause, end, startup, sticky, ctas, gates, tags. Без parts переносятся ветки оформления и воспроизведения.
id — id видео или его публичный ключ
curl -sS -X POST https://videostat.ru/api/v1/videos/КЛЮЧ/copy-settings \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"fromId": "...",
"parts": "..."
}'Файлы
POST /videos/{id}/assets
Загрузить обложку, картинку или субтитры multipart, поле file. Картинки JPG, PNG, GIF, WEBP до 8 МБ. Субтитры VTT или SRT до 1 МБ.
id — id видео или его публичный ключ
curl -sS -X POST https://videostat.ru/api/v1/videos/КЛЮЧ/assets \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-F "file=@video.mp4"DELETE /videos/{id}/assets/{assetId}
Удалить картинку или субтитры
id — id видео или его публичный ключ
assetId — id файла из карточки видео
curl -sS -X DELETE https://videostat.ru/api/v1/videos/КЛЮЧ/assets/ФАЙЛ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /videos/{id}/frame
Сохранить кадр загруженного видео картинкой Видео должно быть обработано. sec — секунда от начала.
id — id видео или его публичный ключ
curl -sS -X POST https://videostat.ru/api/v1/videos/КЛЮЧ/frame \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"sec": "..."
}'Статистика
GET /videos/{id}/stats
Статистика одного видео за период Дополнительно segment: all, converted, not_converted, leads, clicked, mobile, desktop, returning.
id — id видео или его публичный ключ
from — Дата YYYY-MM-DD
to — Дата YYYY-MM-DD
curl -sS https://videostat.ru/api/v1/videos/КЛЮЧ/stats \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"GET /videos/{id}/sessions
Сессии просмотра
id — id видео или его публичный ключ
from — Дата YYYY-MM-DD
to — Дата YYYY-MM-DD
curl -sS https://videostat.ru/api/v1/videos/КЛЮЧ/sessions \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"GET /videos/{id}/sessions/{sid}
Одна сессия: путь просмотра, события, продажи
id — id видео или его публичный ключ
sid — id сессии
curl -sS https://videostat.ru/api/v1/videos/КЛЮЧ/sessions/СЕССИЯ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"GET /stats
Сводка по всем видео за период
from — Дата YYYY-MM-DD
to — Дата YYYY-MM-DD
curl -sS https://videostat.ru/api/v1/stats \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"GET /stats/live
Сколько человек смотрит прямо сейчас
curl -sS https://videostat.ru/api/v1/stats/live \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"GET /compare
Сравнить от 2 до 5 видео
ids — id через запятую
from — Дата YYYY-MM-DD
to — Дата YYYY-MM-DD
curl -sS https://videostat.ru/api/v1/compare \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"Папки
GET /folders
Папки
curl -sS https://videostat.ru/api/v1/folders \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /folders
Создать папку
curl -sS -X POST https://videostat.ru/api/v1/folders \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"name": "..."
}'PATCH /folders/{id}
Переименовать папку
id — id папки
curl -sS -X PATCH https://videostat.ru/api/v1/folders/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"name": "..."
}'DELETE /folders/{id}
Удалить папку. Видео остаются в «Без папки»
id — id папки
curl -sS -X DELETE https://videostat.ru/api/v1/folders/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"Лиды и продажи
GET /leads
Лиды из форм плеера
curl -sS https://videostat.ru/api/v1/leads \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"DELETE /leads/{id}
Удалить лид
id — id лида
curl -sS -X DELETE https://videostat.ru/api/v1/leads/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"GET /conversions
Продажи
curl -sS https://videostat.ru/api/v1/conversions \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /conversions
Сообщить о продаже Нужен email, phone или visitorId. Зритель ищется по контакту из формы плеера. Повтор с тем же orderId не создаёт вторую продажу.
curl -sS -X POST https://videostat.ru/api/v1/conversions \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"email": "...",
"phone": "...",
"visitorId": "..."
}'A/B-тесты
GET /tests
Сплит-тесты
curl -sS https://videostat.ru/api/v1/tests \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /tests
Создать сплит-тест От 2 до 5 своих видео. weight — доля зрителей, по умолчанию 50.
curl -sS -X POST https://videostat.ru/api/v1/tests \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"name": "...",
"variants": "..."
}'GET /tests/{id}
Один сплит-тест и его результаты
id — id теста
curl -sS https://videostat.ru/api/v1/tests/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"PATCH /tests/{id}
Название, статус или победитель
id — id теста
curl -sS -X PATCH https://videostat.ru/api/v1/tests/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"name": "...",
"status": "...",
"winnerId": "..."
}'DELETE /tests/{id}
Удалить сплит-тест
id — id теста
curl -sS -X DELETE https://videostat.ru/api/v1/tests/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"Вебхуки
GET /webhooks
Вебхуки и последние отправки
curl -sS https://videostat.ru/api/v1/webhooks \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /webhooks
Подписка на события События: lead.created, conversion.created, viewer.tagged, cta.clicked, video.ready. secret показывается в ответе и подписывает тело заголовком X-VideoStat-Signature.
curl -sS -X POST https://videostat.ru/api/v1/webhooks \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"url": "...",
"events": "...",
"active": "..."
}'PATCH /webhooks/{id}
Изменить вебхук
id — id вебхука
curl -sS -X PATCH https://videostat.ru/api/v1/webhooks/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"url": "...",
"events": "...",
"active": "..."
}'DELETE /webhooks/{id}
Удалить вебхук
id — id вебхука
curl -sS -X DELETE https://videostat.ru/api/v1/webhooks/КЛЮЧ \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"POST /webhooks/{id}/test
Поставить тестовую отправку в очередь
id — id вебхука
curl -sS -X POST https://videostat.ru/api/v1/webhooks/КЛЮЧ/test \
-H "Authorization: Bearer vs_ВАШ_КЛЮЧ"
Настройки плеера
Поле settings в PATCH /videos/{id}. Присылайте только то, что меняете: остальные ветки остаются. Массив заменяется целиком. Значения вне границ приводятся к ближайшим допустимым, неизвестные отбрасываются.
style— Цвета, скругления и большая кнопка Playcontrols— Какие кнопки видны в панелиseekBar— Полоса прогресса: обычная, умная или скрытая, и можно ли перематыватьautoplay— Запуск без звука и плашка «включить звук»resume— Предложение продолжить с местаsmartPause— Пауза, когда вкладку свернули или ролик ушёл с экранаend— Что сделать в конце: ничего, повтор, по кругу, обложка или переходexpire— Дата, после которой вместо видео показывается сообщениеstartup— Секунда старта, скорость, звук и полный экран по кликуsticky— Мини-плеер в углу при прокрутке страницыthumbnail— Обложка до запуска и как она вписываетсяexitThumbnail— Картинка и текст, когда зритель ставит на паузуctas— Кнопки и предложения по времени, на паузе или в концеgates— Формы захвата контактовchoices— Вопросы с вариантамиtags— Тег зрителю на заданной секундеreveals— Показать скрытый блок страницы на заданной секундеchapters— Главы на полосе прогрессаcaptions— Файл субтитровbranding— Логотип и подпись VideoStat
| Поле | Тип | По умолчанию |
|---|---|---|
style.accent | string | "#111111" |
style.iconColor | string | "#ffffff" |
style.controlsRadius | number | 6 |
style.controlsOpacity | number | 0.9 |
style.frameRadius | number | 8 |
style.bigPlay | string | "circle" |
style.bigPlaySize | number | 72 |
controls.play | boolean | true |
controls.rewind | boolean | false |
controls.fastForward | boolean | false |
controls.progress | boolean | true |
controls.currentTime | boolean | true |
controls.duration | boolean | false |
controls.mute | boolean | true |
controls.volume | boolean | true |
controls.captions | boolean | true |
controls.settings | boolean | true |
controls.pip | boolean | true |
controls.fullscreen | boolean | true |
seekBar.mode | string | "normal" |
seekBar.allowSeek | boolean | true |
autoplay.enabled | boolean | true |
autoplay.topText | string | "Видео уже идёт" |
autoplay.bottomText | string | "Нажмите, чтобы включить звук" |
autoplay.textColor | string | "#ffffff" |
autoplay.bgColor | string | "#111111" |
autoplay.position | string | "center" |
autoplay.restart | boolean | true |
resume.enabled | boolean | false |
resume.text | string | "Вы уже начинали смотреть это видео" |
resume.continueText | string | "Продолжить" |
resume.restartText | string | "Смотреть сначала" |
smartPause.tabHidden | boolean | true |
smartPause.outOfView | boolean | false |
end.action | string | "none" |
end.url | string | "" |
end.delaySec | number | 5 |
end.text | string | "Переходим дальше через" |
expire.enabled | boolean | false |
expire.at | string | "" |
expire.text | string | "Это видео больше недоступно" |
startup.startAt | number | 0 |
startup.speed | number | 1 |
startup.muted | boolean | false |
startup.focusedFullscreen | boolean | false |
sticky.enabled | boolean | false |
sticky.position | string | "bottom-right" |
thumbnail.assetId | string | null |
thumbnail.mobileAssetId | string | null |
thumbnail.fit | string | "cover" |
exitThumbnail.enabled | boolean | false |
exitThumbnail.assetId | string | null |
exitThumbnail.title | string | "Не уходите" |
exitThumbnail.text | string | "Самое важное ещё впереди" |
exitThumbnail.buttonText | string | "Продолжить просмотр" |
ctas | array | [] |
gates | array | [] |
choices | array | [] |
tags | array | [] |
reveals | array | [] |
chapters | array | [] |
captions.assetId | string | null |
captions.label | string | "Русский" |
captions.lang | string | "ru" |
captions.defaultOn | boolean | false |
branding.logoAssetId | string | null |
branding.logoUrl | string | "" |
branding.showPoweredBy | boolean | true |
Ошибки
Ответ — JSON с полями error и message. 401 — нет или отозван ключ, 402 — не позволяет тариф, 404 — нет такого объекта.