Terug naar Blog

Frankfurter API-alternatieven in 2026: een eerlijke vergelijking voor ontwikkelaars

V
Vlado Grigirov
August 28, 2026
Currency API Exchange Rates Frankfurter API Comparison Free API Developer Guide

Als je op zoek bent naar Frankfurter API-alternatieven, heb je er waarschijnlijk al iets mee gelanceerd. Frankfurter is voor een hele generatie zijprojecten de standaard gratis wisselkoers-API: geen API-sleutel, geen registratie, geen quotum, een schoon REST-oppervlak en open source code die je in één middag doorleest. Dan verandert er iets — een compliancevraag, een bug in het weekend, een klant die intraday koersen nodig heeft — en vraag je je af wat er nog meer is.

Deze gids kijkt eerlijk naar die beslissing. Hij behandelt wat Frankfurter in 2026 werkelijk doet (de meeste vergelijkingsartikelen werken met verouderde informatie), de vijf concrete beperkingen die teams doen vertrekken, en de drie realistische routes: zelf hosten, overstappen naar een commerciële API met sleutel, of een hybride draaien. Aan het eind staat een migratievoorbeeld.

Wat Frankfurter in 2026 werkelijk is

Vrijwel elk overzicht van "beste gratis valuta-API's" beschrijft Frankfurter nog steeds als "ECB-koersen, zo'n 30 valuta's, geen weekenddata". Dat klopte jarenlang. Het klopt niet meer.

De v2-API op frankfurter.dev volgt dagkoersen van 84 centrale banken, dekt 201 valuta's en heeft historie die teruggaat tot 1948. Hij is echt gratis voor commercieel gebruik, vereist geen authenticatie, publiceert geen maandelijks of dagelijks quotum en levert naast JSON ook CSV en NDJSON. Er is een OpenAPI-specificatie, een llms.txt en een MCP-server voor agent-workflows. Zelf hosten kan met Docker.

Dat is een sterker product dan de overzichten toegeven, en het is de moeite waard om het duidelijk te zeggen: voor heel veel projecten is Frankfurter het juiste antwoord en zou je niet moeten migreren. Bouw je een tracker voor persoonlijke financiën, een naslagpagina over valuta's, een facturatietool die koersen één keer per dag vastzet, of een data-sciencenotebook dat tien jaar maandgemiddelden ophaalt, dan doet Frankfurter dat goed en gratis.

De rest van dit artikel gaat over de gevallen waarin dat niet zo is.

Vijf beperkingen die teams naar Frankfurter API-alternatieven doen zoeken

1. Dagelijkse referentiekoersen zijn geen live koersen

Dit is de structurele beperking, en het is geen fout — het is simpelweg wat de databron is. Referentiekoersen van centrale banken worden één keer per werkdag gepubliceerd. De ECB publiceert bijvoorbeeld haar euro-referentiekoersen elke werkdag rond 16:00 CET. Frankfurter geeft die getallen trouw door.

Dat betekent dat een koers die je om 09:00 ophaalt en een koers om 15:00 hetzelfde getal zijn, ook als de markt er tussenin 1,2% is bewogen. Bij een converter die alleen weergeeft, merkt niemand het. Bij een afrekenpagina, een uitbetalingsberekening of overal waar een klant jouw getal met Google vergelijkt, wordt die vertraging een supportticket.

Heeft je product koersen nodig die gedurende de dag bewegen, dan heb je een marktdatabron nodig in plaats van een referentiekoersbron. De Finexly API ververst elke minuut tijdens markturen over 170+ valuta's: dat is een ander datamodel, niet een betere versie van hetzelfde. Ons artikel over waar wisselkoers-API's hun data vandaan halen gaat dieper op het onderscheid in.

2. Er zijn geen rijen voor weekenden en feestdagen

Centrale banken publiceren niet op zaterdag, zondag of nationale feestdagen. Een query voor 2026-08-23 levert dus niets bruikbaars op, en een tijdreeks over een maand heeft ongeveer 21 rijen, geen 31.

Elk team loopt er op dezelfde manier tegenaan: een nachtelijke job draait op zondag, krijgt een leeg of verschoven resultaat en crasht — of, veel erger, schrijft stilletjes een null in het grootboek. Bouw je op dagkoersen van welke centralebankbron dan ook, dan heb je een expliciet beleid voor doorschuiven nodig, en dat moet je vastleggen, want "gebruik de laatst gepubliceerde koers" en "sla de rij over" leveren verschillende jaarrekeningen op.

3. Gemengde koersen kunnen na publicatie verschuiven

