Guides

Rate Limits & Pricing

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

Rate Limits & Pricing

The Quote Gallery API uses rate limiting to ensure fair usage and reliable performance for all developers. Your rate limit depends on your subscription tier.

Tiers

TierRequests / HourPriceBest For
Free100FreeTesting, prototyping, personal projects
Hobby500€4.99/moSmall apps, side projects, indie developers
Premium2,000€14.99/moProduction applications, high-traffic integrations
If you have an active Supporter subscription for the Quote Gallery website, you automatically receive a 25% bundle discount on all paid API tiers.

How Rate Limiting Works

Rate limits are applied per API key and reset every hour on a rolling window basis.

Rate Limit Headers

Every API response includes headers that help you track your usage:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed per hour for your tier
X-RateLimit-RemainingNumber of requests remaining in the current window
X-RateLimit-ResetUnix timestamp (seconds) when the rate limit window resets

Example Response Headers

HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 500
X-RateLimit-Remaining: 487
X-RateLimit-Reset: 1704070800

Exceeding Your Rate Limit

When you exceed your rate limit, the API returns a 429 Too Many Requests response:

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

The response will also include the rate limit headers so you know when you can retry.

Handling Rate Limits Gracefully

Here's a recommended pattern for handling rate limits with automatic retry:

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

    if (response.status === 429) {
      const resetTime = response.headers.get('X-RateLimit-Reset')
      const waitMs = resetTime
        ? (Number(resetTime) * 1000) - Date.now()
        : Math.pow(2, attempt) * 1000 // Exponential backoff fallback

      console.log(`Rate limited. Retrying in ${Math.ceil(waitMs / 1000)}s...`)
      await new Promise((resolve) => setTimeout(resolve, Math.max(waitMs, 1000)))
      continue
    }

    return response
  }

  throw new Error('Max retries exceeded due to rate limiting')
}

Best Practices

Cache Aggressively
recommended
Cache API responses on your end whenever possible. Categories, for example, change rarely and can be cached for hours. This reduces your request count significantly.
Use Pagination Wisely
recommended
Request only the data you need. Use the limit parameter to fetch smaller pages if you don't need all results at once.
Monitor Your Usage
recommended
Check the X-RateLimit-Remaining header regularly. If you're consistently approaching your limit, consider upgrading your tier.
Implement Exponential Backoff
recommended
When retrying after a rate limit error, use exponential backoff to avoid hammering the API with retry requests.
Batch Where Possible
recommended
If you need data for multiple quotes, use the list endpoint with filters instead of making individual requests for each quote.

Monitoring Your Usage

You can monitor your API usage in real time from the Quote Gallery Dashboard. The dashboard shows:

  • Current usage — requests made in the current window
  • Historical usage — charts showing your usage over time
  • Tier information — your current tier and rate limit

Upgrading Your Tier

To upgrade your API tier:

  1. Sign in to your Quote Gallery account
  2. Navigate to API Pricing
  3. Select the tier that fits your needs
  4. Complete the checkout process

Your new rate limit takes effect immediately after payment.

Bundle Discount

If you already have a Supporter subscription for the Quote Gallery website, you receive a 25% discount on all paid API tiers:

TierRegular PriceWith Bundle Discount
Hobby€4.99/mo€3.74/mo
Premium€14.99/mo€11.24/mo

The discount is applied automatically at checkout when you're logged in with an active Supporter subscription.

Cancellation

You can cancel your API subscription at any time from your dashboard. When cancelled:

  • Your access immediately reverts to the Free tier (100 requests/hour)
  • There are no long-term commitments or cancellation fees
  • Your API key remains valid — only the rate limit changes

FAQ

What counts as a request?

Every API call counts as one request, regardless of the endpoint or whether it returns data or an error (except 429 responses, which are not counted against your limit).

Can I get a higher rate limit?

For enterprise needs exceeding 2,000 requests/hour, please contact us to discuss custom plans.

Do rate limits apply to all endpoints equally?

Yes, all endpoints share the same rate limit pool for your API key. There are no per-endpoint limits.

What happens if I need a temporary burst?

The rate limit is based on a rolling hour window. If you need occasional bursts, consider upgrading to a higher tier. Contact us for enterprise solutions with burst allowances.

Copyright © 2026