Skip to main content

Documentation Index

Fetch the complete documentation index at: https://ansdevcloud.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Video Processing

A video moves through a deterministic state machine from upload to delivery. The public API exposes the current state via the status field; the Smart Stream Console in the dashboard surfaces the same data with a progress UI.

Lifecycle

PRICING ─▶ ESCROW_LOCKED ─▶ UPLOADING ─▶ QUEUED ─▶ TRANSCODING ─▶ MIGRATING ─▶ COMPLETED

                                                                                   └─▶ (any) ─▶ FAILED
StatusMeaning
PRICINGJob row created, price quoted, escrow not yet locked.
ESCROW_LOCKEDCredits debited from your CREATIVE wallet bucket and held.
UPLOADINGPre-signed R2 URL issued; browser is uploading the source file.
QUEUEDSource landed in R2; FFmpeg job queued.
TRANSCODINGCloud Run Job is running FFmpeg.
MIGRATINGChunks moving from raw-intakemedia-delivery bucket.
COMPLETEDReady to mint playback tokens. Escrow settled.
FAILEDSomething blew up. Escrow refunded automatically.
Only COMPLETED videos can mint playback tokens (VIDEO_NOT_READY otherwise).

Quality ladder

You choose a target quality at upload time. The transcoder produces a single HLS rendition at that quality plus its lower siblings only if you opted in. For typical embeds, a single 480p or 720p ladder is plenty for hls.js adaptive bitrate.
TargetResolutionBitrate (kbps)
480p854 × 4801,200
720p1280 × 7202,500
1080p1920 × 10804,500
1440p2560 × 14408,000
2160p3840 × 216016,000
audio128

Where the bytes live

  • Source: Cloudflare R2 (raw-intake bucket, 24h auto-delete after success).
  • Delivery: Cloudflare R2 (media-delivery bucket, fronted by streem.ansdev.cloud).
You never see these URLs through the API. The Player SDK fetches a CDN-rooted master.m3u8 via the playback-token flow, then hls.js resolves the chunks against the CDN edge — free of egress.

Polling vs. webhooks

The public API today is poll-only (re-read GET /v1/video/:id until status === 'COMPLETED'). Webhook delivery for status transitions is on the roadmap — let us know if you need it.