Generate AI explainer videos with a single API call, or use granular endpoints for full control over scripts, voices, character positioning, and rendering. Available to Creator and Business tier subscribers.
Pass your key via the X-API-Key header
Creator: 50 req/day. Business: 200 req/day
Full character roster with unique voices and avatars
Create an API key from your profile settings, then include it in every request.
curl https://brainrot.mov/api/v2/characters \
-H "X-API-Key: brm_your_api_key_here"Keep your key secret. It grants full access to your account's API. If compromised, revoke it immediately in settings and create a new one.
Every response includes rate limit headers. When you hit the limit you'll receive a 429 with a Retry-After header.
| Tier | Requests / 24h |
|---|---|
| Creator | 50 |
| Business | 200 |
X-RateLimit-LimitMaximum requests per windowX-RateLimit-RemainingRequests remaining in current windowX-RateLimit-ResetISO 8601 timestamp when the window resetsX-API-TierYour subscription tier (Creator or Business)All v2 responses include a request_id for debugging. Success responses wrap data in a data field.
{
"data": { ... },
"request_id": "req_a1b2c3d4"
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "topic is required"
},
"request_id": "req_a1b2c3d4"
}| Status | Code | Meaning |
|---|---|---|
| 400 | VALIDATION_ERROR | Invalid request body or parameters |
| 401 | MISSING_API_KEY | No X-API-Key header provided |
| 401 | INVALID_API_KEY | API key not recognized |
| 403 | FORBIDDEN | Creator or Business tier required |
| 403 | PAYWALLED | Usage limit reached for your plan |
| 404 | NOT_FOUND | Resource does not exist |
| 409 | CONFLICT | Idempotency key conflict (request in-flight) |
| 429 | RATE_LIMITED | Too many requests — check Retry-After header |
For mutating endpoints (POST), pass an Idempotency-Key header. If the same key is sent within 24 hours, you'll receive the cached response instead of creating a duplicate.
curl -X POST https://brainrot.mov/api/v2/videos/generate \
-H "X-API-Key: brm_your_key" \
-H "Idempotency-Key: my-unique-request-id" \
-H "Content-Type: application/json" \
-d '{"topic": "Why cats are better than dogs"}'Generate a complete video from just a topic. AI writes the script, generates all audio, and renders the video.
Generate AI scripts, save them, edit them, then generate videos from finalized scripts.
Read-only endpoints for discovering available characters, backgrounds, caption styles, layouts, and music.
Register webhooks to receive real-time notifications when video generation completes or fails. Payloads are signed with HMAC-SHA256. Webhooks auto-disable after 5 consecutive delivery failures.
Each webhook delivery includes an X-Webhook-Signature header containing an HMAC-SHA256 hex digest of the request body, signed with your webhook secret.
const crypto = require("crypto");
function verifyWebhook(body, signature, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(body)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}{
"event": "generation.completed",
"data": {
"video_id": "abc123",
"generation_id": "gen_xyz",
"status": "finished",
"video_url": "https://cdn.../gen_xyz.mp4"
},
"timestamp": "2026-04-01T12:00:00.000Z"
}# Generate a complete video from a topic
curl -X POST https://brainrot.mov/api/v2/videos/generate \
-H "X-API-Key: brm_your_key" \
-H "Content-Type: application/json" \
-d '{
"topic": "Why cats are better than dogs",
"characters": ["Peter Griffin", "Stewie Griffin"]
}'
# Poll until complete (or use SSE stream / webhook)
curl https://brainrot.mov/api/v2/generations/GENERATION_ID \
-H "X-API-Key: brm_your_key"# 1. Generate a script
curl -X POST https://brainrot.mov/api/v2/scripts/generate \
-H "X-API-Key: brm_your_key" \
-H "Content-Type: application/json" \
-d '{"topic": "Why cats rule the internet"}'
# 2. Save the script (you can edit it first)
curl -X POST https://brainrot.mov/api/v2/scripts \
-H "X-API-Key: brm_your_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Cats Rule",
"character_pair": ["Peter Griffin", "Stewie Griffin"],
"content": [{"character":"Peter Griffin","text":"Yo..."}]
}'
# 3. Generate video from saved script
curl -X POST https://brainrot.mov/api/v2/scripts/SCRIPT_ID/generate-video \
-H "X-API-Key: brm_your_key" \
-H "Content-Type: application/json" \
-d '{"layout": "split-screen"}'# 1. Create a video project
curl -X POST https://brainrot.mov/api/v2/videos \
-H "X-API-Key: brm_your_key" \
-H "Content-Type: application/json" \
-d '{"name": "My Video", "background": "parkour1", "layout": "split-screen"}'
# 2. Add messages
curl -X POST https://brainrot.mov/api/v2/videos/VIDEO_ID/messages \
-H "X-API-Key: brm_your_key" \
-H "Content-Type: application/json" \
-d '{"text": "Yo what is up", "character": "Peter Griffin"}'
# 3. Generate audio for each message
curl -X POST https://brainrot.mov/api/v2/messages/MESSAGE_ID/audio \
-H "X-API-Key: brm_your_key"
# 4. Assign character image (auto-positioned by layout)
curl -X POST https://brainrot.mov/api/v2/messages/MESSAGE_ID/image \
-H "X-API-Key: brm_your_key" \
-H "Content-Type: application/json" \
-d '{"layout": "split-screen", "slot_index": 0}'
# 5. Trigger render
curl -X POST https://brainrot.mov/api/v2/videos/VIDEO_ID/render \
-H "X-API-Key: brm_your_key"
# 6. Stream progress via SSE
curl -N https://brainrot.mov/api/v2/generations/GENERATION_ID/stream \
-H "X-API-Key: brm_your_key"Need help? Reach out at cj@cjrapps.com