Vercel 800 s max duration: do you still need a Sume webhook?
Vercel Pro allows 800 s functions and a 30-minute beta. A Sume video job can still outlast one request, so use async or webhook mode and return in seconds.

Yes, still use a webhook or a poll. Vercel now lets Pro and Enterprise functions run for up to 800 seconds, with an extended beta up to 1,800 seconds, but a Sume sync wait is capped at 30 seconds and a video job has no promise to finish inside any one function. Submit, store the job id, return, and let the terminal event or a status poll finish the work.
The Vercel numbers
The Vercel duration page (last updated 2026-08-24) lists the Fluid compute limits. Durations above 800 seconds must be set per function, in code or vercel.json, not as a project default. Secure Compute and Static IPs do not support values above 800. For a FastAPI app, key the functions entry on the entrypoint file, for example app/main.py.
| Plan | Default | Maximum | Extended beta |
|---|---|---|---|
| Hobby | 300 s | 300 s | Not listed |
| Pro | 300 s | 800 s | 1,800 s |
| Enterprise | 300 s | 800 s | 1,800 s |
The Sume side
sync and subscribe modes clamp wait_timeout_seconds to 0 through 30. When the job is still running the response says sync.timed_out and gives a status_url. The default mode is async.
A longer function does not change the job. If your function times out, the job keeps running and bills; read the job again instead of submitting a second one.
| Setting | Value |
|---|---|
wait_timeout_seconds | 0 to 30, clamped |
| Webhook retries | Up to 10, 30 s apart |
| Per-attempt timeout | 10 s |
| Replay window | 300 s default |
When a long function is useful
A long function fits work that you cannot split, such as a single download of a large file. It does not fit a wait on a render. The beta runtimes are Node 20, 22 and 24, Bun 1.x and 1.4.x, and Python 3.12 to 3.14.
- Submit with
mode: "webhook"and a public HTTPSwebhook_url. - Verify the
sume-v1signature on the raw body. - Dedupe on
job_id. - Keep a cron or a user-triggered poll on
status_urlas a fallback.
Cost of getting it wrong
A function that waits on a video holds a billed instance for the full wait. A webhook route runs for milliseconds. Even at 800 seconds, one slow job still blocks one request slot.
Setting the duration for the route you keep
If you keep a route that calls Sume, set its maxDuration to the small value it needs, not to the maximum. A submit takes a second or two. The Vercel page says values above 800 seconds must be set per function, and the extended beta does not work with Secure Compute or Static IPs, so a project that uses either cannot rely on it at all.
For a Python app on FastAPI, the functions key must name the entrypoint file such as app/main.py.
Use the shortest path that fits the job.
- Image jobs that finish in seconds:
mode: "sync"with a wait under 30 seconds, then poll ifsync.timed_outis set. - Video, avatar and audio jobs:
mode: "webhook"and a signed receiver. - Anything you cannot guess:
asyncand a poll that followsnext_poll_after_seconds.
Sources
Related posts
More in Developers
- Verify x-sume-webhook-signature in Node: sume-v1 HMAC, raw body
A node:crypto verifier for Sume's sume-v1 signature that refuses an empty secret, checks the 5-minute window, and accepts either entry during a rotation.
- Video upscale hold: omit duration_seconds and Sume reserves 5 s
Sume video upscale reserves from duration_seconds, or 5 seconds when you omit it. Hold table for 5, 15 and 30 seconds at $0.009 per second and the 402 case.
- Wan 3.0 draft and final need different Idempotency-Keys (409)
Reusing one Idempotency-Key for a 480p draft and a 1080p final of the same prompt returns 409 idempotency_conflict. A Python key builder that avoids it.
- Webhook signature mismatch: Sume fingerprint vs OpenRouter t=,v1=
A video webhook that fails verification has three usual causes: parsed body, wrong secret, wrong header format. Sume adds a secret fingerprint header.
Written by Sume