A REST forex API with live rates for 170+ currencies, 27 years of historical data, and JSON, XML, or JSONP responses. Free tier with no credit card. Code samples in Python, Node.js, Go, PHP, and cURL below — grab them and ship.
200 requests/day free · No card required · Pro plan from $9/mo for 25k/day + historical data
Live rates, refreshed every 60 seconds via the public /api/v1/convert endpoint. Your integration will typically call /api/rates instead (shown in the code samples below) for bulk fetches with an API key.
Pick your language, copy the snippet, replace YOUR_API_KEY. Every example hits the same /api/rates endpoint and returns a live JSON payload like the one on the right. Forex API responses are identical in shape whether you call them from Python, a browser, or a Go service.
curl "https://api.unirateapi.com/api/rates?api_key=YOUR_API_KEY&from=USD&to=EUR"
{
"amount": 1,
"base": "USD",
"rates": {
"AUD": 1.3973,
"CAD": 1.3701,
"CHF": 0.7822,
"EUR": 0.8502,
"GBP": 0.7404,
"JPY": 158.9308
}
}
Responses are gzip‑compressed JSON served over HTTPS from a global edge. A single request typically completes in under 100 ms from any major region. Add &format=xml for XML or &format=jsonp&callback=cb for JSONP.
Ready to go deeper? The Python tutorial covers caching, pandas integration, and error handling for production apps.
Five endpoints cover 95% of real forex integrations: current rates, single-pair conversion, historical rates, time series, and currency metadata. All require api_key either as a query param or Authorization: Bearer header. Full OpenAPI spec and try-it console are in the Swagger docs.
/api/rates
Current rates
Returns live forex rates for every supported currency against a chosen base, or a single pair if to is specified. Refreshed every 15 minutes.
api_key — requiredfrom — base currency (default USD)to — optional target currencyamount — optional multiplierformat — json (default), xml, jsonpGET /api/rates?from=EUR&to=GBP
→ { "base": "EUR", "to": "GBP",
"rate": 0.8573, "result": 0.8573 }
/api/convert
Convert amount
Simpler variant that always returns a converted amount, not rate metadata. Use this when you only need the target value — a price label, an invoice line, a balance display.
amount — required, floatfrom, to — ISO 4217 codesformat — json / xml / jsonp{
"amount": 1000,
"from": "EUR",
"result": 870.89,
"to": "GBP"
}
/api/historical/rates
Historical (single date)
Pro
Exchange rates for any specific date from 4 January 1999 onward. Typical use: accounting, tax reporting, backtesting, or invoice reconciliation. 1,000 calls/day on the Pro plan.
date — required, YYYY-MM-DDfrom, to, amount — same as /ratesGET /api/historical/rates
?date=2020-03-16&from=USD&to=EUR
→ { "date": "2020-03-16", "rate": 0.8965 }
/api/historical/timeseries
Date range
Pro
Range queries up to 5 years per call. Perfect for charts, trend analysis, or bulk loading a pair into a data warehouse. Include a comma-separated currencies list to cut payload size.
start_date, end_date — requiredbase — default USDcurrencies — comma-separated filterGET /api/historical/timeseries
?start_date=2024-01-01
&end_date=2024-01-07
&base=USD¤cies=EUR,GBP
/api/currencies
Metadata
Lists every supported currency code. Useful for populating a dropdown in your UI, validating input, or detecting new symbols added to the feed. Returns 593 codes at last count.
api_key — requiredformat — json / xml / jsonp{ "count": 593,
"currencies": ["AED", "AFN", "ALL",
"AMD", ... ] }
Both tiers ship with the same forex API — the Pro tier unlocks the historical endpoints and higher limits. See the full pricing page for yearly billing.
Rates come from a weighted aggregate of central banks and market feeds — not a single scraped price. Every source has a base weight and a recency score; stale feeds get downweighted automatically. This is the main reason a $9 plan here can match the accuracy of vendors charging 5–10× more.
Daily reference rates against EUR for 30+ FIAT currencies. The closest thing to a “consensus” rate for European pairs.
Sterling reference rates and historical daily series — the authoritative source for GBP pairs.
AUD reference rates and trade-weighted index data, updated on each Sydney close.
Official CHF rates. Matters for anyone pricing Swiss payroll, insurance, or import/export flows.
CAD noon rates and indicative series. Used for North American cross-border commerce.
420+ cryptocurrency spot prices against USD and EUR, updated on every tick.
Twice-daily gold, silver, platinum, palladium fixings — the institutional benchmark, with history back to 1968.
Turkey, Romania, Egypt, Qatar — critical for exotic pair coverage where major aggregators lag.
Supplementary FX tick data and RBI-sanctioned INR benchmarks, cross-checked against central-bank sources.
Rates are blended with a weighted-average algorithm that decays older observations and favours central-bank references. When a source returns an outlier price (e.g. a fat-finger tick), it is automatically excluded from the blend.
Pricing and feature data verified against each vendor’s public pricing page in 2026. OANDA’s forex data is tied to a brokerage account and is not a pure SaaS price. For deeper individual comparisons see Fixer.io alternative, ExchangeRate-API alternative, and OpenExchangeRates alternative.
| Feature | UniRateAPI | Fixer.io | ExchangeRate-API | Open Exchange Rates | OANDA |
|---|---|---|---|---|---|
| Entry price | $9/mo | $14.99/mo | $10/mo | $12/mo | Broker account required |
| Requests / month (entry) | 750,000 | 10,000 | 30,000 | 10,000 | Tied to trading tier |
| Currencies covered | 593 | 170 | 161 | 200+ | 68 FX pairs |
| Historical data | 1999–2026, included | Available (paid) | Back to 1990 | Available | Varies |
| Time-series endpoint | Included at $9 | $59.99/mo | $10/mo | $47/mo | Yes (trading API) |
| Crypto support | 420+ coins | Limited Bitcoin only | No cryptocurrency support | Bitcoin only | No |
| Precious metals | 4 (Au, Ag, Pt, Pd) | 2 (Gold, Silver) | None | 4 (Gold, Silver, Platinum, Palladium) | Limited |
| Free tier | 6,000/month, no card | 100 calls/month | 1,500 calls/month | 1,000 calls/month | Demo account only |
Five real use cases — each one maps to a tested integration pattern and, where we have one, a full walkthrough in the articles section.
Poll major pairs on a schedule, detect threshold breaches, and push to Slack, PagerDuty, or your own dashboards. Low-volume; fits comfortably in the free tier.
REST vs WebSocket guide →Show prices and invoices in the customer’s local currency using live forex rates, cache per hour, and reconcile against historical rates at month-end close.
Multi-currency SaaS guide →Feed an ML model or signal engine with historical time series, then use the live endpoint for paper-trading simulations. Note: use a broker API for order execution.
Trading-bot integration guide →Convert hotel, flight, or rental totals into the viewer’s home currency at checkout. A single /api/convert call per page is typically enough; cache for 5–15 minutes.
JavaScript converter tutorial →Pull month-end rates for multi-entity consolidation and reconciliation. ASC 830 and IAS 21 both require a dated rate — /api/historical/rates returns it in one call.
Multi-currency accounting guide →Pre-quote forex-adjusted amounts before passing a transaction to Stripe, PayPal, or Wise — giving customers certainty on total charge and reducing downstream support tickets.
International payments guide →Straight answers to what developers ask most about the forex API. Pulled from the People Also Ask data on “forex api”, “free forex api”, and “forex data api” SERPs.
LBMA spot prices, 36–58 years of history, multi-currency conversion. See the dedicated precious metals API page — or jump straight to gold, silver, platinum or palladium.
When you're integrating against forex data you usually need the supporting metadata too — currency codes, policy rates that move the currency, VAT to charge in checkout. All free reference pages on this site.
Current policy rates for 30 major banks — Fed Funds, ECB DFR, BoE, BoJ, PBoC — with next-meeting dates and source URLs.
Standard + reduced VAT / GST for 120 countries, EU rates pulled live from the EC feed, digital-services rules explained.
Searchable alpha-3 + numeric + subunit table for every active currency, plus retired codes (DEM/FRF/ITL…) and the X codes (XAU/XDR/XTS/XXX).
Unicode, HTML entity and LaTeX for every currency glyph — with copy buttons and an explainer for the shared $/£/¥/kr/₨ ambiguities.
Register for a free API key, paste the snippet of your choice, and you’re live. 6,000 requests/month on the free tier — no credit card, no trial clock, no call with sales.