Get a media item by id
Required permission: media:read
API key auth. Prefix cf_live_ for production orgs, cf_test_ for sandbox.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/media/string"{ "id": "string", "status": "string", "source": "upload", "name": "string", "mimeType": "string", "fileSize": 0, "duration": 0, "width": 0, "height": 0, "frameRate": 0, "progress": { "phase": "string", "percent": 0 }, "analysis": { "property1": null, "property2": null }, "thumbnailUrl": "string", "previewUrl": "string", "kind": "string", "tags": [ "string" ], "processingStatus": { "phase": "idle", "percent": 0, "message": "string", "error": "string" }, "createdAt": "string", "updatedAt": "string"}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}Trigger AI generation (Manim today) POST
Required permission: media:write
Get authoring context for a media item (faces + transcript) GET
The read-only context an agent needs to author a composition over this source: the detected face/subject roster (face-0 = primary speaker, with normalized bbox + active-speaker share) and the transcript. Call this before authoring crop intents (reframe) and overlay/caption timing. Faces are lazily detected — `faces.status` is `not_detected` until a compose/detect pass has run over the source, never a faked empty roster.