Self-hosted video streaming infrastructure. Upload, transcode, and deliver HLS video at any scale.
Register or log in to receive a JWT token. Include it in requests:
Authorization: Bearer <token>
Generate API keys from your dashboard. Use for server-to-server integration:
X-API-Key: <your-api-key>
Video endpoints accept either JWT or API Key authentication.
{ "email": "you@example.com", "password": "...", "companyName": "Acme Inc" }
{ "token": "eyJ...", "user": { "id": 1, "email": "...", "companyName": "..." } }
{ "email": "you@example.com", "password": "..." }
{ "token": "eyJ...", "user": { "id": 1, "email": "...", "companyName": "..." } }
{ "user": { "id": 1, "email": "...", "companyName": "..." } }
Content-Type: multipart/form-data file: (binary) title: "My Video" description: "Optional description"
{
"video": {
"id": "a1b2c3...",
"title": "My Video",
"status": "processing",
"created_at": "2026-04-08T..."
}
}
uploading → processing →
ready or error
?page=0&limit=20 (max limit: 100)
{ "videos": [...], "page": 0, "limit": 20 }
{
"video": {
"id": "a1b2c3...",
"title": "My Video",
"status": "ready",
"view_count": 42,
"duration_seconds": 180.5,
"qualities": ["360p", "720p", "1080p"]
}
}
{ "ok": true }
.m3u8 file.
const hls = new Hls();
hls.loadSource('https://api.stream.domainless.fun/api/stream/VIDEO_ID/manifest');
hls.attachMedia(videoElement);
<iframe src="https://api.stream.domainless.fun/api/stream/VIDEO_ID/embed" width="640" height="360" frameborder="0" allowfullscreen></iframe>
204.
{ "name": "Production Server" }
{ "id": 1, "key": "sk_live_...", "name": "Production Server", "createdAt": "..." }
{ "keys": [{ "id": 1, "name": "Production Server", "prefix": "sk_live_a1b2", "createdAt": "..." }] }
?days=30
{ "views": 1234, "bandwidth": 5678901234, "videoCount": 12 }
{ "days": [{ "date": "2026-04-08", "views": 50, "bandwidth": 123456789 }, ...] }
?days=30&limit=10