One authenticated endpoint suite, two doors in. A REST API for pipelines — POST a brief, poll the job, collect the finished ad. An MCP server for Claude — your whole studio as sixteen tools. Same engine, same actors, same token balance as the app.
Authenticate every request with your ci_live_ key as a Bearer token. Cast, poll, collect — the whole loop is three curl commands.
Send the brief — actor, product, pain point, CTA, tone, quality. The engine writes the hook, directs the actor and starts the render. You get back the ad's id immediately.
curl -X POST https://app.castingiron.ai/api/v1/ads \
-H "Authorization: Bearer ci_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"actorId": "nora",
"product": "GlowDrop Vitamin C Serum",
"pain_point": "dull, tired-looking skin",
"cta": "Grab yours at glowdrop.com",
"tone": "friendly",
"quality": "standard"
}'
# → { "id": "..." } tokens are held now, refunded if the render fails
Renders finish in minutes. Poll the ad by id — when status flips to completed, final_url is your feed-ready file, captions burned in.
curl https://app.castingiron.ai/api/v1/ads/AD_ID \
-H "Authorization: Bearer ci_live_YOUR_KEY"
# → { "status": "processing" } keep polling
# → { "status": "completed", "final_url": "https://..." } ship it
The same partner models the app runs — Veo, Sora, Kling, Seedance, Wan, Hailuo, Pixverse, LTX — sit behind the same key for b-roll and cutaways. List the catalog with live per-clip token prices, then generate against any of them.
# the catalog, with per-clip token prices
curl https://app.castingiron.ai/api/v1/models \
-H "Authorization: Bearer ci_live_YOUR_KEY"
# generate a clip on any model from the list
curl -X POST https://app.castingiron.ai/api/v1/clips \
-H "Authorization: Bearer ci_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-2.5-turbo-pro",
"prompt": "slow pan across a serum bottle on wet slate, morning light"
}'
The same endpoint suite speaks MCP. Add Castingiron as a server and Claude gets sixteen tools — cast ads and whole campaigns, browse the actor and voice rosters, import product pages, write scripts, check job status — all spending your one token balance.
# Claude Code — one command
claude mcp add --transport http castingiron https://app.castingiron.ai/api/mcp \
--header "Authorization: Bearer ci_live_YOUR_KEY"
Claude Desktop: Settings → Connectors → Add custom connector, URL https://app.castingiron.ai/api/mcp, with the same Authorization header. That's the whole setup — no local server, no npm install.
| You say to Claude | It reaches for |
|---|---|
| "Cast a campaign of 12 ads across my catalog, one hook style per batch, rotate the actors." | cast_campaign |
| "Which actors read as 30-something and high-energy? Show me voices that match." | list_actors list_voices |
| "Here's the product page — pull the brief from it and cast a standard ad." | import_url cast_ad |
No separate API plan, no per-seat fees. Every call spends the same token balance your team already shares — and failed renders refund themselves.
Anything that turns briefs into video belongs on this API. A few shapes teams are already shipping:
Your own portal on top of the engine — clients submit briefs, your pipeline casts, polls and delivers under your brand.
Walk the catalog nightly: new SKU in the feed, brief composed from the listing, ad rendered before the morning standup.
Route every script through your own review step before render — the API returns ids you can hold, approve and release.
Bots, plugins and internal tools that cast on demand — from a Slack slash-command to a CMS button that fills the content calendar.
Sign up free, mint your ci_live_ key on the developers page, and your first curl is thirty seconds away.