Als je ooit hebt geprobeerd de wisselkoers van Wise in je eigen product te tonen, ben je er waarschijnlijk achter gekomen dat de Wise wisselkoers-API niet helemaal is wat je verwachtte. Wise publiceert werkelijk uitstekende midmarktkoersdata en stelt die beschikbaar via een REST-endpoint — maar het zit achter een partnergoedkeuringstraject, het leeft in een betaal-API in plaats van een marktdata-API, en de koers die je terugkrijgt is bewust niet de prijs die je gebruiker betaalt.
Deze gids behandelt precies wat Wise blootstelt, hoe je authenticeert, wat elk endpoint werkelijk teruggeeft en de vijf structurele beperkingen die bepalen of Wise de juiste bron is voor jouw project. Ook geeft hij een eerlijk antwoord op de vraag die de meesten eigenlijk stellen: als je gewoon betrouwbare midmarktkoersen in een app nodig hebt, is Wise dan het juiste gereedschap?
Wat de Wise wisselkoers-API eigenlijk is
Wise is een geldtransferbedrijf. De API — onder de naam Wise Platform — is gebouwd om geld te verplaatsen: quotes maken, begunstigden registreren, overboekingen financieren, saldi afstemmen, kaarten uitgeven. Wisselkoersen komen in die API voor omdat je zonder koersen geen overboeking kunt beprijzen, niet omdat Wise marktdata verkoopt.
Die insteek verklaart bijna elke verrassing waar ontwikkelaars tegenaan lopen. Koersen zijn een kleine module binnen een betaalplatform en zijn beperkt tot de valutaroutes die Wise daadwerkelijk bedient.
Drie aparte oppervlakken, drie verschillende toegangswegen
De grootste bron van verwarring: "de Wise-koers-API" verwijst naar minstens drie verschillende dingen.
GET /rates— het Exchange Rates-endpoint. Geeft Wise's midmarktkoers voor een valutapaar, actueel of historisch. Dit is wat de meeste mensen bedoelen.POST /quotes— het Quotes-endpoint. Geeft een beprijsde overboeking terug: koers, kosten, geschatte levertijd en een vervalmoment voor de koers.GET /comparisons— het Comparison-endpoint. Geeft geschatte prijs- en snelheidsdata voor Wise en concurrerende aanbieders en banken op een route.
Ze staan in dezelfde reference, gebruiken verschillende authenticatieschema's en beantwoorden heel verschillende vragen. Het verkeerde endpoint pakken is de gebruikelijke oorzaak van "waarom wijkt deze koers af van wat wise.com laat zien?".
Hoe je toegang krijgt tot Wise-koersdata
Er is geen selfservice-API-sleutel. Toegang loopt via twee sporen:
Platformpartners. Je doorloopt onboarding als Wise Platform-partner en authenticeert met OAuth 2.0 (client ID en client secret) om een token te krijgen. De /rates-reference vermeldt dat het endpoint "alleen Bearer-authenticatie ondersteunt voor niet-affiliate partners", via een User Token of Personal Token.
Affiliate partners. Je sluit je aan bij het Wise-affiliateprogramma en mailt vervolgens partnerwise@wise.com om inloggegevens aan te vragen. Wise beoordeelt de aanvraag en geeft bij goedkeuring Basic auth-credentials uit die precies twee endpoints ontsluiten: Exchange Rates List en Get Temporary Quote. Meer niet.
Hier splitst de weg zich. Bouw je een vergelijkingssite, een widget voor een reisblog of een fintech-marketingpagina, dan is het affiliate-spoor voor jou bedoeld. Bouw je een productfunctie — multivalutaprijzen, facturatie, een omrekenscherm, een interne rapportage — dan vraag je een payments-partnerteam om goedkeuring voor marktdata, en dat is niet wat beide kanten uit die relatie willen halen.
Let er ook op dat Wise de API-versie in het URL-pad vastlegt: productie is https://api.wise.com/2026Q3/rates, met sandbox op https://api.wise-sandbox.com/2026Q3/rates. Oudere affiliate-documentatie verwijst nog naar /v1/rates op api.transferwise.com. Versies in het pad betekenen dat je integratie stilletjes veroudert tenzij iemand het upgraden op zich neemt.
Het Wise rates-endpoint aanroepen
Zodra je een token hebt, is het endpoint netjes en goed ontworpen. Er zijn vier aanroepvormen gedocumenteerd:
# Latest rates for every supported currency
curl -X GET 'https://api.wise.com/2026Q3/rates' \
-H 'Authorization: Bearer <YOUR_TOKEN>'
# Latest rate for a single pair
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD' \
-H 'Authorization: Bearer <YOUR_TOKEN>'
# Rate at a specific historical moment
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD&time=2019-02-13T14:53:01' \
-H 'Authorization: Bearer <YOUR_TOKEN>'
# A time series, grouped by day, hour or minute
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD&from=2019-02-13&to=2019-03-13&group=day' \
-H 'Authorization: Bearer <YOUR_TOKEN>'Het antwoord is een array, één object per interval:
[
{
"rate": 1.166,
"source": "EUR",
"target": "USD",
"time": "2018-08-31T10:43:31+0000"
}
]Twee details zijn het vermelden waard. Ten eerste accepteert group de waarden day, hour of minute — historie op minuutniveau is ongewoon royaal en echt bruikbaar voor backtesting. Ten tweede is het antwoord altijd een array, ook voor één paar; parse dus navenant:
import requests
TOKEN = "<YOUR_TOKEN>"
BASE = "https://api.wise.com/2026Q3"
def wise_rate(source: str, target: str) -> float:
r = requests.get(
f"{BASE}/rates",
params={"source": source, "target": target},
headers={"Authorization": f"Bearer {TOKEN}"},
timeout=10,
)
r.raise_for_status()
payload = r.json()
if not payload:
raise LookupError(f"No rate returned for {source}/{target}")
return payload[0]["rate"] # array, even for one pair
print(wise_rate("EUR", "USD"))Nog een valkuil, goed gedocumenteerd in de praktijk: stuur je time en from/to in dezelfde request, dan winnen de bereikparameters en wordt time genegeerd. Dat veroorzaakte een langlopende bug in de Wise-node van n8n die een upstream-patch vergde. Stuur het één of het ander, nooit beide.
De midmarktkoers is niet de prijs die je gebruiker betaalt
Wise's /rates-endpoint geeft de midmarktkoers terug — het midden tussen bied- en laatprijs op de interbancaire markt. Dat is de "echte" koers, en daarop bouwt Wise zijn marketing. Het is ook per definitie een koers waartegen niemand handelt.
Wil je weten wat een overboeking daadwerkelijk kost, dan heb je /quotes nodig:
curl -X POST 'https://api.wise.com/2026Q3/quotes' \
-H 'Authorization: Bearer <YOUR_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"sourceCurrency": "GBP",
"targetCurrency": "USD",
"sourceAmount": 100
}'Het quote-antwoord bevat de velden die prijslogica echt nodig heeft: rate, rateType (bijvoorbeeld FIXED), rateExpirationTime, een uitsplitsing van fee, feePercentage en een paymentOptions-array met estimatedDelivery per betaalmethode. Het geeft ook notices terug — Wise's eigen gedocumenteerde voorbeeld waarschuwt dat een klant maximaal drie openstaande overboekingen met gegarandeerde koers kan hebben voordat volgende terugvallen op de live koers.
Het praktische gevolg: een quote is een kortlevend object met status, gekoppeld aan een overboeking — geen koersopvraging die je periodiek kunt pollen. Is je use case "de USD-prijs van vandaag op een prijzenpagina tonen", dan zijn quotes de verkeerde primitieve en koersen de juiste. Is het "de gebruiker exact vertellen wat hij ontvangt", dan overschatten koersen alleen het bedrag. Dit verwarren is een veelvoorkomende bron van de afrondings- en afstemmingsverschillen die we beschrijven in onze gids over valuta-afronding en decimalen.
Wat de Comparison-API werkelijk teruggeeft
Het Comparison-endpoint is het interessantste en meest misbegrepen deel van het platform. Het geeft per aanbieder prijs- en snelheidsschattingen voor banken en transferdiensten op een route:
curl -X GET 'https://api.wise.com/2026Q3/comparisons?sourceCurrency=GBP&targetCurrency=EUR&sendAmount=10000&filter=POPULAR'Lees, voordat je hier iets op bouwt, Wise's eigen methodologienotitie goed. Wise stelt dat het geadverteerde koersen en kosten van websites van derden verzamelt, per aanbieder de opslag ten opzichte van de midmarktkoers op het moment van verzamelen berekent, en die opgeslagen opslag daarna toepast op de actuele midmarktkoers om het getal te produceren dat jij ontvangt. Het verzamelen draait ongeveer eens per uur.
Met andere woorden: concurrentprijzen uit dit endpoint zijn gemodelleerde schattingen op basis van uurlijkse uitlezingen, geen live quotes. Wise zegt dat onomwonden, wat het bedrijf siert — maar het betekent dat de data ongeschikt is voor alles waarbij je voor het getal van een concurrent zou moeten instaan. Wise beperkt de schattingen bovendien tot in- en uitbetaling uitsluitend per bankoverschrijving, en merkt op dat veel aanbieders kaart- en contanttransacties heel anders beprijzen.
Structureel is het antwoord gedenormaliseerd: één aanbieder kan meerdere quotes voor hetzelfde valutapaar teruggeven omdat prijs en snelheid per bestemmingsland verschillen. Je krijgt een providers-array, elk met een quotes-array, en dat terugbrengen tot één kerngetal per aanbieder is jouw werk, niet dat van de API.
Vijf beperkingen om te kennen voordat je op Wise-koersen bouwt
- Toegang is een zakelijke relatie, geen aanmelding. Affiliate-goedkeuring of Platform-onboarding gaat aan elke koersaanroep vooraf. Er is geen dashboard waar je in dertig seconden een sleutel genereert.
- De dekking volgt de transferroutes. Wise ondersteunt de valuta waarin het geld kan verplaatsen. Een gespecialiseerde dataleverancier dekt de valuta die het kan beprijzen, een bredere verzameling — Finexly dekt meer dan 170 valuta's, ook die waarvoor geen transfercorridor bestaat.
- Koersen zijn één module in een betaal-API. Eromheen liggen quotes, begunstigden, KYC, kaarten en webhooks. Dat is een grote, beveiligingsgevoelige integratie om te onderhouden terwijl je alleen een getal wilde.
- Geen gepubliceerd quotum. De
/rates-reference documenteert een429-antwoord maar publiceert geen requestlimiet, dus je dimensioneert tegen een onbekende grens. Vergelijk dat met een expliciet model, met headers in elk antwoord. - Twee valuta's per aanroep.
/ratesneemt éénsourceen ééntarget. Prijzen in acht valuta's betekent acht aanroepen, of de volledige tabel ophalen en clientside filteren.
Geen van deze punten is een gebrek. Zo ziet een betaal-API eruit wanneer je hem als data-API gebruikt.
Wanneer Wise de juiste keuze is — en wanneer niet
| Jouw use case | Beste keuze | Waarom |
|---|---|---|
| Vergelijkingssite of affiliate-content "banken vs Wise" | Wise Comparison API | Het is de enige bron voor deze data, en het affiliate-spoor bestaat er precies voor |
| Daadwerkelijk geld versturen via Wise | Wise Quotes + Transfers | Je hebt het beprijsde, verlopende quote-object nodig |
| De Wise-merkkoers tonen omdat je gebruikers erom vragen | Wise /rates | Merkattributie is het hele punt |
| Multivalutaprijzen, checkout of een omrekenscherm | Dedicated valuta-API | Je hebt breedte, een directe sleutel en een eenvoudig contract nodig |
| Facturatie, billing en omzetrapportage | Dedicated valuta-API | Je hebt een stabiele historische reeks en een audittrail nodig |
| Backtesting of analytics | Allebei | Wise's minuuthistorie is sterk; een data-API is makkelijker te krijgen |
In plaats daarvan een dedicated wisselkoers-API gebruiken
Een data-API keert de afweging om: geen onboardinggesprek, bredere dekking, een expliciet quotum en een antwoord waarin niets anders staat dan de koers.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.finexly.com/v1/rate?from=EUR&to=USD"{ "pair": "EUR_USD", "rate": 1.0852 }Prijzen in meerdere valuta's is één round trip in plaats van één aanroep per paar:
const apiKey = process.env.FINEXLY_API_KEY;
async function priceTable(base, quotes) {
const q = quotes.map((c) => `${base}_${c}`).join(',');
const res = await fetch(`https://api.finexly.com/v1/convert?q=${q}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
if (!res.ok) throw new Error(`Finexly ${res.status}`);
return res.json();
}
const rates = await priceTable('USD', ['EUR', 'GBP', 'JPY', 'CAD', 'AUD']);
// { "USD_EUR": { "rate": 0.9215 }, "USD_GBP": { "rate": 0.7892 }, ... }En als je het omgerekende bedrag wilt in plaats van de vermenigvuldiger, laat de API dan het rekenwerk doen zodat afronding op één plek gebeurt:
import requests
def convert(amount, src, dst, api_key):
r = requests.get(
"https://api.finexly.com/v1/convert-amount",
params={"from": src, "to": dst, "amount": amount},
headers={"Authorization": f"Bearer {api_key}"},
timeout=10,
)
r.raise_for_status()
return r.json()["result"]
print(convert(100, "USD", "EUR", "YOUR_API_KEY"))Elk antwoord bevat X-RateLimit-Limit, X-RateLimit-Used en X-RateLimit-Units, dus je quotum is waarneembaar in plaats van afgeleid. Koersen verversen elke minuut tijdens handelsuren. Het gratis pakket biedt 1.000 requests per maand bij 10 requests per minuut, betaalde plannen beginnen bij $6,99 per maand voor 3.500 requests tot 100.000 in het Professional-plan — de volledige uitsplitsing staat op de prijzenpagina.
Kort over volume: 1.000 requests per maand klinkt weinig totdat je gaat cachen. Eén geplande job die de volledige koerstabel elke vijftien minuten ververst, gebruikt ongeveer 2.900 aanroepen per maand; elke zestig minuten circa 730. Caching maakt je aanroepvolume een functie van tijd in plaats van verkeer, en dat maakt een klein pakket op elke schaal haalbaar. De patronen staan in caching en foutafhandeling voor valuta-API's.
Migreren vanaf Wise /rates
Verplaats je een bestaande integratie, dan is de vertaling bijna één op één:
| Wise | Equivalent | Opmerking |
|---|---|---|
GET /rates | GET /v1/currencies en dan /v1/rate | Wise's kale /rates geeft alles terug; haal de valutalijst één keer op |
GET /rates?source=X&target=Y | GET /v1/rate?from=X&to=Y | Geeft een object terug, geen array met één element |
| Meerdere paren, meerdere aanroepen | GET /v1/convert?q=X_Y,X_Z | Eén request |
Handmatig amount * rate | GET /v1/convert-amount | Afronding serverside afgehandeld |
Historisch punt ?time= | Historisch endpoint | Vereist een betaald plan; zie de gids voor historische koersen |
| Basic- of OAuth-token | Authorization: Bearer | Sleutel uit het dashboard, geen goedkeuringsstap |
Tot slot: scrape wise.com alsjeblieft niet. Diverse marktplaatsvermeldingen bieden precies dat aan, en ze zijn fragiel, juridisch troebel en breken zodra de opmaak van de pagina verandert. Heb je specifiek het Wise-getal nodig, neem dan het affiliate-spoor en haal het netjes uit de API. Heb je een getal nodig, gebruik dan een API die daarvoor is gebouwd. Onze vergelijking van gratis valuta-API's en de gids met Frankfurter-alternatieven behandelen de opties zonder sleutel uitgebreider.
Veelgestelde vragen
Is de Wise wisselkoers-API gratis? Er is geen gepubliceerde prijs per request voor het rates-endpoint, maar de toegang is niet open. Je moet goedgekeurd Wise Platform-partner of goedgekeurd affiliate partner zijn, wat een aanvraag en beoordeling betekent in plaats van een aanmeldformulier. Voor de meeste projecten kost het tijd, geen geld.
Kan ik de Wise-API zonder account gebruiken?
Nee. Beide gedocumenteerde sporen vereisen credentials — Bearer-tokens voor Platform-partners, client ID en secret met Basic auth voor affiliates. Het enige endpoint waarvan het gedocumenteerde voorbeeld geen authorization-header toont is /comparisons, en daarop productieverkeer bouwen zou onverstandig zijn.
Geeft de Wise-API dezelfde koers als wise.com toont?
/rates geeft de midmarktkoers, het kerngetal waarmee Wise adverteert. Het bedrag dat een klant daadwerkelijk ontvangt komt uit /quotes en bevat de Wise-kosten. Kloppen je cijfers niet met de website, dan vergelijk je vrijwel zeker een midmarktkoers met een beprijsde quote.
Hoe ver gaat de historische koersdata van Wise terug?
Het endpoint accepteert willekeurige from/to-tijdstempels met groepering per day, hour of minute; Wise publiceert in de reference geen vaste vroegste datum, dus test het bereik dat je nodig hebt in plaats van dekking aan te nemen.
Wat is het beste alternatief voor de Wise wisselkoers-API? Dat hangt af van wat je vervangt. Voor prijsvergelijking met concurrenten is er geen alternatief — Wise's Comparison API is uniek. Voor midmarktkoersen in een product geeft een dedicated valutadata-API je bredere dekking, directe sleutels en een expliciet quotum. Vergelijk de opties op onze API-vergelijkingspagina.
Mag ik de Wise-koers juridisch aan mijn gebruikers tonen? Als goedgekeurde affiliate of Platform-partner ja, binnen de voorwaarden van die overeenkomst. De publieke site scrapen om dezelfde cijfers te krijgen is iets anders en niet iets waarop wij een bedrijf zouden bouwen.
Klaar om partner-onboarding over te slaan en gewoon koersen op te halen? Haal je gratis Finexly API-sleutel — geen creditcard nodig. Begin met 1.000 gratis requests per maand over 170+ valuta's en schaal pas op als je verkeer dat doet. Je kunt de koersen ook eerst in de browser uitproberen met onze valutaomrekenaar.
Explore More
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 →