Vragen of problemen? Vraag het in de GitHub Discussions.

Je hebt geen SDK nodig. fetch is ingebouwd in elke browser, Node, Deno, Bun en edge-runtimes. CORS staat open en er is geen sleutel die per ongeluk kan uitlekken. Je kunt de API rechtstreeks vanuit client-code aanroepen.

Snel aan de slag

Koers ophalen en omrekenen:

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

Het antwoord is een plat object: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. fetch lost ook op bij HTTP-fouten, dus controleer res.ok. Een ongeldige valutacode retourneert status 422 met een JSON-foutmelding.

Formatteren met Intl

Voeg valutasymbolen niet handmatig toe. Intl.NumberFormat kent het valutasymbool, de positie en het aantal decimalen voor elke valuta in elke locale:

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

const eur = new Intl.NumberFormat("nl-NL", {
  style: "currency",
  currency: "EUR",
});
eur.format(100 * rate); // "€ 87,39"

Symbolen en decimalen

Het is niet nodig om een eigen metadata-tabel voor subeenheden of symbolen bij te houden. Vraag het gewoon aan de formatter:

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

yen.resolvedOptions().maximumFractionDigits; // 0, de yen heeft geen subeenheden
yen.formatToParts(1).find((part) => part.type === "currency").value; // "¥"

Bekijk alle valuta's die Frankfurter ondersteunt, inclusief codes en symbolen.

Meerdere koersen tegelijk

/v2/rates levert een platte array met 1 rij per doelvaluta. Zet deze met Object.fromEntries om naar een opzoekobject. Laat je quotes weg, dan ontvang je alle beschikbare valuta's.

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]));

Officiële bron vastleggen

Standaard ontvang je de samengestelde koers van alle bronnen. Voeg providers toe om een specifieke instelling vast te leggen. Dit is van belang voor belastingen en administratie: veel landen vereisen de koers van hun eigen centrale bank.

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

Bekijk alle bronnen. Een vaste bron volgt haar eigen publicatieschema, waardoor de meest recente koers een dag kan achterlopen op de samengestelde marktkoers.