The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →A Browserless Screenshot API response of 429 means the service cannot accept the request because its processing queue is full or it is over capacity. Limit simultaneous requests, let pending work clear, then retry with bounded exponential backoff. If you manage an Enterprise or self-hosted deployment, check its concurrency and queue settings.
What HTTP 429 means for a Browserless screenshot
Browserless describes 429 as “Too many requests are currently being processed.” Its troubleshooting guidance characterizes the condition as a full queue or over-capacity: requests can wait while queue capacity remains, but requests beyond the configured allowance are rejected. See the Browserless troubleshooting guide and API reference.
This is a capacity signal, not evidence by itself that the screenshot URL is malformed or that authentication failed. Public documentation does not reveal a managed account’s live queue or exact current allowance; check the applicable account dashboard or deployment telemetry for those details.
Confirm the endpoint and inspect the response status
The current documented REST screenshot endpoint is POST /screenshot. It takes the API token in the query string and screenshot options in a JSON body, and returns an image on success. Check the HTTP status before attempting to decode the response as image bytes. The screenshot API documentation provides the request format and options.
#1 Best Overall
Reduce queue pressure and retry safely
- Cap parallel work. Put a limit on the number of simultaneous screenshot requests your client sends. A burst of concurrent requests can fill the pending queue even if each individual capture is valid.
- Let in-flight work drain. Avoid immediately resubmitting every rejected request; that can keep the service saturated.
- Retry with exponential backoff. After a 429, wait before retrying, increase the delay for each subsequent attempt, and set a maximum attempt count or overall deadline. Add jitter where practical so multiple workers do not retry together.
- Handle the final failure explicitly. If bounded retries are exhausted, record the status and surface or schedule the failure rather than entering an unbounded retry loop.
Browserless’s retry example checks the HTTP status before treating the response as screenshot bytes. Follow that pattern so an error response is not saved or parsed as an image: troubleshooting and retry example.
Check capacity settings for Enterprise or self-hosted deployments
For Enterprise and self-hosted deployments, the documented settings are CONCURRENT, the maximum concurrent sessions, and QUEUED, the maximum queued requests. Requests beyond the combined running and pending capacity are rejected. The Enterprise documentation lists defaults of 10 concurrent sessions and 10 queued requests; these are documented configuration defaults, not a promise about an individual managed account or every deployment. Managed Private Deployment settings are adjusted in the account dashboard. See Enterprise configuration.
Rank #2
Increase limits only when the deployment has sufficient resources to run the additional browser sessions. Otherwise, raising the queue merely allows more work to wait and can worsen resource pressure. Coordinate capacity with client-side concurrency rather than treating a larger queue as a substitute for backpressure.
Do not apply legacy BaaS v1 settings to current deployments
The old BaaS v1 Docker documentation uses MAX_QUEUE_LENGTH and gives a default queue length of five. That page is explicitly marked as no longer actively supported, so its variable name and default should not be copied into current Enterprise or managed setup. Use the configuration guide for the deployment generation you actually run: legacy BaaS v1 configuration.
Rank #3
Distinguish 429 from neighboring HTTP errors
Use the returned status to choose the remedy. Browserless’s API reference lists these responses for the screenshot endpoint:
| Status | Documented meaning | What to investigate |
|---|---|---|
| 401 | Missing or invalid authorization | Check that the token is present and valid. |
| 403 | Destination is disallowed | Check destination restrictions and the requested URL. |
| 408 | Request timed out | Investigate page load time and timeout settings. |
| 429 | Too many requests are currently being processed | Reduce concurrency, allow the queue to drain, and retry with backoff. |
| 500 | Internal error | Treat as a service-side error and consult the applicable service diagnostics. |
| 503 | Service unavailable | Check service availability; do not assume a queue adjustment is the fix. |
Meanings are from the Browserless screenshot API reference. The status distinctions matter: a queue remedy addresses 429, not authorization, destination policy, timeout, or availability errors.
Rank #4
Alternative if you want a screenshot API with explicit failure billing
ScreenshotNeo is an alternative to try first: it identifies failed loads and queue-like outcomes in response headers, and bills only clean shots, not bot checks/CAPTCHAs, blank pages, timeouts, failed loads, or cache hits. Its response includes X-Page-Verdict and X-Billed headers.
Or skip the browser setup
One GET request can return a screenshot; see the ScreenshotNeo API documentation.
Quick Recap
Best Value
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, and failed loads are never billed; an MCP server lets AI agents take screenshots; and 1,000 screenshots a month are free with no card, with paid plans starting at $5 for 3,000. Sign up for 1,000 free screenshots a month, with no card required.




