Skip to main content

Confirm

Are you sure?

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:

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

A request served from cache consumes no quota and is never blocked by it. Tuning max_age is the most effective way to stay within your allowance.

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.

429 Too Many Requests
{
  "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_exceeded for this response.
  • Name
    category
    Type
    string
    Description
    Which bucket was exhausted — ai or web.
  • 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_at and back off until then rather than retrying immediately.
  • Widen max_age so 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 60 requests per minute.
  • Up to 15 requests 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".

429 Too Many Requests
{
  "error": "rate_limited",
  "message": "Too many requests. Slow down and retry after 12 seconds.",
  "retry_after": 12
}
Cache hits count toward the rate limit even though they're free of quota — the limit protects the service from request floods, not just from expensive work.