Guides

Rate Limits & Pricing

Understand API rate limits, tiers, and pricing for the Quote Gallery API.

Rate limits keep the API reliable for everyone. Your limit is per API key and resets on a rolling hourly window.

Tiers

TierRequests per hourPriceBest for
Free100FreeTesting and prototyping
Hobby500€4.99/moSmall apps and personal projects
Premium2,000€14.99/moProduction apps with real traffic
Active Supporter subscribers on the Quote Gallery website get a 25% bundle discount on all paid tiers. The discount applies automatically at checkout.

Rate limit headers

Every response includes three headers so you always know where you stand:

HeaderDescription
X-RateLimit-LimitYour tier's hourly request cap
X-RateLimit-RemainingRequests left in the current window
X-RateLimit-ResetUnix timestamp (seconds) when the window resets
HTTP/1.1 200 OK
X-RateLimit-Limit: 500
X-RateLimit-Remaining: 487
X-RateLimit-Reset: 1704070800

When you hit the limit

A 429 response means you've exhausted your quota for the current window:

{
  "error": "Rate limit exceeded",
  "status": 429
}

The X-RateLimit-Reset header tells you exactly when to retry. The recommended pattern is to wait until the reset time rather than using fixed backoff:

async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const response = await fetch(url, options)

    if (response.status !== 429) return response

    const reset = response.headers.get('X-RateLimit-Reset')
    const waitMs = reset
      ? (Number(reset) * 1000) - Date.now()
      : Math.pow(2, attempt) * 1000

    await new Promise((resolve) => setTimeout(resolve, Math.max(waitMs, 1000)))
  }

  throw new Error('Max retries exceeded')
}

Staying within your limit

A few habits go a long way:

  • Cache aggressively. Categories change rarely — cache them for hours. Random quotes for quote-of-the-day features only need one request per day.
  • Use the right page size. Fetch what you need. If you're displaying 5 quotes, don't request 100.
  • Watch X-RateLimit-Remaining. If you're regularly hitting zero, that's your signal to upgrade.
  • Batch with filters. Use categories, author_id, or playlist_id to get the right quotes in one request rather than filtering on your end.

Bundle discount

TierRegularWith Supporter bundle
Hobby€4.99/mo€3.74/mo
Premium€14.99/mo€11.24/mo

FAQ

What counts as one request? Every API call, regardless of which endpoint. Errors count too, except 429 responses.

Can I get more than 2,000 requests/hour? For enterprise needs, contact support@quotegallery.nl.

What happens when I cancel? Access reverts to the Free tier immediately. Your API key stays valid — only the rate limit changes.

Do all endpoints share the same pool? Yes, there are no per-endpoint limits. All endpoints draw from the same hourly quota.

Copyright © 2026