Python
Je hebt geen SDK nodig. Frankfurter gebruikt standaard HTTPS en levert platte JSON. De HTTP-bibliotheek die je al gebruikt volstaat. Geen API-sleutel, geen gebruikersaccount.
Snel aan de slag
Koers ophalen en omrekenen:
import requests
res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()
total = 100 * data["rate"] Het antwoord is een plat object: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. Een ongeldige valutacode levert HTTP-status 422 op met een JSON-foutmelding.
Financiële berekeningen zonder afrondingsfouten
Drijvende-kommagetallen (floats) zijn prima voor weergave, maar ongeschikt voor financiële administratie. Verwerk koersen als Decimal door parse_float door te geven aan 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"]Meerdere koersen tegelijk
/v2/rates retourneert een platte array met 1 rij per doelvaluta. Zet deze via een dictionary comprehension om naar een opzoekstructuur. Laat je quotes weg, dan ontvang je alle beschikbare valuta's.
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()}Cachen wat niet verandert
Historische koersen zijn onveranderlijk; je kunt ze permanent in de cache bewaren. Actuele koersen veranderen alleen wanneer bronnen publiceren, meestal enkele keren per werkdag; een korte TTL volstaat. Met requests-cache kan dit met één regel code:
import requests_cache
session = requests_cache.CachedSession("frankfurter", expire_after=3600)
res = session.get("https://api.frankfurter.dev/v2/rate/usd/eur")Officiële bron vastleggen
Standaard ontvang je de samengestelde koers van alle bronnen. Geef providers mee om een specifieke instelling vast te leggen. Veel rechtsgebieden vereisen de koers van hun eigen centrale bank voor fiscale doeleinden.
res = requests.get(
"https://api.frankfurter.dev/v2/rate/usd/eur",
params={"providers": "ecb"},
)
rate = res.json()["rate"]Bekijk alle bronnen. Een vaste bron volgt haar eigen publicatieschema, waardoor de nieuwste koers een dag kan achterlopen op de samengestelde marktkoers.