有問題或遇到狀況?歡迎至 GitHub Discussions 發問。

你不需要安裝任何 SDK。Frankfurter 採用標準 HTTPS 並回傳扁平 JSON,使用你熟悉的 HTTP 函式庫即可串接,無須 API 金鑰或帳號。

快速開始

取得匯率並換算金額:

import requests

res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()
total = 100 * data["rate"]

回應為扁平 JSON 物件: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}。 傳入無效貨幣代碼時會回傳 422 狀態碼與 JSON 錯誤訊息。

精確的金額運算

浮點數(float)適合顯示,但不適合會計運算。將 parse_float 傳遞給 json.loads,即可直接將匯率解析為 Decimal:

from decimal import Decimal

import requests

res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json(parse_float=Decimal)
total = Decimal("100") * data["rate"]

一次取得多組匯率

/v2/rates 會回傳扁平陣列,每個目標貨幣各占一筆。使用字典推導式即可轉為查詢字典;省略 quotes 則會回傳所有可用貨幣。

res = requests.get(
    "https://api.frankfurter.dev/v2/rates",
    params={"base": "usd", "quotes": "eur,gbp,jpy"},
)
rates = {row["quote"]: row["rate"] for row in res.json()}

快取不變的資料

鎖定單一資料來源的歷史匯率不會變動,可長期快取。綜合匯率可能隨新資料匯入而微調,最新匯率則隨各機構發布更新(每個營業日最多數次),適合設定較短的 TTL。搭配 requests-cache,只要一行程式碼即可啟用快取:

import requests_cache

session = requests_cache.CachedSession("frankfurter", expire_after=3600)
res = session.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()

非同步請求

在非同步 Web 應用程式中,建議使用 httpx:

import httpx

API = "https://api.frankfurter.dev"


async def rate(base, quote):
    async with httpx.AsyncClient(base_url=API) as client:
        res = await client.get(f"/v2/rate/{base}/{quote}")
        res.raise_for_status()
        return res.json()["rate"]

鎖定官方資料來源

預設會回傳彙整所有來源的綜合匯率。加上 providers 可鎖定單一官方機構,適用於法規要求採用特定中央銀行公布匯率的情境(例如歐盟 VAT 使用的歐洲央行參考匯率)。

res = requests.get(
    "https://api.frankfurter.dev/v2/rate/usd/eur",
    params={"providers": "ecb"},
)
data = res.json()

瀏覽所有資料來源。鎖定單一來源時會依該機構自身的發布時間表更新,因此最新匯率可能比綜合匯率晚一天。

需要分析時間序列?

若要處理日期區間、按月彙整與繪製圖表,CSV 端點可直接載入 DataFrame,請參閱 pandas。