v1

REST

JSON

API Reference

Programmatic access to the full Brainrotify engine. Generate brainrot videos, AI songs, and animated clips with the same pipeline powering the app.

Base URL

https://www.brainrotify.me/api/v1

Auth

X-API-Key: brk_…

Quickstart

Three shell commands to a rendered video.

KEY="brk_YOUR_KEY_HERE" # Submit a render job RESP=$(curl -s -X POST https://www.brainrotify.me/api/v1/render \ -H "X-API-Key: $KEY" -H "Content-Type: application/json" \ -d '{ "movie": { "mode": "brainrot", "title": "Black holes", "scenes": [{ "narration": "Black holes bend space and time itself.", "media": [{ "kind": "web_image", "search_query": "black hole" }] }] }, "settings": { "background_video_url": "https://cdn.brainrotify.me/assets/background_videos/minecraft-parkour-1_clip.mp4", "narrator_voice_id": "default", "subtitle_font": "Impact", "words_per_subtitle": 1 }, "variables": {} }') JOB_ID=$(echo $RESP | python3 -c "import sys,json; print(json.load(sys.stdin)['job_id'])") # Poll until done while true; do R=$(curl -s https://www.brainrotify.me/api/v1/render/$JOB_ID -H "X-API-Key: $KEY") echo $R STATUS=$(echo $R | python3 -c "import sys,json; print(json.load(sys.stdin)['status'])") [ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ] && break sleep 5 done

Authentication

Every request needs an X-API-Key header. Keys start with brk_. Create and manage keys in your Dashboard → API Keys. Your first key gets 10 free trial API credits.

curl https://www.brainrotify.me/api/v1/credits/balance \ -H "X-API-Key: brk_YOUR_KEY"

Error codes

Code

Meaning

401

Missing / invalid / revoked key

402

Insufficient API credits — detail shows cost + balance

403

Key has no API access — subscribe to an API plan

404

Resource or job not found

429

Rate limit exceeded — back off Retry-After seconds

Rate limits per key: free 5 rpm · starter 30 · growth 90 · scale 300

Catalog (read-only)

All accept ?search=, ?limit= (≤ 200), ?offset=. Returns {"data":[…],"count":N,"offset":N}.

GET

https://www.brainrotify.me/api/v1/characters

List avatar/voice characters

GET

https://www.brainrotify.me/api/v1/characters/{id}

Get one character

GET

https://www.brainrotify.me/api/v1/voices

List TTS / RVC voices

GET

https://www.brainrotify.me/api/v1/voices/{id}/preview

302 → preview audio

GET

https://www.brainrotify.me/api/v1/backgrounds

List background videos

GET

https://www.brainrotify.me/api/v1/backgrounds/categories

Category map

GET

https://www.brainrotify.me/api/v1/music

List background music

GET

https://www.brainrotify.me/api/v1/music/{id}

One track

GET

https://www.brainrotify.me/api/v1/music/{id}/preview

302 → preview clip

GET

https://www.brainrotify.me/api/v1/music/categories

Genre / mood map

Videos — scene pipeline

Full per-scene control. You supply the scenes + media elements. For AI-written scripts use POST /videos/classic below.

POST

https://www.brainrotify.me/api/v1/videos/generate

Submit → 202 {job_id, status, credits_used}

GET

https://www.brainrotify.me/api/v1/videos/{job_id}

Poll → {status, video_url, error}

GET

https://www.brainrotify.me/api/v1/videos

List your video jobs

POST /videos/generate body

{ "mode": "brainrot", "title": "3 facts about black holes", "background_video_id": "minecraft-parkour-1", "voice_settings": { "voice_id": "narrator_default" }, "caption_settings": { "font": "Impact", "words_per_subtitle": 1 }, "scenes": [ { "narration": "Black holes bend time itself.", "media": [{ "kind": "web_image", "search_query": "black hole" }] } ], "webhook_url": "https://you.example.com/hooks/brainrotify" }

Field

Type

Notes

mode

string

brainrot · story · story_reddit · story_messages · quiz · conversation · avatar · avatar_multi

background_video_id

string

From GET /backgrounds

scenes[].media[].kind

string

ai_image · web_image · web_gif

scenes[].media[].x/y/w/h

float?

Normalized 0–1 coords on the canvas. Omit → auto

scenes[].audio[]

array?

{url, volume, start_sec, loop} — per-scene SFX

webhook_url

string?

POSTed with final status on completion

Videos — classic / script pipeline

The LLM writes the entire narration script from your topic. Supports story, Reddit post, iMessage, and quiz formats. Best when you don't want to write scenes manually. Poll the result at GET /videos/{job_id}.

POST

https://www.brainrotify.me/api/v1/videos/classic

Submit → 202 {job_id, status, credits_used}

