Frankfurter volgt dagelijkse wisselkoersen van 98 centrale banken en officiële bronnen voor 206 valuta's. De gegevens gaan terug tot 1948.

De publieke API is beschikbaar via api.frankfurter.dev en vereist geen API-sleutel. Het project is open source. Voor volledige controle kun je het ook zelf hosten.

Werk je met een AI-agent? Gebruik llms.txt of koppel de MCP-server.

Koersen

Haal de meest recente wisselkoersen op.

curl https://api.frankfurter.dev/v2/rates

Wijzig de basisvaluta met base.

curl https://api.frankfurter.dev/v2/rates?base=usd

Filter doelvaluta's met quotes.

curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbp

Historische koersen

Vraag koersen op voor een specifieke datum.

curl https://api.frankfurter.dev/v2/rates?date=1999-01-04

Tijdreeksen

Haal wisselkoersen over een periode op met from en to.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&quotes=usd

Tip: Vraag alleen de valuta's op die je nodig hebt. Voor lange tijdreeksen kun je NDJSON gebruiken: resultaten worden regel voor regel gestreamd.

Groepering

Verdicht tijdreeksen met group. Mogelijke waarden: week en month.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&group=month

Filteren op bron

Beperk gegevens tot specifieke instellingen met providers.

curl https://api.frankfurter.dev/v2/rates?providers=ecb

Standaard combineert de API koersen van alle bronnen. Gebruik providers voor een specifieke bron of raadpleeg deze via haar eigen endpoints.

Bronvermelding

expand=providers toont welke bronnen aan elke gecombineerde koers hebben bijgedragen.

curl https://api.frankfurter.dev/v2/rates?expand=providers

Elk item bevat een providers-array met de bronsleutels. Bij gekoppelde valuta's ontbreekt dit veld omdat hun koers voortvloeit uit de koppeling.

CSV-uitvoer

Koersen zijn ook beschikbaar als CSV. Voeg .csv toe aan het pad of stel de Accept-header in op text/csv.

curl https://api.frankfurter.dev/v2/rates.csv

NDJSON-uitvoer

Gebruik NDJSON (Newline-Delimited JSON) voor grote datasets: stel de Accept-header in op application/x-ndjson. Elke regel is een zelfstandig JSON-object dat je kunt streamen.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01

Enkele wisselkoers

Haal de koers van één valutapaar op.

curl https://api.frankfurter.dev/v2/rate/eur/usd

Valuta's

Bekijk beschikbare valuta's en hun bronnen.

curl https://api.frankfurter.dev/v2/currencies

Voeg historische valuta's toe met scope.

curl https://api.frankfurter.dev/v2/currencies?scope=all

Enkele valuta

Details en bronnen van een specifieke valuta opvragen.

curl https://api.frankfurter.dev/v2/currency/eur

Bronnen

Overzicht van alle gegevensbronnen achter de API.

curl https://api.frankfurter.dev/v2/providers

Details van een specifieke bron bekijken.

curl https://api.frankfurter.dev/v2/providers/ecb

Koersen per bron

Haal koersen rechtstreeks op van een bepaalde bron. Dezelfde parameters als bij /v2/rates zijn van toepassing.

curl https://api.frankfurter.dev/v2/providers/ecb/rates

Een enkel valutapaar van deze bron ophalen.

curl https://api.frankfurter.dev/v2/providers/ecb/rate/eur/usd

Koersen voor een valutapaar over een periode ophalen. Combineerbaar met date, datumbereiken (from en to) of groepering. Formaten zoals .csv en ndjson werken hier ook.

curl https://api.frankfurter.dev/v2/providers/ecb/rates?date=2024-05-15

Omrekenen

Er is geen apart omreken-endpoint. Haal de koers op en reken om met een paar regels code.

function convert(base, quote, amount) {
  const api = "https://api.frankfurter.dev";
  return fetch(`${api}/v2/rate/${base}/${quote}`)
    .then((r) => r.json())
    .then((d) => (amount * d.rate).toFixed(2));
}

