Python
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.loadsのparse_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")
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を追加すると特定の機関を1つ指定できます。EU付加価値税用のECB基準レートのように、管轄地域が自国の中央銀行の公表レートを求める場合に重要です。
res = requests.get(
"https://api.frankfurter.dev/v2/rate/usd/eur",
params={"providers": "ecb"},
)
data = res.json()すべての提供元を確認できます。特定の提供元を指定した場合、その機関の公表スケジュールに従うため、最新レートが合成レートより1日遅れる場合があります。
時系列を分析しますか?
期間指定、月ごとのグループ化、グラフ作成には、CSVエンドポイントをDataFrameに直接読み込めます。pandasを参照してください。