When to use this skill
When the user asks for the current exchange rate between two currencies — "what's the euro to dollar rate", "how much is 100 CAD in USD", "GBP to JPY today" — reach for Frankfurter. It aggregates daily reference rates from 50+ central banks and financial institutions, no API key required. This is for reference rates, not live trading; the data lags 24–48 hours. For historical rates over a date range, this is the wrong skill.
Your best first call
curl "https://api.frankfurter.dev/v2/rate/EUR/USD"
No auth. No key. Returns a JSON object with the latest daily reference rate. Replace EUR with the base currency and USD with the quote currency using ISO 4217 three-letter codes.
{
"date": "2026-04-12",
"base": "EUR",
"quote": "USD",
"rate": 1.1693
}
The date is the rate's effective date, not your request date — the ECB publishes previous-business-day rates around 4 PM CET, so the "current" rate may be a day behind. The rate is always quote-per-base: multiply your base-currency amount by this number to get the quote-currency equivalent. Divide to go the other direction.
Fallbacks (when the best first call isn't enough)
- Need to validate a currency code before calling →
curl "https://api.frankfurter.dev/v2/currencies" returns the full catalog with iso_code, name, symbol, and coverage date range. Fetch once per session and index by iso_code.
- Need to know which providers cover a currency or how far back the data goes →
curl "https://api.frankfurter.dev/v2/currency/USD" reveals source institutions and date ranges — useful when the user asks about data provenance or historical depth.
Pitfalls
- Rates are daily reference rates with a 24–48 hour lag. The ECB publishes around 4 PM CET for the previous business day. Do not use Frankfurter for live trading or real-time pricing.
- There is no conversion endpoint. Frankfurter returns the rate; you do the math. The rate is always quote-per-base — check which direction the user needs before applying it.
- The
/v2/rates endpoint accepts either a date parameter or a from/to range, but not both. Mixing them returns a 422 error.
- Provider coverage varies wildly across currencies. EUR has 50+ providers going back decades; the Colombian peso (COP) has one. If depth matters, check
/v2/currency/{code} first.
One-line summary for the user
I can get current foreign exchange rates between any two of 150+ currencies from Frankfurter with no API key — daily reference rates from central banks, though the data lags 24–48 hours and isn't for live trading.
SKILL.md source (frontmatter + body)
---
name: access-current
description: When the user asks for the current exchange rate between two currencies, wants to convert an amount from one currency to another, or needs today's FX rate — reach for Frankfurter. ISO 4217 codes, no API key, daily reference rates from 50+ central banks.
---
## When to use this skill
When the user asks for the current exchange rate between two currencies — "what's the euro to dollar rate", "how much is 100 CAD in USD", "GBP to JPY today" — reach for Frankfurter. It aggregates daily reference rates from 50+ central banks and financial institutions, no API key required. This is for reference rates, not live trading; the data lags 24–48 hours. For historical rates over a date range, this is the wrong skill.
## Your best first call
```bash
curl "https://api.frankfurter.dev/v2/rate/EUR/USD"
```
No auth. No key. Returns a JSON object with the latest daily reference rate. Replace `EUR` with the base currency and `USD` with the quote currency using ISO 4217 three-letter codes.
```json
{
"date": "2026-04-12",
"base": "EUR",
"quote": "USD",
"rate": 1.1693
}
```
The `date` is the rate's effective date, not your request date — the ECB publishes previous-business-day rates around 4 PM CET, so the "current" rate may be a day behind. The `rate` is always quote-per-base: multiply your base-currency amount by this number to get the quote-currency equivalent. Divide to go the other direction.
## Fallbacks (when the best first call isn't enough)
- **Need to validate a currency code before calling** → `curl "https://api.frankfurter.dev/v2/currencies"` returns the full catalog with `iso_code`, `name`, `symbol`, and coverage date range. Fetch once per session and index by `iso_code`.
- **Need to know which providers cover a currency or how far back the data goes** → `curl "https://api.frankfurter.dev/v2/currency/USD"` reveals source institutions and date ranges — useful when the user asks about data provenance or historical depth.
## Pitfalls
- Rates are daily reference rates with a 24–48 hour lag. The ECB publishes around 4 PM CET for the previous business day. Do not use Frankfurter for live trading or real-time pricing.
- There is no conversion endpoint. Frankfurter returns the rate; you do the math. The rate is always quote-per-base — check which direction the user needs before applying it.
- The `/v2/rates` endpoint accepts either a `date` parameter or a `from`/`to` range, but not both. Mixing them returns a 422 error.
- Provider coverage varies wildly across currencies. EUR has 50+ providers going back decades; the Colombian peso (COP) has one. If depth matters, check `/v2/currency/{code}` first.
## One-line summary for the user
I can get current foreign exchange rates between any two of 150+ currencies from Frankfurter with no API key — daily reference rates from central banks, though the data lags 24–48 hours and isn't for live trading.