Rate limits & quota

Two complementary limits protect the service:

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
PDF 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

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? NoX-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.