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/rates

Cambia la valuta di base con base.

curl https://api.frankfurter.dev/v2/rates?base=usd

Filtra le valute di destinazione con quotes.

curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbp

Tassi storici

Consulta i tassi per una data specifica.

curl https://api.frankfurter.dev/v2/rates?date=1999-01-04

Serie temporali

Ottieni i tassi di un periodo con from e to.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&quotes=usd

Suggerimento: 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=month

Filtra 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.csv

Output 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-01

Tasso singolo

Ottieni il tasso di una singola coppia di valute. Se serve, aggiungi date o providers.

curl https://api.frankfurter.dev/v2/rate/eur/usd

Valute

Ottieni le valute disponibili con la copertura delle fonti.

curl https://api.frankfurter.dev/v2/currencies

Includi le valute storiche con scope.

curl https://api.frankfurter.dev/v2/currencies?scope=all

Singola valuta

Ottieni dettagli e copertura delle fonti di una singola valuta.

curl https://api.frankfurter.dev/v2/currency/eur

Fonti

Elenca le fonti di dati dell'API.

curl https://api.frankfurter.dev/v2/providers

Ottieni i dettagli di una singola fonte.

curl https://api.frankfurter.dev/v2/providers/ecb

Tassi 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/rates

Ottieni 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-15

Conversione

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, quotes e from/to ottieni 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, TRL finisce nel 2010 mentre TRY inizia 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.
European Central Bank and Main riverfront, Frankfurt