GET /v1/projects/:projectId/content
List content containers on a project, filtered by status, format, and time range.
GET
/v1/projects/:projectId/contentPhase 1stable
- Auth
- Bearer
- Scope
- content:read
Cursor-paginated list of containers, newest first. Filter by generation status, format, or a time window.
Path parameters
projectIdstring (uuid)requiredProject to list containers for.
Query parameters
statusstring | string[]optionalFilter on generation status. Repeat the param to combine.One of:queued,generating,completed,failed,canceledformatstring | string[]optionalFilter on format.One of:video_remix,slideshow_remix,ugc_remix,autosincestring (ISO-8601)optionalOnly containers created at or after this timestamp.untilstring (ISO-8601)optionalOnly containers created at or before this timestamp.cursorstringoptionalOpaque cursor from the previous page. Pass the `nextCursor` value verbatim — do not decode or modify it. Cursors are bound to the original sort (created_at desc).limitintegeroptionaldefault: 25Max 200.
Request
curl "https://api.layers.com/v1/projects/{projectId}/content?status=completed&limit=20" \
-H "X-Api-Key: $LAYERS_API_KEY"const params = new URLSearchParams({
status: 'completed',
limit: '50',
});
const res = await fetch(
`https://api.layers.com/v1/projects/${projectId}/content?${params}`,
{ headers: { 'X-Api-Key': process.env.LAYERS_API_KEY! } },
);
const { items, nextCursor } = await res.json();import os, httpx
r = httpx.get(
f"https://api.layers.com/v1/projects/{project_id}/content",
params={"status": ["completed", "failed"], "format": ["video_remix"]},
headers={"X-Api-Key": os.environ["LAYERS_API_KEY"]},
)
data = r.json()Responses
200Page of containers.
{
"items": [
{
"id": "cnt_01HXZ9...",
"status": "completed",
"format": "video_remix",
"caption": "Your first 30 days of running.",
"approvalStatus": "pending",
"createdAt": "2026-04-17T13:10:00Z",
"completedAt": "2026-04-17T13:14:22Z",
"primaryAsset": {
"assetId": "ast_01HXZ9...",
"kind": "video",
"thumbnailUrl": "https://media.layers.com/.../cnt_01HXZ9/thumb.jpg",
"durationMs": 9200
}
}
],
"nextCursor": "eyJjcmVhdGVkQXQiOiIyMDI2LTA0LTE3VDEzOjEwOjAwWiIsImlkIjoiNzg5NGIxZDUtMmFhNy00MWY5LWE4NTktMjgwMzA2ZWE1NjcyIn0"
}Common filters
- Rescue failed jobs.
status=failed&since=2026-04-01T00:00:00Z— sweep for broken containers to regenerate. - In-flight work.
status=queued&status=generating— everything currently being produced. - UGC-only.
format=ugc_remix— if you're running a separate UGC review flow from brand content.
Errors
| Code | When |
|---|---|
VALIDATION_FAILED | Bad enum value, limit > 200. |
NOT_FOUND | Project id not in this org. |