# Introducing Async Renders for Videos, PDFs, Image Generation

> Generate any render with "async" field, get a job back instantly, and collect the result by polling or webhook. Built for Zapier, Make and AI agents.

- **Author**: FrameLine Team
- **Published**: 2026-09-09
- **Category**: AI Agents
- **Tags**: AI agents, Zaiper, Make
- **Read time**: 2 min read
- **URL**: https://buildonce-frontend.vercel.app/blog/async-video-rendering-api

---

Every render — video, PDF or image — can now run in the background. **Add one field to your render request** and the API replies in under a second with a job; the render runs on our servers and you collect the result whenever it's ready, **by polling or webhook**.

This matters most for video. A 60-second 1080p render can take a couple of minutes, and that's longer than most HTTP clients will wait. The render finished fine on our side, but your integration never saw the result. **Async mode closes that gap** — and it's just as useful for big multi-page PDFs, or for firing off many image renders at once and collecting them as they land.

## The timeout wall async removes

Long renders don't fail because the render fails. They fail because the caller hangs up first:

- **Zapier** — gives you about 30 seconds.
- **Make** — about a minute.
- **Most AI agents** — cut off at two minutes.

![A long video render finishing after the HTTP client has already timed out](https://pnospxebopcycbrwutgu.supabase.co/storage/v1/object/public/frameline-assets/blog/inline/68bd0f2f2c1196383d1e323b46b737931aa6ad366a3f681e492473c673891373.jpg)

## One field, same request

Everything about your render request stays the same: modifications, video options, Smart Resize, publishing. You only add `mode: "async"` to the response object.

This is the only change to an existing render call:

```json
{
  "response": {
    "mode": "async"
  }
}
```

The API answers in under a second with a job, and the render continues on our servers.

## Collect the result your way

You can pull the job or have it pushed to you. Pass a `webhook_url` with the render request and we POST the finished job to you — no polling at all.

| | Polling | Webhook |
|---|---|---|
| **How you get it** | Ask for the job until it's done | We POST the finished job to your `webhook_url` |
| **Setup** | Nothing extra | Add `webhook_url` to the render request |
| **Retries** | n/a | Delivery retries three times |
| **Still pollable?** | Yes | Yes |

> The job's result is the exact same response body a synchronous render returns, so the code that handles your renders today doesn't change.

### When something goes wrong

A failed job carries an `error` that tells you what to fix, plus a stable `error_code` you can branch on.

## Built for automations and agents

![An automation firing a render in one step and picking up the finished file in a later step](https://pnospxebopcycbrwutgu.supabase.co/storage/v1/object/public/frameline-assets/blog/inline/c1e22f3998bcd123a1ec99469f5c80f50b12e965b645fcab76fc9dce9634a742.jpg)

- **Zapier and Make** — fire the render in one step, pick the result up in a later step or via webhook. No more timeouts on long videos.
- **AI agents** — our agents integration already uses async under the hood. Agents render long videos in the background and keep working while they wait.
- **Batch pipelines** — start fifty renders in fifty fast requests, then collect them all as they finish.

## The bottom line

Images and PDFs render in seconds, so sync mode stays the default and nothing changes for existing integrations. Async is there the moment a render outgrows an HTTP timeout — add `mode: "async"` to the response object, and optionally a `webhook_url`, and you're done.
