Projects
List projects
GET https://api.scenema.ai/v1/projects lists every project in the workspace, newest first, with page and perPage (up to 100). It includes projects made in the Scenema app, by the Director and through the API.
{ "items": [ { "id": "proj_4559d9dd5dc8d53", "name": "Why the sky is blue", "kind": "video", "aspectRatio": "9:16", "thumbnailUrl": "https://cdn.scenema.ai/thumbs/proj_4559d9dd5dc8d53.webp", "durationMs": 58000, "working": false, "createdAt": "2026-11-06T18:12:00.000Z", "updatedAt": "2026-11-06T18:40:00.000Z", "studioUrl": "https://scenema.ai/app/studio/proj_4559d9dd5dc8d53" } ], "total": 1, "page": 1, "perPage": 20}| Field | Meaning |
|---|---|
kind |
video, or audio for a narration only project. |
aspectRatio |
The frame shape, such as 16:9 or 9:16. Null for audio. |
thumbnailUrl |
A still of the project, when it has one. The link expires; list again for a fresh one. |
durationMs |
The length of its recorded narration. Chapters with no audio yet count as 0. |
working |
True while something is being made for it: narration, images, clips or an export. |
studioUrl |
The project in the Scenema studio on the web. |
Get a project
GET https://api.scenema.ai/v1/projects/{id} returns the project’s chapters and shots. An app reads it to show a shot strip: each shot’s image and clip, and where they stand.
{ "id": "proj_4559d9dd5dc8d53", "name": "Why the sky is blue", "kind": "video", "aspectRatio": "9:16", "status": "processing", "chapters": [ { "id": "scene_5f0a3b", "number": 1, "name": "Light through the air", "stage": "ready", "narration": { "url": "https://cdn.scenema.ai/a/1.mp3", "durationMs": 58000, "approved": true }, "durationMs": 58000, "shots": [ { "id": "shot_8a1c2e", "number": 1, "name": "Sunlight holds every colour", "startMs": 0, "endMs": 7400, "image": { "status": "ready", "url": "https://cdn.scenema.ai/k/1.webp" }, "clip": { "status": "working", "url": null, "durationMs": null, "stale": false } } ] } ], "pollAfterMs": 5000}| Field | Meaning |
|---|---|
status |
processing while something is being made for the project, idle otherwise. |
chapters[].stage |
What the chapter waits on: needs_narration, needs_approval (the user approves the narration), needs_style, or ready. |
chapters[].narration |
The chapter’s narration once there is one, and whether the user approved it. |
shots[].startMs, shots[].endMs |
Where the shot sits on its chapter’s timeline. |
shots[].image.status |
waiting (not designed yet), queued, working, waiting_for_credits, ready or failed. |
shots[].clip.status |
none (not animated), queued, working, waiting_for_credits, ready or failed. |
shots[].clip.stale |
True when the shot’s image changed after its clip was made. The clip still plays. |
Image and clip links expire. Read the project again for fresh ones.
Follow a project while it works
While status is processing, poll it the same way as a video (see Polling):
- Send
wait(up to 30 seconds) to hold the request until the project changes, or until the wait ends. - Send
If-None-Matchwith the lastETagto get304 Not Modifiedwhen nothing changed. pollAfterMssays how long to wait before reading again: 5 seconds while processing.
An unknown project, or one in another workspace, gets 404 with code: NOT_FOUND.