Integrations

Migrate from Frankfurter

Move a Frankfurter v2 integration to CurrencyCore: add bearer auth, map base and quotes to the path, replace client-side multiplication, and decide when Frankfurter is still the better fit.


Frankfurter is free, open source, and keyless. CurrencyCore is hosted and authenticated. The URL shapes are close, but auth, base placement, and amount handling differ, and CurrencyCore adds plan limits.

Public Frankfurter coverage and hosting details below were checked on 2026-11-10. Verify the project’s current docs before you migrate.

What changes at a glance

AreaFrankfurterCurrencyCore
Entry paid planNo paid tier; hosted API and self-hosted build are freeStarter, $9/mo for 50,000 requests, full history
Free quotaNo monthly cap; requests are rate-limited to prevent abuse1,000 requests/mo, 60/min
Currencies219 currencies and 39 other assets from 111 providers160 fiat currencies
HistoryDaily history back to 19481949 parity for GBP/USD and USD/INR, daily majors from 1971, EUR pairs from 1999; Free has the last 30 days
AuthNo API keyAuthorization: Bearer or x-api-key
CadenceThroughout the day; each source publishes once or a few times a dayCentral-bank reference rates polled hourly, daily fixings
Sources111 central banks and official sources, blended by default, with optional provider scopingCentral-bank reference rates, polled hourly
Self-hostingOpen source, Docker deployHosted service only
MCP serverMCP server documentedIncluded on every plan, OAuth and org-scoped

A snapshot comparison shows the main shape difference. Frankfurter:

{
  "amount": 1,
  "base": "USD",
  "date": "2026-11-10",
  "rates": { "EUR": 0.9214, "INR": 83.45 }
}

CurrencyCore:

{
  "base": "USD",
  "date": "2026-11-10",
  "rates": { "USD": 1, "EUR": 0.9214, "INR": 83.45 }
}

The arithmetic is the same. CurrencyCore includes the base in the map at 1, and the request now needs a bearer header.

1. Add a key and keep the URL close

# Before
curl "https://api.frankfurter.dev/v2/rates?base=USD&quotes=EUR,GBP,JPY"

# After
curl "https://api.currency-core.com/v1/rates/USD" \
  -H "Authorization: Bearer cc_test_your_key"

Frankfurter needs no key; CurrencyCore needs one on every data request. Add the header once in your client. See Authentication.

2. Map calls

Frankfurter v2CurrencyCoreNote
/v2/rates?base=USD&quotes=EUR,GBP,JPY/v1/rates/USDNo quotes filter; read the three codes from rates
/v2/rate/USD/INR/v1/rates/USDRead rates.INR, or use /v1/convert
A dated rates call/v1/rates/{base}?date=YYYY-MM-DDOne dated snapshot
A historical series/v1/history?currency=INR&base=USD&from=&to=One currency per call, inclusive UTC dates
Pair rate multiplied by an amount/v1/convert?from=USD&to=INR&amount=100The amount is applied server-side

Frankfurter v2 has no amount parameter. Fetch the pair rate and multiply, or use /v1/convert. If your chart relies on missing non-trading days, filter the dense CurrencyCore series, which carries the last trading day forward.

3. Plan for the operational differences

CurrencyCore’s 1949 history is annual parity for GBP/USD and USD/INR, daily majors from 1971, and EUR pairs from 1999, not daily data for all 160 codes. Free covers the last 30 days; Starter and above get full history. The feed is fiat only, so confirm every code appears in /v1/currencies. Frankfurter’s blended feed and provider scoping have no direct equivalent.

4. Cut over

  1. Diff stored codes against /v1/currencies and note gaps.
  2. Create a cc_test_ key and add the bearer header.
  3. Map base and quotes to /v1/rates/{base}; read the codes you need instead of filtering.
  4. Replace client-side multiplication with /v1/convert where an amount is involved.
  5. Compare the same dates on both services, including a weekend.
  6. Watch 401, 403 on the Free history window, and 429.
  7. Keep the Frankfurter adapter for one billing cycle.

When Frankfurter is the better fit

Frankfurter is free, open source, with no monthly cap. Run it in Docker on your network. It lists 219 currencies and 39 other assets from 111 providers, with daily history to 1948. If you are prototyping, running low volume, using crypto or metals, or need self-hosting, Frankfurter is the better fit. CurrencyCore adds auth and plan limits, so move for a per-key quota, PPP, analytics, or support. For zero-cost prototyping, it is hard to beat.