Frankfurter
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/ratesWijzig de basisvaluta met base.
curl https://api.frankfurter.dev/v2/rates?base=usdFilter doelvaluta's met quotes.
curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbpHistorische koersen
Vraag koersen op voor een specifieke datum.
curl https://api.frankfurter.dev/v2/rates?date=1999-01-04Tijdreeksen
Haal wisselkoersen over een periode op met from en to.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01"es=usdTip: 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=monthFilteren 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.csvNDJSON-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-01Enkele wisselkoers
Haal de koers van één valutapaar op.
curl https://api.frankfurter.dev/v2/rate/eur/usdValuta's
Bekijk beschikbare valuta's en hun bronnen.
curl https://api.frankfurter.dev/v2/currenciesVoeg historische valuta's toe met scope.
curl https://api.frankfurter.dev/v2/currencies?scope=allEnkele valuta
Details en bronnen van een specifieke valuta opvragen.
curl https://api.frankfurter.dev/v2/currency/eurBronnen
Overzicht van alle gegevensbronnen achter de API.
curl https://api.frankfurter.dev/v2/providersDetails van een specifieke bron bekijken.
curl https://api.frankfurter.dev/v2/providers/ecbKoersen 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/ratesEen 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-15Omrekenen
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,quotesenfrom/tovraag 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.
TRLeindigt in 2010, terwijlTRYal 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.