Rate limits & quota
Two complementary limits protect the service:
- Quota — total screenshots per month (resets each cycle)
- Rate limit — requests per minute (sliding 60s window)
Quota (per cycle)
| Plan | Quota / month | Per-extra rate |
|---|---|---|
| Free | 100 | (no overage — hard cap) |
| Basic ($17) | 2,400 | (hard cap on launch) |
| Growth ($79) | 12,000 | (hard cap on launch) |
| Scale ($259) | 60,000 | (hard cap on launch) |
Hitting the quota returns 402 quota_exceeded with details:
{
"error": "quota_exceeded",
"message": "Monthly quota exhausted. Upgrade your plan or wait for the next cycle.",
"plan_code": "basic",
"plan_quota": 2400,
"plan_used": 2400,
"plan_remaining": 0,
"credits_needed": 1,
"resets_at": "2026-06-01T00:00:00+00:00",
"upgrade_url": "https://websitescreenshotapi.net/pricing"
}
Get current state:
curl https://websitescreenshotapi.net/api/v1/credits \
-H "Authorization: Bearer YOUR_API_KEY"
Rate limit (per minute)
| Plan | RPM |
|---|---|
| Free | 10 |
| Basic | 50 |
| Growth | 100 |
| Scale | 180 |
Hitting the RPM returns 429 rate_limited:
HTTP/1.1 429 Too Many Requests
Retry-After: 23
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1762339200
{
"error": "rate_limited",
"message": "Too many requests. Plan limit: 50/min."
}
Always honor Retry-After and back off accordingly.
Per-feature unit cost
| Feature | Units |
|---|---|
| PNG / JPG / WebP | 1 |
| 2 | |
+ full_page |
+1 |
| MP4 / WebM video | 1 / sec, min 2 |
| GIF animation | 2 / sec, min 3 |
+ stealth (V1.3+) |
+3 |
+ premium_proxy (V1.3+) |
+5 |
Bulk endpoint quota
Bulk debits are upfront: the total cost is reserved at submission. If you submit 100 PNG full_page → 200 units charged immediately. If a render fails, those units are not refunded (we still spent the resource).
Headers on every request
Every authenticated response carries:
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1762339200
Use these to throttle client-side and avoid hitting 429.
Upgrade
- Self-serve :
/pricing— instant Stripe checkout - Custom (>60k/mo, dedicated IPs, on-prem) : contact us
FAQ
Q : My quota counts each call or each render?
Each unit consumed. A bulk of 100 URLs = 100 units (or more with full_page).
Q : Failed renders consume units?
Yes for now. We may refund failed renders due to our infra in the future, but target_* errors (DNS, blocked, SSL) consume units because we still attempted the render.
Q : Cached signed URLs consume units?
No — X-Cache: HIT on /v1/render is free.
Q : Demo endpoint has its own limit?
Yes — POST /v1/demo is throttled to 3 / IP / 24h, no auth required.