Quick start

One call to a rendered video, and the full campaign lifecycle for batch work.

One call: POST /renders

Send a recording, the word to replace, and up to 100 recipients — no campaign, no template, nothing to hold between calls:

bash
POST /renders
{
  "video": "https://your-cdn.com/base-recording.mp4",
  "placeholderWord": "there",
  "recipients": [
    { "firstName": "Sarah", "url": "https://acme.com" }
  ]
}
# -> 202 { "data": { "batchId": "...", "renders": [{ "id": "...", "status": "queued" }] } }

# Renders take 1-5 minutes. Register a webhook for render.completed / render.failed /
# render.degraded, or poll:
GET /renders?batch_id={batchId}

Campaign lifecycle

The campaign lifecycle below still exists for the dashboard-style batch workflow (draft → assets → recipients → ready → launch). For agents, automations, and anything drip-shaped, POST /renders is the path.

bash
# 1. Create a campaign
POST /campaigns
{ "name": "Q2 Outbound", "pipLayout": "bottom-right" }

# 2. Upload base video (multipart/form-data)
POST /campaigns/:id/assets
Content-Type: multipart/form-data
Body: file=@base-video.mp4

# 3. Add recipients
POST /campaigns/:id/recipients
[
  { "firstName": "Sarah", "company": "Acme", "url": "https://acme.com" },
  { "firstName": "Mike", "company": "Globex", "url": "https://globex.com" }
]

# 4. Mark campaign ready (no body — do NOT send Content-Type)
POST /campaigns/:id/ready

# 5. Start rendering (no body)
POST /campaigns/:id/launch

# 6. Poll or use webhooks to check status
GET /recipients/:id