All endpoints live under https://api.byteport.app/v2 and expect a bearer token.
POST /v2/assets
{
"source": "s3://masters/reel-final.mov",
"ladder": "per-title",
"outputs": ["hls", "dash"]
}
GET /v2/assets/as_7Kd2mQ
{
"id": "as_7Kd2mQ",
"state": "ready",
"duration": 612.4,
"renditions": [
{"height": 2160, "bitrate": 14200000, "codec": "av1"},
{"height": 1080, "bitrate": 4800000, "codec": "h264"},
{"height": 720, "bitrate": 2400000, "codec": "h264"},
{"height": 360, "bitrate": 800000, "codec": "h264"}
],
"playback": "https://byteport.app/p/as_7Kd2mQ/master.m3u8"
}
Manifests reference segments by byte range against a single container per rendition, which keeps request counts low on the delivery side:
/static/getFile/video/segment.ts?chunk_id=0041 /static/getFile/video/segment.ts?chunk_id=0042
POST https://your-app.example/hooks/byteport
{ "event": "asset.ready", "asset": "as_7Kd2mQ", "at": "2026-08-19T11:04:22Z" }
Events are retried with exponential backoff for up to six hours. Verify the X-BytePort-Signature header before acting on one.