Standaard mengt Frankfurter koersen van alle bijdragende bronnen. De eigen FAQ is verfrissend direct over het gevolg: de laatste decimalen kunnen verschuiven zodra nieuwe data binnenkomt, en voor compliance moet je op één specifieke bron filteren.

Voor algemeen gebruik is dat een volstrekt redelijk ontwerp. Het wordt een probleem als je een koers opslaat, aan een gebruiker toont en later afstemt tegen een nieuwe ophaalactie: je vindt kleine verschillen die erg lastig aan een accountant uit te leggen zijn. De oplossing aan Frankfurter-zijde is providers=ECB meegeven (of de autoriteit die jou reguleert) in plaats van de menging te accepteren. De oplossing in je eigen systeem is de koers die je op transactiemoment werkelijk gebruikte te persisteren en hem nooit opnieuw af te leiden. Die regel geldt voor elke aanbieder, en we behandelen hem in de gids over wisselkoersen en belastingrapportage.

4. Geen API-sleutel betekent geen quotum — en geen zicht

"Geen API-sleutel nodig" is Frankfurters beste eigenschap en zijn meest onderschatte risico. Omdat er geen sleutel is:

  • Heb je geen quotum per applicatie. Je deelt een publieke rate limiter met het hele internet, inclusief degene die hem nu vanuit een slecht geschreven loop staat te bestoken.
  • Heb je geen gebruikstelemetrie. Geen dashboard vertelt je dat je aanroepvolume afgelopen dinsdag verdrievoudigde.
  • Heb je geen supportrelatie. Er is een statuspagina en een GitHub-issuetracker, meer dan veel gratis diensten bieden, maar geen SLA en niemand om te bellen.

Het advies van het project zelf is expliciet: bij hoog volume responses cachen, zelf hosten of de datasets rechtstreeks bevragen. Dat is eerlijk advies, en het is ook het moment waarop veel teams Frankfurter API-alternatieven gaan evalueren — niet omdat de data verkeerd is, maar omdat ze een productieafhankelijkheid hebben genomen zonder enig contract erachter.

5. Er is geen conversie-endpoint

Frankfurter documenteert dit bewust: haal de koers op en vermenigvuldig. Drie regels code.

Het zijn ook drie regels die op zes plekken in je codebase net iets anders worden geschreven, waarbij er op één plek gedeeld wordt waar vermenigvuldigd hoort. Een apart convert-endpoint is geen technische noodzaak; het is een manier om precies één implementatie van de afrondings- en richtingsregels te hebben. Wie ooit een bug heeft uitgerold waarbij EUR→USD en USD→EUR 0,3% uiteenliepen, weet waarom dit telt. Onze gids over valuta-afronding en decimalen dekt de rest van dat mijnenveld.

Frankfurter API-alternatieven vergeleken

De details van de gratis pakketten hieronder zijn zoals elke aanbieder ze publiceerde op het moment van schrijven. Controleer ze voor je je vastlegt — gratis pakketten veranderen vaker dan documentatie.

APIGratis pakketUpdatefrequentieAuthenticatieBasisvalutaHet best voor
FrankfurterOnbeperkt (misbruiklimiet, geen SLA)Dagelijks, werkdagenGeenElkeHobbyprojecten, boekhouding, historisch onderzoek
Zelf gehoste FrankfurterGratis + eigen infrastructuurkostenDagelijks, werkdagenDe jouweElkeTeams die controle willen en al Docker draaien
Finexly1.000 verzoeken/maandElke minuut tijdens markturenBearer-sleutelElke (eigen basis in hogere pakketten)Producten die intraday koersen en een supportkanaal nodig hebben
ExchangeRate-API~1.500 verzoeken/maandDagelijksSleutelElkeDashboards die één keer per dag verversen
Open Exchange Rates1.000 verzoeken/maandPer uurSleutelAlleen USD in gratisServerapps die met een USD-basis kunnen leven
Fixer.io100 verzoeken/maandPer uurSleutelAlleen EUR in gratisBestaande integraties
Twee dingen vallen op. Ten eerste: niemand verslaat Frankfurter op quotum, want Frankfurter heeft er geen. Is je beperking het ruwe aanroepvolume op dagkoersen, dan is het antwoord Frankfurter zelf hosten, niet elders een kleiner quotum kopen. Ten tweede: de betaalde opties verkopen je niet dezelfde data in mooiere verpakking — ze verkopen een andere updatefrequentie en een supportrelatie. Is geen van beide jouw probleem, dan is overstappen een stap terug.

