API reference

All endpoints live under https://api.byteport.app/v2 and expect a bearer token.

Create an asset

POST /v2/assets
{
  "source": "s3://masters/reel-final.mov",
  "ladder": "per-title",
  "outputs": ["hls", "dash"]
}

Poll it

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"
}

Playback URLs

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

Webhooks

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.