Build with brainrot.mov

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.

API Key Auth

Pass your key via the X-API-Key header

Tiered Rate Limits

Creator: 50 req/day. Business: 200 req/day

50+ AI Voices

Full character roster with unique voices and avatars

Authentication

Create an API key from your profile settings, then include it in every request.

bash
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.

Rate Limiting

Every response includes rate limit headers. When you hit the limit you'll receive a 429 with a Retry-After header.

TierRequests / 24h
Creator50
Business200
X-RateLimit-LimitMaximum requests per window
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetISO 8601 timestamp when the window resets
X-API-TierYour subscription tier (Creator or Business)

Response Format

All v2 responses include a request_id for debugging. Success responses wrap data in a data field.

Success

json
{
  "data": { ... },
  "request_id": "req_a1b2c3d4"
}

Error

json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "topic is required"
  },
  "request_id": "req_a1b2c3d4"
}
StatusCodeMeaning
400VALIDATION_ERRORInvalid request body or parameters
401MISSING_API_KEYNo X-API-Key header provided
401INVALID_API_KEYAPI key not recognized
403FORBIDDENCreator or Business tier required
403PAYWALLEDUsage limit reached for your plan
404NOT_FOUNDResource does not exist
409CONFLICTIdempotency key conflict (request in-flight)
429RATE_LIMITEDToo many requests — check Retry-After header

Idempotency

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.

bash
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"}'

Endpoints

One-Shot Video Generation

Generate a complete video from just a topic. AI writes the script, generates all audio, and renders the video.

Scripts

Generate AI scripts, save them, edit them, then generate videos from finalized scripts.

Videos

Messages (Script Lines)

Audio Generation

Character Images

Overlays

Rendering

Generation Status

Reference Data

Read-only endpoints for discovering available characters, backgrounds, caption styles, layouts, and music.

Webhooks

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.

Verifying Webhook Signatures

Each webhook delivery includes an X-Webhook-Signature header containing an HMAC-SHA256 hex digest of the request body, signed with your webhook secret.

javascript
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)
  );
}

Webhook Payload

json
{
  "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"
}

Quickstart

Option A: One-Shot (simplest)

bash
# 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"

Option B: Script-first workflow

bash
# 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"}'

Option C: Full granular control

bash
# 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