REST API Timeouts
Browser Rendering uses several independent timers to manage how long different parts of a request can take. If any of these timers exceed their limit, the request returns a timeout error.
Each timer controls a specific part of the rendering lifecycle — from page load, to selector load, to action.
| Timer | Scope |Default |Max |
| -------------------------------------- | --------------- || --------------- || --------------- |
| goToOptions.timeout
| How long to wait for the page to load. | 30 s | 60 s |
| goToOptions.waitUntil
| Waits for an event to fire. load (default) — waits for the full load event.domcontentloaded — waits for the DOMContentLoaded event.networkidle0 — waits until there are no more than 0 network connections for at least 500 ms.networkidle2 — waits until there are no more than 2 network connections for at least 500 ms. | Load is the default | — |
| waitForSelector
| Waits for a specific element to appear on the page. Can be any CSS selector. | null | 60 s |
| waitForTimeout
| After the page has loaded, waits an additional fixed time before proceeding. | null | 60 s |
| actionTimeout
| How long to wait for the action itself (screenshot, PDF, scrape, etc.) to complete after loading finishes. | null | 5 min |
| PDFOptions.timeout
| Same as actionTimeout
, but only applies to the /pdf endpoint. | 30 s | 5 min |
You can set multiple timers — as long as one is complete, the request will fire.
If you’re not getting the expected output:
— Try increasing goToOptions.timeout
(up to 60 s).
— If waiting for a specific element, use waitForSelector
. Otherwise, use goToOptions.waitUntil
set to networkidle2
to ensure the page has finished loading dynamic content.
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Directory
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- © 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark