# Rate Limits and Plan Quotas

> CurrencyCore rate limits explained: monthly request quotas, per-minute limits, history lookback, AI credit allowances, overage billing, and 429 behavior.

Canonical: https://currency-core.com/docs/rate-limits/
Updated: 2026-11-11
Published: 2026-11-10

---
CurrencyCore enforces three separate limits, and they do not share a counter:

- **Monthly API requests**, the plan's included request quota.
- **Requests per minute**, a short fixed window enforced per API key.
- **AI credits**, a separate pool used only by the [/ai endpoint](/docs/ai-endpoint/).

A request can pass the per-minute limit and still fail because the monthly quota
or AI credit balance is exhausted.

## Plan limits

| Plan | API requests / month | Requests / minute | AI credits / month | History lookback | Seats | Price |
|---|---|---|---|---|---|---|
| **Free** | 1,000 | 60 | 100 | 30 days | 3 | $0 |
| **Starter** | 50,000 | 120 | 1,000 | Full | 10 | $9 / mo |
| **Growth** | 500,000 | 600 | 5,000 | Full | Unlimited | $29 / mo |
| **Growth Plus** | 2,000,000 | 3,000 | 20,000 | Full | Unlimited | $79 / mo |
| **Business** | 10,000,000 | 6,000 | 50,000 | Full | Unlimited | $199 / mo |
| **Enterprise** | Custom | Custom | Custom | Full | Unlimited | Custom |

Enterprise limits are set per contract and can differ from the catalog values.
Check the **Plans** or **Usage** page in the dashboard for the limits that apply
to your organization, since admin grants and per-org overrides can raise them.

## What counts toward the monthly quota

Only successful requests count. A request is added to monthly usage when it
returns a **2xx** response. Client errors (`400`, `401`, `402`, `403`, `404`,
`413`, `422`) and server errors (`5xx`) do not consume the monthly quota.

Some successful responses are still metered because the API did useful work:

- A conversion where one target's PPP adjustment failed, but the FX result was
  returned with a `ppp.error` field.
- A historical request whose date has no rates, which returns `200` with an
  explanatory message.

The per-minute limit is different: **every request counts**, including errored
calls and retries. It is enforced in a 60-second window and keyed by API key, so
creating more keys also creates more independent windows. Test keys always use
the Free per-minute limit (60 requests per minute), whatever plan the
organization is on.

## AI credits

AI requests do not consume monthly API requests. A native `/ai` answer costs
**1 AI credit** per request, regardless of how many tools it calls. Each plan has
a monthly AI credit allowance, and unused monthly credits do not roll over.

When the monthly allowance is gone, AI calls draw from any purchased credit
balance. Purchased credits never expire. When both buckets are empty, `/ai`
returns `429`; there is no AI credit overage. See [AI Credits](/docs/ai-credits/)
for the full consumption order, add-on prices, and failed-call rules.

BYOK changes the accounting: on the Growth plan and higher, an answer served by
your own provider costs **one API request per tool call** and no AI credit. A
fallback answer from CurrencyCore's provider costs 1 AI credit. See the
[BYOK guide](/docs/byok/) for details.

## Overage and hard caps

Paid standard plans allow traffic beyond the monthly request quota and bill it
per 1,000 requests:

| Plan | Overage rate |
|---|---|
| Free | No overage, requests return `429` at the quota |
| Starter | $0.10 per 1,000 requests |
| Growth | $0.05 per 1,000 requests |
| Growth Plus | $0.05 per 1,000 requests |
| Business | $0.03 per 1,000 requests |
| Enterprise | Custom |

Only complete thousands are billed. For example, 900 requests over the limit is
free, 1,000 is one unit, and 1,900 is still one unit. Overage is added to the
organization's Dodo Payments subscription.

Owners and admins can set a **hard usage cap** on the Billing page. Once usage
reaches the cap, further requests return `429` instead of incurring overage until
the next billing period. Free is already hard-capped at its included quota.

## 429 behavior

A per-minute `429 rate_limited` response includes a `Retry-After` header with
the number of seconds to wait. Monthly quota, hard cap, and exhausted AI credits
also return `429`, but those limits do not reset until the next billing period
(or until you upgrade, raise the cap, or buy AI credits).

Use exponential backoff with jitter for `500`, `502`, and `503` responses. Do not
retry `400`, `401`, `402`, `403`, `404`, `413`, or `422` without changing the
request. See [Errors](/docs/errors/) for the code reference.

## History lookback

Free organizations can query the last **30 days** of historical rates. Older
`?date=` values on [/rates](/docs/rates-endpoint/), [/convert](/docs/convert-endpoint/),
and [/history](/docs/history-endpoint/) return `403 forbidden`. Paid plans can
query the full stored history. The analytics endpoints, including
[/history/analysis](/docs/history-analysis-endpoint/), require Growth or higher.

## Commercial use

Commercial use is allowed on every plan, including Free. You can use the API and its responses in paid products, client work, and internal business systems. The Free plan is limited by its monthly request quota and per-minute rate limit, not by a non-commercial restriction. Standard acceptable-use rules still apply, including the ban on reselling or redistributing the API as a standalone data feed. See [Terms of Service](/terms/#commercial-use).

## Related products

- [Pricing](/pricing/)
- [Currency API](/currency-api/)
- [MCP server](/mcp-server/)
- [Currency converter](/tools/currency-converter/)
- [Getting started](/docs/getting-started/)
