Frankfurterは、223の通貨に対応した無料の為替レートAPIです。 レートは104の中央銀行および公的機関から毎日更新され、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

単一通貨ペアのレート

1つの通貨ペアのレートを取得。dateやprovidersの指定も可能です:

curl https://api.frankfurter.dev/v2/rate/eur/usd

通貨一覧

利用可能な通貨と提供元の一覧を取得:

curl https://api.frankfurter.dev/v2/currencies

scope=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および/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

通貨の換算

個別の換算エンドポイントはありません。レートを取得し、数行のコードで換算します:

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ガイドをご覧ください。

よくある質問(FAQ)

Frankfurterはどのような用途に適していますか?
SaaSの課金、Eコマース、税務報告、ERPや会計システム、1948年以降の時系列データを用いた学術研究に適しています。リアルタイム取引や、日中に激しく変動するエキゾチック通貨向けには作られていません。
商用利用は可能ですか?
はい。合成レートはFrankfurter独自の計算値であり、自由に利用できます。個別の提供元エンドポイントを直接照会する場合は、各提供元の利用規約が適用されます。
レートを自身のデータベースに保存またはキャッシュできますか?
はい。APIのトラフィックを抑えるため、キャッシュや過去データの分析を目的として日次データをローカルに保存することを推奨しています。
利用制限やクォータはありますか?
クォータはありません。過度なリクエストへのレート制限はありますが、月間や日ごとの上限はありません。大量のリクエストを行う場合は、キャッシュの活用、セルフホスト、またはデータセットの直接取得を推奨します。
GraphQLに対応していますか?
対応していません。REST APIが極めてシンプルであるため、GraphQLは複雑さを増すだけで、高速なエッジキャッシュを妨げてしまいます。base、quotes、from/toなどのクエリパラメータで必要なデータを過不足なく取得できます。
v1 APIは終了しますか?
終了しません。v1 APIはv2への移行に伴い非推奨(deprecated)となりましたが、恒久的に利用可能です。詳細はv1ドキュメントをご覧ください。欧州中央銀行のデータには/v2/providers/ecb/ratesを使用してください。
プライバシーへの配慮はどうなっていますか?
APIは個人情報、IPアドレス、リクエストURLを収集も記録もしません。パブリックインスタンスはキャッシュとDDoS対策のためにCloudflareを経由しており、Cloudflareが提供するのは集計されたトラフィック統計のみです。
App StoreやGoogle Playのプライバシー申告に記載する必要がありますか?
不要です。リクエストは完全匿名でログも残りません。AppleおよびGoogle Playのガイドラインにおいて「収集されないデータ」に分類されます。
バグ報告や質問はどこで行えますか?
バグの報告や新機能・新データ元の提案はGitHub Issuesへ、質問やコミュニティ制作ツールの共有はDiscussionsへお寄せください。
レートの精度はどの程度ですか?
コンプライアンス要件がある場合は、特定の提供元で絞り込んで公式基準レートを取得してください。一般的な用途ではデフォルトの合成レートで十分ですが、新しいデータの到着によって末尾の小数桁が変わることがあります。
仲値(ミッドマーケット)、買値(Bid)、売値(Ask)のどれですか?
仲値(ミッドマーケット)を返します。提供元が基準レートではなく買値と売値を公表している場合、Frankfurterは両方を保存し、その平均値を算出します。
すべてのレートは毎日更新されますか?
ほぼすべてが日次更新です。一部の情報源は週次、月次、または四半期のデータを提供します。これらのデータは合成フィードには含まれません。providersフィルターで各機関を直接指定して取得してください。
一部の旧通貨と新通貨で期間が重複しているのはなぜですか?
一部の公的機関が新通貨のデータを前身通貨の期間まで遡って提供しているためです(例: TRLは2010年終了ですが、TRYは1996年から存在します)。データは変更せず保持し、合成時に重複をフィルタリングします。
なぜ「Frankfurter」という名前なのですか?
最初のデータ提供元である欧州中央銀行がフランクフルトにあるためです。
European Central Bank and Main riverfront, Frankfurt