Torna al Blog

Alternative all'API Frankfurter nel 2026: un confronto onesto per sviluppatori

V
Vlado Grigirov
August 28, 2026
Currency API Exchange Rates Frankfurter API Comparison Free API Developer Guide

Se stai cercando alternative all'API Frankfurter, con ogni probabilità hai già messo in produzione qualcosa con essa. Frankfurter è l'API gratuita di tassi di cambio predefinita per un'intera generazione di progetti collaterali: nessuna chiave API, nessuna registrazione, nessuna quota, una superficie REST pulita e un codice open source che si legge in un pomeriggio. Poi qualcosa cambia — una domanda sulla conformità, un bug del fine settimana, un cliente che ha bisogno di tassi infragiornalieri — e inizi a chiederti cos'altro ci sia.

Questa guida guarda con onestà a quella decisione. Racconta cosa fa davvero Frankfurter nel 2026 (la maggior parte degli articoli di confronto lavora su informazioni superate), i cinque limiti specifici che spingono i team ad andarsene e le tre strade realistiche: self-hostarla, passare a un'API commerciale con chiave, oppure costruire un ibrido. Alla fine trovi un esempio di migrazione.

Cos'è davvero Frankfurter nel 2026

Quasi tutte le raccolte «migliori API di valuta gratuite» descrivono ancora Frankfurter come «tassi BCE, circa 30 valute, nessun dato nel fine settimana». È stato vero per anni. Non lo è più.

L'API v2 su frankfurter.dev segue i tassi giornalieri di 84 banche centrali, copre 201 valute e ha uno storico che arriva fino al 1948. È davvero gratuita per uso commerciale, non richiede autenticazione, non pubblica alcuna quota mensile o giornaliera e offre output in CSV e NDJSON oltre al JSON. Ci sono una specifica OpenAPI, un llms.txt e un server MCP per i flussi con agenti. Puoi self-hostarla con Docker.

È un prodotto più solido di quanto le raccolte ammettano, e vale la pena dirlo chiaramente: per moltissimi progetti Frankfurter è la risposta giusta e non dovresti migrare. Se stai costruendo un tracker di finanze personali, una pagina di riferimento sulle valute, uno strumento di fatturazione che fissa i tassi una volta al giorno o un notebook di data science che scarica un decennio di medie mensili, Frankfurter lo fa bene e non costa nulla.

Il resto dell'articolo riguarda i casi in cui non basta.

Cinque limiti che spingono i team a cercare alternative all'API Frankfurter

1. I tassi di riferimento giornalieri non sono tassi in tempo reale

Questo è il limite strutturale, e non è un difetto: è la natura della fonte dati. I tassi di riferimento delle banche centrali sono pubblicati una volta per giorno lavorativo. La BCE, per esempio, pubblica i suoi tassi di riferimento dell'euro ogni giorno lavorativo intorno alle 16:00 CET. Frankfurter espone fedelmente quei numeri.

Significa che un tasso letto alle 09:00 e uno letto alle 15:00 sono lo stesso numero, anche se nel frattempo il mercato si è mosso dell'1,2%. Per un convertitore di sola visualizzazione nessuno se ne accorge. Per una pagina di checkout, un calcolo di accredito o qualunque punto in cui il cliente confronta il tuo numero con Google, quel ritardo diventa un ticket di assistenza.

Se il tuo prodotto ha bisogno di tassi che si muovono durante la giornata, ti serve una fonte di dati di mercato, non una fonte di tassi di riferimento. L'API Finexly si aggiorna ogni minuto durante gli orari di mercato su oltre 170 valute: è un modello di dati diverso, non una versione migliore dello stesso. Il nostro articolo su da dove prendono i dati le API di cambio approfondisce la distinzione.

2. Non ci sono righe per weekend e festivi

Le banche centrali non pubblicano il sabato, la domenica né nei giorni festivi nazionali. Quindi una query sul 2026-08-23 non restituisce nulla di utile, e una serie storica su un mese ha circa 21 righe, non 31.

Ogni team ci sbatte allo stesso modo: un job notturno gira di domenica, ottiene un risultato vuoto o sfasato e o va in errore o — molto peggio — scrive silenziosamente un null nel libro mastro. Se costruisci su tassi giornalieri di una qualunque fonte di banca centrale, ti serve una politica esplicita di riporto in avanti, e devi metterla per iscritto, perché «usa l'ultimo tasso pubblicato» e «salta la riga» producono bilanci diversi.

3. I tassi mescolati possono cambiare dopo la pubblicazione

