BYTETOOLS

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.

No API key requiredHTTPSFree tier

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
curl 'https://api.cnb.cz/cnbapi/exrates/daily?date=2026-08-20&lang=EN'
JavaScript (fetch)
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);
Python (requests)
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())
Response — HTTP 200 (truncated)
{
  "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": "Ic

Parameters

ParameterTypeRequiredDescription
datequeryOptionalDate 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
langqueryOptional`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

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.