If you've been searching for a brainrot API — a way to generate short-form videos from code instead of clicking through an editor — this is the walkthrough. The Brainrot Shorts API exposes the same engine that powers the app over plain REST: AI voiceover, gameplay backgrounds, and word-by-word captions, all from a single POST.
By the end you'll have a script that turns a few lines of text into a finished, watermark-free vertical MP4, ready for TikTok, Reels, or YouTube Shorts.
Step 1 — Create an API key
Open the API dashboard and create a new REST key. The full key is shown once and is prefixed with brs_ — copy it somewhere safe. You'll send it in the X-API-Key header on every request.
Store it as an environment variable so it never lands in your code:
export BRS_API_KEY="brs_your_api_key"
Sanity-check that the key works by calling the /me endpoint:
curl https://www.brainrotshorts.com/api/v1/me \
-H "X-API-Key: $BRS_API_KEY"
You should get back your account context:
{ "data": { "userId": "usr_123", "plan": "creator" }, "requestId": "req_5f3c0e9d" }
Every response uses the same envelope: a data object on success, an error object on failure, and always a requestId you can quote in support requests.
Step 2 — Create a project
The fastest workflow is AI Voice Over: you supply scenes of text and a background video, and the API narrates them with captions. Send a POST to /voiceover/projects.
Notice the Idempotency-Key header — if your request times out and you retry with the same key and body, the API replays the original response instead of creating a duplicate project. Always set one on writes.
curl https://www.brainrotshorts.com/api/v1/voiceover/projects \
-H "X-API-Key: $BRS_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: clip-001" \
-d '{
"title": "Daily AI news",
"voiceId": "peter_griffin",
"backgroundVideoUrl": "https://cdn.example.com/gameplay.mp4",
"scenes": [
{ "text": "Everyone thinks AI replaces video editors." },
{ "text": "The real edge is shipping ten variants before lunch." }
]
}'
The response hands back a project ID:
{ "data": { "project": { "id": "proj_a1b2c3", "kind": "ai-voice-over-video", "status": "draft" } }, "requestId": "req_5f3c0e9d" }
Here's the same call in JavaScript and Python:
const res = await fetch(
"https://www.brainrotshorts.com/api/v1/voiceover/projects",
{
method: "POST",
headers: {
"X-API-Key": process.env.BRS_API_KEY,
"Content-Type": "application/json",
"Idempotency-Key": "clip-001",
},
body: JSON.stringify({
title: "Daily AI news",
voiceId: "peter_griffin",
backgroundVideoUrl: "https://cdn.example.com/gameplay.mp4",
scenes: [
{ text: "Everyone thinks AI replaces video editors." },
{ text: "The real edge is shipping ten variants before lunch." },
],
}),
},
);
const { data } = await res.json();
const projectId = data.project.id;
import os, requests
res = requests.post(
"https://www.brainrotshorts.com/api/v1/voiceover/projects",
headers={"X-API-Key": os.environ["BRS_API_KEY"], "Idempotency-Key": "clip-001"},
json={
"title": "Daily AI news",
"voiceId": "peter_griffin",
"backgroundVideoUrl": "https://cdn.example.com/gameplay.mp4",
"scenes": [
{"text": "Everyone thinks AI replaces video editors."},
{"text": "The real edge is shipping ten variants before lunch."},
],
},
)
project_id = res.json()["data"]["project"]["id"]
Step 3 — Start the render
A project is just a draft until you render it. Approve and kick off a render by posting to /projects/{projectId}/render:
curl https://www.brainrotshorts.com/api/v1/projects/proj_a1b2c3/render \
-H "X-API-Key: $BRS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "approved": true }'
{ "data": { "render": { "id": "rnd_99", "status": "rendering", "progress": 0.0 } }, "requestId": "req_5f3c0e9d" }
Step 4 — Poll until it's done
The v1 API is polling-based, so check the render status until it reports done, then read the outputUrl:
curl https://www.brainrotshorts.com/api/v1/projects/proj_a1b2c3/render \
-H "X-API-Key: $BRS_API_KEY"
{ "data": { "render": { "id": "rnd_99", "status": "done", "progress": 1, "outputUrl": "https://.../proj_a1b2c3.mp4" } }, "requestId": "req_5f3c0e9d" }
That's the entire loop: key → project → render → poll → MP4. The same four steps work for Reddit story videos (/reddit/videos/from-url even does create-and-render in one call) and AI brainrot dialogue videos.
Where to go next
- Wire this into a faceless-channel pipeline: read ideas from a sheet, loop the four steps, and post the output URLs on a schedule.
- Generate scripts via the API first (
/voiceover/scripts/generate) if you want the model to write the scenes for you. - Read the complete API documentation for every endpoint, the full error catalog, and idempotency details.
When you're ready, grab a key from the API dashboard and ship your first automated brainrot short today.