Limits by plan
| Plan | Monthly screenshots | Storage | Rate limit | Price |
|---|---|---|---|---|
| Free | 100 | 500 MB | 5 req/min | Free |
| Starter | 5,000 | 5 GB | 20 req/min | $29/mo |
| Pro | 25,000 | 15 GB | 60 req/min | $79/mo |
| Business | 75,000 | 50 GB | 120 req/min | $199/mo |
Rate limit headers
Every API response includes headers to help you track your usage:| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per minute for your plan |
X-RateLimit-Remaining | Remaining requests in the current window |
X-RateLimit-Reset | Unix timestamp when the rate limit window resets |
Retry-After header is also included indicating how many seconds to wait.
429 Too Many Requests
When you exceed your per-minute rate limit, the API returns a429 status code:
402 Usage Limit Exceeded
When you exceed your monthly screenshot quota, the API returns a402 status code:
Checking your usage
Use the usage endpoint to check your remaining credits programmatically:response_type: "json" for captures, the response includes a remaining_credits field.
Handling rate limits
Exponential backoff
When you receive a 429 response, wait before retrying:Best practices
- Monitor usage — check the
X-RateLimit-Remainingheader or the usage endpoint before large operations - Stagger requests — spread requests over time instead of sending them all at once
- Use batch processing — the batch endpoint processes up to 50 URLs per request
- Respect
Retry-After— use the header value for optimal retry timing - Upgrade your plan — if you consistently hit limits, consider upgrading at pricing
- Cache results — store screenshot URLs and reuse them instead of recapturing the same pages

