Si vous avez déjà tenté d'afficher le taux de change Wise dans votre propre produit, vous avez sans doute découvert que l'API de taux de change Wise n'est pas tout à fait ce que vous imaginiez. Wise publie d'excellentes données de taux interbancaire et les expose via un endpoint REST — mais elles se trouvent derrière un processus d'agrément partenaire, elles vivent dans une API de paiement et non dans une API de données de marché, et le taux renvoyé n'est délibérément pas le prix que paiera votre utilisateur.
Ce guide détaille exactement ce que Wise expose, comment s'authentifier, ce que renvoie chaque endpoint et les cinq limites structurelles qui déterminent si Wise est la bonne source pour votre projet. Il répond aussi honnêtement à la question que la plupart se posent vraiment : si vous avez simplement besoin de taux interbancaires fiables dans une application, Wise est-il l'outil adapté ?
Ce qu'est réellement l'API de taux de change Wise
Wise est une société de transfert d'argent. Son API — sous la marque Wise Platform — est conçue pour déplacer de l'argent : créer des devis, enregistrer des bénéficiaires, financer des virements, rapprocher des soldes, émettre des cartes. Les taux de change y figurent parce qu'on ne peut pas tarifer un virement sans eux, pas parce que Wise vend des données de marché.
Ce cadrage explique presque toutes les surprises rencontrées par les développeurs. Les taux sont un petit module au sein d'une plateforme de paiement, et ils sont limités aux corridors de devises que Wise dessert réellement.
Trois surfaces distinctes, trois voies d'accès différentes
La plus grande source de confusion : « l'API de taux Wise » désigne au moins trois choses différentes.
GET /rates— l'endpoint Exchange Rates. Renvoie le taux interbancaire de Wise pour une paire, actuel ou historique. C'est ce que la plupart des gens ont en tête.POST /quotes— l'endpoint Quotes. Renvoie un virement tarifé : taux, frais, délai de livraison estimé et horodatage d'expiration du taux.GET /comparisons— l'endpoint Comparison. Renvoie des estimations de prix et de rapidité pour Wise et pour les prestataires et banques concurrents sur un corridor donné.
Les trois sont documentés dans la même référence, utilisent des schémas d'authentification différents et répondent à des questions très différentes. Se tromper d'endpoint est la cause habituelle du « pourquoi ce taux diffère-t-il de celui affiché sur wise.com ? ».
Comment obtenir l'accès aux données de taux Wise
Il n'existe pas de clé d'API en libre-service. L'accès se divise en deux voies :
Partenaires Platform. Vous vous intégrez comme partenaire Wise Platform et vous authentifiez en OAuth 2.0 (client ID et client secret) pour obtenir un jeton. La référence /rates précise que l'endpoint « ne prend en charge que l'authentification Bearer pour les partenaires non affiliés », via un User Token ou un Personal Token.
Partenaires affiliés. Vous rejoignez le programme d'affiliation Wise, puis vous écrivez à partnerwise@wise.com pour demander des identifiants. Wise examine la demande et, en cas d'approbation, délivre des identifiants Basic auth qui débloquent exactement deux endpoints : Exchange Rates List et Get Temporary Quote. Rien d'autre.
C'est là que les chemins divergent. Si vous construisez un comparateur, un widget pour un blog de voyage ou une page marketing fintech, la voie affiliée est faite pour vous. Si vous construisez une fonctionnalité produit — tarification multidevise, facturation, écran de conversion, reporting interne — vous demandez à une équipe partenariats paiements de vous approuver pour des données de marché, ce que ni l'une ni l'autre partie ne souhaite dans cette relation.
Notez également que Wise inscrit la version d'API dans le chemin de l'URL : la production est https://api.wise.com/2026Q3/rates, le bac à sable https://api.wise-sandbox.com/2026Q3/rates. La documentation affiliée historique référence encore /v1/rates sur api.transferwise.com. Une version dans le chemin signifie que votre intégration vieillit silencieusement si personne ne prend en charge la montée de version.
Appeler l'endpoint des taux Wise
Une fois le jeton obtenu, l'endpoint est propre et bien conçu. Quatre formes d'appel sont documentées :
# 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>'La réponse est un tableau, un objet par intervalle :
[
{
"rate": 1.166,
"source": "EUR",
"target": "USD",
"time": "2018-08-31T10:43:31+0000"
}
]Deux détails méritent d'être signalés. D'abord, group accepte day, hour ou minute — un historique à la minute est inhabituellement généreux et vraiment utile pour du backtesting. Ensuite, la réponse est toujours un tableau, même pour une seule paire ; parsez en conséquence :
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"))Autre piège, bien documenté sur le terrain : si vous envoyez time et from/to dans la même requête, les paramètres de plage l'emportent et time est ignoré. Cela a provoqué un bug durable dans le nœud Wise de n8n qui a nécessité un correctif en amont. Envoyez l'un ou l'autre, jamais les deux.
Le taux interbancaire n'est pas le prix payé par votre utilisateur
L'endpoint /rates de Wise renvoie le taux interbancaire (mid-market) — le point médian entre le prix d'achat et le prix de vente sur le marché interbancaire. C'est le taux « réel », et c'est l'argument marketing de Wise. C'est aussi, par définition, un taux auquel personne ne transige.
Si vous avez besoin de savoir ce qu'un virement coûtera vraiment, il vous faut /quotes :
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
}'La réponse de devis contient les champs dont la logique tarifaire a réellement besoin : rate, rateType (par exemple FIXED), rateExpirationTime, un détail des fee, feePercentage et un tableau paymentOptions avec estimatedDelivery par mode de paiement. Elle renvoie aussi des notices — l'exemple documenté par Wise avertit qu'un client peut détenir au maximum trois virements ouverts à taux garanti avant que les suivants ne basculent sur le taux en direct.
Conséquence pratique : un devis est un objet éphémère et à état, lié à un virement, pas une consultation de taux que vous pouvez interroger en boucle. Si votre cas d'usage est « afficher le prix du jour en USD sur une page tarifs », les devis sont la mauvaise primitive et les taux la bonne. Si c'est « indiquer précisément à l'utilisateur ce qu'il recevra », les taux seuls le surestimeront. Confondre les deux est une source classique des écarts d'arrondi et de rapprochement décrits dans notre guide sur l'arrondi des devises et les décimales.
Ce que renvoie vraiment l'API Comparison
L'endpoint Comparison est la partie la plus intéressante et la plus mal comprise de la plateforme. Il renvoie, prestataire par prestataire, des estimations de prix et de rapidité pour les banques et services de transfert sur un corridor :
curl -X GET 'https://api.wise.com/2026Q3/comparisons?sourceCurrency=GBP&targetCurrency=EUR&sendAmount=10000&filter=POPULAR'Avant de bâtir quoi que ce soit dessus, lisez attentivement la note méthodologique de Wise. Wise indique collecter les taux et frais annoncés sur des sites tiers, calculer la marge de chaque prestataire par rapport au taux interbancaire au moment de la collecte, puis réappliquer cette marge stockée au taux interbancaire actuel pour produire le chiffre que vous recevez. La collecte s'exécute environ une fois par heure.
Autrement dit, les prix concurrents issus de cet endpoint sont des estimations modélisées à partir de relevés horaires, pas des devis en direct. Wise le dit clairement, ce qui est à son honneur — mais cela signifie que la donnée ne convient à rien où vous devriez répondre du chiffre d'un concurrent. Wise limite en outre les estimations aux entrées et sorties par virement bancaire uniquement, et souligne que beaucoup de prestataires tarifent très différemment la carte et les espèces.
Structurellement, la réponse est dénormalisée : un même prestataire peut renvoyer plusieurs devis pour la même paire, car prix et délais varient selon le pays de destination. Vous obtenez un tableau providers, chacun avec son tableau quotes ; réduire cela à un chiffre par prestataire est votre travail, pas celui de l'API.
Cinq limites à connaître avant de bâtir sur les taux Wise
- L'accès est une relation commerciale, pas une inscription. L'agrément affilié ou l'onboarding Platform conditionne chaque appel. Il n'y a pas de tableau de bord où générer une clé en trente secondes.
- La couverture suit les corridors de transfert. Wise prend en charge les devises dans lesquelles il peut déplacer de l'argent. Un fournisseur de données dédié couvre les devises qu'il peut valoriser, un ensemble plus large — Finexly couvre plus de 170 devises, y compris certaines sans corridor de transfert.
- Les taux sont un module dans une API de paiement. Autour se trouvent devis, bénéficiaires, KYC, cartes et webhooks. C'est une intégration lourde et sensible à maintenir alors que vous ne vouliez qu'un nombre.
- Aucun quota publié. La référence
/ratesdocumente une réponse429mais ne publie pas d'allocation de requêtes ; vous dimensionnez donc contre une limite non déclarée. À comparer à un modèle explicite, avec des en-têtes dans chaque réponse. - Deux devises par appel.
/ratesprend un seulsourceet un seultarget. Tarifer une page en huit devises implique huit appels, ou un chargement complet de la table et un filtrage côté client.
Aucun de ces points n'est un défaut. C'est à quoi ressemble une API de paiement lorsqu'on l'utilise comme API de données.
Quand Wise est le bon choix — et quand il ne l'est pas
| Votre cas d'usage | Meilleure option | Pourquoi |
|---|---|---|
| Comparateur ou contenu affilié « banques vs Wise » | API Comparison de Wise | C'est la seule source de cette donnée, et la voie affiliée existe justement pour cela |
| Envoyer réellement de l'argent via Wise | Quotes + Transfers de Wise | Vous avez besoin de l'objet devis tarifé et expirant |
| Afficher le taux de marque Wise parce que vos utilisateurs le demandent | /rates de Wise | L'attribution de marque est tout l'enjeu |
| Tarification multidevise, tunnel d'achat ou convertisseur | API devises dédiée | Il vous faut de la largeur, une clé immédiate et un contrat simple |
| Facturation et reporting de revenus | API devises dédiée | Il vous faut une série historique stable et une piste d'audit |
| Backtesting ou analytique | L'un ou l'autre | L'historique à la minute de Wise est solide ; une API de données est plus facile à obtenir |
Utiliser plutôt une API de taux de change dédiée
Une API de données inverse le compromis : pas d'appel d'onboarding, une couverture plus large, un quota explicite et une réponse qui ne contient rien d'autre que le taux.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.finexly.com/v1/rate?from=EUR&to=USD"{ "pair": "EUR_USD", "rate": 1.0852 }Tarifer une page dans plusieurs devises tient en un aller-retour au lieu d'un appel par paire :
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 }, ... }Et si vous voulez le montant converti plutôt que le multiplicateur, laissez l'API faire le calcul pour que l'arrondi se produise à un seul endroit :
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"))Chaque réponse porte X-RateLimit-Limit, X-RateLimit-Used et X-RateLimit-Units : le quota est observable plutôt que deviné. Les taux se rafraîchissent chaque minute pendant les heures de marché. L'offre gratuite propose 1 000 requêtes par mois à 10 requêtes par minute, les offres payantes démarrant à 6,99 $/mois pour 3 500 requêtes et allant jusqu'à 100 000 sur le plan Professional — le détail complet figure sur la page tarifs.
Un mot sur le volume : 1 000 requêtes par mois paraît peu, jusqu'à ce que vous mettiez en cache. Un seul job planifié qui rafraîchit toute la table des taux toutes les quinze minutes consomme environ 2 900 appels par mois ; toutes les soixante minutes, environ 730. Le cache transforme votre volume d'appels en fonction du temps plutôt que du trafic, ce qui rend une petite offre viable à toute échelle. Les schémas sont détaillés dans cache et gestion d'erreurs pour les API de devises.
Migrer depuis /rates de Wise
Si vous déplacez une intégration existante, la correspondance est presque un pour un :
| Wise | Équivalent | Note |
|---|---|---|
GET /rates | GET /v1/currencies puis /v1/rate | Le /rates nu de Wise renvoie tout ; récupérez la liste des devises une fois |
GET /rates?source=X&target=Y | GET /v1/rate?from=X&to=Y | Renvoie un objet, pas un tableau à un élément |
| Plusieurs paires, plusieurs appels | GET /v1/convert?q=X_Y,X_Z | Une seule requête |
amount * rate manuel | GET /v1/convert-amount | Arrondi géré côté serveur |
Point historique ?time= | Endpoint historique | Nécessite une offre payante ; voir le guide des taux historiques |
| Jeton Basic ou OAuth | Authorization: Bearer | Clé depuis le tableau de bord, sans étape d'approbation |
Enfin : ne scrapez pas wise.com. Plusieurs annonces de places de marché proposent exactement cela, et elles sont fragiles, juridiquement troubles et cassent dès que le balisage de la page change. Si vous avez besoin du chiffre Wise en particulier, empruntez la voie affiliée et récupérez-le proprement via l'API. Si vous avez besoin d'un chiffre, utilisez une API conçue pour le servir. Notre comparatif des API de devises gratuites et le guide des alternatives à Frankfurter traitent plus en profondeur les options sans clé.
Foire aux questions
L'API de taux de change Wise est-elle gratuite ? Aucun coût par requête n'est publié pour l'endpoint des taux, mais l'accès n'est pas ouvert. Vous devez être partenaire Wise Platform approuvé ou partenaire affilié approuvé, ce qui implique une candidature et un examen plutôt qu'un formulaire d'inscription. Pour la plupart des projets, le coût est en temps, pas en argent.
Puis-je utiliser l'API Wise sans compte ?
Non. Les deux voies documentées exigent des identifiants — jetons Bearer pour les partenaires Platform, client ID et secret en Basic auth pour les affiliés. Le seul endpoint dont l'exemple documenté omet l'en-tête d'autorisation est /comparisons, et bâtir du trafic de production sur cette hypothèse serait imprudent.
L'API Wise renvoie-t-elle le même taux que celui affiché sur wise.com ?
/rates renvoie le taux interbancaire, le chiffre phare mis en avant par Wise. Le montant réellement reçu par le client provient de /quotes et inclut les frais Wise. Si vos chiffres ne correspondent pas au site, vous comparez presque certainement un taux interbancaire à un devis tarifé.
Jusqu'où remonte l'historique des taux Wise ?
L'endpoint accepte des horodatages from/to arbitraires avec un regroupement par day, hour ou minute ; Wise ne publie pas de date de départ fixe dans la référence, testez donc la plage précise dont vous avez besoin plutôt que de supposer la couverture.
Quelle est la meilleure alternative à l'API de taux de change Wise ? Cela dépend de ce que vous remplacez. Pour la comparaison de prix concurrents, il n'y a pas d'alternative : l'API Comparison de Wise est unique. Pour des taux interbancaires dans un produit, une API de données de devises dédiée offre une couverture plus large, des clés instantanées et un quota explicite. Comparez les options sur notre page de comparaison des API.
Ai-je légalement le droit d'afficher le taux Wise à mes utilisateurs ? Si vous êtes affilié ou partenaire Platform approuvé, oui, dans les termes de cet accord. Scraper le site public pour obtenir les mêmes chiffres est une autre affaire, et ce n'est pas quelque chose sur quoi nous recommanderions de bâtir une activité.
Prêt à sauter l'onboarding partenaire et simplement obtenir des taux ? Obtenez votre clé d'API Finexly gratuite — sans carte bancaire. Démarrez avec 1 000 requêtes gratuites par mois sur plus de 170 devises, et évoluez seulement quand votre trafic le fera. Vous pouvez aussi tester les taux dans le navigateur avec notre convertisseur de devises.
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 →