Per impostazione predefinita Frankfurter mescola i tassi di tutti i fornitori che contribuiscono. Le sue stesse FAQ sono di una franchezza rinfrescante sulla conseguenza: le ultime cifre decimali possono spostarsi man mano che arrivano nuovi dati e, per la conformità, conviene filtrare su un fornitore specifico.

È una scelta di progettazione perfettamente ragionevole per l'uso generale. Diventa un problema se memorizzi un tasso, lo mostri a un utente e più tardi lo riconcili con una nuova lettura: troverai piccole discrepanze molto difficili da spiegare a un revisore. La soluzione lato Frankfurter è passare providers=ECB (o l'autorità che ti regola) invece di accettare la miscela. La soluzione nel tuo sistema è persistere il tasso effettivamente usato al momento della transazione e non riderivarlo mai. Questa regola vale per qualunque fornitore, e la trattiamo nella guida a tassi di cambio e dichiarazione fiscale.

4. Niente chiave API significa niente quota — e niente visibilità

«Nessuna chiave API richiesta» è la miglior caratteristica di Frankfurter e il suo rischio più sottovalutato. Poiché non c'è una chiave:

  • Non hai quota per applicazione. Condividi un rate limiter pubblico con tutta internet, incluso chi in questo momento lo sta martellando da un ciclo scritto male.
  • Non hai telemetria d'uso. Nessuna dashboard ti dirà che martedì scorso il volume di chiamate è triplicato.
  • Non hai una relazione di supporto. C'è una pagina di stato e un issue tracker su GitHub, il che è più di quanto offrano molti servizi gratuiti, ma non c'è SLA né qualcuno da chiamare.

L'indicazione del progetto stesso è esplicita: per usi ad alto volume, mettere in cache le risposte, self-hostare o interrogare direttamente i dataset. È un consiglio onesto, ed è anche il momento in cui molti team iniziano a valutare alternative all'API Frankfurter — non perché i dati siano sbagliati, ma perché si sono presi una dipendenza di produzione senza alcun contratto alle spalle.

5. Non esiste un endpoint di conversione

Frankfurter lo documenta di proposito: prendi il tasso e moltiplica. Sono tre righe di codice.

Sono però anche tre righe che finiscono scritte in modo leggermente diverso in sei punti del tuo codice, e in uno di questi si divide dove si dovrebbe moltiplicare. Un endpoint convert dedicato non è una necessità tecnica; è un modo per avere esattamente una implementazione delle regole di arrotondamento e di direzione. Se hai mai rilasciato un bug in cui EUR→USD e USD→EUR divergevano dello 0,3%, sai perché conta. La nostra guida su arrotondamento e cifre decimali nelle valute copre il resto di questo campo minato.

Alternative all'API Frankfurter a confronto

I dettagli dei piani gratuiti qui sotto sono quelli pubblicati da ciascun fornitore al momento della stesura. Verificali prima di impegnarti: i piani gratuiti cambiano più spesso della documentazione.

APIPiano gratuitoFrequenza di aggiornamentoAutenticazioneValuta baseIdeale per
FrankfurterIllimitato (limite anti-abuso, senza SLA)Giornaliera, giorni lavorativiNessunaQualsiasiProgetti hobbistici, contabilità, ricerca storica
Frankfurter self-hostedGratis + costo della tua infrastrutturaGiornaliera, giorni lavorativiLa tuaQualsiasiTeam che vogliono controllo e già usano Docker
Finexly1.000 richieste/meseOgni minuto negli orari di mercatoChiave BearerQualsiasi (base personalizzata nei piani superiori)Prodotti che vogliono tassi infragiornalieri e un canale di supporto
ExchangeRate-API~1.500 richieste/meseGiornalieraChiaveQualsiasiDashboard aggiornate una volta al giorno
Open Exchange Rates1.000 richieste/meseOrariaChiaveSolo USD nel gratuitoApp lato server che accettano base USD
Fixer.io100 richieste/meseOrariaChiaveSolo EUR nel gratuitoIntegrazioni legacy
Due cose saltano all'occhio. Primo, nessuno batte Frankfurter sulla quota, perché Frankfurter non ne ha una. Se il tuo vincolo è il volume grezzo di chiamate su tassi giornalieri, la risposta è self-hostare Frankfurter, non comprare una quota più piccola altrove. Secondo, le opzioni a pagamento non ti vendono gli stessi dati con una confezione più bella: vendono una frequenza di aggiornamento diversa e una relazione di supporto. Se nessuna delle due è il tuo problema, migrare è un passo indietro.

