How many captures you can run at once, how long a request can take, and how large a page, file, batch, or crawl can be.
Every limit in one place. When you hit one, the error names it and usually says when to try again. What to do next is on Errors & retries.
Browser concurrency is how many browser captures your organization can run at the same time. Your tier includes 2 browsers at Tier 0 and up to 100 at Tier 5. Tiers rise on their own as you spend credits and time passes, and you can add provisioned browsers on top. The table is on Concurrency tiers.
When you are at your limit, a single Fetch is refused before it starts with . The response carries , your own limit, and a of 20 seconds. queues under the same limit instead of refusing.
429 FetchConcurrencyLimitExceededmaxConcurrencyRetry-AfterThrottling is separate from concurrency. A throttled request gets 429 TooManyRequests with a Retry-After header, and the same request succeeds once the wait is over. The TypeScript SDK waits and retries for you. Without an SDK, back off as described on Errors & retries.
If these limits are too low for you, email support@expand.ai.
| What | Limit |
|---|---|
| A Fetch of a web page | One 150-second budget per request, from acceptance to delivery. A 504 FetchCaptureTimeout or 529 FetchCapacityTimeout arrives by 155 seconds. |
| A PDF, other file, or video | Up to 55 minutes once a worker starts. The wait for a worker uses the 150-second budget. |
| Each item in a Batched Fetch | Its own 150-second budget once it is scheduled. |
| The TypeScript SDK |
timeoutMs. See Choosing timeoutMs.How the budget works, and what a 504 or 529 means, is on Readiness and timing.
| What | Limit |
|---|---|
| A web page | A page too large to capture returns 413 FetchPageTooLarge with limitKind (transfer_bytes, domsnapshot_bytes, or document_frame_bytes), the limit, and what was measured. It is not charged. |
| A PDF or other file | No default page limit. Set documentConfig.maxPages to cap how many pages a Fetch converts. A file over the limit returns 413 FetchPageTooLarge with limitKind set to document_pages. |
| What | Limit |
|---|---|
| Batched Fetch results page | limit defaults to 10 and accepts 1 to 100. |
| Idempotency keys | Up to 255 characters. |
| Highlights | maxResults defaults to 5 and accepts 1 to . defaults to and accepts to . |
Your first organization starts with 10,000 welcome credits, which expire 365 days after they are granted. Purchased credits do not expire. A request made with no credits left is refused before any work starts and is never charged. See Pricing & Usage.
timeoutMs defaults to 60000 for the whole call, retries included. |
| Audio and video | documentConfig.maxAudioSeconds defaults to 3600 and accepts 1 to 14400. Four hours is the ceiling. A YouTube video with captions ignores it. Over the limit returns 413 FetchPageTooLarge with limitKind set to audio_seconds. |
| A Snapshot preview | maxBytes accepts 0 to 65536. A preview of an archive over the server's read budget returns 413. The full content link still works. |
50minScore0.601| Crawl sources | 1 to 1,000 per request. Up to 32 may set their own maxPages. |
| Crawl size | maxPages defaults to 25,000 and accepts up to 1,000,000. maxDepth defaults to 50 and accepts 0 to 100. |
| Crawl event content | 64 KiB per event. The full capture is always readable by its captureId. |
| WebSync renders | sync.budget.rendersPerDay caps the pages a synced crawl renders in a day. You set it. |
| Provisioned browsers | Up to 1,000 per organization. |