Batch Rendering

Batch rendering takes one registered template and an array of variable sets, then produces one video per set. This is how you generate personalized outreach, catalog ads, localized variants, or weekly report videos at scale.

The Batch Endpoint

bash
curl -X POST https://api.ws.video/api/render/batch \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "x-org-id: YOUR_ORG_ID" \
  -d '{
    "template": "product-launch",
    "overrides": { "mood": "confident" },
    "batch": [
      {
        "headline": "Apex Launch",
        "tagline": "Productivity reimagined",
        "feature1": "Fast",
        "feature2": "Smart",
        "feature3": "Secure",
        "cta": "Try free"
      },
      {
        "headline": "Bolt Launch",
        "tagline": "Speed matters",
        "feature1": "Quick",
        "feature2": "Easy",
        "feature3": "Reliable",
        "cta": "Get started"
      }
    ]
  }'
json
{
  "batchId": "batch-abc123",
  "total": 2,
  "jobs": [
    { "jobId": "job-001", "status": "queued" },
    { "jobId": "job-002", "status": "queued" }
  ]
}

Each item in the batch array becomes a separate render job. All jobs share the same template, mood, and theme — only the variables differ.

Polling Batch Status

Monitor the entire batch with a single call:

bash
curl https://api.ws.video/api/batch/batch-abc123 \
  -H "x-api-key: YOUR_API_KEY" \
  -H "x-org-id: YOUR_ORG_ID"
json
{
  "batchId": "batch-abc123",
  "total": 2,
  "completed": 1,
  "failed": 0,
  "jobs": [
    { "jobId": "job-001", "status": "complete" },
    { "jobId": "job-002", "status": "rendering" }
  ]
}

Individual videos are downloaded using the same GET /api/video/:jobId endpoint as single renders.

Per-Item Overrides

Each batch item can override the theme, allowing you to produce the same content under different brand identities:

json
{
  "template": "social-promo",
  "batch": [
    { "headline": "Summer Sale", "theme": "brand-a" },
    { "headline": "Summer Sale", "theme": "brand-b" }
  ]
}

Use Cases

Personalized outreach — merge a contact list with a template. Each prospect gets a video with their company name, logo, and relevant metrics.

Catalog advertising — feed product data (name, price, image) into a template. One template covers the entire catalog.

Localized variants — same message in different languages. Workshop's timing engine adjusts hold durations per language automatically.

Weekly reports — plug updated KPIs into a dashboard template every Monday. Same structure, fresh data.

Queue and Concurrency

Batch jobs enter the same render queue as individual jobs. Rendering uses a maximum of 2 concurrent jobs by default. Large batches process sequentially within the queue.

Next Steps