有問題或遇到狀況?歡迎至 GitHub Discussions 發問。

你不需要安裝任何 SDK。所有主流瀏覽器、Node、Deno、Bun 與邊緣執行環境皆已內建 fetch。API 開放 CORS 且無須擔心金鑰外洩,可直接從前端程式碼呼叫。

快速開始

取得匯率並換算金額:

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

回應為扁平 JSON 物件: {"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("en", {
  style: "currency",
  currency: "EUR",
});
eur.format(100 * rate); // "€87.39"

貨幣符號與小數位數

無須額外維護輔幣單位或符號對照表,直接向格式化器查詢即可:

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

yen.resolvedOptions().maximumFractionDigits; // 0, the yen has no subunits
yen.formatToParts(1).find((part) => part.type === "currency").value; // "¥"

瀏覽 Frankfurter 支援的所有貨幣及其代碼與符號。

一次取得多組匯率

/v2/rates 會回傳扁平陣列,每個目標貨幣各占一筆。可使用 Object.fromEntries 轉為鍵值對照表;省略 quotes 則會回傳所有可用貨幣。

const api = "https://api.frankfurter.dev";
const res = await fetch(`${api}/v2/rates?base=usd&quotes=eur,gbp,jpy`);
const rows = await res.json();

const rates = Object.fromEntries(rows.map((row) => [row.quote, row.rate]));
// { EUR: 0.8739, GBP: 0.74388, JPY: 162.33 }

鎖定官方資料來源

預設會回傳彙整所有來源的綜合匯率。加上 providers 可鎖定單一官方機構,適用於法規要求採用特定中央銀行公布匯率的情境(例如歐盟 VAT 使用的歐洲央行參考匯率)。

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

瀏覽所有資料來源。鎖定單一來源時會依該機構自身的發布時間表更新,因此最新匯率可能比綜合匯率晚一天。

線上試用

前往 Playground,直接在瀏覽器中組合查詢並即時檢視回應結果。