Enkele daarvan zetten we naast elkaar in de valuta-API-vergelijking en in onze vergelijking van realtime wisselkoers-API's.

Optie 1: Frankfurter zelf hosten

Het meest onderbenutte antwoord. Frankfurter publiceert een Docker-image, en zelf draaien haalt de twee dingen weg waar productieteams zich echt zorgen over maken: de gedeelde rate limiter en het gebrek aan controle.

docker run -d -p 8080:8080 --name frankfurter \
  lineofflight/frankfurter

Wat je krijgt: onbeperkte interne aanroepen, je eigen beschikbaarheidslot en de mogelijkheid één bron vast te zetten. Wat je erbij neemt: een container, een database, monitoring en iemand die opmerkt dat de upstream-verzameling stukloopt op een bankfeestdag. Dat is een reële kostenpost — in essentie het argument uit onze make-or-buy-analyse, toegepast op code die iemand anders al schreef.

Zelf hosten is de juiste keuze als je volume hoog is, je latency-eisen streng zijn en dagelijkse referentiekoersen echt volstaan. Het helpt totaal niet als het probleem is dat je intraday koersen nodig hebt — dan draai je alleen je eigen kopie van dezelfde dagelijkse data.

Optie 2: overstappen naar een API met sleutel en intraday koersen

Ben je hier vanwege versheid van koersen, dekking van exotische paren, of de behoefte dat iemand een e-mail beantwoordt, dan is een commerciële API met sleutel het eerlijke antwoord.

Dezelfde taak aan beide kanten. Eerst Frankfurter:

curl "https://api.frankfurter.dev/v2/rate/USD/EUR"

En het Finexly-equivalent:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.finexly.com/v1/rate?from=USD&to=EUR"
{ "pair": "USD_EUR", "rate": 0.9215 }

Endpointvergelijking

TaakFrankfurter v2Finexly v1
Valuta's opvragenGET /v2/currenciesGET /v1/currencies
Eén paarGET /v2/rate/EUR/USDGET /v1/rate?from=EUR&to=USD
Meerdere parenGET /v2/rates?base=USD&quotes=EUR,GBPGET /v1/convert?q=USD_EUR,USD_GBP
Bedrag omrekenen(bestaat niet — zelf vermenigvuldigen)GET /v1/convert-amount?from=USD&to=EUR&amount=100
HistorieGET /v2/rates?date=1999-01-04Betaalde pakketten — zie de gids voor historische koersen
Het grootste vormverschil zit in de multi-paar-aanroep. Frankfurter gebruikt één basis en een lijst noteringsvaluta's; Finexly neemt een lijst expliciete BASE_QUOTE-paren, waardoor je USD_EUR en GBP_JPY in hetzelfde verzoek ophaalt zonder kruisdeling.

Een migratiewrapper

Verspreid geen nieuwe client door je hele codebase. Zet beide achter één interface, zodat terugschakelen een configuratiewijziging is:

import os
import requests

FINEXLY_KEY = os.environ["FINEXLY_API_KEY"]

def get_rate(base: str, quote: str, provider: str = "finexly") -> float:
    """Return the mid-market rate for base->quote."""
    if provider == "frankfurter":
        r = requests.get(
            f"https://api.frankfurter.dev/v2/rate/{base}/{quote}",
            timeout=5,
        )
        r.raise_for_status()
        return float(r.json()["rate"])

    r = requests.get(
        "https://api.finexly.com/v1/rate",
        params={"from": base, "to": quote},
        headers={"Authorization": f"Bearer {FINEXLY_KEY}"},
        timeout=5,
    )
    r.raise_for_status()
    return float(r.json()["rate"])

print(get_rate("USD", "EUR"))

Twee details om over te nemen. De API-sleutel komt uit de omgeving, nooit uit de broncode — de Finexly-documentatie merkt op dat sleutels die als queryparameter worden meegegeven kunnen lekken via serverlogs en HTTP Referrer-headers, dus de Authorization-header is de productieroute. En elke aanroep heeft een timeout, want de standaard in de meeste HTTP-clients is "eeuwig wachten".

Houd de responseheaders X-RateLimit-Limit, X-RateLimit-Used en X-RateLimit-Units in de gaten om je quotumverbruik live te zien. Precies die telemetrie krijg je niet van een API zonder authenticatie, en het is vaak de echte reden dat teams overstappen.

Optie 3: de hybride — cache de een, val terug op de ander

Het patroon waar de meeste productiesystemen naartoe convergeren. Gebruik je primaire aanbieder, cache stevig en houd de gratis, niet-geauthenticeerde API als laatste redmiddel:

