Automotion docs
Automation recipes

Zapier

Render videos from a Zap with Webhooks by Zapier — POST to create, Catch Hook to receive completion.

Two Zaps make the full loop with the built-in Webhooks by Zapier app: one creates renders, one catches the completion webhook.

Zap 1 — create the render

Action: Webhooks by Zapier → Custom Request.

SettingValue
MethodPOST
URLhttps://api.automotion.dev/v1/renders
Data pass-throughNo
Datathe JSON below
HeadersAuthorization: Bearer YOUR_API_KEY · Content-Type: application/json · Idempotency-Key: zap-{{zap_meta_id}}
Data
{
  "movie": {
    "schema": "v1",
    "preset": "9:16",
    "scenes": [
      {
        "id": "announcement",
        "duration": 5,
        "background": "#0f172a",
        "elements": [
          {
            "id": "announcement-title",
            "type": "text",
            "text": "New from the blog",
            "fontSize": 64,
            "fontWeight": 700,
            "position": { "x": 540, "y": 700 }
          },
          {
            "id": "announcement-body",
            "type": "text",
            "text": "{{title}}",
            "fontSize": 44,
            "position": { "x": 540, "y": 900 }
          }
        ]
      }
    ]
  },
  "webhook_url": "https://hooks.zapier.com/hooks/catch/YOUR/CATCH-HOOK/"
}

Replace {{title}} with a mapped field from your trigger (RSS item, sheet row, form answer). With a saved template the Data shrinks to just the values:

Data (template render)
{
  "variables": { "title": "How we automated our changelog videos" }
}

against https://api.automotion.dev/v1/templates/YOUR_TEMPLATE_ID/renders.

Zap 2 — catch the completion

Trigger: Webhooks by Zapier → Catch Hook. Copy the hook URL into Zap 1's webhook_url (webhooks require a paid plan; trial Zaps can poll with a Delay + Custom Request loop instead).

The hook receives:

caught payload
{
  "id": "evt_rnd_123_completed",
  "event": "render.completed",
  "createdAt": "2026-07-18T13:00:00.000Z",
  "render": {
    "id": "rnd_123",
    "status": "done",
    "outputUrl": "https://cdn.automotion.dev/renders/rnd_123.mp4",
    "error": null,
    "draft": false,
    "watermark": false,
    "durationSec": 8,
    "expiresAt": "2026-10-16T13:00:00.000Z",
    "createdAt": "2026-07-18T12:58:41.000Z"
  }
}

Add a Filter step on event = render.completed, then use render.outputUrl in any downstream action (upload to YouTube, attach to an email, post to Slack). On render.failed, render.error.code tells you exactly what happened — every code is documented in the error catalog.

Automotion retries failed webhook deliveries five times with exponential backoff, so a briefly-paused Zap doesn't lose the event.

On this page