Python
Nie potrzebujesz żadnego SDK. Frankfurter korzysta ze standardowego protokołu HTTPS i zwraca płaski JSON. Wystarczy dowolna biblioteka HTTP, której już używasz. Bez klucza API i bez rejestracji konta.
Szybki start
Pobierz kurs i przelicz kwotę:
import requests
res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()
total = 100 * data["rate"] Odpowiedź to płaski słownik: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. Nieprawidłowy kod waluty zwraca status HTTP 422 z komunikatem błędu.
Obliczenia finansowe bez błędów zaokrągleń
Liczby zmiennoprzecinkowe (float) nadają się do wyświetlania, ale nie do księgowości. Przetwarzaj kursy jako Decimal, przekazując parse_float do json.loads:
from decimal import Decimal
import requests
res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json(parse_float=Decimal)
total = Decimal("100") * data["rate"]Wiele kursów naraz
Endpoint /v2/rates zwraca płaską listę z 1 wierszem na walutę docelową. Przekształć ją za pomocą wyrażenia słownikowego w strukturę wyszukiwania. Jeśli pominiesz quotes, otrzymasz wszystkie dostępne waluty.
res = requests.get(
"https://api.frankfurter.dev/v2/rates",
params={"base": "usd", "quotes": "eur,gbp,jpy"},
)
rates = {row["quote"]: row["rate"] for row in res.json()}Buforowanie danych niezmiennych
Kursy historyczne są niezmienne, więc możesz je buforować na stałe. Bieżące kursy zmieniają się tylko w momentach publikacji przez źródła, zazwyczaj kilka razy w ciągu dnia roboczego; krótki czas TTL w zupełności wystarczy. Za pomocą requests-cache zrobisz to jedną linijką:
import requests_cache
session = requests_cache.CachedSession("frankfurter", expire_after=3600)
res = session.get("https://api.frankfurter.dev/v2/rate/usd/eur")Wybór oficjalnego źródła
Domyślnie otrzymujesz kurs uśredniony ze wszystkich źródeł. Dodaj parametr providers, aby wybrać konkretną instytucję. Wiele jurysdykcji wymaga stosowania kursu własnego banku centralnego do rozliczeń podatkowych.
res = requests.get(
"https://api.frankfurter.dev/v2/rate/usd/eur",
params={"providers": "ecb"},
)
rate = res.json()["rate"]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.