Se hai mai provato a mostrare il tasso di cambio di Wise dentro il tuo prodotto, probabilmente hai scoperto che l'API dei tassi di cambio Wise non è esattamente ciò che ti aspettavi. Wise pubblica dati di tasso medio di mercato davvero eccellenti e li espone tramite un endpoint REST — ma stanno dietro a un processo di approvazione partner, vivono dentro un'API di pagamento anziché un'API di dati di mercato, e il tasso restituito deliberatamente non è il prezzo che pagherà il tuo utente.
Questa guida copre esattamente cosa espone Wise, come autenticarsi, cosa restituisce ogni endpoint e i cinque limiti strutturali che decidono se Wise è la fonte giusta per il tuo progetto. Risponde anche onestamente alla domanda che la maggior parte si pone davvero: se ti servono solo tassi medi di mercato affidabili in un'app, Wise è lo strumento adatto?
Cos'è davvero l'API dei tassi di cambio Wise
Wise è una società di trasferimento di denaro. La sua API — con il marchio Wise Platform — è costruita per muovere denaro: creare preventivi, registrare beneficiari, finanziare bonifici, riconciliare saldi, emettere carte. I tassi di cambio compaiono in quell'API perché non si può prezzare un trasferimento senza di essi, non perché Wise venda dati di mercato.
Questo inquadramento spiega quasi tutte le sorprese che incontrano gli sviluppatori. I tassi sono un piccolo modulo dentro una piattaforma di pagamento e sono limitati alle rotte valutarie che Wise serve realmente.
Tre superfici separate, tre percorsi di accesso diversi
La più grande fonte di confusione è che «l'API dei tassi Wise» indica almeno tre cose distinte:
GET /rates— l'endpoint Exchange Rates. Restituisce il tasso medio di mercato di Wise per una coppia valutaria, attuale o storico. È ciò che intendono quasi tutti.POST /quotes— l'endpoint Quotes. Restituisce un trasferimento prezzato: tasso, commissione, tempo di consegna stimato e un timestamp di scadenza del tasso.GET /comparisons— l'endpoint Comparison. Restituisce stime di prezzo e velocità per Wise e per provider e banche concorrenti su una rotta.
Sono documentati nella stessa reference, usano schemi di autenticazione diversi e rispondono a domande molto diverse. Scegliere quello sbagliato è la causa abituale del «perché questo tasso è diverso da quello che vedo su wise.com?».
Come ottenere l'accesso ai dati sui tassi di Wise
Non esiste una chiave API self-service. L'accesso si divide in due percorsi:
Partner Platform. Ti onboardi come partner Wise Platform e ti autentichi con OAuth 2.0 (client ID e client secret) per ottenere un token. La reference di /rates nota che l'endpoint «supporta solo l'autenticazione Bearer per i partner non affiliati», tramite User Token o Personal Token.
Partner affiliati. Entri nel programma di affiliazione Wise, poi scrivi a partnerwise@wise.com per richiedere le credenziali. Wise esamina la richiesta e, se approvata, rilascia credenziali Basic auth che sbloccano esattamente due endpoint: Exchange Rates List e Get Temporary Quote. Nient'altro.
Qui si biforca la strada. Se stai costruendo un comparatore, un widget per un blog di viaggi o una pagina marketing fintech, il percorso affiliati è pensato per te. Se stai costruendo una funzionalità di prodotto — prezzi multivaluta, fatturazione, una schermata di conversione, un report interno — stai chiedendo a un team di partnership sui pagamenti di approvarti per dati di mercato, cosa che nessuna delle due parti desidera da quel rapporto.
Nota inoltre che Wise fissa la versione dell'API nel path dell'URL: la produzione è https://api.wise.com/2026Q3/rates, con sandbox su https://api.wise-sandbox.com/2026Q3/rates. La documentazione affiliati legacy fa ancora riferimento a /v1/rates su api.transferwise.com. Versioni incorporate nei path significano che la tua integrazione invecchia in silenzio se nessuno si occupa dell'aggiornamento.
Chiamare l'endpoint dei tassi Wise
Una volta ottenuto il token, l'endpoint è pulito e ben progettato. Sono documentate quattro forme di chiamata:
# 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 risposta è un array, un oggetto per intervallo:
[
{
"rate": 1.166,
"source": "EUR",
"target": "USD",
"time": "2018-08-31T10:43:31+0000"
}
]Due dettagli da segnalare. Primo, group accetta day, hour o minute — uno storico al minuto è insolitamente generoso e davvero utile per il backtesting. Secondo, la risposta è sempre un array, anche per una singola coppia, quindi fai il parsing di conseguenza:
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"))Un'altra trappola, ben documentata sul campo: se invii time e from/to nella stessa richiesta, i parametri di intervallo prevalgono e time viene ignorato. Questo ha causato un bug di lunga data nel nodo Wise di n8n che ha richiesto una patch upstream. Invia l'uno o l'altro, mai entrambi.
Il tasso medio di mercato non è il prezzo che paga il tuo utente
L'endpoint /rates di Wise restituisce il tasso medio di mercato (mid-market) — il punto medio tra prezzo di acquisto e di vendita sul mercato interbancario. È il tasso «reale», ed è ciò su cui Wise costruisce il proprio marketing. È anche, per definizione, un tasso al quale nessuno opera.
Se ti serve sapere quanto costerà davvero un trasferimento, ti serve /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 risposta del preventivo porta i campi di cui la logica di prezzo ha davvero bisogno: rate, rateType (per esempio FIXED), rateExpirationTime, un dettaglio di fee, feePercentage e un array paymentOptions con estimatedDelivery per metodo di pagamento. Restituisce anche notices — l'esempio documentato da Wise avverte che un cliente può avere al massimo tre trasferimenti aperti a tasso garantito prima che i successivi passino al tasso live.
La conseguenza pratica: un preventivo è un oggetto effimero e con stato, legato a un trasferimento, non una lettura di tasso che puoi interrogare a intervalli regolari. Se il tuo caso d'uso è «mostrare il prezzo odierno in USD su una pagina prezzi», i preventivi sono la primitiva sbagliata e i tassi quella giusta. Se è «dire all'utente esattamente quanto riceverà», i soli tassi lo sovrastimeranno. Confondere questa distinzione è una fonte comune dei disallineamenti di arrotondamento e riconciliazione descritti nella nostra guida su arrotondamento delle valute e cifre decimali.
Cosa restituisce davvero l'API Comparison
L'endpoint Comparison è la parte più interessante e più fraintesa della piattaforma. Restituisce, provider per provider, stime di prezzo e velocità per banche e servizi di trasferimento su una rotta:
curl -X GET 'https://api.wise.com/2026Q3/comparisons?sourceCurrency=GBP&targetCurrency=EUR&sendAmount=10000&filter=POPULAR'Prima di costruirci sopra qualsiasi cosa, leggi con attenzione la nota metodologica di Wise. Wise dichiara di raccogliere tassi e commissioni pubblicizzati su siti di terze parti, calcolare il markup di ciascun provider sul tasso medio di mercato al momento della raccolta e poi riapplicare quel markup memorizzato al tasso medio corrente per produrre il numero che ricevi. La raccolta gira circa una volta all'ora.
In altre parole, i prezzi dei concorrenti restituiti da questo endpoint sono stime modellate derivate da rilevazioni orarie, non preventivi live. Wise lo dichiara apertamente, il che le fa onore — ma significa che il dato non è adatto a nulla in cui dovresti rispondere del numero di un concorrente. Wise limita inoltre le stime a pagamenti in entrata e in uscita solo tramite bonifico bancario, e nota che molti provider prezzano carta e contanti in modo molto diverso.
Strutturalmente la risposta è denormalizzata: uno stesso provider può restituire più preventivi per la stessa coppia perché prezzo e velocità variano per paese di destinazione. Ricevi un array providers, ciascuno con il proprio array quotes, e ridurre il tutto a un numero per provider è compito tuo, non dell'API.
Cinque limiti da conoscere prima di costruire sui tassi Wise
- L'accesso è una relazione commerciale, non una registrazione. L'approvazione come affiliato o l'onboarding Platform precede ogni chiamata. Non c'è una dashboard dove generare una chiave in trenta secondi.
- La copertura segue le rotte di trasferimento. Wise supporta le valute con cui può muovere denaro. Un fornitore di dati dedicato copre le valute che può prezzare, un insieme più ampio — Finexly copre oltre 170 valute, incluse alcune per cui non esiste alcun corridoio di trasferimento.
- I tassi sono un modulo dentro un'API di pagamento. Intorno ci sono preventivi, beneficiari, KYC, carte e webhook. È un'integrazione grande e sensibile dal punto di vista della sicurezza da mantenere, quando tutto ciò che volevi era un numero.
- Nessuna quota pubblicata. La reference di
/ratesdocumenta una risposta429ma non pubblica un limite di richieste, quindi dimensioni la capacità contro un tetto non dichiarato. Confrontalo con un modello esplicito, con header in ogni risposta. - Due valute per chiamata.
/ratesaccetta un solosourcee un solotarget. Prezzare una pagina in otto valute significa otto chiamate oppure scaricare l'intera tabella e filtrare lato client.
Nessuno di questi punti è un difetto. È l'aspetto che ha un'API di pagamento quando la usi come API di dati.
Quando Wise è la scelta giusta — e quando no
| Il tuo caso d'uso | Scelta migliore | Perché |
|---|---|---|
| Comparatore o contenuto di affiliazione «banche vs Wise» | API Comparison di Wise | È l'unica fonte di quel dato, e il percorso affiliati esiste proprio per questo |
| Inviare davvero denaro tramite Wise | Quotes + Transfers di Wise | Ti serve l'oggetto preventivo prezzato e con scadenza |
| Mostrare il tasso a marchio Wise perché gli utenti lo chiedono | /rates di Wise | L'attribuzione del marchio è tutto il punto |
| Prezzi multivaluta, checkout o schermata di conversione | API valutaria dedicata | Ti servono ampiezza, chiave immediata e un contratto semplice |
| Fatturazione, billing e reporting dei ricavi | API valutaria dedicata | Ti serve una serie storica stabile e una traccia di audit |
| Backtesting o analytics | Entrambe | Lo storico al minuto di Wise è forte; un'API di dati è più facile da ottenere |
Usare invece un'API dei tassi di cambio dedicata
Un'API di dati ribalta il compromesso: nessuna call di onboarding, copertura più ampia, quota esplicita e una risposta che non contiene nulla oltre al tasso.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.finexly.com/v1/rate?from=EUR&to=USD"{ "pair": "EUR_USD", "rate": 1.0852 }Prezzare una pagina in più valute è un solo round trip invece di una chiamata per coppia:
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 }, ... }E quando vuoi la cifra convertita anziché il moltiplicatore, lascia che sia l'API a fare l'aritmetica, così l'arrotondamento avviene in un solo punto:
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"))Ogni risposta porta X-RateLimit-Limit, X-RateLimit-Used e X-RateLimit-Units, quindi la quota è osservabile invece che dedotta. I tassi si aggiornano ogni minuto durante gli orari di mercato. Il piano gratuito offre 1.000 richieste al mese a 10 richieste al minuto, con piani a pagamento da 6,99 $/mese per 3.500 richieste fino a 100.000 nel piano Professional — il dettaglio completo è nella pagina dei prezzi.
Una nota rapida sul volume: 1.000 richieste al mese sembrano poche finché non usi la cache. Un singolo job pianificato che aggiorna l'intera tabella dei tassi ogni quindici minuti consuma circa 2.900 chiamate al mese; ogni sessanta minuti, circa 730. La cache trasforma il tuo volume di chiamate in una funzione del tempo anziché del traffico, ed è ciò che rende sostenibile un piano piccolo a qualsiasi scala. I pattern sono descritti in caching e gestione degli errori per le API valutarie.
Migrare da /rates di Wise
Se stai spostando un'integrazione esistente, la mappatura è quasi uno a uno:
| Wise | Equivalente | Nota |
|---|---|---|
GET /rates | GET /v1/currencies poi /v1/rate | Il /rates nudo di Wise restituisce tutto; recupera l'elenco valute una volta |
GET /rates?source=X&target=Y | GET /v1/rate?from=X&to=Y | Restituisce un oggetto, non un array a un elemento |
| Più coppie, più chiamate | GET /v1/convert?q=X_Y,X_Z | Una sola richiesta |
amount * rate manuale | GET /v1/convert-amount | Arrotondamento gestito lato server |
Punto storico ?time= | Endpoint storico | Richiede un piano a pagamento; vedi la guida ai tassi storici |
| Token Basic o OAuth | Authorization: Bearer | Chiave dalla dashboard, senza passaggio di approvazione |
Infine: per favore, non fare scraping di wise.com. Diversi annunci di marketplace offrono esattamente questo, e sono fragili, giuridicamente torbidi e si rompono al primo cambio di markup della pagina. Se ti serve specificamente il numero di Wise, prendi il percorso affiliati e ottienilo dall'API nel modo corretto. Se ti serve un numero, usa un'API costruita per servirlo. Il nostro confronto sulle API valutarie gratuite e la guida alle alternative a Frankfurter coprono più a fondo le opzioni senza chiave.
Domande frequenti
L'API dei tassi di cambio Wise è gratuita? Non esiste un costo per richiesta pubblicato per l'endpoint dei tassi, ma l'accesso non è aperto. Devi essere partner Wise Platform approvato o partner affiliato approvato, il che comporta una candidatura e una revisione anziché un modulo di registrazione. Per la maggior parte dei progetti il costo è tempo, non denaro.
Posso usare l'API Wise senza account?
No. Entrambi i percorsi documentati richiedono credenziali — token Bearer per i partner Platform, client ID e secret in Basic auth per gli affiliati. L'unico endpoint il cui esempio documentato omette l'header di autorizzazione è /comparisons, e costruirci sopra traffico di produzione sarebbe imprudente.
L'API Wise restituisce lo stesso tasso mostrato su wise.com?
/rates restituisce il tasso medio di mercato, la cifra di punta pubblicizzata da Wise. L'importo che il cliente riceve davvero arriva da /quotes e include la commissione Wise. Se i tuoi numeri non coincidono con il sito, quasi certamente stai confrontando un tasso medio con un preventivo prezzato.
Fin dove arriva lo storico dei tassi di Wise?
L'endpoint accetta timestamp from/to arbitrari con raggruppamento per day, hour o minute; Wise non pubblica una data minima fissa nella reference, quindi testa l'intervallo specifico che ti serve invece di dare per scontata la copertura.
Qual è la migliore alternativa all'API dei tassi di cambio Wise? Dipende da cosa stai sostituendo. Per il confronto dei prezzi dei concorrenti non c'è alternativa: l'API Comparison di Wise è unica. Per i tassi medi dentro un prodotto, un'API dedicata di dati valutari offre copertura più ampia, chiavi istantanee e una quota esplicita. Confronta le opzioni sulla nostra pagina di confronto delle API.
Posso mostrare legalmente il tasso Wise ai miei utenti? Se sei affiliato o partner Platform approvato, sì, nei termini di quell'accordo. Fare scraping del sito pubblico per ottenere gli stessi numeri è un'altra cosa e non è qualcosa su cui consiglieremmo di costruire un'attività.
Pronto a saltare l'onboarding partner e ottenere semplicemente i tassi? Ottieni la tua chiave API Finexly gratuita — senza carta di credito. Parti con 1.000 richieste gratuite al mese su oltre 170 valute e passa a un piano superiore solo quando lo farà il tuo traffico. Puoi anche provare i tassi nel browser con il nostro convertitore di valuta.
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 →