API Reference
All video streaming endpoints require API key authentication. Include your credentials in every request header.
x-api-key: YOUR_API_KEY
x-api-secret: YOUR_API_SECRET/v1/videos/stream
Provision a signed streaming session with optional real-time transformations. Returns HLS and DASH playback URLs.
sourcerequiredoutputsrequiredtransform.watermarkconst response = await fetch('https://api.buzstorage.com/v1/videos/stream', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
},
body: JSON.stringify({
source: 'file-id-from-upload',
outputs: ['hls', 'dash'],
transform: {
watermark: 'https://cdn.yourapp.com/logo.png'
}
})
});
const { data } = await response.json();
// data.playbackUrls.hls → signed HLS master manifest URL
// data.playbackUrls.dash → signed DASH manifest URL{
"success": true,
"data": {
"id": "your-file-id",
"outputs": ["hls", "dash"],
"playbackUrls": {
"hls": "https://api.buzstorage.com/v1/videos/{fileId}/master.m3u8?expiry=...&sig=...",
"dash": "https://api.buzstorage.com/v1/videos/{fileId}/manifest.mpd?expiry=...&sig=..."
}
}
}/v1/videos/:fileId/playback-url
Generate a short-lived signed URL set for an already-processed video. Includes manifest, thumbnail, and storyboard URLs.
?expiresIn=3600— Optional. Seconds until expiry. Max 7 days (604800).// Create a signed playback URL (expires in 2 hours)
const response = await fetch(
'https://api.buzstorage.com/v1/videos/FILE_ID/playback-url?expiresIn=7200',
{
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
}
}
);
const { data } = await response.json();
// data.masterManifestUrl → signed HLS URL for your player
// data.thumbnailUrl → preview image
// data.storyboardUrl → WebVTT for timeline scrubbing
// data.expiresAt → ISO timestamp{
"success": true,
"data": {
"fileId": "your-file-id",
"type": "hls",
"masterManifestUrl": "https://api.buzstorage.com/v1/videos/{fileId}/master.m3u8?expiry=...&sig=...",
"thumbnailUrl": "https://api.buzstorage.com/v1/videos/{fileId}/thumbnail?expiry=...&sig=...",
"storyboardUrl": "https://api.buzstorage.com/v1/videos/{fileId}/storyboard.vtt?expiry=...&sig=...",
"storyboardImageUrl": "https://api.buzstorage.com/v1/videos/{fileId}/storyboard.jpg?expiry=...&sig=...",
"expiresAt": "2026-06-15T12:00:00.000Z"
}
}/v1/videos/:fileId
Fetch full video asset metadata — processing status, rendition list, and manifest paths.
{
"success": true,
"data": {
"id": "asset-id",
"fileId": "your-file-id",
"status": "ready",
"durationSeconds": 120,
"width": 1920,
"height": 1080,
"masterManifestPath": "videos/company-id/file-id/master.m3u8",
"dashManifestPath": "videos/company-id/file-id/manifest.mpd",
"renditions": [
{ "label": "360p", "width": 640, "height": 360, "bitrateKbps": 800, "status": "ready" },
{ "label": "720p", "width": 1280, "height": 720, "bitrateKbps": 2800, "status": "ready" },
{ "label": "1080p", "width": 1920, "height": 1080, "bitrateKbps": 5000, "status": "ready" }
]
}
}Delivery Routes
These routes are public but require a valid expiry and sig query string (embedded in the URLs returned by the playback-url or stream endpoints). Your player calls these automatically.
/v1/videos/:fileId/master.m3u8HLS master playlist — lists all quality renditions/v1/videos/:fileId/manifest.mpdDASH master manifest/v1/videos/:fileId/renditions/:label/index.m3u8Per-quality rendition playlist (label: 360p, 480p, 720p, 1080p)/v1/videos/:fileId/renditions/:label/segments/:segmentIndividual .ts or .m4s video segment/v1/videos/:fileId/thumbnailPreview thumbnail image/v1/videos/:fileId/storyboard.vttWebVTT storyboard for timeline scrubbing/v1/videos/:fileId/storyboard.jpgSprite sheet for storyboard thumbnailsPlayer Integration
Use the signed masterManifestUrl with any standards-compliant player. HLS is natively supported in Safari — all other browsers need HLS.js. For DASH, use dash.js or Shaka Player.
import Hls from 'hls.js';
async function mountPlayer(videoEl, fileId) {
const res = await fetch(`/v1/videos/${fileId}/playback-url`, {
method: 'POST',
headers: { 'x-api-key': KEY, 'x-api-secret': SECRET },
});
const { data } = await res.json();
if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource(data.masterManifestUrl);
hls.attachMedia(videoEl);
} else {
// Safari supports HLS natively
videoEl.src = data.masterManifestUrl;
}
}On-the-fly Transformations
Append transform parameters to any signed manifest URL. The backend automatically threads them through every rendition and segment URL — your player requests transformed segments transparently, with no client-side changes needed.
watermark// Append transform params to your signed master manifest URL
const baseUrl = data.masterManifestUrl;
const watermarkedUrl = `${baseUrl}&watermark=${
encodeURIComponent('https://cdn.yourapp.com/logo.png')
}`;
// Pass watermarkedUrl to your player — the watermark is
// applied per-segment by the backend, no re-encoding needed.
hls.loadSource(watermarkedUrl);Heavy File Transfers
Engineered for data-intensive applications. Move multi-terabyte datasets across the globe with protocols optimized for maximum throughput.
Accelerated UDP Protocol
Bypass standard TCP bottlenecks for speeds up to 100x faster on high-latency links.
Multi-part Parallel Uploads
Automatically split massive files into chunks and upload them in parallel for peak bandwidth.
Resumable Sessions
Full state persistence ensures you pick up exactly where you left off if a connection drops.