Endpoints
| Mode | Endpoint | Use case |
|---|---|---|
| Magic Video | POST /api/v1/videos/magic | One-click branded video — the default; uses Brand DNA |
| Text-to-Video | POST /api/v1/videos/text-to-video | Raw prompt → AI video (Sora-2, Kling 2.5, Wan 2.5, Seedance, Pixverse) |
| Image-to-Video | POST /api/v1/videos/image-to-video | Animate a still image with motion + camera direction |
| AI Story | POST /api/v1/videos/ai-story | GPT-written story + AI visuals + voiceover |
| Reddit Story | POST /api/v1/videos/reddit-story | Narrated Reddit post format with karaoke captions |
| Motivational | POST /api/v1/videos/motivational | Quote + hook + stock clips + voiceover |
| News Video | POST /api/v1/videos/news | CNN/Bloomberg-style broadcast graphics from a news topic |
| RSS Video | POST /api/v1/videos/rss | Auto-generate from an RSS feed (one video per item) |
| UGC Ad | POST /api/v1/videos/ugc | Hyper-realistic talking-head ad with Seedance presenter |
| Soothing | POST /api/v1/videos/soothing | Ambient relaxation video with custom music + visuals |
| Fake Chat | POST /api/v1/videos/fake-chat | Simulated text-message conversation with voice |
Quickstart — Magic Video
The fastest path is Magic Video: pass a topic + your brand_id, get back a fully branded video in 2-4 minutes.
curl -X POST https://api.reelsbuilder.ai/api/v1/videos/magic \
-H "Authorization: Bearer $REELSBUILDER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"topic": "shipping velocity benchmarks Q1 2026",
"brand_id": "brn_01HKZ...",
"duration_target_sec": 30,
"webhook_url": "https://your-app.example.com/webhooks/video"
}'Initial response
{
"success": true,
"data": {
"job_id": "vjob_01HKZ...",
"video_id": "vid_01HKZ...",
"status": "queued",
"estimated_completion_sec": 180,
"websocket_url": "wss://api.reelsbuilder.ai/ws/progress?videoId=vid_01HKZ...&token=..."
},
"meta": { "request_id": "req_...", "credits_used": 15, "credits_remaining": 985 }
}Text-to-Video
Pure AI-generated video from a prompt. No script, no voiceover by default — just video. For social-ready posts, prefer Magic Video.
curl -X POST https://api.reelsbuilder.ai/api/v1/videos/text-to-video \
-H "Authorization: Bearer $REELSBUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Cyberpunk Tokyo at dawn, neon reflections in puddles, slow drone shot",
"model": "sora_2",
"duration_sec": 5,
"aspect_ratio": "9:16"
}'| Model | Cost | Best for |
|---|---|---|
sora_2 | 40 credits | Cinematic + complex motion |
kling_2_5 | 30 credits | Realistic human movement |
wan_2_5 | 20 credits | Stylized + animation |
seedance | 15 credits | UGC-style talking head |
pixverse | 10 credits | Fast iteration, lower quality |
higgsfield | 25 credits | Camera-controlled shots |
Image-to-Video
Animate a still image into 3-10 seconds of motion. Best for product shots, character animation, and brand stills.
curl -X POST https://api.reelsbuilder.ai/api/v1/videos/image-to-video \
-H "Authorization: Bearer $REELSBUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://your-cdn.example.com/product.jpg",
"motion_prompt": "slow zoom in, gentle parallax",
"model": "kling_2_5",
"duration_sec": 5
}'News Video
Broadcast-quality news shorts with lower thirds, tickers, and real-time data overlays. Powered by server/lib/services/broadcast-graphics-service.ts.
curl -X POST https://api.reelsbuilder.ai/api/v1/videos/news \
-H "Authorization: Bearer $REELSBUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"headline": "Fed signals rate cut for September",
"source_url": "https://reuters.com/...",
"graphics_style": "cnn",
"ticker_data": "stocks",
"brand_id": "brn_01HKZ..."
}'Graphics styles: cnn, bloomberg, fox, bbc, minimal. Ticker data sources: stocks (Finnhub), crypto (CoinGecko), weather (OpenWeatherMap), news (NewsAPI).
Progress via WebSocket
Every video job returns a websocket_url in its initial response. Open it to receive granular progress events (0-100%) with stage labels like "generating script", "rendering captions", "uploading to CDN".
const ws = new WebSocket(job.websocket_url);
ws.onmessage = (event) => {
const { progress, status, stage, url } = JSON.parse(event.data);
console.log(`[${progress}%] ${stage}`);
if (status === "completed") {
console.log("Done:", url);
ws.close();
}
};Progress history is buffered for 1 hour after completion, so brief network drops don't lose state.
Webhook callback
Alternative to WebSocket. Pass webhook_url in the request body to receive a single video.completed or video.failed event when the job ends. See webhooks.
Captions
All voiceover-bearing modes include karaoke-style captions by default (63 styles available). Disable with captions: false or choose a specific style:
{
"topic": "...",
"captions": "neon_outline_yellow"
}Full caption style catalog returned by GET /api/v1/resources/caption-styles.
Pricing
| Mode | Base cost | Notes |
|---|---|---|
| Magic Video | 15 | +0 for branded |
| Text-to-Video | 10-40 | Varies by model |
| Image-to-Video | 10-30 | Varies by model |
| AI Story | 20 | Fixed |
| Reddit Story | 15 | Fixed |
| Motivational | 10 | Fixed |
| News Video | 12 | +2 for live data tickers |
| RSS Video | 10 | Per item |
| UGC Ad | 20 | Includes presenter generation |
| Soothing | 15 | Per minute of length |
| Fake Chat | 10 | Fixed |
Performance
- Magic Video p50: 145s | p99: 280s
- Text-to-Video p50: 45s (Pixverse) – 180s (Sora-2)
- News Video p50: 95s | p99: 200s
- Max job lifetime: 10 minutes (then
PROCESS_TIMEOUTwith refund)
See also
- Generate & Post API — adds multi-platform fan-out
- Transcribe API — captions for existing videos
- Brand DNA API — required input for Magic Video
- Webhooks — async completion delivery