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.

  1. Create a project with either a script or a prompt. With a prompt, the writer drafts the script; the project stays a draft until its sections appear.
  2. 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.
  3. 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.
  4. Render assembles the final cut once generation is done.
  5. Poll the rendering status until it returns a videoLink. Add &download=1 to download the file.
Create a Short from your own scriptREST API v1
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 pathWhat it does
GET /meThe account, its credit balance and the token in use.
GET /projectsProjects with pagination and filters by status, tool and name.
POST /faceless-shorts/createCreate a Short from a script or a prompt.
POST /faceless-shorts/edit-sectionsReplace a section’s script or pin an image (PNG, JPEG or WebP, up to 10 MB) before generation.
POST /faceless-shorts/generateStart narration and shot renders. Idempotent; accepts max_credits and retry.
GET /faceless-shorts/generation-statusProgress of narration and renders.
POST /faceless-shorts/renderAssemble the final video.
GET /faceless-shorts/rendering-statusRender 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.

What a session looks likeMCP
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_render
  • get_user
  • get_credit_balance
  • get_projects
  • get_project
  • get_script
  • list_voices
  • list_voice_engines
  • list_image_styles
  • list_avatars
  • list_upgrades
  • estimate_credits
  • add_custom_voice
  • remove_custom_voice
  • create_faceless_shorts
  • edit_faceless_shorts_sections
  • generate_faceless_shorts
  • get_faceless_shorts_generation_status
  • render_faceless_shorts
  • get_faceless_shorts_rendering_status
  • create_faceless_video
  • edit_faceless_video_sections
  • generate_faceless_video
  • get_faceless_video_generation_status
  • render_faceless_video
  • get_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.