Ada pertanyaan atau kendala? Tulis di GitHub Discussions.

Anda tidak memerlukan SDK. fetch sudah tersedia secara bawaan di setiap browser, Node, Deno, Bun, dan edge runtime. CORS terbuka dan tidak ada kunci yang bisa bocor, sehingga Anda dapat memanggil API langsung dari kode sisi klien.

Mulai Cepat

Ambil kurs lalu konversi:

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

Responsnya berupa satu objek datar: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. fetch tetap resolve saat terjadi error HTTP, jadi periksa res.ok; kode mata uang yang tidak valid mengembalikan status 422 beserta pesan JSON.

Format dengan Intl

Jangan merangkai simbol mata uang secara manual. Intl.NumberFormat mengetahui simbol, posisinya, dan jumlah angka desimal untuk setiap mata uang di setiap lokal:

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"

Simbol dan Angka Desimal

Tidak perlu menyimpan tabel metadata terpisah untuk subunit atau simbol. Tanyakan langsung ke formatter:

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; // "¥"

Jelajahi semua mata uang yang disediakan Frankfurter, lengkap dengan kode dan simbolnya.

Beberapa Mata Uang Sekaligus

/v2/rates mengembalikan array datar, satu baris per mata uang tujuan. Ubah menjadi objek pencarian dengan Object.fromEntries. Hapus quotes untuk mengambil seluruh mata uang.

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 }

Kunci Penyedia Resmi

Secara default Anda mendapatkan kurs gabungan dari seluruh penyedia. Tambahkan providers untuk mengunci satu otoritas resmi, yang penting saat suatu yurisdiksi mewajibkan kurs resmi terbitan bank sentralnya, seperti kurs referensi ECB untuk PPN Uni Eropa.

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

Jelajahi semua penyedia. Penyedia yang dikunci mengikuti jadwal penerbitannya sendiri, sehingga kurs terbarunya bisa tertinggal satu hari dibanding kurs gabungan terbaru.

Coba Langsung

Susun kueri dan lihat responsnya tanpa meninggalkan browser di Playground.