---
title: "Fixer.io Free Tier Alternative: Same JSON Shape, HTTPS, Any Base"
description: "Fixer's free plan is EUR-base only and 100 calls a month. AllRatesToday serves the same {success, timestamp, base, date, rates} JSON over HTTPS with any base currency, no access_key needed for latest rates."
canonical: https://allratestoday.com/migrate/fixer/
source: AllRatesToday (https://allratestoday.com/) — Markdown mirror of the page above; index of all pages at https://allratestoday.com/llms.txt
generated: 2026-10-25T10:08:27.455Z
---

# Fixer.io Free Tier Alternative: Same JSON Shape, HTTPS, Any Base

Fixer's free plan is EUR-base only and 100 calls a month. AllRatesToday serves the same {success, timestamp, base, date, rates} JSON over HTTPS with any base currency, no access_key needed for latest rates.

By [Madhushan](https://allratestoday.com/authors/madhushan/), Founder & Lead Developer

# Replace the Fixer.io free tier without rewriting your parser

Fixer was the first popular ECB-based API and its `{success, timestamp, base, date, rates}` shape is baked into a great many codebases and libraries. After the apilayer acquisition the free plan was capped at 100 requests a month for non-commercial use, lost base-currency switching (EUR only) and for a period lost HTTPS, so many free-tier projects broke on the HTTPS change or hit the cap within a day.

  **The fix is a hostname change.** Same path, same query parameters, same JSON fields. Latest, dated and range lookups need no key at all.

## Before and after

```
# before
curl "http://data.fixer.io/api/latest?access_key=YOUR_KEY&base=EUR&symbols=USD,GBP"

# after
curl "https://allratestoday.com/api/compat/fixer/latest?base=EUR&symbols=USD,GBP"
```

Response:

```
{"success":true,"timestamp":1789041600,"base":"USD","date":"2026-09-12","rates":{"GBP":0.7377,"JPY":146.91}}
```

Python:

```
import requests

# before
# r = requests.get("http://data.fixer.io/api/latest?access_key=YOUR_KEY&base=EUR&symbols=USD,GBP").json()
# after
r = requests.get("https://allratestoday.com/api/compat/fixer/latest?base=EUR&symbols=USD,GBP").json()
print(r["date"], r["rates"])
```

JavaScript:

```
// before
// const r = await fetch("http://data.fixer.io/api/latest?access_key=YOUR_KEY&base=EUR&symbols=USD,GBP").then(x => x.json());
// after
const r = await fetch("https://allratestoday.com/api/compat/fixer/latest?base=EUR&symbols=USD,GBP").then(x => x.json());
console.log(r.date, r.rates);
```

## Endpoints

| Endpoint | Returns | Key |
| --- | --- | --- |
| `/api/compat/fixer/latest?base=USD&symbols=GBP,JPY` | Latest ECB table over HTTPS, any base; no access_key | No key |
| `/api/compat/fixer/2026-01-15?base=USD` | Historical table for a date, with `historical: true` | No key |
| `/api/compat/fixer/timeseries?start_date=2026-01-01&end_date=2026-03-31&base=USD` | Fixer timeseries shape (up to a year per request) | No key |
| `/api/compat/fixer/convert?from=USD&to=EUR&amount=100` | Conversion with `query`, `info.rate` and `result` | No key |
| `/api/compat/fixer/symbols` | Currency list in Fixer's `{success, symbols}` shape | No key |

None of these needs a key. Rates come from the European Central Bank's daily reference table, the same source Fixer.io used; a non-EUR base is a cross-rate inside that table. Every response also carries the ECB publication date, so the number is citable.

## When you need more than ECB rates

- **Real-time mid-market rates** for 160+ currencies, refreshed every 60 seconds: [the main exchange rate API](https://allratestoday.com/exchange-rate-api/) on the same key.
- **Official rates from [122 central banks and tax authorities](https://allratestoday.com/central-bank-rates-api/institutions/)**, not only the ECB: the [central bank rates API](https://allratestoday.com/central-bank-rates-api/), with the latest table of every source keyless.
- **The full ECB archive as files** on [Hugging Face](https://huggingface.co/datasets/AllRatesToday/central-bank-exchange-rates) and [GitHub](https://github.com/AllRates-Today/central-bank-exchange-rates), refreshed daily, if you would rather not call an API at all.

## Frequently asked questions

### Is the Fixer.io compatible endpoint really free?

Yes, for everything: latest, dated and range lookups are all keyless, with no quota, CORS enabled and edge-cached. The data is the ECB's public reference table, so it is free for any use, commercial included. Public displays must carry a visible attribution link to allratestoday.com.

### Are the numbers the same?

Yes. Both serve the European Central Bank's daily reference rates. Cross-rates for a non-EUR base are computed inside the same ECB table, exactly as the original API did. Rates change once per business day at about 16:00 CET.

### What is different?

Two additive fields, source and attribution, appear at the top level; every original field is unchanged. HTTPS and any base currency work on the keyless tier. Date ranges are limited to a year per request.

### Can I get real-time market rates too?

Yes, on the same key. GET /api/v1/rates returns mid-market rates for 160+ currencies refreshed every 60 seconds; the compatible endpoints stay ECB-only so existing code keeps its semantics.

## Fix it now

Latest rates, dates and ranges work with no key. A free key adds real-time rates for 160+ currencies.

 [Get a free API key](https://allratestoday.com/register) [All migration guides](https://allratestoday.com/migrate/)

## Related

  [Fixer.io vs AllRatesTodayFull feature comparison](https://allratestoday.com/compare/fixer-alternative/) [Migration guidesEvery dead free API, one line each](https://allratestoday.com/migrate/) [Best exchange rate APIs 202610 providers compared](https://allratestoday.com/best/best-exchange-rate-api/) [Open APIKeyless official rates, attribution terms](https://allratestoday.com/open-api/)
