When to use it
- Turning a plain talking-head or screen-recording into a news-broadcast-styled clip without After Effects.
- Finance/crypto channels that need a live ticker reflecting current prices at render time.
- Automated news desks pairing this with Video Generation (news mode) for a fully branded broadcast look.
- Adding a persistent lower-third name/title bar to interview or testimonial footage.
To generate the underlying news video and overlays in one call, use Video Generation with mode: "news_video" instead — this endpoint is the overlay-only surface for video you already have.
Endpoints
POST /api/v1/broadcast-graphics— Composite overlays onto a source video (async job)GET /api/v1/jobs/{job_id}— Poll job status + result URLGET /api/v1/broadcast-graphics/feeds— List supported live-data feeds and their current freshness
Quickstart — static lower third
curl -X POST https://api.reelsbuilder.ai/api/v1/broadcast-graphics \
-H "Authorization: Bearer $REELSBUILDER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://your-cdn.example.com/interview.mp4",
"theme": "newsroom",
"overlays": [
{
"type": "lower_third",
"title": "Jane Okafor",
"subtitle": "Chief Economist, ReelsBuilder",
"start": 2.0,
"end": 8.0,
"position": "bottom_left"
}
],
"webhook_url": "https://your-app.example.com/webhooks/graphics"
}'Initial response
{
"success": true,
"data": {
"job_id": "bgfx_01HKZ...",
"status": "queued",
"estimated_seconds": 35
},
"meta": { "request_id": "req_...", "credits_used": 8, "credits_remaining": 992 }
}Overlay types
| Type | Purpose | Key fields |
|---|---|---|
lower_third | Name/title bar (interviews, attributions) | title, subtitle, position |
ticker | Scrolling bottom crawl (headlines or live data) | items[] or feed, speed |
caption | Centered headline / breaking-news banner | text, style (breaking, standard) |
progress_bar | Story/segment progress indicator | segments, accent_color |
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
video_url | URL | yes | Public HTTPS URL to the source video. mp4, mov, webm. |
overlays | object[] | yes | 1-8 overlay objects. See overlay types above. |
theme | string | no | newsroom (default), finance, sports, minimal. Sets font, accent color, and bar geometry. |
aspect_ratio | string | no | 9:16 (default), 1:1, 16:9. Drives safe-zone insets. |
safe_zone | boolean | no | Default true. Keeps overlays clear of platform UI (caption box, profile rail). |
brand_id | string | no | Apply a saved brand's palette + font system to all overlays. |
webhook_url | URL | recommended | HTTPS URL for completion callback. |
Live-data feeds
A ticker or lower_third can bind to a live feed instead of static text. Values are resolved at render time and frozen into the output frames — the video does not update after rendering.
{
"type": "ticker",
"feed": {
"source": "stocks",
"symbols": ["AAPL", "NVDA", "TSLA"]
},
"speed": "medium"
}Feed source | Provider | Fields surfaced |
|---|---|---|
stocks | Finnhub (Alpha Vantage fallback) | price, change, % change |
crypto | CoinGecko | price, 24h change |
news | NewsAPI | headline, source |
weather | OpenWeatherMap | temp, conditions |
Feed staleness is returned in the completion webhook under data.feeds[].fetched_at so you can decide whether a re-render is warranted. If a feed provider is unreachable, the job completes with the overlay rendered from the last cached value and a warnings[] entry rather than failing the whole render.
Completion webhook
{
"event_type": "broadcast_graphics.completed",
"data": {
"job_id": "bgfx_01HKZ...",
"status": "completed",
"output_url": "https://cdn.reelsbuilder.ai/renders/bgfx_01HKZ.mp4",
"duration_seconds": 18.4,
"overlays_rendered": 3,
"feeds": [
{ "source": "stocks", "symbols": ["AAPL"], "fetched_at": "2026-06-02T14:03:11Z" }
],
"warnings": []
}
}Example — TypeScript, finance ticker + breaking banner
const res = await fetch(
"https://api.reelsbuilder.ai/api/v1/broadcast-graphics",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.REELSBUILDER_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
video_url: "https://cdn.example.com/market-recap.mp4",
theme: "finance",
aspect_ratio: "9:16",
overlays: [
{
type: "caption",
text: "MARKETS RALLY",
style: "breaking",
start: 0,
end: 3,
},
{
type: "ticker",
feed: { source: "crypto", symbols: ["BTC", "ETH", "SOL"] },
speed: "medium",
},
],
webhook_url: "https://your-app.example.com/webhooks/graphics",
}),
},
);
const { data } = await res.json();
console.log(data.job_id); // bgfx_...Pricing
- 8 credits per render, regardless of overlay count.
- Live-data feed lookups are included — no per-symbol charge.
- Failed renders (bad source video, unreachable URL) are refunded. A render that completes with feed
warnings[]is not refunded — it produced valid output.
Limits & notes
- Source video max 10 minutes / 500MB.
- Up to 8 overlays per render; 1 ticker active at a time.
- Overlays are burned in. For editable graphics, render separate transparent overlay tracks via the OpenAPI
format: "overlay_png_sequence"option. - Safe zones follow the per-platform constants documented in the broadcast-quality implementation guide; disable with
safe_zone: falseonly if you control final placement.
See also
- Video Generation — news mode generates the base video + overlays together
- Multi-Platform Post — distribute the finished broadcast clip
- Webhooks — signature verification + retry policy