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&quotes=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.csv

NDJSON 輸出

處理大型回應時,可將 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?
因為我們最初的資料來源是
European Central Bank