Frankfurter 匯率與貨幣 API
Frankfurter 是免費匯率 API,支援來自 106 家中央銀行與官方機構的 228 種貨幣。匯率每日更新,歷史資料可追溯至 1948 年。
公開 API 位於 api.frankfurter.dev,無須 API 金鑰即可使用。專案完全開放原始碼,你也可以自行架設以取得完整控制權。
搭配 AI 代理使用?直接指向 llms.txt,或加入 MCP 伺服器。
匯率
取得最新匯率。
curl https://api.frankfurter.dev/v2/rates使用 base 變更基準貨幣。
curl https://api.frankfurter.dev/v2/rates?base=usd使用 quotes 篩選目標貨幣。
curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbp歷史匯率
查詢特定日期的匯率。
curl https://api.frankfurter.dev/v2/rates?date=1999-01-04時間序列
使用 from 與 to 取得指定期間內的匯率。
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01"es=usd提示:指定所需幣別可大幅縮小回應體積。查詢大範圍日期時,建議改用 NDJSON 逐行串流讀取結果。
期間彙整
使用 group 對時間序列進行降採樣,支援 week 與 month。
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&group=month依資料來源篩選
使用 providers 限定特定資料來源。
curl https://api.frankfurter.dev/v2/rates?providers=ecb 預設會回傳彙整所有資料來源後的綜合匯率。若需特定機構的匯率,可使用 providers 篩選,或透過各資料來源專屬路由直接查詢。
資料來源標註
加上 expand=providers,即可查看參與計算每筆綜合匯率的資料來源。
curl https://api.frankfurter.dev/v2/rates?expand=providers 每筆資料會新增包含來源代碼的 providers 陣列。採固定匯率(釘住制)的幣別不含此欄位,因為其匯率是由釘住關係推算,而非直接取自資料來源。
CSV 輸出
匯率亦支援 CSV 格式。在路徑後方加上 .csv,或將 Accept 標頭設為 text/csv。
curl https://api.frankfurter.dev/v2/rates.csvNDJSON 輸出
處理大型回應時,可將 Accept 標頭設為 application/x-ndjson,請求 NDJSON(以換行分隔的 JSON)。每一行皆為獨立的 JSON 物件,適合在不緩衝整個回應的情況下串流讀取長時間序列。
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01單一匯率
取得單一貨幣對的匯率,可搭配 date 或 providers 使用。
curl https://api.frankfurter.dev/v2/rate/eur/usd貨幣列表
取得可用貨幣及其資料來源涵蓋範圍。
curl https://api.frankfurter.dev/v2/currencies使用 scope 納入已停用的歷史貨幣。
curl https://api.frankfurter.dev/v2/currencies?scope=all單一貨幣
取得單一貨幣的詳細資訊與資料來源涵蓋範圍。
curl https://api.frankfurter.dev/v2/currency/eur資料來源
列出 API 背後的各家資料來源。
curl https://api.frankfurter.dev/v2/providers取得單一資料來源的詳細資訊。
curl https://api.frankfurter.dev/v2/providers/ecb依資料來源查詢匯率
直接向特定資料來源查詢匯率,支援與 /v2/rates 及 /v2/rate 相同的參數。
curl https://api.frankfurter.dev/v2/providers/ecb/rates取得該資料來源的單一貨幣對匯率。
curl https://api.frankfurter.dev/v2/providers/ecb/rate/eur/usd 可搭配 date、日期區間(from 與 to)或期間彙整使用,並同樣支援 .csv 與 ndjson 格式。
curl https://api.frankfurter.dev/v2/providers/ecb/rates?date=2024-05-15金額換算
API 不設獨立的換算端點。先取得匯率,再用幾行程式碼即可完成換算。
function convert(base, quote, amount) {
const api = "https://api.frankfurter.dev";
return fetch(`${api}/v2/rate/${base}/${quote}`)
.then((r) => r.json())
.then((d) => (amount * d.rate).toFixed(2));
}
convert("eur", "usd", 10).then((result) =>
alert(`10 EUR = ${result} USD`)
);錯誤處理
API 會回傳標準 HTTP 狀態碼與 JSON 內容。
{
"status": 422,
"message": "invalid currency: ABC"
}400- 無效參數或請求格式錯誤。
404- 找不到指定的貨幣、匯率或資源。
422- 請求格式正確,但無法處理。
自行架設
你可以使用 Docker 自行架設。正式環境設定與 API 金鑰配置請參閱 Deploy 指南。
常見問題
- Frankfurter 適合哪些場景(又不適合哪些場景)?
- 適合 SaaS 計費、電子商務、稅務申報、ERP 與會計系統,以及追溯至 1948 年歷史序列的學術研究。不適合即時外匯交易,或盤中劇烈波動的冷門貨幣。
- API 可以免費商業使用嗎?
- 可以。綜合匯率由 Frankfurter 自行計算,可自由免費使用。若直接查詢單一資料來源端點,仍須遵守該來源的使用條款。
- 可以將匯率儲存或快取在自己的資料庫嗎?
- 可以。我們鼓勵將每日匯率儲存在本地端用於快取或歷史分析,以減輕 API 流量負擔。
- API 有呼叫次數限制嗎?
- 沒有配額限制。請求設有防止濫用的速率限制(rate limit),但沒有每日或每月上限。若有大量查詢需求,建議快取回應、自行架設,或直接下載資料集。
- API 支援 GraphQL 嗎?
- 不支援。REST API 已經足夠精簡,導入 GraphQL 只會增加複雜度而無明顯效益,還會破壞讓 API 保持高速的邊緣快取(edge caching)。使用
base、quotes與from/to等查詢參數,即可精準取得所需資料。 - v1 API 會停用嗎?
- 不會。v1 API 已標記為 deprecated 並由 v2 取代,但將無限期持續提供服務。詳見 v1 說明文件。若需歐洲中央銀行資料,請改用 /v2/providers/ecb/rates。
- API 的隱私權政策為何?
- API 不收集也不記錄個人資料、IP 位址或請求 URL。公開服務透過 Cloudflare 提供快取與 DDoS 防護,僅保留彙整後的流量統計。
- 需要在 App Store 或 Google Play 的隱私權標籤中申報此 API 嗎?
- 不需要。由於查詢完全匿名且不保留任何請求日誌,依 Apple 與 Google Play 規範屬於「未收集資料(Data Not Collected)」。
- 可以在哪裡回報錯誤或發問?
- 回報錯誤、提出功能需求或建議新增資料來源,請至 GitHub 建立 Issue。發問或分享你以 Frankfurter 開發的函式庫與工具,請使用 Discussions。
- 匯率精準度如何?
- 若有法規遵循需求,請篩選特定資料來源以取得官方參考匯率。一般用途使用預設的綜合匯率即可,但當新資料匯入時,末幾位小數可能會微幅變動。
- 匯率是中間價、買進價還是賣出價?
- API 回傳市場中間價(mid-market rate)。當資料來源公布買進(bid)與賣出(ask)報價而非單一參考匯率時,Frankfurter 會同時保存兩者並計算中間值。
- 所有匯率都是每日更新嗎?
- 絕大多數都是。部分來源提供每週、每月或每季資料,這些來源不會納入綜合匯率,請使用
providers參數直接查詢。 - 有提供加密貨幣匯率嗎?
- 有少數幾種,涵蓋範圍有限。
BTC、BCH、ETH、LTC與XRP皆來自單一來源瑞士聯邦稅務局,自 2018 年起每個營業日公布一筆數值。若用於瑞士稅務申報,請加上providers=ESTV查詢。 - 為什麼部分舊幣別與新幣別的日期會重疊?
- 部分資料來源會將新幣別的匯率回溯推算至舊幣別流通期間(例如
TRL於 2010 年結束,但TRY自 1996 年即有紀錄)。我們會原樣保留各來源資料,僅在計算綜合匯率時排除重疊區間。 - 為什麼叫 Frankfurter?
- 因為我們最初的資料來源是