ご質問や問題がありますか?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"]

レスポンスはフラットなオブジェクトです: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}。 無効な通貨コードの場合はHTTPステータス422とJSONエラーメッセージが返されます。

丸め誤差のない金銭計算

浮動小数点数(float)は表示には十分ですが、厳密な会計処理には適していません。json.loadsparse_float引数に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は対象通貨ごとに1行のフラットな配列を返します。辞書内包表記でルックアップ用の辞書に変換できます。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を使えば1行で設定できます:

import requests_cache

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

特定の公的機関を指定

デフォルトでは全提供元を組み合わせた合成レートが返されます。税務申告などで特定の機関の公認レートが必要な場合はprovidersを指定します。

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

すべての提供元を確認できます。特定の提供元を指定した場合、その機関の公表スケジュールに従うため、最新レートが合成レートより1日遅れる場合があります。