- Sells as: the
media-transcode product (a product-scoped API key). This capability has no separate product-face contract — its public product route reuses the capability contract below; see the Edge route table's Product face row.
Generic media/video processing capability. Submits transcode jobs (pluggable Stub / FFmpeg backend), extracts technical metadata, generates thumbnails, detects scene boundaries, and extracts audio tracks. Stateless outbound compute; no persistent store.
- Group: Content & media
- Contract:
contracts/media-transcode/v1/openapi.yaml
- Console: Manage the
media-transcode product in the console →
- Runbook: operational checklist for
media-transcode — internal (Vagary Labs ops; not part of this public site): docs/runbooks/capability-operations.md#media-transcode
- Public base:
https://api.vagarylabs.com (the consolidated API gateway — one host, per-brand sibling api.<zone>)
- Auth: a product API key (
vgk_…) issued from the console — Authorization: Bearer vgk_…
- Product face (customer-keyed):
https://api.vagarylabs.com/product/v1/media/transcode
Edge route table
The routes this capability actually serves on the public edge — live-synced from GET https://api.vagarylabs.com/product/v1/_meta/catalog (snapshot v1). The metric is the request-granularity billing counter; the scope is the key permission required.
Product face (customer-keyed)
| Method | Path | Metric | Scope |
|---|
POST | /product/v1/media/transcode | transcode_requests | write |
Endpoints
| Method | Path | Summary |
|---|
POST | /v1/transcode | Submit a transcode job (validates output_format ∈ {mp4,webm,hls,dash}, quality ∈ {360p,480p,720p,1080p,4k}). |
POST | /v1/metadata | Technical metadata for a video URL. |
POST | /v1/thumbnail | Single thumbnail at a timestamp. |
POST | /v1/thumbnails | N evenly-spaced thumbnails. |
POST | /v1/audio | Extract the audio track. |
POST | /v1/scenes | Scene-boundary detection. |
GET | /health | Liveness + backend + tenancy posture. |
GET | /metrics | Prometheus metrics. |
Schemas
VideoRequest
| Field | Type | Description |
|---|
video_url | string | |
organization_id | string | optional; must match the verified tenant when a JWT is presented |
TranscodeRequest
ThumbnailRequest
ThumbnailsRequest
TranscodeResult
| Field | Type | Description |
|---|
job_id | string | |
status | string | |
output_url | string | |
| Field | Type | Description |
|---|
duration | number | |
width | integer | |
height | integer | |
codec | string | |
fps | number | |
bitrate | integer | |
size_bytes | integer | |
Error
| Field | Type | Description |
|---|
error | string | |
reason | string | |
detail | object | |
Generated by scripts/gen-capability-docs.py from contracts/media-transcode/v1/openapi.yaml — the contract IS the source of truth; edit the contract, not this page. The Edge route table section is synced from the live edge catalog snapshot (v1) — re-sync with python3 scripts/sync-edge-catalog.py.