Videos
Video upload, video categories/tags, and live streaming collections
Videos
The videos feature requires Starter plan or above. The live-streaming
feature requires Enterprise plan.
videos
Stores videos. Handles upload, encoding, and streaming automatically.
| Field | Type | Description | Required |
|---|---|---|---|
title | text | Title | |
description | textarea | Description | |
metadata | json | Custom metadata | |
status | select | Processing status: waiting, preparing, ready, errored (read-only) | |
durationSeconds | number | Video duration in seconds (read-only) | |
aspectRatio | text | Aspect ratio (read-only) | |
maxResolution | text | Maximum resolution (read-only) | |
videoQuality | select | Quality: basic, plus, premium (read-only) | |
mp4Support | select | MP4 support: none, standard, capped-1080p (read-only) | |
filename | text | Original filename (read-only) | |
sourceLiveStream | relationship | Source live stream (live-streams, read-only) |
Upload
You can upload via the Admin Panel or generate an upload URL through the API endpoints.
| Endpoint | Description |
|---|---|
POST /api/videos/upload | Create upload URL (specify quality, MP4 options) |
GET /api/videos/upload?id=xxx | Check upload status |
GET /api/videos/:id/check-status | Check encoding status |
Quotas
| Plan | Videos | Video Minutes | Delivery/Month |
|---|---|---|---|
| Free | 0 | 0 | 0 |
| Starter | 20 | 200 | 4,000 |
| Basic | 20 | 200 | 4,000 |
| Pro | 20 | 200 | 4,000 |
| Enterprise | Unlimited | Unlimited | Unlimited |
Base video quota is included free across all paid plans. Additional usage available via add-on.
Video minutes are weighted by quality: basic ×1, plus ×2, premium ×4.
Video Quality by Plan
| Plan | Available Qualities |
|---|---|
| Starter ~ Pro | basic |
| Enterprise | basic, plus, premium |
video-categories
Stores video categories. Supports hierarchical structure (parent-child).
| Field | Type | Description | Required |
|---|---|---|---|
title | text | Category name | ✓ |
slug | text | URL slug (auto-generated) | |
description | textarea | Description | |
image | relationship | Featured image (images) | |
parent | relationship | Parent category (video-categories) | |
color | color | Badge color (hex) |
video-tags
Stores video tags.
| Field | Type | Description | Required |
|---|---|---|---|
title | text | Tag name | ✓ |
slug | text | URL slug (auto-generated) | |
color | color | Badge color (hex) |
live-streams
Manages live streaming. Stream via RTMP, and video recordings are automatically created after the stream ends.
| Field | Type | Description | Required |
|---|---|---|---|
title | text | Title | |
description | textarea | Description | |
latencyMode | select | Latency mode: standard, reduced, low (default: reduced) | |
reconnectWindowSeconds | number | Reconnect wait time (0-1800 sec, default: 60) | |
status | select | Status: idle, active, disabled (read-only) |
Endpoints
| Endpoint | Description |
|---|---|
POST /api/live-streams/create | Create live stream (returns RTMP URL + stream key) |
GET /api/live-streams/:id/stream-key | Get stream key (tenant-admin only) |
POST /api/live-streams/:id/reset-key | Reset stream key |
POST /api/live-streams/:id/complete | Signal recording complete |
PUT /api/live-streams/:id/disable | Disable stream |
PUT /api/live-streams/:id/enable | Re-enable stream |
Quotas
| Plan | Max Streams | Concurrent | Recording | Max Duration |
|---|---|---|---|---|
| Free~Pro | 0 | 0 | No | — |
| Enterprise | Unlimited | Unlimited | Yes | 24h |
All images use the unified images collection. See Collections for the full list.