Diverse di queste sono analizzate fianco a fianco nel confronto tra API di valuta e nel nostro confronto tra API di tassi in tempo reale.

Opzione 1: self-hostare Frankfurter

La risposta più sottoutilizzata. Frankfurter pubblica un'immagine Docker, ed eseguirla in proprio elimina le due cose che davvero preoccupano i team in produzione: il rate limiter condiviso e la mancanza di controllo.

docker run -d -p 8080:8080 --name frankfurter \
  lineofflight/frankfurter

Cosa ottieni: chiamate interne illimitate, il controllo della tua disponibilità e la possibilità di fissare un fornitore. Cosa ti assumi: un container, un database, il monitoraggio e qualcuno che si accorga quando la raccolta a monte si rompe in un giorno di festa bancaria. È un costo reale — in sostanza l'argomento della nostra analisi make or buy, applicato a codice che qualcun altro ha già scritto.

Il self-hosting è la scelta giusta quando il volume è alto, i requisiti di latenza sono stringenti e i tassi di riferimento giornalieri bastano davvero. Non aiuta per niente se il problema è che ti servono tassi infragiornalieri: staresti solo eseguendo una tua copia degli stessi dati giornalieri.

Opzione 2: passare a un'API con chiave e tassi infragiornalieri

Se il motivo per cui sei qui è la freschezza dei tassi, la copertura di coppie esotiche o il bisogno che qualcuno risponda a un'email, un'API commerciale con chiave è la risposta onesta.

Ecco la stessa operazione su entrambe. Prima Frankfurter:

curl "https://api.frankfurter.dev/v2/rate/USD/EUR"

E l'equivalente Finexly:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.finexly.com/v1/rate?from=USD&to=EUR"
{ "pair": "USD_EUR", "rate": 0.9215 }

Mappatura degli endpoint

