Limits
Every plan limit in one place, and the error each one returns.
Most of your own limits are in GET /v1/account under limits; brand
frames, burst and the follow limits are only on this page.
Per plan
| Limit | Free | Starter | Pro | Scale | Over it |
|---|---|---|---|---|---|
| Video length, minutes | 3 | 10 | 20 | 20 | Job fails VIDEO_TOO_LONG, free |
| Video length, audio-only job, minutes | 20 | 60 | 120 | 120 | Job fails VIDEO_TOO_LONG, free |
fps | 1 | 2 | 3 | 3 | Clamped to the plan's value |
| Brand frames per job | 180 | 1200 | 2400 | 2400 | fps is lowered to fit |
Questions per job (queries) | 10 | 10 | 10 | 10 | TOO_MANY_QUERIES (422) |
| Videos per batch | 3 | 10 | 25 | 25 | TOO_MANY_URLS (422) |
| Aggregate questions per batch | 1 | 3 | 5 | 5 | TOO_MANY_AGGREGATE_QUERIES (422) |
| Jobs running at once | 2 | 3 | 10 | 10 | CONCURRENT_LIMIT_REACHED (429) |
| Requests per minute | 10 | 30 | 60 | 60 | RATE_LIMITED (429) |
| Burst | 15 | 45 | 90 | 90 | RATE_LIMITED (429) |
| Follows | 2 | 5 | 20 | 20 | PLAN_REQUIRED |
| Analyses per follow, any 7 days | 3 | 5 | 20 | 20 | Match listed as not run |
| Webhooks | — | ✓ | ✓ | ✓ | MODE_NOT_ALLOWED (403) |
Scale starts with Pro's limits, and an agreement can raise any of them.
An audio-only job asks for transcription, metadata or both, and no queries. Any other capability, or any
question, makes it a video job.
The request rate is per workspace, shared by every API key and the MCP server. An idle client can send a full burst at
once, and sustained traffic settles at the per-minute rate. RATE_LIMITED comes with Retry-After: 60. CONCURRENT_LIMIT_REACHED has no Retry-After: retry once one of your
jobs finishes. Batch videos past the concurrency limit are not refused: they wait in pending and start by
themselves.
On every plan
| Limit | Value | Over it |
|---|---|---|
| Request body | 10 KB | BODY_TOO_LARGE (413) |
queries | 10, 500 characters each | VALIDATION_FAILED (422) |
objects | 5, 100 characters each | VALIDATION_FAILED (422) |
brands | 50 | TOO_MANY_BRANDS (422) |
| A brand name | 100 characters | VALIDATION_FAILED (422) |
surfaces | 10 | VALIDATION_FAILED (422) |
urls in a batch | 50 | VALIDATION_FAILED (422) |
uploads in a batch | 50 | VALIDATION_FAILED (422) |
urls + uploads in a batch | Your plan's videos per batch | TOO_MANY_URLS (422) |
aggregate.queries | 10, 500 characters each | VALIDATION_FAILED (422) |
Upload key | 512 characters | VALIDATION_FAILED (422) |
Upload filename | 255 characters | VALIDATION_FAILED (422) |
Presign content_type | 128 characters | VALIDATION_FAILED (422) |
| Upload size | 500 MB | BODY_TOO_LARGE (413) |
| Upload formats | mp4, mov, webm | VALIDATION_FAILED (422) |
| Unused uploads held | 2 × your batch size, at least 20 | RATE_LIMITED (429) |
| Page size on list endpoints | 100 | VALIDATION_FAILED (422) |
A list over the every-plan maximum fails validation before your plan is checked, so on paid plans an 11th question
returns VALIDATION_FAILED, never TOO_MANY_QUERIES.