Free includes 5,000 requests a month, up to 10 requests a minute, all 10,296 currency pairs, live rates delayed by 15 minutes and the last 30 days of daily history. The data endpoints also work without a key, with limits of 10 requests a minute and 100 an hour per IP address.
What's included in Free
A free key gives your app a monthly quota of its own, instead of sharing a per-IP limit with others on the same network. All plans, including Free, include all 10,296 pairs and the MCP server. ECB daily fixes have no delay. You can display rates commercially on Free if you place a visible linked credit near them.
| Free plan | Limit |
|---|---|
| Price | $0 |
| Requests a month | 5,000 |
| Requests a minute | 10 |
| Live rates | 15 minutes late (ECB daily fixes are not delayed) |
| Daily history | Last 30 days of daily history |
| Intraday | None (daily only) |
| WebSocket streaming | None |
| Webhook endpoints (official rates) | 0 |
| MCP server | Yes |
| Commercial use | Yes, with a visible linked credit near the rates |
Calling without a key
The data endpoints work without a key. These calls use Free plan data rules and count toward a per-IP limit. If your server shares an IP address, it may reach the hourly cap sooner than you expect. Send Authorization: Bearer YOUR_KEY from your server to count calls against your account's quota.
| Keyless (no API key) | Limit |
|---|---|
| Requests per minute, per IP | 10 |
| Requests per hour, per IP | 100 |
| Data | Free plan rules |
When you reach a limit
If you exceed a limit, the API returns 429, a JSON body identifying the limit and a Retry-After header. Requesting a date outside your plan's history returns 403 with plan_gated, the earliest date available to you and the plans that include the requested date.
curl -i "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR" \ -H "Authorization: Bearer $EXCHANGERATE_API_KEY"| Status | code | When |
|---|---|---|
| 429 | ip_rate_limited | Keyless requests exceed 100 in an hour per IP |
| 429 | rate_limited | Plan's per-minute limit exceeded |
| 429 | quota_exceeded | Plan's monthly limit exceeded |
| 403 | plan_gated | Date outside plan history (Free: 30 days) |
Limits on paid plans
Paid plans include live rates, higher request limits and more history. Basic includes a year of daily history. Plus reaches back to 1999 and includes intraday bars and WebSocket streaming.
Basic
| Basic | Limit |
|---|---|
| Price | $19 a month, or $190 a year |
| Requests a month | 100,000 |
| Requests a minute | 60 |
| Live rates | Live |
| Daily history | Last 1 year of daily history |
| Intraday | None (daily only) |
| WebSocket streaming | None |
| Webhook endpoints (official rates) | 0 |
| MCP server | Yes |
| Commercial use | Yes, no credit needed |
Plus
| Plus | Limit |
|---|---|
| Price | $39 a month, or $390 a year |
| Requests a month | 300,000 |
| Requests a minute | 120 |
| Live rates | Live |
| Daily history | Full daily history (from 1999) |
| Intraday | 1h, 4h, last 30 days |
| WebSocket streaming | 1 WebSocket connection, 10 pairs each |
| Webhook endpoints (official rates) | 5 |
| MCP server | Yes |
| Commercial use | Yes, no credit needed |
Pro
| Pro | Limit |
|---|---|
| Price | $89 a month, or $890 a year |
| Requests a month | 1,000,000 |
| Requests a minute | 300 |
| Live rates | Live |
| Daily history | Full daily history (from 1999) |
| Intraday | 1m for the last 30 days; 5m, 15m, 1h, 4h at full depth |
| WebSocket streaming | 5 WebSocket connections, 100 pairs each |
| Webhook endpoints (official rates) | 25 |
| MCP server | Yes |
| Commercial use | Yes, no credit needed |
Choosing a plan
Free works for prototypes, personal projects and internal tools that can use rates delayed by 15 minutes. Choose a paid plan if you need live rates, more than 5,000 requests a month or more than 30 days of history. Yearly billing includes two months free.