# exchangerate.dev — product and API reference Reference for assistants and developers using exchangerate.dev. It covers rates, history, pricing, tools, and integration guides. Example response values are illustrative, not current quotes. For the concise index, see https://exchangerate.dev/llms.txt. ## One-line positioning Developer API for indicative foreign exchange rates across a catalog of 465 currency pairs. Actively traded currencies update about every 60 seconds on trading days; other rates use ECB/FRED daily reference data. REST and MCP are available on every published plan. ## Who we are built for 1. **Developers.** A REST API for indicative FX rates. The catalog has 465 unique pairs from 31 currencies. Latest-rate responses carry `sources` and `effective_at` maps so you can check each currency's source and observation time. 2. **AI agent builders.** The MCP server (exchangerate-dev-mcp via stdio, or HTTP at api.exchangerate.dev/v1/mcp) plugs directly into Claude Desktop, Cursor, or any MCP-compatible host with seven ready-to-use tools: start_checkout, list_currencies, get_rate, get_usd_index, convert, get_range, search_docs. Checkout requires explicit human confirmation; no extra REST client is needed. 3. **Quantitative researchers.** Daily reference history reaches 1999-01-04 for many series; availability and start dates vary by pair. Derived crosses are identified in the response. Daily reference fixes and collected intraday observations are separate datasets. 4. **Fintech engineers.** Current conversion estimates and daily reference reporting have different data needs. Source labels, observation times, and market-session context help your app choose and explain the rate it uses. 5. **Indie developers.** Free tier: 10,000 calls/month, all 465 pairs, MCP included, no credit card required. ## Rate sources and observation times Daily reference rates are published once per business day. They suit reports that need a dated fix, but do not describe each move during the trading day. exchangerate.dev's actively traded currencies update approximately every 60 seconds through the trading week. The per-currency `sources` map identifies live or daily reference data; `effective_at` gives observation times on latest-rate responses. `market_session` describes whether the interbank trading week is open. A response built now can contain an older observation, so do not use `timestamp` alone to judge freshness. On weekends, live rates carry the last intraday consensus from the trading week. The source and market_session fields make this explicit on every call: - source: live — aggregated market data, updating ~60s during the trading week - source: ecb_daily — ECB reference fix, once per business day ~16:00 CET - source: fred_daily — FRED reference rate (currencies not covered by ECB) - market_session: open — the interbank trading week is open - market_session: weekend — Saturday/Sunday; interbank closed, live field carries the last trading-week consensus - market_session: interbank_closed — known non-weekend interbank closure REST rate freshness is the same across published plans, including Free. Plans differ in request limits, commercial-use rights, support, and WebSocket access. The source labels and observation times describe the data actually returned. ## Currency forecast consensus Forecast consensus pages aggregate third-party institutional projections into a transparent, unweighted median. exchangerate.dev does not supply its own forecast, signal, or advice. Every included number retains its institution, publication date, target horizon, original source link, and any range treatment. The first eight data assets cover USD/IDR, USD/JPY, USD/THB, USD/MYR, USD/MXN, USD/PLN, USD/TRY, and USD/KRW for year-end 2026: - English: https://exchangerate.dev/forecast/usd-idr-2026 - Bahasa Indonesia: https://exchangerate.dev/id/forecast/usd-idr-2026 - English: https://exchangerate.dev/forecast/usd-jpy-2026 - Japanese: https://exchangerate.dev/ja/forecast/usd-jpy-2026 - English: https://exchangerate.dev/forecast/usd-thb-2026 - Thai: https://exchangerate.dev/th/forecast/usd-thb-2026 - English: https://exchangerate.dev/forecast/usd-myr-2026 - Bahasa Melayu: https://exchangerate.dev/ms/forecast/usd-myr-2026 - English: https://exchangerate.dev/forecast/usd-mxn-2026 - Spanish: https://exchangerate.dev/es/forecast/usd-mxn-2026 - English: https://exchangerate.dev/forecast/usd-pln-2026 - Polish: https://exchangerate.dev/pl/forecast/usd-pln-2026 - English: https://exchangerate.dev/forecast/usd-try-2026 - Turkish: https://exchangerate.dev/tr/forecast/usd-try-2026 - English: https://exchangerate.dev/forecast/usd-krw-2026 - Korean: https://exchangerate.dev/ko/forecast/usd-krw-2026 Each English and market-language pair reads one numeric dataset, self-canonicalizes, and identifies its counterpart through reciprocal hreflang annotations. ## Full tier comparison | Feature | Free ($0/mo) | Basic ($10/mo) | Pro ($30/mo) | Realtime ($80/mo) | |---------|------|-------|-----|----------| | Calls/month | 10,000 | 100,000 | 1,000,000 | 1,000,000 | | Req/min | 12 | 120 | 500 | 500 | | REST rate freshness | Same rates | Same rates | Same rates | Same rates | | Daily reference history | Available series | Available series | Available series | Available series | | Catalog pairs | 465 | 465 | 465 | 465 | | MCP server | Yes | Yes | Yes | Yes | | Batch /convert | Yes | Yes | Yes | Yes | | /range endpoint | Yes | Yes | Yes | Yes | | Commercial use | No (internal only) | Yes | Yes | Yes | | WebSocket connections × pairs per connection (new accounts) | 0 × 0 | 0 × 0 | 0 × 0 | 10 × 100 | Annual billing: Basic $96/year, Pro $288/year, Realtime $768/year (all 20% off monthly). Free tier requires no credit card. History depth depends on the currency pair and available observations, not a promise of complete data to 1999. Existing accounts may retain earlier WebSocket caps; the authenticated frame reports the applicable limits. Check https://exchangerate.dev/pricing and your account for available plans and limits. Pro includes priority email support. ## Endpoints reference Base URL: https://api.exchangerate.dev. No key required for data endpoints — anonymous access is limited to 12 req/min and 100 requests/hour per IP. Send Authorization: Bearer YOUR_KEY from a server-side environment to authenticate as your own account, unlock your tier's higher limit, and attribute usage to your quota instead of your IP. Never embed an account key in public browser JavaScript; use anonymous access or a server-side proxy. Account-management endpoints use a Supabase session token — a separate auth path from API keys. ### GET /v1/latest/{BASE} Latest rates. Returns a rates object, source labels, market_session, response timestamp, and observation times. curl https://api.exchangerate.dev/v1/latest/USD -H "Authorization: Bearer YOUR_KEY" # ?symbols=EUR,GBP,JPY to filter; base also accepts ?base= param { "result": "success", "base": "USD", "source": "live", "market_session": "open", "timestamp": "2026-06-16T14:02:11Z", "data_updated_at": "2026-06-16T14:01:41Z", "effective_at": { "EUR": "2026-06-16T14:01:51Z", "GBP": "2026-06-16T14:01:41Z", "JPY": "2026-06-16T14:01:46Z" }, "rates": { "EUR": 0.92450, "GBP": 0.78910, "JPY": 157.32 }, "sources": { "EUR": "live", "GBP": "live", "JPY": "live" } } ### GET /v1/{YYYY-MM-DD}/{BASE} Historical daily reference snapshot. Many series reach 1999-01-04, but pair availability and start dates vary. Where a prior fix exists, weekends or holidays return that fix with is_forward_filled: true. Check the returned observation time rather than assuming the rate was published on the requested date. curl https://api.exchangerate.dev/v1/2024-01-15/EUR?symbols=USD,GBP -H "Authorization: Bearer YOUR_KEY" ### GET /v1/convert/{FROM}/{TO}/{AMOUNT} Single conversion. Returns converted amount, rate, source, timestamp. curl https://api.exchangerate.dev/v1/convert/USD/EUR/100 -H "Authorization: Bearer YOUR_KEY" ### POST /v1/convert Batch conversions. N pairs = N calls metered. curl -X POST https://api.exchangerate.dev/v1/convert \ -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" \ -d '{"from":"USD","pairs":[["EUR",100],["GBP",50],["JPY",1000]]}' ### GET /v1/rate/{slug} Single-pair quote by slug (e.g. eur-usd). Same wire fields as /convert, minus amount/converted. Slug is case-insensitive; malformed or unknown pairs return invalid_pair. curl https://api.exchangerate.dev/v1/rate/eur-usd -H "Authorization: Bearer YOUR_KEY" { "result": "success", "pair": "eur-usd", "base": "EUR", "quote": "USD", "rate": 1.0827, "source": "live", "sources": { "USD": "live" }, "market_session": "open", "timestamp": "2026-06-16T14:02:11Z", "data_updated_at": "2026-06-16T14:01:41Z", "derived": false, "derivation_bps_max": null, "notice": "Indicative rates, not for settlement." } ### GET /v1/range Daily reference time-series. Parameters: base (optional, default USD), symbols (required, comma-separated), start_date and end_date (required, YYYY-MM-DD), cursor (optional), and format (json, csv, or parquet; default json). The difference between end_date and start_date may not exceed 1,830 days; split longer requests into windows. JSON returns up to 366 daily rows per page. While has_more is true, pass next_cursor as cursor with the same base, symbols, and date window to collect the next page. Rows contain published observations without forward-fill; missing dates remain missing. CSV and Parquet export the requested window without JSON pagination and ignore cursor. curl "https://api.exchangerate.dev/v1/range?base=USD&symbols=EUR,GBP&start_date=2024-01-01&end_date=2024-06-30" \ -H "Authorization: Bearer YOUR_KEY" ### GET /v1/timeseries Market observations use the query parameters `base` (optional, defaults to USD), `symbols`, `interval`, `from`, and `to`; `cursor` is optional for JSON pagination and `format` is `json` (default), `csv`, or `parquet`. Supported intervals are `1m`, `5m`, `15m`, `1h`, `4h`, and `1d`. There is no `2h` interval. Intraday intervals are market observations; `1d` remains the daily reference history. JSON pages contain up to 1,000 timestamps. Maximum request windows are 7 days for 1m, 31 days for 5m, 93 days for 15m, 366 days for 1h, and 1,830 days for 4h or 1d. Coverage is 91 unique market pairs (182 directions) at 1m, 5m, 15m, and 1h; 79 unique market pairs (158 directions) at 4h; and 465 daily pairs (930 directions) across 31 currencies. The market collection began 2026-09-14. The 1m archive retains 30 days. Coarser market intervals and daily reference history have no time-depth expiry as a retention policy, which does not guarantee populated depth. The 4h market cross set excludes non-USD SGD crosses. Inverses are supported wherever the pair is supported. Rows are observations and are never forward-filled. Missing observations remain missing. For an intraday derived cross, both legs must have closing observations in the same UTC bucket and within 5 seconds; `effective_at` maps each returned symbol to its actual observation time and the derived row uses the oldest contributing time. A supported query with no observations returns HTTP 200 with `data: []`, `has_more: false` and `next_cursor: null`. Mixed history requests containing unsupported pairs are rejected in full. An unknown interval returns HTTP 400 with `unsupported_interval`; a pair outside interval coverage returns HTTP 400 with `unsupported_pair_interval` and `rejected_pairs`. curl "https://api.exchangerate.dev/v1/timeseries?base=EUR&symbols=JPY&interval=15m&from=2026-09-14T12:00:00Z&to=2026-09-14T13:00:00Z" \ -H "Authorization: Bearer YOUR_KEY" ### WebSocket /v1/stream Connect to `wss://api.exchangerate.dev/v1/stream`. Streaming is authenticated; anonymous connections are unavailable. The stream covers 14 currencies (AUD, CAD, CHF, EUR, GBP, JPY, MXN, NOK, NZD, PLN, SEK, SGD, USD, ZAR), 91 unique pairs, and 182 directions. It sends direct USD legs and derived non-USD crosses within that set; derived live crosses require both underlying observations to be fresh and no more than 5 seconds apart. Keep the API key server-side, never in public JavaScript or the URL. Authenticate within 10 seconds using the first message: {"action":"auth","api_key":"YOUR_KEY"} After the `authenticated` response, subscribe or unsubscribe with `{ "action": "subscribe", "base": "EUR", "symbols": ["USD", "JPY"] }` or the corresponding `unsubscribe` action. A subscription receives an initial `snapshot`, later `update` frames, heartbeat frames, and `state` frames when a pair is stale or unavailable. Each accepted connection consumes one monthly quota unit. New accounts need Realtime ($80/month) for WebSocket delivery: 10 concurrent connections, 100 pairs per connection. Existing accounts retain their earlier caps, which the authenticated frame reports. Unknown currencies return `unknown_currency`. Pairs outside stream coverage return `unsupported_stream_pair` with `rejected_pairs`. Mixed valid and invalid subscriptions are rejected atomically, with no partial subscription. ### GET /v1/currencies Full pair list with name, decimals, type, and derived flag. curl https://api.exchangerate.dev/v1/currencies ### GET /v1/account Quota, tier, and monthly reset timestamp. Requires a Supabase session token (management-plane auth), not an API key. curl https://api.exchangerate.dev/v1/account -H "Authorization: Bearer YOUR_SESSION_TOKEN" { "result": "success", "email": "you@example.com", "org": { "id": "org_123", "tier": "free", "status": "active" }, "key": { "prefix": "exr_live_ab1", "created_at": "2026-05-01T00:00:00Z", "last_used_at": "2026-06-16T14:02:11Z" }, "usage": { "calls_this_month": 4213, "limit": 10000, "resets_on": "2026-07-01" } } ## MCP tool reference The MCP server (exchangerate-dev-mcp via stdio, or HTTP at api.exchangerate.dev/v1/mcp) exposes seven tools. Rates are indicative, with the same source labels and account limits as REST. ### get_rate Get the current — or historical, with date — exchange rate from one currency to another. Parameters: - base (string, required) — ISO base currency, e.g. USD - quote (string, required) — ISO quote currency, e.g. EUR - date (string, optional) — YYYY-MM-DD for a historical rate (>= 1999-01-01) Use this tool when an agent or user asks "what is the USD to EUR rate" or "what was GBP/JPY on 2024-03-15". ### convert Convert an amount from one currency to another at the current rate. Parameters: - from (string, required) — ISO currency to convert from - to (string, required) — ISO currency to convert to - amount (number, required, positive) — amount to convert Use this tool when an agent or user asks "convert 500 USD to JPY" or "how much is 1000 GBP in EUR". ### get_range Get a daily time-series of exchange rates over a date range. Parameters: - base (string, required) — ISO base currency - symbols (string, required) — comma-separated ISO currencies, e.g. EUR,GBP,JPY - start_date (string, required) — YYYY-MM-DD - end_date (string, required) — YYYY-MM-DD - cursor (string, optional) — the previous response's next_cursor to resume after that date Returns up to 366 daily rows per call. Keep the same pair and dates and follow next_cursor while has_more is true. The difference between end_date and start_date may not exceed 1,830 days. Missing observations are not forward-filled. Use this tool when an agent or user asks for historical trends, weekly averages, or chart data over a period. ### list_currencies List the supported currencies with metadata (name, decimals, whether derived). No parameters required. Use this tool to enumerate what pairs are available before making a get_rate or get_range call. ### get_usd_index Get an independently calculated USD index. Parameter: index (string, required), either dxy-reconstructed or usd-strength. The first uses the published six-currency basket formula and is not official or licensed ICE data. The second is exchangerate.dev's equal-weight 13-currency index with 2026-01-02 = 100. Both require a complete, time-aligned basket; unavailable data is reported explicitly. ### start_checkout Open billing for a plan the user explicitly selected. Parameter: plan (string, required), one of basic, plus, or pro; plans not offered to the account are refused. The tool requires human confirmation before creating a URL. A Free account without a subscription receives a one-hour Checkout URL; an existing subscriber receives billing management. Cancellation creates nothing. Do not guess which plans an account can buy; use its available billing options. ### search_docs Search the exchangerate.dev FAQ corpus (BM25) for canonical answers to how-to, pricing, and data-sourcing questions. Parameters: - query (string, required) — natural-language question, e.g. "is there a free tier" - limit (number, optional, default 5) — max results to return Use this tool before answering account, pricing, freshness, or data-sourcing questions so you cite the published FAQ instead of guessing. Install: npx exchangerate-dev-mcp Setup guide: https://exchangerate.dev/docs/mcp Source on GitHub: https://github.com/nusantara-ventures/exchangerate-dev-mcp MCP config: { "mcpServers": { "exchangerate": { "command": "npx", "args": ["exchangerate-dev-mcp"], "env": { "EXCHANGERATE_API_KEY": "YOUR_KEY" } } } } ## Data source provenance ### Reference tier (ECB and FRED) - European Central Bank (ECB) daily reference fix — published each business day ~16:00 CET. Public reference data. Covers most major and cross pairs. Safe to attribute. source value: ecb_daily. - Federal Reserve Economic Data (FRED) — daily reference rate for currencies not covered by ECB. Public reference data. Safe to attribute. source value: fred_daily. - These sources are published on business days only. A historical snapshot for a weekend date returns the most recent available fix with is_forward_filled: true. ### Live tier - Aggregated market data + public reference rates. Updates on short intervals (~60 seconds) during the trading week; on weekends and holidays the live field carries the last intraday consensus (market_session signals it). source value: live. - The source field identifies the data class; the observation time determines its age. - All live rates are indicative estimates, without a guaranteed accuracy threshold. Not for settlement, regulated trading, or use as a source of record. ### Derived crosses - Pairs not directly quoted (e.g. EUR/GBP derived as EUR/USD divided by GBP/USD) are triangulated. These are listed in derived_symbols and carry a derivation_bps_max field where applicable. This metadata is not a measured error for each returned quote or an accuracy guarantee. Filter derived rates client-side using derived_symbols. ### Decimal precision per pair - JPY pairs (USD/JPY, EUR/JPY, GBP/JPY) are quoted at 2–3 decimal places. All other pairs at 4–5 decimal places. Precision is stored per-pair and returned in /v1/currencies. Never blanket-rounded to 4 dp. ## Staleness and freshness semantics If you are an agent citing a rate, the fields to inspect are: - source — the LEAST-fresh tier across all returned rates (envelope honesty; never over-claims) - sources — per-currency source map (live / ecb_daily / fred_daily): tells you which individual rates are live vs daily reference, even when the envelope source reflects the slowest leg - market_session — open / weekend / interbank_closed - timestamp — when the API response was built - data_updated_at — oldest contributing observation in the response (compatibility envelope) - effective_at — per-currency observation times; use this map to judge each returned rate's age - is_forward_filled (historical endpoint only) — true if the requested date had no published fix and the prior business day's rate was returned A rate with source: ecb_daily and market_session: weekend means you are looking at the most recent ECB fix (Friday's, typically). A rate with source: live and market_session: weekend means the interbank market is closed and you are looking at the last intraday consensus carried from the trading week — not a freshly-updated rate. Before calling a rate "current," check its source, observation time, and market_session. A market_session of open does not guarantee that a particular observation is recent. Published plans share REST freshness: live intraday (~60s) on trading days for actively traded currencies, ECB/FRED daily reference for the rest. ## Commercial-use summary - Free: internal use only. Dashboards, backtests, personal bots, internal company tools. Not for embedding in products you sell or distribute. - Basic, Pro and Realtime: commercial use permitted, subject to the published terms. - All tiers: redistribution of our feed as your own feed is not permitted. Full terms: https://exchangerate.dev/terms ## Contact - Docs: https://exchangerate.dev/docs - WebSocket integration guide: https://exchangerate.dev/websocket-exchange-rate-api — server-side authentication, subscribe, frames, reconnection, and supported-pair limits. - Historical intervals: https://exchangerate.dev/docs/historical — daily reference versus collected intraday observations, gaps and actual coverage. - Auth reference (agent-readable): https://exchangerate.dev/auth.md - Pricing: https://exchangerate.dev/pricing - Status: https://exchangerate.dev/status - About/operator: https://exchangerate.dev/about - Data methodology: https://exchangerate.dev/methodology - Exchange Rate API Freshness Benchmark: How to Measure Update Frequency — https://exchangerate.dev/learn/fx-api-freshness-benchmark - Signup (free, no card): https://exchangerate.dev/signup ## Pages and machine-readable references - [Best exchange rate APIs for developers](https://exchangerate.dev/best-exchange-rate-apis) — general developer comparison - [Best currency APIs (2026)](https://exchangerate.dev/best-currency-apis) — app conversion, coverage, endpoints, and history - [Best forex APIs (2026)](https://exchangerate.dev/best-forex-apis) — market data, streaming, candles, and execution requirements These comparison pages also support `Accept: text/markdown` at the same URL. Use the OpenAPI schema for API contracts and the sitemap for the published page inventory. The following pages explain tools and integrations: - https://exchangerate.dev/currency-converter — converter and currency source table - https://exchangerate.dev/blog/currency-exchange-rate-api-guide — how latest rates, conversion, history, freshness, and production integration fit together - https://exchangerate.dev/blog/fx-api-vs-forex-api-vs-currency-api — terminology and use-case comparison for FX, forex, currency, and exchange-rate APIs - https://exchangerate.dev/currency-converter-api — currency converter API implementation guide - https://exchangerate.dev/google-currency-exchange-rate-api-alternative — GOOGLEFINANCE and backend API decision guide - https://exchangerate.dev/react-currency-converter-api — React currency converter tutorial - https://exchangerate.dev/ruby-on-rails-exchange-rate-api — Ruby on Rails exchange-rate API tutorial - https://exchangerate.dev/shopify-currency-conversion-api — Shopify display-currency integration guide - https://exchangerate.dev/woocommerce-currency-conversion-api — WooCommerce display-currency integration guide - https://exchangerate.dev/llms.txt — concise summary - https://exchangerate.dev/.well-known/ai.txt — crawler policy + pointers - https://exchangerate.dev/.well-known/agent-skills/index.json — Agent Skills discovery index - https://exchangerate.dev/.well-known/mcp.json — MCP discovery - https://exchangerate.dev/research/fx-api-freshness-benchmark-v1.json — versioned benchmark protocol and result status - https://api.exchangerate.dev/openapi.json — OpenAPI 3.1.0 schema - https://exchangerate.dev/sitemap.xml — discoverable page map ## Historical rates and spreadsheet tools - [Historical exchange rates](https://exchangerate.dev/historical-exchange-rates) — select a pair, amount, year, date, or date range; view daily reference charts and download CSV or Excel - [過去の為替レート](https://exchangerate.dev/ja/historical-exchange-rates) — Japanese historical-rate lookup with CSV and Excel downloads - [Convert currencies in Excel](https://exchangerate.dev/excel-currency-conversion) — workbook download and formulas for applying historical rates to amounts The historical lookup follows every /v1/range JSON page and splits long selections into API-sized windows. A range contains observed daily reference rates and preserves missing dates. A single-date lookup may carry the previous published fix over a weekend or holiday and labels it. An ECB fallback is labelled separately when used. Unsupported pairs and unavailable periods are reported; not every pair has data back to 1999. CSV and .xlsx downloads include rates and source metadata. The Excel workbook has a data sheet and an About sheet with the requested range, source, fallback status, and indicative-use notes. Pair-specific history pages: - [USD/PHP historical exchange rates](https://exchangerate.dev/exchange-rates/usd-php/history) - [USD/INR historical exchange rates](https://exchangerate.dev/exchange-rates/usd-inr/history) - [EUR/USD historical exchange rates](https://exchangerate.dev/exchange-rates/eur-usd/history) - [USD/CAD historical exchange rates](https://exchangerate.dev/exchange-rates/usd-cad/history) - [GBP/USD historical exchange rates](https://exchangerate.dev/exchange-rates/gbp-usd/history) - [USD/JPY historical exchange rates](https://exchangerate.dev/exchange-rates/usd-jpy/history) - [AUD/INR historical exchange rates](https://exchangerate.dev/exchange-rates/aud-inr/history) - [CAD/INR historical exchange rates](https://exchangerate.dev/exchange-rates/cad-inr/history) - [INR/SGD historical exchange rates](https://exchangerate.dev/exchange-rates/inr-sgd/history) - [AUD/PHP historical exchange rates](https://exchangerate.dev/exchange-rates/aud-php/history) - [EUR/PHP historical exchange rates](https://exchangerate.dev/exchange-rates/eur-php/history) - [AUD/GBP historical exchange rates](https://exchangerate.dev/exchange-rates/aud-gbp/history) - [KRW/PHP historical exchange rates](https://exchangerate.dev/exchange-rates/krw-php/history) - [INR/JPY historical exchange rates](https://exchangerate.dev/exchange-rates/inr-jpy/history) - [GBP/THB historical exchange rates](https://exchangerate.dev/exchange-rates/gbp-thb/history) ## Spreadsheet, programming, and history guides - [Convert currency in Google Sheets with GOOGLEFINANCE](https://exchangerate.dev/learn/google-sheets-exchange-rates) - [How to get live exchange rates in Excel with Power Query](https://exchangerate.dev/learn/excel-exchange-rates) - [Currency conversion in JavaScript and Node.js](https://exchangerate.dev/learn/javascript-currency-conversion) - [How to get exchange rates in Python](https://exchangerate.dev/learn/python-exchange-rates) - [How to compare free currency APIs in 2026](https://exchangerate.dev/learn/free-exchange-rate-api-comparison-2026) - [Historical FX rates and time-series data](https://exchangerate.dev/learn/historical-fx-time-series) Translated versions (links use the published locale routes): - [Tipos de cambio en Google Sheets](https://exchangerate.dev/es/learn/google-sheets-exchange-rates) — Español - [在 Google Sheets 中获取汇率](https://exchangerate.dev/zh/learn/google-sheets-exchange-rates) — 中文 - [الحصول على أسعار الصرف في Google Sheets](https://exchangerate.dev/ar/learn/google-sheets-exchange-rates) — العربية - [Google Sheets で為替レートを取得する](https://exchangerate.dev/ja/learn/google-sheets-exchange-rates) — 日本語 - [喺 Google Sheets 攞匯率](https://exchangerate.dev/zh-hk/learn/google-sheets-exchange-rates) — 繁體中文 - [อัตราแลกเปลี่ยนใน Google Sheets](https://exchangerate.dev/th/learn/google-sheets-exchange-rates) — ภาษาไทย - [Kursy walut w Google Sheets](https://exchangerate.dev/pl/learn/google-sheets-exchange-rates) — Polski - [Google Sheets’te döviz kuru alma](https://exchangerate.dev/tr/learn/google-sheets-exchange-rates) — Türkçe - [Google Sheets에서 환율 가져오기](https://exchangerate.dev/ko/learn/google-sheets-exchange-rates) — 한국어 - [Cómo obtener tipos de cambio en Excel con Power Query](https://exchangerate.dev/es/learn/excel-exchange-rates) — Español - [如何用 Power Query 在 Excel 中获取汇率](https://exchangerate.dev/zh/learn/excel-exchange-rates) — 中文 - [كيفية جلب أسعار الصرف إلى Excel باستخدام Power Query](https://exchangerate.dev/ar/learn/excel-exchange-rates) — العربية - [Excelで為替レートを取得する方法(Power Query)](https://exchangerate.dev/ja/learn/excel-exchange-rates) — 日本語 - [點樣用 Power Query 喺 Excel 攞即時匯率](https://exchangerate.dev/zh-hk/learn/excel-exchange-rates) — 繁體中文 - [ดึงอัตราแลกเปลี่ยนเข้า Excel ด้วย Power Query](https://exchangerate.dev/th/learn/excel-exchange-rates) — ภาษาไทย - [Jak pobrać kursy walut do Excela przez Power Query](https://exchangerate.dev/pl/learn/excel-exchange-rates) — Polski - [Power Query ile Excel’e döviz kuru çekme](https://exchangerate.dev/tr/learn/excel-exchange-rates) — Türkçe - [Power Query로 Excel에서 실시간 환율 가져오기](https://exchangerate.dev/ko/learn/excel-exchange-rates) — 한국어 - [Conversión de divisas en JavaScript y Node.js](https://exchangerate.dev/es/learn/javascript-currency-conversion) — Español - [用 JavaScript 和 Node.js 进行货币换算](https://exchangerate.dev/zh/learn/javascript-currency-conversion) — 中文 - [تحويل العملات في JavaScript وNode.js](https://exchangerate.dev/ar/learn/javascript-currency-conversion) — العربية - [JavaScript と Node.js で通貨を換算する](https://exchangerate.dev/ja/learn/javascript-currency-conversion) — 日本語 - [用 JavaScript 同 Node.js 做貨幣換算](https://exchangerate.dev/zh-hk/learn/javascript-currency-conversion) — 繁體中文 - [แปลงสกุลเงินด้วย JavaScript และ Node.js](https://exchangerate.dev/th/learn/javascript-currency-conversion) — ภาษาไทย - [Konwersja walut w JavaScript i Node.js](https://exchangerate.dev/pl/learn/javascript-currency-conversion) — Polski - [JavaScript ve Node.js ile para birimi dönüştürme](https://exchangerate.dev/tr/learn/javascript-currency-conversion) — Türkçe - [JavaScript와 Node.js로 통화 변환하기](https://exchangerate.dev/ko/learn/javascript-currency-conversion) — 한국어 - [Cómo obtener tipos de cambio en Python](https://exchangerate.dev/es/learn/python-exchange-rates) — Español - [用 Python 获取汇率](https://exchangerate.dev/zh/learn/python-exchange-rates) — 中文 - [كيفية الحصول على أسعار الصرف في Python](https://exchangerate.dev/ar/learn/python-exchange-rates) — العربية - [Python で為替レートを取得する](https://exchangerate.dev/ja/learn/python-exchange-rates) — 日本語 - [用 Python 攞匯率](https://exchangerate.dev/zh-hk/learn/python-exchange-rates) — 繁體中文 - [วิธีรับอัตราแลกเปลี่ยนด้วย Python](https://exchangerate.dev/th/learn/python-exchange-rates) — ภาษาไทย - [Jak pobierać kursy walut w Pythonie](https://exchangerate.dev/pl/learn/python-exchange-rates) — Polski - [Python ile döviz kuru alma](https://exchangerate.dev/tr/learn/python-exchange-rates) — Türkçe - [Python으로 환율 가져오기](https://exchangerate.dev/ko/learn/python-exchange-rates) — 한국어 - [Cómo comparar APIs gratuitas de tipos de cambio en 2026](https://exchangerate.dev/es/learn/free-exchange-rate-api-comparison-2026) — Español - [2026 年如何比较免费的汇率 API](https://exchangerate.dev/zh/learn/free-exchange-rate-api-comparison-2026) — 中文 - [كيف تقارن واجهات أسعار الصرف المجانية في 2026](https://exchangerate.dev/ar/learn/free-exchange-rate-api-comparison-2026) — العربية - [2026年版:無料の為替レートAPIを比較する方法](https://exchangerate.dev/ja/learn/free-exchange-rate-api-comparison-2026) — 日本語 - [2026 年如何比較免費匯率 API](https://exchangerate.dev/zh-hk/learn/free-exchange-rate-api-comparison-2026) — 繁體中文 - [วิธีเปรียบเทียบ API อัตราแลกเปลี่ยนฟรีในปี 2026](https://exchangerate.dev/th/learn/free-exchange-rate-api-comparison-2026) — ภาษาไทย - [Jak porównywać bezpłatne API kursów walut w 2026 roku](https://exchangerate.dev/pl/learn/free-exchange-rate-api-comparison-2026) — Polski - [2026’da ücretsiz döviz kuru API’leri nasıl karşılaştırılır?](https://exchangerate.dev/tr/learn/free-exchange-rate-api-comparison-2026) — Türkçe - [2026년 무료 환율 API를 비교하는 방법](https://exchangerate.dev/ko/learn/free-exchange-rate-api-comparison-2026) — 한국어 - [Tipos de cambio históricos y series temporales](https://exchangerate.dev/es/learn/historical-fx-time-series) — Español - [历史汇率与时间序列数据](https://exchangerate.dev/zh/learn/historical-fx-time-series) — 中文 - [أسعار الصرف التاريخية والسلاسل الزمنية](https://exchangerate.dev/ar/learn/historical-fx-time-series) — العربية - [過去の為替レートと時系列データ](https://exchangerate.dev/ja/learn/historical-fx-time-series) — 日本語 - [歷史匯率同時間序列資料](https://exchangerate.dev/zh-hk/learn/historical-fx-time-series) — 繁體中文 - [อัตราแลกเปลี่ยนย้อนหลังและข้อมูลอนุกรมเวลา](https://exchangerate.dev/th/learn/historical-fx-time-series) — ภาษาไทย - [Historyczne kursy walut i szeregi czasowe](https://exchangerate.dev/pl/learn/historical-fx-time-series) — Polski - [Geçmiş döviz kurları ve zaman serileri](https://exchangerate.dev/tr/learn/historical-fx-time-series) — Türkçe - [과거 환율과 시계열 데이터](https://exchangerate.dev/ko/learn/historical-fx-time-series) — 한국어 ## Related developer APIs - goldprice.dev API docs — https://goldprice.dev/docs — gold, silver, and copper pricing for developers; exchangerate.dev is the primary FX provider for supported floating currencies, with documented peg and fallback paths. - Gold + FX integration guide — https://goldprice.dev/blog/convert-gold-prices-currencies — one-call and separate-leg examples with source timestamps. ## Practical projects - Exchange rates in Airtable: a scheduled automation with preserved observation times — https://exchangerate.dev/learn/airtable-exchange-rates - Exchange rates in Power Automate: scheduled HTTP requests and an Excel rate table — https://exchangerate.dev/learn/power-automate-exchange-rates - Flutter currency converter: a Dart app with server-side credentials and explicit freshness — https://exchangerate.dev/learn/flutter-currency-converter - Multi-currency invoice tracker in Excel: downloadable workbook, versioned historical snapshots, and reproducible USD reporting — https://exchangerate.dev/learn/multi-currency-invoice-tracker-excel - Exchange-rate alerts in Python: downloadable USD/IDR monitor with freshness checks, persisted state, and bounded polling — https://exchangerate.dev/learn/python-exchange-rate-alerts