Frankfurter is an open-source currency data API that tracks daily exchange rates from institutional sources.
The public API runs at https://api.frankfurter.dev. If you prefer to host your own instance, you can run Frankfurter with Docker.
The quickest way to get started:
docker run -d -p 8080:8080 lineofflight/frankfurterFor production, mount a volume to persist the SQLite database across container restarts and set any optional API keys:
docker run -d -p 8080:8080 \
-e DATABASE_URL=sqlite:///app/data/frankfurter.sqlite3 \
-e BAM_API_KEY=your_key \
-e BANXICO_API_KEY=your_key \
-e BCCH_USER=your_email \
-e BCCH_PASS=your_password \
-e BOT_API_KEY=your_key \
-e FRED_API_KEY=your_key \
-e TCMB_API_KEY=your_key \
-v ./data:/app/data \
--pull always \
lineofflight/frankfurterWithout a mounted volume, the database is ephemeral and some endpoints may return empty data until their initial backfill completes.
Some data providers require API keys. All are free and optional:
BAM_API_KEY— Bank Al-Maghrib (Morocco). Register at apihelpdesk.centralbankofmorocco.ma.BANXICO_API_KEY— Banco de México. Register at banxico.org.mx.BCCH_USER/BCCH_PASS— Banco Central de Chile. Register at si3.bcentral.cl.BOT_API_KEY— Bank of Thailand. Register at portal.api.bot.or.th.FRED_API_KEY— Federal Reserve. Register at fred.stlouisfed.org.TCMB_API_KEY— Turkish Central Bank. Register at evds3.tcmb.gov.tr.
See AGENTS.md for development setup and guidelines.
Built a library or tool with Frankfurter? Share it in Show and Tell