convert("eur", "usd", 10).then((result) =>
  alert(`10 EUR = ${result} USD`)
);

Foutmeldingen

De API reageert met standaard HTTP-statuscodes en een JSON-body.

{
  "message": "Could not find currency ABC"
}
400
Ongeldige parameter of onjuist verzoek.
404
Valuta, koers of bron niet gevonden.
422
Verzoek begrepen, maar kan niet worden verwerkt.

Zelf hosten

Je kunt Frankfurter zelf hosten met Docker. De deploy-handleiding behandelt productieconfiguraties en API-sleutels.

FAQ

Waarvoor is Frankfurter geschikt (en waarvoor niet)?
De API is geschikt voor SaaS-facturatie, e-commerce, belastingaangiften, ERP- en boekhoudsystemen en historisch onderzoek vanaf 1948. Niet bedoeld voor realtime handel of intraday koersschommelingen.
Mag ik Frankfurter commercieel gebruiken?
Ja. Voor de onderliggende data gelden de voorwaarden van de betreffende bron.
Geldt er een quotum of limiet?
Er zijn geen quota. Er geldt een rate limit tegen misbruik, maar geen maandelijkse of dagelijkse limiet. Bij hoge volumes kun je cachen, zelf hosten of datasets rechtstreeks downloaden.
Ondersteunt de API GraphQL?
Nee. De REST-API is zo eenvoudig dat GraphQL alleen onnodige complexiteit zou toevoegen en edge-caching zou belemmeren. Met parameters als base, quotes en from/to vraag je precies op wat je nodig hebt.
Wordt de v1 API uitgefaseerd?
Nee. De v1 API is verouderd ten gunste van v2, maar blijft permanent beschikbaar. Zie de v1-documentatie. ECB-gegevens zijn beschikbaar via /v2/providers/ecb/rates.
Hoe zit het met privacy?
Frankfurter slaat geen persoonsgegevens, IP-adressen of opgevraagde URL's op. We verzamelen uitsluitend anonieme geaggregeerde statistieken via een eigen Plausible Analytics-instantie.
Moet ik de API vermelden in de privacyverklaring van de App Store of Google Play?
Nee. Verzoeken zijn anoniem en worden niet gelogd. Volgens de richtlijnen van Apple en Google geldt dit als niet-verzamelde data.
Waar kan ik problemen melden of vragen stellen?
Open een issue om bugs te melden of nieuwe bronnen voor te stellen. Vragen en tools van derden horen thuis in de discussions.
Hoe nauwkeurig zijn de koersen?
Voor compliance filter je op een specifieke bron om officiële referentiekoersen te ontvangen. Voor overige toepassingen voldoet de samengestelde marktkoers.
Zijn de koersen midden-, bied- of laatkoersen?
De API levert middenkoersen (mid-market). Als een bron bied- en laatkoersen publiceert in plaats van een referentiekoers, slaat Frankfurter beide op en berekent het gemiddelde.
Worden alle koersen dagelijks gepubliceerd?
Vrijwel allemaal. Slechts 2 bronnen publiceren minder frequent: de Britse belastingdienst HMRC (maandelijks) en het Amerikaanse ministerie van Financiën UST (driemaandelijks). Hun koersen blijven weken of maanden geldig en worden daarom niet opgenomen in de samengestelde feed.
Waarom overlappen de periodes bij sommige oude en nieuwe valuta's?
Sommige bronnen dateren opvolgende valuta's terug in de periode van hun voorganger (bijv. TRL eindigt in 2010, terwijl TRY al in 1996 begint). We nemen de brongegevens ongewijzigd over en filteren overlappingen pas bij het combineren.
Waarom Frankfurter?
Omdat de Europese Centrale Bank, waarmee het allemaal begon, in Frankfurt is gevestigd.
European Central Bank and Main riverfront, Frankfurt