Quotas & rate limits
Your plan includes a monthly allowance of operations. AI and web operations are metered separately, so heavy use of one never eats into the other.
Two categories
Every endpoint falls into one of two buckets:
AI operations
Web operations
Each category has its own monthly limit on your plan. The Free plan lets you experiment with AI endpoints without exhausting your web allowance, and vice versa. Your current usage and remaining allowance are always shown in the dashboard.
Cache hits don't count
When you hit a limit
If a request would exceed your remaining allowance for its category, URLpipe returns 429 Too Many Requests with a JSON body describing exactly which limit was hit and when it resets.
{
"error": "quota_exceeded",
"message": "You've used all 50 AI operations on your plan this month.",
"category": "ai",
"limit": 50,
"used": 50,
"resets_at": "2026-08-01T00:00:00Z"
}- Name
error- Type
- string
- Description
- Always
quota_exceededfor this response.
- Name
category- Type
- string
- Description
- Which bucket was exhausted —
aiorweb.
- Name
limit- Type
- integer
- Description
- Your monthly allowance for that category.
- Name
used- Type
- integer
- Description
- How many operations you've used this period.
- Name
resets_at- Type
- timestamp
- Description
- When the allowance resets — the 1st of next month, UTC — as an ISO 8601 timestamp.
Handling it gracefully
- Read
resets_atand back off until then rather than retrying immediately. - Widen
max_ageso more requests are served from cache for free. - Watch usage in the dashboard and upgrade your plan before you run out if you need more.
Rate limits
Separately from your monthly quota, every request is rate limited per project (keyed by your API key) so a runaway script can't flood the service. Two ceilings apply at once:
- Up to
60requests per minute. - Up to
15requests per 10 seconds (a short-burst ceiling).
Exceed either and URLpipe returns 429 Too Many Requests with a Retry-After header giving the seconds to wait. This response is distinct from the quota one above — its error is rate_limited, so you can tell "slow down" apart from "you've used your monthly allowance".
{
"error": "rate_limited",
"message": "Too many requests. Slow down and retry after 12 seconds.",
"retry_after": 12
}