POST /videos/classic body

{ "mode": "story_reddit", "topic": "A person who discovers their cat can talk", "duration": "30", "background_video_id": "minecraft-parkour-1", "brainrotify_level": 70, "subtitle_font": "Bangers", "reddit_username": "u/SomeRedditor", "reddit_upvotes": "12.4k", "reddit_comments": "892", "webhook_url": "https://you.example.com/hooks/brainrotify" }

Field

Type

Notes

mode

string

story · story_reddit · story_messages · quiz · brainrot

topic

string

What the video is about — required

duration

string

Target length hint: 15, 30, 60 (seconds)

background_video_id

string

From GET /backgrounds

brainrotify_level

int

0–100 — how chaotic the script is

reddit_username

string?

Shown on the Reddit card (story_reddit mode)

reddit_upvotes

string?

Vote count on the card

messages_contact_name

string?

Contact name (story_messages mode)

webhook_url

string?

POSTed when job completes

status advances: queued → processing → completed | failed. video_url is a permanent CDN MP4 on completion. Failed jobs auto-refund API credits.

JSON2Video — /render

Full movie JSON with explicit coordinates, per-scene audio layers, and {{variable}} substitution. Same engine as /videos/generate but richer format.

POST

https://www.brainrotify.me/api/v1/render

Submit → 202 {job_id, status, credits_used}

GET

https://www.brainrotify.me/api/v1/render/{job_id}

Poll → {status, current_step, video_url, error}

Full example

{ "movie": { "mode": "brainrot", "title": "{{topic}} in 30s", "scenes": [ { "narration": "{{topic}} bends space and time.", "media": [ { "kind": "web_image", "search_query": "{{topic}}", "x": 0.05, "y": 0.04, "w": 0.90 }, { "kind": "web_gif", "search_query": "mind blown", "x": 0.55, "y": 0.60, "w": 0.40 } ], "audio": [{ "url": "https://example.com/whoosh.mp3", "volume": 0.4, "start_sec": 0.1 }] } ] }, "settings": { "background_video_url": "https://cdn.brainrotify.me/assets/background_videos/minecraft-parkour-1_clip.mp4", "narrator_voice_id": "default", "subtitle_font": "Impact", "words_per_subtitle": 1, "background_audio_url": "https://example.com/lofi.mp3", "background_audio_volume": 0.12, "tts_speed": 1.1 }, "variables": { "topic": "black holes" } }

Movie field

Notes

movie.scenes[].media[].kind

ai_image · web_image · web_gif

movie.scenes[].media[].x/y/w/h

Normalized 0–1 on the 1080×1920 canvas. Omit → auto layout

movie.scenes[].media[].resolved_url

Pre-fetch this URL directly (skip search) — ideal for motion_clip

movie.scenes[].audio[]

{url, volume, start_sec, duration_sec, loop} — per-scene SFX

settings.background_audio_url

Looping background music behind all scenes

variables

Dict of key → value; replaces all {{key}} in the movie JSON

Audio generation

Generate AI songs via the Suno engine. Usually returns two track variants. Failed jobs auto-refund credits.

POST

https://www.brainrotify.me/api/v1/audio/generate

Submit → 202 {job_id, status, credits_used}

GET

https://www.brainrotify.me/api/v1/audio/{job_id}

Poll → {status, tracks[], error}

POST /audio/generate body

{ "prompt": "Italian brainrot trap banger, chaotic energy", "style": "italian brainrot, trap, upbeat", "title": "My Banger", "model": "V4_5", "instrumental": false, "webhook_url": "https://you.example.com/hooks/brainrotify" }

Poll response

{ "job_id": "apiaud_abc123", "status": "completed", "tracks": [ { "audio_url": "https://cdn.suno.ai/abc.mp3", "title": "My Banger", "duration_sec": 142, "cover_image": "https://cdn.suno.ai/abc.jpg" } ], "credits_used": 2 }

Field

Type

Notes

prompt

string

Lyrics or song description — required

style

string?

Genre / style tags

model

string?

V4 · V4_5 · V4_5PLUS · V5 (default V4_5)

instrumental

bool?

Omit vocals

webhook_url

string?

POSTed with tracks on completion

Account & credits

GET

https://www.brainrotify.me/api/v1/credits/balance

Balance + plan info

GET

https://www.brainrotify.me/api/v1/credits/history

Usage grouped by endpoint (last 30 days)

GET

https://www.brainrotify.me/api/v1/account

Plan, balance, rate limit, 30-day usage

Credit costs

Operation

Credits

Standard video (brainrot, story, etc.)

1

Quiz / conversation video

2

Avatar video

5

AI song / lyric swap

2

AI image (per scene in /render)

1

API credits are separate from your app credit balance. Failed jobs auto-refund — you're only billed for successful generations.