const CACHE = new Map();
const TTL_MS = 60_000;

async function getRate(base, quote) {
  const key = `${base}_${quote}`;
  const hit = CACHE.get(key);
  if (hit && Date.now() - hit.at < TTL_MS) return hit.rate;

  let rate;
  try {
    const res = await fetch(
      `https://api.finexly.com/v1/rate?from=${base}&to=${quote}`,
      { headers: { Authorization: `Bearer ${process.env.FINEXLY_API_KEY}` } }
    );
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    rate = (await res.json()).rate;
  } catch (err) {
    // Degrade to daily reference rates rather than failing the request
    const res = await fetch(`https://api.frankfurter.dev/v2/rate/${base}/${quote}`);
    rate = (await res.json()).rate;
  }

  CACHE.set(key, { rate, at: Date.now() });
  return rate;
}

Een cache van 60 seconden op een gratis pakket van 1.000 verzoeken dekt een kleine app ruimschoots, omdat je aanroepvolume een functie van tijd wordt in plaats van verkeer. Markeer fallback-responses in je logs, zodat een stille degradatie naar de koers van gisteren niet een week onopgemerkt blijft. Meer over TTL-keuze en retry-gedrag staat in onze gids over caching en foutafhandeling.

Een beslischecklist

Loop de lijst af en stop bij de eerste "ja":

  1. Moeten koersen tijdens de handelsdag veranderen? → Je hebt een marktdata-API nodig, geen referentiekoers-API.
  2. Is dit een gereguleerde of gecontroleerde stroom? → Zet één benoemde bron vast, bewaar de gebruikte koers, leid hem nooit opnieuw af.
  3. Hoog aanroepvolume maar dagkoersen volstaan? → Host Frankfurter zelf.
  4. Heb je iemand nodig die reageert als het stukgaat? → Je hebt een pakket met sleutel en supportniveau nodig.
  5. Niets van bovenstaande? → Blijf op Frankfurter. Cache het, handel het weekendgat af en besteed je tijd elders.

De meeste teams die op zoek gaan naar Frankfurter API-alternatieven ontdekken bij stap 5 dat hun echte probleem een ontbrekende cache en een onafgehandelde zondag was.

Veelgestelde vragen

Is de Frankfurter API echt gratis voor commercieel gebruik? Ja. Het project stelt dat het gratis is voor commercieel gebruik, zonder maandelijks of dagelijks quotum — verzoeken worden alleen gelimiteerd om misbruik te voorkomen. De keerzijde: geen SLA en geen supportcontract, dus het risico ligt bij jou.

Levert Frankfurter alleen ECB-koersen? Niet meer. De v2-API mengt data van 84 centrale banken over 201 valuta's, en met de parameter providers beperk je het tot één bron. De wijdverbreide omschrijving "alleen ECB, 30 valuta's" slaat op oudere versies.

Waarom geeft Frankfurter in het weekend geen data? Omdat centrale banken op niet-werkdagen geen referentiekoersen publiceren. Elke API die op centralebankdata is gebouwd heeft hetzelfde gat. Je schuift de laatst gepubliceerde koers door, of je gebruikt een marktbron die continu noteert.

Wat is het beste gratis alternatief voor Frankfurter? Dat hangt af van wat "gratis" je moet opleveren. Voor onbeperkte dagkoersen verslaat niets Frankfurter — host het zelf. Voor een gratis pakket met intraday updates en een echte API-sleutel geeft het gratis plan van Finexly je 1.000 verzoeken per maand over 170+ valuta's. Zie onze gids voor gratis valuta-API's voor het bredere beeld.

Kan ik Frankfurter en een betaalde API samen gebruiken? Ja, en het is een verstandige architectuur. Stuur normaal verkeer naar je primaire aanbieder en val bij een fout terug op Frankfurter, zoals in het hybride voorbeeld hierboven. Zorg alleen dat fallback-responses gelogd worden, want ze dragen andere versheidsgaranties.

Aan de slag

Volstaan dagelijkse referentiekoersen voor wat je bouwt, blijf dan bij Frankfurter — het is een goed project en het kost je niets. Heb je koersen nodig die gedurende de dag bewegen, dekking voorbij de referentiesets van centrale banken, of gebruiksheaders die je echt kunt monitoren, haal dan je gratis Finexly API-sleutel — geen creditcard nodig. Begin met 1.000 verzoeken per maand over 170+ valuta's en schaal mee met je groei, of vergelijk eerst de pakketten op onze prijzenpagina.

Vlado Grigirov

Senior Currency Markets Analyst & Financial Strategist

Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...

View full profile →