Frankfurter
Frankfurter è un'API gratuita per i tassi di cambio di 223 valute da 104 banche centrali e fonti ufficiali. I tassi vengono aggiornati ogni giorno e risalgono al 1948.
L'API pubblica è su api.frankfurter.dev e non richiede chiavi API. Il progetto è open source, quindi per avere il pieno controllo puoi anche ospitarlo sui tuoi server.
Lavori con un agente AI? Passagli llms.txt oppure aggiungi il server MCP.
Tassi di cambio
Ottieni i tassi di cambio più recenti.
curl https://api.frankfurter.dev/v2/ratesCambia la valuta di base con base.
curl https://api.frankfurter.dev/v2/rates?base=usdFiltra le valute di destinazione con quotes.
curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbpTassi storici
Consulta i tassi per una data specifica.
curl https://api.frankfurter.dev/v2/rates?date=1999-01-04Serie temporali
Ottieni i tassi di un periodo con from e to.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01"es=usdSuggerimento: filtrando le valute le risposte restano leggere. Per intervalli di date lunghi, richiedi NDJSON e ricevi i risultati in streaming, riga per riga.
Raggruppamento
Riduci la granularità di una serie temporale con group. Valori supportati: week e month.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&group=monthFiltra per fonte
Limita la richiesta a fonti specifiche con providers.
curl https://api.frankfurter.dev/v2/rates?providers=ecb Di default i tassi combinano tutte le fonti. Usa providers per ottenere i tassi di una fonte specifica, oppure interroga direttamente una fonte con i suoi endpoint dedicati.
Attribuzione della fonte
Aggiungi expand=providers per vedere quali fonti hanno contribuito a ciascun tasso combinato.
curl https://api.frankfurter.dev/v2/rates?expand=providers Ogni riga riceve un array providers con le chiavi delle fonti che hanno contribuito. Le righe delle valute a cambio fisso non hanno questo campo: quei tassi derivano dall'ancoraggio, non dai dati delle fonti.
Output CSV
I tassi sono disponibili anche in CSV. Aggiungi .csv al percorso o imposta l'header Accept su text/csv.
curl https://api.frankfurter.dev/v2/rates.csvOutput NDJSON
Per risposte grandi, richiedi NDJSON (newline-delimited JSON) impostando l'header Accept su application/x-ndjson. Ogni riga è un oggetto JSON indipendente: utile per lo streaming di lunghe serie temporali senza tenere in buffer l'intera risposta.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01Tasso singolo
Ottieni il tasso di una singola coppia di valute. Se serve, aggiungi date o providers.
curl https://api.frankfurter.dev/v2/rate/eur/usdValute
Ottieni le valute disponibili con la copertura delle fonti.
curl https://api.frankfurter.dev/v2/currenciesIncludi le valute storiche con scope.
curl https://api.frankfurter.dev/v2/currencies?scope=allSingola valuta
Ottieni dettagli e copertura delle fonti di una singola valuta.
curl https://api.frankfurter.dev/v2/currency/eurFonti
Elenca le fonti di dati dell'API.
curl https://api.frankfurter.dev/v2/providersOttieni i dettagli di una singola fonte.
curl https://api.frankfurter.dev/v2/providers/ecbTassi per fonte
Interroga direttamente una fonte specifica. Supporta gli stessi parametri di /v2/rates e /v2/rate.
curl https://api.frankfurter.dev/v2/providers/ecb/ratesOttieni una singola coppia di valute da quella fonte.
curl https://api.frankfurter.dev/v2/providers/ecb/rate/eur/usd Si combina con date, intervalli di date (from e to) o raggruppamento. Anche formati come .csv e ndjson funzionano qui.
curl https://api.frankfurter.dev/v2/providers/ecb/rates?date=2024-05-15Conversione
Non esiste un endpoint di conversione dedicato. Ottieni il tasso e converti con poche righe di codice.
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`)
);Errori
L'API risponde con codici di stato HTTP standard e un corpo JSON.
{
"status": 422,
"message": "invalid currency: ABC"
}400- Parametro non valido o richiesta malformata.
404- Valuta, tasso o risorsa non trovata.
422- Richiesta compresa ma non elaborabile.
Self-hosting
Puoi ospitare Frankfurter sui tuoi server con Docker. Nella guida al deploy trovi la configurazione per la produzione e per le chiavi API.
FAQ
- A chi è rivolto Frankfurter (e a chi no)?
- Va bene per fatturazione SaaS, e-commerce, rendicontazione fiscale, sistemi ERP e contabili, e ricerca accademica su serie storiche che risalgono al 1948. Non è pensato per il trading in tempo reale, né per chi opera con valute esotiche soggette a forti oscillazioni infragiornaliere.
- L'API è gratuita per uso commerciale?
- Sì. Per i tassi valgono i termini di ciascun fornitore.
- L'API ha limiti di chiamate?
- Non ci sono quote. Le richieste hanno un rate limit contro gli abusi, ma non ci sono tetti giornalieri né mensili. Per volumi elevati, valuta di mettere in cache le risposte, ospitare il servizio sui tuoi server o interrogare direttamente i dataset.
- L'API supporta GraphQL?
- No. L'API REST è così semplice che GraphQL aggiungerebbe complessità senza grandi vantaggi. Inoltre romperebbe il caching sull'edge, che mantiene veloce l'API. Con parametri di query come
base,quotesefrom/toottieni esattamente i dati che ti servono. - L'API v1 verrà dismessa?
- No. L'API v1 è deprecated in favore della v2, ma resterà disponibile a tempo indeterminato. Vedi la documentazione v1. Per i dati della Banca centrale europea, usa /v2/providers/ecb/rates.
- Qual è la privacy policy dell'API?
- L'API non raccoglie né registra dati personali, indirizzi IP o URL delle richieste. L'istanza pubblica gira dietro Cloudflare per il caching e la protezione DDoS, e Cloudflare fornisce solo statistiche aggregate sul traffico.
- Devo dichiarare l'API nelle etichette sulla privacy di App Store o Google Play?
- No. Le richieste sono anonime e non ne conserviamo i log, quindi secondo le linee guida di Apple e Google Play rientrano tra i dati non raccolti.
- Dove posso segnalare bug o fare domande?
- Apri una issue per segnalare un bug, chiedere una funzionalità o suggerire una nuova fonte di dati. Usa le Discussions per fare domande o condividere una libreria o uno strumento che hai creato con Frankfurter.
- Quanto sono precisi i tassi di cambio?
- Per la compliance, filtra per una fonte specifica e ottieni i suoi tassi di riferimento ufficiali. Per l'uso generico vanno bene i tassi combinati predefiniti, anche se le ultime cifre decimali possono cambiare con l'arrivo di nuovi dati.
- I tassi sono medi, di acquisto o di vendita?
- L'API restituisce tassi medi di mercato (mid-market). Se una fonte pubblica quotazioni di acquisto (bid) e vendita (ask) invece di un tasso di riferimento, Frankfurter memorizza entrambe e calcola la media.
- Tutti i tassi di cambio sono giornalieri?
- Quasi tutti. Alcune fonti forniscono osservazioni settimanali, mensili o trimestrali. Queste fonti sono escluse dal feed combinato. Interrogale direttamente con il filtro
providers. - Perché i periodi di alcune valute vecchie e nuove si sovrappongono?
- Alcune fonti retrodatano la nuova valuta al periodo di quella sostituita (ad esempio,
TRLfinisce nel 2010 mentreTRYinizia nel 1996). Registriamo i dati delle fonti così come sono e filtriamo le sovrapposizioni solo quando li combiniamo. - Perché Frankfurter?
- Perché la Banca centrale europea, la nostra prima fonte di dati, ha sede a Francoforte.