OperazioneFrankfurter v2Finexly v1
Elenco valuteGET /v2/currenciesGET /v1/currencies
Coppia singolaGET /v2/rate/EUR/USDGET /v1/rate?from=EUR&to=USD
Più coppieGET /v2/rates?base=USD&quotes=EUR,GBPGET /v1/convert?q=USD_EUR,USD_GBP
Convertire un importo(non c'è — moltiplichi tu)GET /v1/convert-amount?from=USD&to=EUR&amount=100
StoricoGET /v2/rates?date=1999-01-04Piani a pagamento — vedi la guida ai tassi storici
Il cambiamento di forma principale riguarda la chiamata multi-coppia. Frankfurter usa una base e una lista di valute quotate; Finexly prende una lista di coppie BASE_QUOTE esplicite, il che permette di recuperare USD_EUR e GBP_JPY nella stessa richiesta senza divisioni incrociate.

Un wrapper di migrazione

Non spargere un nuovo client in tutto il codice. Metti entrambi dietro un'unica interfaccia, così tornare indietro è solo una modifica di configurazione:

import os
import requests

FINEXLY_KEY = os.environ["FINEXLY_API_KEY"]

def get_rate(base: str, quote: str, provider: str = "finexly") -> float:
    """Return the mid-market rate for base->quote."""
    if provider == "frankfurter":
        r = requests.get(
            f"https://api.frankfurter.dev/v2/rate/{base}/{quote}",
            timeout=5,
        )
        r.raise_for_status()
        return float(r.json()["rate"])

    r = requests.get(
        "https://api.finexly.com/v1/rate",
        params={"from": base, "to": quote},
        headers={"Authorization": f"Bearer {FINEXLY_KEY}"},
        timeout=5,
    )
    r.raise_for_status()
    return float(r.json()["rate"])

print(get_rate("USD", "EUR"))

Due dettagli da copiare. La chiave API arriva dall'ambiente, mai dal sorgente — la documentazione Finexly segnala che le chiavi passate come parametro di query possono trapelare dai log di accesso del server e dagli header HTTP Referrer, quindi l'header Authorization è la via di produzione. E ogni chiamata ha un timeout, perché il valore predefinito nella maggior parte dei client HTTP è «aspetta per sempre».

Tieni d'occhio gli header di risposta X-RateLimit-Limit, X-RateLimit-Used e X-RateLimit-Units per vedere il consumo della quota in tempo reale. Quella telemetria è esattamente ciò che un'API non autenticata non può darti, ed è spesso il vero motivo per cui i team migrano.

Opzione 3: l'ibrido — metti in cache l'una, ripiega sull'altra

Lo schema verso cui converge la maggior parte dei sistemi in produzione. Usa il fornitore principale, metti in cache in modo aggressivo e tieni l'API gratuita senza autenticazione come ultima risorsa:

const CACHE = new Map();
const TTL_MS = 60_000;

async function getRate(base, quote) {
  const key = `${base}_${quote}`;
  const hit = CACHE.get(key);
  if (hit && Date.now() - hit.at < TTL_MS) return hit.rate;

  let rate;
  try {
    const res = await fetch(
      `https://api.finexly.com/v1/rate?from=${base}&to=${quote}`,
      { headers: { Authorization: `Bearer ${process.env.FINEXLY_API_KEY}` } }
    );
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    rate = (await res.json()).rate;
  } catch (err) {
    // Degrade to daily reference rates rather than failing the request
    const res = await fetch(`https://api.frankfurter.dev/v2/rate/${base}/${quote}`);
    rate = (await res.json()).rate;
  }

  CACHE.set(key, { rate, at: Date.now() });
  return rate;
}

Una cache di 60 secondi su un piano gratuito da 1.000 richieste copre comodamente una piccola app, perché il volume di chiamate diventa funzione del tempo, non del traffico. Segnala nei log le risposte di ripiego, così un degrado silenzioso al tasso di ieri non passa inosservato per una settimana. Altro sulla scelta del TTL e sul comportamento dei retry nella nostra guida a cache e gestione degli errori.

Una checklist decisionale

Scorri l'elenco e fermati al primo «sì»:

  1. I tassi devono cambiare durante la giornata di negoziazione? → Ti serve un'API di dati di mercato, non di tassi di riferimento.
  2. È un flusso regolamentato o soggetto a revisione? → Fissa un fornitore nominato, salva il tasso usato, non riderivarlo mai.
  3. Volume di chiamate alto ma tassi giornalieri sufficienti? → Self-hosta Frankfurter.
  4. Ti serve qualcuno che risponda quando si rompe? → Ti serve un piano con chiave e un livello di supporto.
  5. Niente di tutto questo? → Resta su Frankfurter. Mettila in cache, gestisci il buco del fine settimana e dedica il tempo ad altro.

La maggior parte dei team che va a caccia di alternative all'API Frankfurter scopre al passo 5 che il vero problema era una cache mancante e una domenica non gestita.

Domande frequenti

L'API Frankfurter è davvero gratuita per uso commerciale? Sì. Il progetto dichiara che è gratuita per uso commerciale, senza quota mensile o giornaliera: le richieste sono limitate solo per prevenire abusi. Il compromesso è che non c'è SLA né contratto di supporto, quindi il rischio è tuo.

Frankfurter fornisce solo i tassi BCE? Non più. L'API v2 mescola dati di 84 banche centrali su 201 valute, e puoi restringere a una singola fonte con il parametro providers. La diffusa descrizione «solo BCE, 30 valute» si riferisce a versioni più vecchie.

Perché Frankfurter non restituisce dati nel fine settimana? Perché le banche centrali non pubblicano tassi di riferimento nei giorni non lavorativi. Qualunque API costruita su dati di banche centrali ha lo stesso buco. O riporti in avanti l'ultimo tasso pubblicato, o usi una fonte di mercato quotata in continuo.

Qual è la migliore alternativa gratuita a Frankfurter? Dipende da cosa deve comprarti il «gratuito». Per tassi giornalieri illimitati nulla batte Frankfurter: self-hostala. Per un piano gratuito con aggiornamenti infragiornalieri e una vera chiave API, il piano gratuito di Finexly offre 1.000 richieste al mese su oltre 170 valute. Vedi la nostra guida alle API di valuta gratuite per il quadro completo.

Posso usare Frankfurter e un'API a pagamento insieme? Sì, ed è un'architettura sensata. Instrada il traffico normale al fornitore principale e ripiega su Frankfurter in caso di errore, come nell'esempio ibrido sopra. Assicurati solo di registrare le risposte di ripiego, perché portano garanzie di freschezza diverse.

Come iniziare

Se i tassi di riferimento giornalieri bastano per ciò che stai costruendo, resta su Frankfurter: è un buon progetto e non ti costerà nulla. Se ti servono tassi che si muovono durante la giornata, una copertura oltre gli insiemi di riferimento delle banche centrali o header d'uso davvero monitorabili, ottieni la tua chiave API Finexly gratuita — senza carta di credito. Parti con 1.000 richieste al mese su oltre 170 valute e cresci man mano, oppure confronta prima i piani nella nostra pagina prezzi.

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 →

Condividi questo articolo