Frankfurter
Frankfurterは、98の中央銀行および公的機関から 206の通貨の日次為替レートを追跡しています。 データは1948年まで遡ります。
パブリックAPIはapi.frankfurter.devで利用可能で、 APIキーは不要です。完全な制御が必要な場合は、オープンソースとして セルフホストも可能です。
AIエージェントをご利用の場合は、llms.txtを参照させるか、 MCPサーバーを接続してください。
為替レート
最新の為替レートを取得:
curl https://api.frankfurter.dev/v2/ratesbaseで基準通貨を変更:
curl https://api.frankfurter.dev/v2/rates?base=usdquotesで対象通貨を絞り込み:
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オブジェクトとしてストリーミング処理されます。
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01単一通貨ペアのレート
1つの通貨ペアのレートを取得:
curl https://api.frankfurter.dev/v2/rate/eur/usd通貨一覧
利用可能な通貨と提供元の一覧を取得:
curl https://api.frankfurter.dev/v2/currenciesscope=allを指定すると、過去の通貨も含めて取得できます:
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と同様のパラメータが利用可能です。
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通貨の換算
個別の換算エンドポイントはありません。レートを取得し、数行のコードで換算します:
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ボディを返します。
{
"message": "Could not find currency ABC"
}400- 無効なパラメータまたは不正なリクエスト。
404- 指定された通貨、レート、またはリソースが見つかりません。
422- リクエストは構文的に正しいですが、処理できません。
セルフホスト
Dockerを使用してFrankfurterを独自にセルフホストできます。詳細なデプロイガイドで本番運用の設定やAPIキーの管理を解説しています。
よくある質問(FAQ)
- Frankfurterはどのような用途に適していますか?
- SaaSの課金、Eコマース、税務報告、ERPや会計システム、1948年以降の時系列データを用いた研究に適しています。リアルタイム取引やデイトレードなど秒単位の価格変動を伴う用途には適していません。
- 商用利用は可能ですか?
- はい、商用利用可能です。基礎となるデータには各提供元の利用規約が適用されます。
- 利用制限やクォータはありますか?
- クォータはありません。過度なリクエストへのレート制限はありますが、月間や日ごとの上限はありません。大量のリクエストを行う場合は、キャッシュの活用、セルフホスト、またはデータセットの直接取得を推奨します。
- GraphQLに対応していますか?
- 対応していません。REST APIが極めてシンプルであるため、GraphQLは複雑さを増すだけで、高速なエッジキャッシュを妨げてしまいます。
base、quotes、from/toなどのクエリパラメータで必要なデータを過不足なく取得できます。 - v1 APIは終了しますか?
- 終了しません。v1は非推奨ですが、恒久的に利用可能です。詳細はv1ドキュメントをご覧ください。ECBデータは/v2/providers/ecb/ratesでも取得できます。
- プライバシーへの配慮はどうなっていますか?
- Frankfurterは個人情報、IPアドレス、リクエストされたURLを一切保存しません。セルフホストのPlausible Analyticsインスタンスを通じて匿名の統計集計値のみを記録します。
- App StoreやGoogle Playのプライバシー申告に記載する必要がありますか?
- 不要です。リクエストは完全匿名でログも残りません。AppleおよびGoogle Playのガイドラインにおいて「収集されないデータ」に分類されます。
- バグ報告や質問はどこで行えますか?
- バグの報告や新機能・新データ元の提案はGitHub Issuesへ、質問やコミュニティ制作ツールの共有はDiscussionsへお寄せください。
- レートの精度はどの程度ですか?
- コンプライアンス要件がある場合は、特定の機関で絞り込んで公式基準レートを取得してください。一般的な用途では、合成レートで十分に機能します。
- 仲値(ミッドマーケット)、買値(Bid)、売値(Ask)のどれですか?
- 仲値(ミッドマーケット)を返します。提供元が基準レートではなく買値と売値を公表している場合、Frankfurterは両方を保存し、その平均値を算出します。
- すべてのレートは毎日更新されますか?
- ほぼすべてが日次更新です。例外は英国歳入関税庁HMRC(月次)と米国財務省UST(四半期)の2機関のみです。これらのレートは数週間または数か月間有効であるため、合成フィードには含めず、各機関を直接指定した場合にのみ取得できます。
- 一部の旧通貨と新通貨で期間が重複しているのはなぜですか?
- 一部の公的機関が新通貨のデータを前身通貨の期間まで遡って提供しているためです(例:
TRLは2010年終了ですが、TRYは1996年から存在します)。データは変更せず保持し、合成時に重複をフィルタリングします。 - なぜ「Frankfurter」という名前なのですか?
- すべてが始まった欧州中央銀行がフランクフルトにあるためです。