Czech National Bank API
Free Czech National Bank API with no key: the official CZK exchange rate fixing for any date, plus monthly and non-traded currency lists. Tested example and live response.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Czech National Bank API?
The Czech National Bank exposes its official exchange rate fixing through a free JSON API at api.cnb.cz that needs no key or registration. One request returns the CZK rate for roughly 30 currencies on a given date, each with the quotation amount it applies to.
The CNB publishes one rate per currency per working day, fixed at 14:30 Prague time, and that fixed number is what Czech accounting and tax rules point at. This API is the machine-readable form of exactly that publication, so a value you pull from it is the same value an auditor would look up — which is a different proposition from a market rate scraped off an exchange.
The field that catches people is `amount`. Most currencies are quoted per single unit, but weak ones are quoted per 100, and a few per 1,000. The Hungarian forint rate is CZK per 100 HUF, not per 1 HUF. Divide `rate` by `amount` before you use it, every time, rather than special-casing the currencies you happen to have noticed.
Quick facts
- Base URL
https://api.cnb.cz/cnbapi- Authentication
- No API key, no registration, no headers required. The API is published by the CNB as open data.
- Rate limit
- No documented per-key limit. The fixing changes once per working day, so one request per day per date is enough.
- Pricing
- Free. The exchange rate fixing is an official public publication.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the Czech National Bank API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Official CZK fixing for 20 August 2026
GET https://api.cnb.cz/cnbapi/exrates/daily?date=2026-08-20&lang=EN
curl 'https://api.cnb.cz/cnbapi/exrates/daily?date=2026-08-20&lang=EN'const res = await fetch("https://api.cnb.cz/cnbapi/exrates/daily?date=2026-08-20&lang=EN");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.cnb.cz/cnbapi/exrates/daily?date=2026-08-20&lang=EN", timeout=20)
res.raise_for_status()
print(res.json()){
"rates": [
{
"validFor": "2026-08-20",
"order": 160,
"country": "Australia",
"currency": "dollar",
"amount": 1,
"currencyCode": "AUD",
"rate": 14.689
},
{
"validFor": "2026-08-20",
"order": 160,
"country": "Brazil",
"currency": "real",
"amount": 1,
"currencyCode": "BRL",
"rate": 3.981
},
{
"validFor": "2026-08-20",
"order": 160,
"country": "Canada",
"currency": "dollar",
"amount": 1,
"currencyCode": "CAD",
"rate": 15.011
},
{
"validFor": "2026-08-20",
"order": 160,
"country": "China",
"currency": "renminbi",
"amount": 1,
"currencyCode": "CNY",
"rate": 3.074
},
{
"validFor": "2026-08-20",
"order": 160,
"country": "Denmark",
"currency": "krone",
"amount": 1,
"currencyCode": "DKK",
"rate": 3.23
},
{
"validFor": "2026-08-20",
"order": 160,
"country": "EMU",
"currency": "euro",
"amount": 1,
"currencyCode": "EUR",
"rate": 24.15
},
{
"validFor": "2026-08-20",
"order": 160,
"country": "Hongkong",
"currency": "dollar",
"amount": 1,
"currencyCode": "HKD",
"rate": 2.635
},
{
"validFor": "2026-08-20",
"order": 160,
"country": "Hungary",
"currency": "forint",
"amount": 100,
"currencyCode": "HUF",
"rate": 6.613
},
{
"validFor": "2026-08-20",
"order": 160,
"country": "IcParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date | query | Optional | Date of the fixing in `YYYY-MM-DD`. Defaults to the latest published day. Weekends and Czech public holidays have no fixing and return the previous working day. 2026-08-20 |
lang | query | Optional | `EN` or `CZ`. Controls the `country` and `currency` labels only; codes and numbers are unaffected. EN |
Response fields
rates[].currencyCodestring- ISO 4217 code, for example `EUR` or `HUF`.
rates[].ratenumber- Koruna value of `amount` units of the currency. Not a per-unit rate on its own.
rates[].amountinteger- How many units of the foreign currency `rate` refers to — 1, 100 or 1000. Divide `rate` by this to get a per-unit rate.
rates[].validForstring- The date the fixing applies to, which may be earlier than the date you asked for if that day was a holiday.
rates[].country / currencystring- Human-readable labels in the language given by `lang`. Presentation only; never key logic off them.
rates[].orderinteger- Sequential number of the fixing bulletin within the year.
What you can build with the Czech National Bank API
- Convert invoice amounts to koruna using the rate a Czech tax authority would accept
- Backfill a historical CZK series for a reporting dashboard, one date at a time
- Show an official rate alongside a live market rate so users can see the gap
- Reconcile bank statements against the published fixing for the booking date
Common errors and how to fix them
400
The `date` parameter is not in `YYYY-MM-DD` form.
Fix: Send an ISO date with dashes; `20.08.2026` and `2026/08/20` are both rejected.
Empty `rates` array
The requested date is before the series starts or far in the future.
Fix: The daily fixing runs from 1991 onwards. Requests for future dates return nothing rather than an error.
Rate looks 100x too big
You used `rate` without dividing by `amount`.
Fix: HUF, JPY, KRW and several others are quoted per 100 or per 1000 units. Always divide.
Czech National Bank API — frequently asked questions
Is the Czech National Bank exchange rate API free?
Yes. api.cnb.cz requires no key, no account and no registration, and the exchange rate fixing is published as open data. There is no documented request quota.
What time is the CNB exchange rate fixed?
The CNB declares its rates on working days at 14:30 Prague time, and they apply to the current working day. There is no fixing on weekends or Czech public holidays.
Why is the Hungarian forint rate around 6 instead of 0.06?
Because the CNB quotes HUF per 100 units. The `amount` field on each rate tells you the quotation unit — divide `rate` by `amount` to get the per-unit value.
Can I get historical CZK rates from this API?
Yes, by passing an older `date`. The daily fixing series goes back to 1991, and there are separate endpoints for monthly averages and for currencies the CNB no longer quotes daily.
Tools that pair with this API
VAT Calculator
Add VAT to a net price or extract VAT from a gross amount. Preset 5%, 10%, 20% and 23% rates plus custom, showing net, VAT and gross values instantly.
Percentage Change Calculator
Work out the percentage increase or decrease between an old and a new value. See the absolute change and whether it went up or down, instantly and privately.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Czech National Bank is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.