API v1 · Operational
Video infrastructure,
built for developers.
CPI NET API предоставляет единый интерфейс для загрузки, хранения, обработки и доставки видео. Создавайте video assets, загружайте большие файлы, получайте HLS playback и отслеживайте обработку через webhooks.
BASE URL
https://api.cpinet.online/v1Quick start
Каждый запрос к API требует Bearer API key. Ответы возвращаются в JSON. Для production используйте HTTPS и храните секретный ключ только на сервере.
Каждый запрос к API требует Bearer API key. Ответы возвращаются в JSON. Для production используйте HTTPS и храните секретный ключ только на сервере.
Authentication
CPI NET использует Bearer authentication.
Authorization: Bearer cpi_live_xxxxxxxxxxxxxxxxx Content-Type: application/json
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Секретный API key проекта |
Content-Type | JSON | application/json |
Accept | No | application/json |
Videos
Create a video
POST/videos
Создаёт video asset и возвращает URL для resumable upload.
{
"title": "Product launch",
"description": "Official launch video",
"visibility": "private",
"transcode": {
"profiles": ["1080p", "720p", "480p"],
"formats": ["hls", "mp4"]
}
}
201 Created
{
"id": "vid_01K2CP7X9A",
"status": "created",
"upload": {
"type": "resumable",
"url": "https://api.cpinet.online/v1/uploads/up_01K2..."
}
}Get a video
GET/videos/{video_id}
{
"id": "vid_01K2CP7X9A",
"title": "Product launch",
"status": "ready",
"duration": 183.42,
"size": 184239812,
"visibility": "private",
"playback": {
"hls": "https://cdn.cpinet.online/v/vid_01K2.../master.m3u8",
"dash": "https://cdn.cpinet.online/v/vid_01K2.../manifest.mpd"
},
"thumbnail": "https://cdn.cpinet.online/v/vid_01K2.../thumb.jpg"
}
List videos
GET/videos
GET /v1/videos?limit=20&cursor=eyJpZCI6...
| Parameter | Default | Description |
|---|---|---|
limit | 20 | Количество объектов, максимум 100 |
cursor | — | Курсор следующей страницы |
status | all | created, processing, ready, failed |
Update a video
PATCH/videos/{video_id}
{
"title": "Updated title",
"description": "Updated description",
"visibility": "public"
}
Delete a video
DELETE/videos/{video_id}
Удаляет video asset и связанные производные файлы.
Uploads
Create upload session
POST/uploads
{
"video_id": "vid_01K2CP7X9A",
"size": 184239812,
"content_type": "video/mp4"
}
Upload chunk
PATCH/uploads/{upload_id}
Поддерживаются повторные отправки chunk при сетевых сбоях.
Content-Range: bytes 0-1048575/184239812 Content-Type: application/octet-stream [binary data]
Complete upload
POST/uploads/{upload_id}/complete
{
"status": "processing",
"video_id": "vid_01K2CP7X9A"
}
Playback
Create playback token
POST/videos/{video_id}/playback-token
Создаёт временную ссылку для приватного видео.
{
"expires_in": 3600,
"quality": "auto"
}
200 OK
{
"token": "cpi_vp_xxxxxxxxx",
"expires_at": "2026-08-15T00:00:00Z",
"urls": {
"hls": "https://cdn.cpinet.online/p/eyJ..."
}
}Security
Не передавайте секретный API key в браузер. Для клиентского playback используйте короткоживущий playback token.
Не передавайте секретный API key в браузер. Для клиентского playback используйте короткоживущий playback token.
Webhooks
Create webhook
POST/webhooks
{
"url": "https://your-app.example.com/webhooks/cpi",
"events": [
"video.ready",
"video.failed",
"upload.completed"
]
}
Event payload
{
"id": "evt_01K2CP9Z2M",
"type": "video.ready",
"created_at": "2026-08-14T20:31:22Z",
"data": {
"video_id": "vid_01K2CP7X9A",
"status": "ready"
}
}
Signature verification
Проверяйте подпись webhook и обрабатывайте события идемпотентно. Для повторной доставки используйте
Проверяйте подпись webhook и обрабатывайте события идемпотентно. Для повторной доставки используйте
event.id.Errors
| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Некорректные параметры запроса |
| 401 | unauthorized | API key отсутствует или неверен |
| 403 | forbidden | Доступ к ресурсу запрещён |
| 404 | not_found | Ресурс не найден |
| 409 | conflict | Конфликт состояния ресурса |
| 413 | payload_too_large | Превышен размер загрузки |
| 429 | rate_limited | Превышен rate limit |
| 500 | internal_error | Внутренняя ошибка сервера |
{
"error": {
"code": "invalid_request",
"message": "Field 'title' is required",
"request_id": "req_01K2..."
}
}
Rate limits
| Operation | Limit |
|---|---|
| GET | 600 requests / minute |
| POST / PATCH | 120 requests / minute |
| Concurrent uploads | 20 / project |
При превышении лимита API возвращает 429 и заголовок Retry-After.