Make videos from your code.
Fivelabs Studio has two programmatic interfaces: a REST API for your backend, and an MCP server so AI assistants such as Claude and ChatGPT can make videos in a conversation. Both drive the same writer, render stack and editor as the studio.
Access and authentication
The API is in early access. Write to hello@fivelabs.xyz and we’ll set you up with a base URL and credentials.
- REST API v1 uses bearer tokens:
Authorization: Bearer $TOKEN. Tokens are created in Settings, shown once, stored hashed, can carry an expiry date and can be revoked. Up to 10 can be active at once. - MCP accepts OAuth 2.1 (authorization code with PKCE S256 and dynamic client registration) or a separate MCP key.
- Media links in responses are signed and expire after 7 days.
The video lifecycle
Shorts and long-form videos follow the same five calls.
- Create a project with either a
scriptor aprompt. With a prompt, the writer drafts the script; the project stays a draft until its sections appear. - Edit sections if you want to change a line or pin an image as a shot’s first frame. This is allowed until generation starts.
- Generate: narration with caption timing, then the shot renders on the GPU. If the shot list isn’t written yet, the writer drafts it and rendering starts automatically.
- Render assembles the final cut once generation is done.
- Poll the rendering status until it returns a
videoLink. Add&download=1to download the file.
curl -s "$FIVELABS/api/v1/faceless-shorts/create" \
-H "Authorization: Bearer $TOKEN" \
-H "content-type: application/json" \
-d '{
"name": "Octopus hearts",
"duration": 60,
"narrator": "andrew",
"imageTheme": "cinematic",
"script": "Octopuses have three hearts. Two pump blood to the gills. The third stops when they swim."
}'
REST endpoints
All paths are under /api/v1. Long-form videos use the same calls under /faceless-videos, with extra options on generate such as image theme and chapter titles.
| Method and path | What it does |
|---|---|
GET /me | The account, its credit balance and the token in use. |
GET /projects | Projects with pagination and filters by status, tool and name. |
POST /faceless-shorts/create | Create a Short from a script or a prompt. |
POST /faceless-shorts/edit-sections | Replace a section’s script or pin an image (PNG, JPEG or WebP, up to 10 MB) before generation. |
POST /faceless-shorts/generate | Start narration and shot renders. Idempotent; accepts max_credits and retry. |
GET /faceless-shorts/generation-status | Progress of narration and renders. |
POST /faceless-shorts/render | Assemble the final video. |
GET /faceless-shorts/rendering-status | Render state, and a signed videoLink when it’s done. |
… /faceless-videos/… | The same six calls for long-form videos. |
Responses and errors
Every response is wrapped as { requestId, data } and carries an X-Request-Id header. Unknown fields are rejected, so typos fail loudly instead of being ignored.
Error codes include invalid_api_token, insufficient_credits, project_not_found, invalid_project_state, validation_error (with details), script_duration_exceeded, invalid_narrator, section_not_found, invalid_image_url, image_too_large, media_generation_failed, render_failed and rate_limited.
MCP server
The MCP server speaks Streamable HTTP (protocol 2025-06-18, and also 2025-03-26 and 2024-11-05). When an assistant connects, a consent screen names the app and where it will send you, and you choose Allow or Deny. Authorization codes are single-use, and refresh tokens rotate with reuse detection.
Finished videos come back with a player resource, so the assistant can show the video in the conversation with download and copy-link actions.
You: Make a 45-second Short in Hindi about why Ganesha
broke his tusk, cinematic style. Keep it under 60 credits.
Assistant calls:
estimate_credits
create_faceless_shorts
generate_faceless_shorts max_credits: 60
get_faceless_shorts_generation_status
render_faceless_shorts
get_faceless_shorts_rendering_status
The 26 MCP tools
Read-only tools are annotated as such, and every tool has a strict input schema.
how_to_create_full_video_creation_to_renderget_userget_credit_balanceget_projectsget_projectget_scriptlist_voiceslist_voice_engineslist_image_styleslist_avatarslist_upgradesestimate_creditsadd_custom_voiceremove_custom_voicecreate_faceless_shortsedit_faceless_shorts_sectionsgenerate_faceless_shortsget_faceless_shorts_generation_statusrender_faceless_shortsget_faceless_shorts_rendering_statuscreate_faceless_videoedit_faceless_video_sectionsgenerate_faceless_videoget_faceless_video_generation_statusrender_faceless_videoget_faceless_video_rendering_status
Publishing
- YouTube: resumable uploads, the synthetic-media disclosure set on every upload, and #Shorts added for vertical videos.
- Instagram: Reels through the Instagram Graph API.
- Publishing jobs retry automatically if an upload fails.
Spending controls
One credit is $0.01 of GPU or provider spend. estimate_credits gives an itemised estimate before anything is charged, max_credits caps a single call, queued work reserves its estimate, and renders stop at the monthly budget. Requests over the rate limit get 429 rate_limited.
Want to build on Fivelabs? Request API access and tell us what you’re making.