ご質問や問題がありますか?GitHub Discussionsでお気軽にご相談ください。

SDKは不要です。fetchは主要ブラウザ、Node、Deno、Bun、エッジランタイムに標準搭載されています。CORSは有効で、漏洩を心配するAPIキーもありません。クライアントサイドのコードから直接APIを呼び出せます。

クイックスタート

レートを取得して換算:

const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur");
const data = await res.json();
const total = 100 * data.rate;

レスポンスはフラットなオブジェクトです: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}fetchはHTTPエラー時でも解決されるため、res.okを確認してください。無効な通貨コードの場合はステータス422とJSONエラーメッセージが返されます。

Intlでフォーマット

通貨記号を手動で付与する必要はありません。Intl.NumberFormatは、あらゆるロケールにおける各通貨の記号、位置、小数点以下の桁数を認識しています:

const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur");
const { rate } = await res.json();

const eur = new Intl.NumberFormat("ja-JP", {
  style: "currency",
  currency: "EUR",
});
eur.format(100 * rate); // "€87.39"

記号と小数点以下の桁数

補助通貨単位や記号のために独自メタデータを管理する必要はありません。フォーマッタに問い合わせるだけです:

const yen = new Intl.NumberFormat("ja-JP", {
  style: "currency",
  currency: "JPY",
});

yen.resolvedOptions().maximumFractionDigits; // 0、円には補助単位がありません
yen.formatToParts(1).find((part) => part.type === "currency").value; // "¥"

Frankfurterが提供するすべての通貨(コードと記号を含む)を確認できます。

複数のレートを一度に取得

/v2/ratesは対象通貨ごとに1行のフラットな配列を返します。Object.fromEntriesを使用してルックアップオブジェクトに変換できます。quotesを省略すると、利用可能なすべての通貨が返されます。

const res = await fetch("https://api.frankfurter.dev/v2/rates?base=usd&quotes=eur,gbp,jpy");
const rows = await res.json();
const rates = Object.fromEntries(rows.map((row) => [row.quote, row.rate]));

特定の公的機関を指定

デフォルトでは全提供元を組み合わせた合成レートが返されます。特定の機関を指定するにはprovidersを追加します。税務や会計処理で公式レートが必要な場合に適しています。

const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur?providers=ecb");
const { rate } = await res.json();

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