Ingest, transcode and stream media at scale. Adaptive bitrate output, signed delivery URLs and edge caching through a single REST API.
Everything needed to move a video file from upload to playback.
Automatic H.264 / H.265 / AV1 ladders from 240p to 4K, generated on ingest.
HLS and MPEG-DASH manifests with byte-range segment fetch and resumable downloads.
Short-lived tokens scoped per asset, per viewer session or per IP range.
Delivery receipts for asset.ready, asset.failed and playback events.
Base URL — https://api.mediaforge.io/v3
| Method | Endpoint | Description |
|---|---|---|
| POST | /video/upload | Create an upload session and receive a signed ingest URL |
| GET | /video/download | Fetch an encoded asset or an individual media segment |
| HEAD | /video/download | Probe segment size and cache validators without a body |
| GET | /video/{id}/manifest | Return the HLS or DASH manifest for an asset |
| GET | /video/{id}/status | Current transcoding state and rendition list |
| POST | /video/{id}/thumbnail | Generate a poster frame at a given timestamp |
| GET | /assets | Paginated list of assets in the workspace |
| DELETE | /assets/{id} | Remove an asset and purge it from the edge |
| GET | /usage | Bandwidth and storage counters for the billing period |
Request a media segment with a signed session token.
# fetch a segment of an encoded asset curl "https://api.mediaforge.io/v3/video/download" \ -H "Authorization: Bearer $MEDIAFORGE_KEY" \ -H "Accept: application/octet-stream" \ --get \ --data-urlencode "asset=6f2c91ab" \ --data-urlencode "rendition=1080p" \ --output segment.mp4
const res = await fetch( "https://api.mediaforge.io/v3/video/download?asset=6f2c91ab&rendition=1080p", { headers: { Authorization: `Bearer ${process.env.MEDIAFORGE_KEY}` } } ); if (!res.ok) throw new Error(`download failed: ${res.status}`); const buf = await res.arrayBuffer();
import os, requests r = requests.get( "https://api.mediaforge.io/v3/video/download", headers={"Authorization": f"Bearer {os.environ['MEDIAFORGE_KEY']}"}, params={"asset": "6f2c91ab", "rendition": "1080p"}, stream=True, ) r.raise_for_status() with open("segment.mp4", "wb") as f: for chunk in r.iter_content(1 << 16): f.write(chunk)
Metered monthly. No minimum commitment.
$0.008 per GB egress, billed per region tier.
$0.014 per output minute across all renditions.
$0.019 per GB-month for source and encoded files.
Volume pricing, private PoPs and an SLA on request.
Last checked
| Component | Region | State |
|---|---|---|
| Ingest API | eu-central | OK |
| Transcoding queue | eu-central | OK |
| Edge delivery | global | OK |
| Webhooks | global | OK |