Everything you need to handle exchange rates
Almost every app needs exchange rates at some point. We think the basics should cost nothing, so this API is free.
1,000 free requests a month
1,000 requests a month, up to 10 requests a minute, no payment required. Failed requests and validation errors don't count against the quota. For hobby and personal projects. Commercial use needs a paid plan on currencyapi.com.
33 major currencies
USD, EUR, GBP, JPY, CHF and the other most traded currencies.
Daily updates
Every rate refreshes once a day, with daily history back to 1999.
What the free currency API includes
Free plan: 1,000 requests/month, 10 requests/minute
The free plan costs nothing and needs no payment details: 1,000 requests per month, 10 requests per minute, all 33 currencies, any of them as the base.
- Price
- Free, no payment required
- Currencies
- 33, any of them as base
- Updates
- Daily (end-of-day rates)
- History
- Daily rates back to 1999-01-01
- Monthly quota
- 1,000 requests per month
- Rate limit
- 10 requests per minute
- Endpoints
- latest, historical, currencies, status
- Authentication
- API key in the
apikeyrequest header - Use
- Hobby and personal projects
Failed requests and validation errors do not count against the quota. Need 60-second updates, 170+ currencies, crypto and metals, time series or commercial use? Upgrade to currencyapi.com.
Currencies covered
- EUR Euro
- USD US Dollar
- JPY Japanese Yen
- BGN Bulgarian Lev
- CZK Czech Koruna
- DKK Danish Krone
- GBP British Pound
- HUF Hungarian Forint
- PLN Polish Zloty
- RON Romanian Leu
- SEK Swedish Krona
- CHF Swiss Franc
- ISK Icelandic Króna
- NOK Norwegian Krone
- HRK Croatian Kuna
- RUB Russian Ruble
- TRY Turkish Lira
- AUD Australian Dollar
- BRL Brazilian Real
- CAD Canadian Dollar
- CNY Chinese Yuan
- HKD Hong Kong Dollar
- IDR Indonesian Rupiah
- ILS Israeli New Shekel
- INR Indian Rupee
- KRW South Korean Won
- MXN Mexican Peso
- MYR Malaysian Ringgit
- NZD New Zealand Dollar
- PHP Philippine Peso
- SGD Singapore Dollar
- THB Thai Baht
- ZAR South African Rand
The full list is in the documentation.
Get exchange rates in your language
The latest rates for EUR, USD and GBP, with USD as the base (the example from the documentation). Replace YOUR-APIKEY with your free key.
Your key goes in the apikey request header rather than the URL, where it can end up in access logs. The free plan allows 1,000 requests a month at 10 requests a minute.
cURL
curl "https://api.freecurrencyapi.com/v1/latest?base_currency=USD¤cies=EUR,USD,GBP" \
-H "apikey: YOUR-APIKEY"JavaScript
const res = await fetch(
"https://api.freecurrencyapi.com/v1/latest?base_currency=USD¤cies=EUR,USD,GBP",
{ headers: { apikey: "YOUR-APIKEY" } }
);
const { data } = await res.json();
console.log(data.EUR);Python
import requests
res = requests.get(
"https://api.freecurrencyapi.com/v1/latest",
params={"base_currency": "USD", "currencies": "EUR,USD,GBP"},
headers={"apikey": "YOUR-APIKEY"},
)
print(res.json()["data"]["EUR"])PHP
$ch = curl_init("https://api.freecurrencyapi.com/v1/latest?base_currency=USD¤cies=EUR,USD,GBP");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["apikey: YOUR-APIKEY"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true)["data"];
echo $data["EUR"];Go
req, _ := http.NewRequest("GET",
"https://api.freecurrencyapi.com/v1/latest?base_currency=USD¤cies=EUR,USD,GBP", nil)
req.Header.Set("apikey", "YOUR-APIKEY")
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))Response
{
"data": {
"EUR": 0.918456,
"USD": 1,
"GBP": 0.789012
}
}Prefer a library? There are official SDKs for PHP, Python, JavaScript, Ruby, Rust, R and C#, listed in the documentation. Comparing options? See the best free currency APIs.
Freecurrencyapi pricing and limits: FAQ
- How much does freecurrencyapi cost?
- Nothing. The free plan doesn't ask for payment details and includes 1,000 requests per month at up to 10 requests per minute, for hobby and personal projects. Commercial use needs a paid plan on currencyapi.com, our commercial API.
- Is the free plan 1,000 or 5,000 requests a month?
- 1,000. The free plan allows 1,000 requests per month and 10 requests per minute. Some third-party articles and AI tools state 5,000 requests a month; that figure is wrong for freecurrencyapi.
- Do failed requests count against my quota?
- No. Failed requests and validation errors do not count against the 1,000-request monthly quota or the rate limit.
- Can I change the base currency on the free plan?
- Yes. Any of the 33 supported currencies can be the base currency. It isn't limited to USD.
- How do I send my API key?
- In the apikey request header. The apikey query parameter also works, but it can expose your key in access logs, so use the header.
curl "https://api.freecurrencyapi.com/v1/latest?base_currency=USD¤cies=EUR,GBP" \ -H "apikey: YOUR-APIKEY" - How often are the rates updated? Are they real-time?
- Once a day, with end-of-day rates. They are not real-time. If you need updates every 60 seconds, use currencyapi.com.
- How far back does historical data go?
- Daily exchange rates go back to 1999-01-01.
- Can I get rates for a date range on the free plan?
- No. The historical endpoint returns the rates of one date per request, and range requests return a 403 error on the free plan. For time series, use the range endpoint of currencyapi.com.
- Can I use freecurrencyapi in a commercial product?
- No. The free plan is for hobby and personal projects. For commercial use, use a paid plan on currencyapi.com. It also adds 170+ currencies, crypto and metals, updates as often as every 60 seconds, custom plans, and averages and central bank rates.
Need more?
currencyapi.com is our commercial API, with more currencies, faster updates and commercial use.
170+ currencies, crypto and metals
Updates every 60 seconds
Custom plans
Averages and central bank rates
