JavaScript
Nie potrzebujesz żadnego SDK. Funkcja fetch jest wbudowana w każdą przeglądarkę, Node, Deno, Bun oraz środowiska brzegowe edge. CORS jest otwarty i nie ma żadnego klucza, który mógłby przypadkowo wyciec. Możesz wywoływać API bezpośrednio z kodu klienta.
Szybki start
Pobierz kurs i przelicz kwotę:
const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur");
const data = await res.json();
const total = 100 * data.rate; Odpowiedź to płaski obiekt: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. Funkcja fetch rozwiązuje się również przy błędach HTTP, dlatego weryfikuj res.ok. Nieprawidłowy kod waluty zwraca status 422 z komunikatem w JSON.
Formatowanie z Intl
Nie dołączaj symboli walut ręcznie. Intl.NumberFormat zna symbol waluty, jego pozycję i liczbę miejsc po przecinku dla każdej waluty w dowolnym ustawieniu regionalnym:
const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur");
const { rate } = await res.json();
const eur = new Intl.NumberFormat("pl-PL", {
style: "currency",
currency: "EUR",
});
eur.format(100 * rate); // "87,39 €"Symbole i miejsca po przecinku
Nie musisz dołączać własnej tabeli metadanych dla jednostek podrzędnych ani symboli. Wystarczy zapytać formater:
const yen = new Intl.NumberFormat("pl-PL", {
style: "currency",
currency: "JPY",
});
yen.resolvedOptions().maximumFractionDigits; // 0, jen nie ma jednostek podrzędnych
yen.formatToParts(1).find((part) => part.type === "currency").value; // "JPY"Zobacz wszystkie waluty obsługiwane przez Frankfurter wraz z kodami i symbolami.
Wiele kursów naraz
Endpoint /v2/rates zwraca płaską tablicę z 1 wierszem na walutę docelową. Przekształć ją za pomocą Object.fromEntries w obiekt wyszukiwania. Jeśli pominiesz quotes, otrzymasz wszystkie waluty.
const res = await fetch("https://api.frankfurter.dev/v2/rates?base=usd"es=eur,gbp,jpy");
const rows = await res.json();
const rates = Object.fromEntries(rows.map((row) => [row.quote, row.rate]));Wybór oficjalnego źródła
Domyślnie otrzymujesz kurs łączony ze wszystkich źródeł. Dodaj parametr providers, aby wybrać konkretną instytucję, co jest niezbędne w rozliczeniach podatkowych.
const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur?providers=ecb");
const { rate } = await res.json();Zobacz wszystkie źródła. Wybrana instytucja działa według własnego harmonogramu publikacji, więc jej najnowszy kurs może być opóźniony o jeden dzień względem kursu rynkowego.