National Bank of Poland API
Free National Bank of Poland API with no key: official zloty exchange rates, historical series and daily gold prices from the Polish central bank. Tested.
Endpoint tested and returned HTTP 200 on 2026-08-20
What is the National Bank of Poland API?
The National Bank of Poland API is a free, key-free official central bank API providing zloty exchange rates against major and minor currencies, full historical series, and daily gold prices.
These are official central bank reference rates, which makes them the figures acceptable for Polish accounting and tax purposes — a meaningful distinction from commercial FX APIs that use market mid-rates.
Rates are published in tables: table A covers major currencies at mid-rate, table B covers less common currencies, and table C gives separate buy and sell rates. Choosing the wrong table is the usual source of confusion.
Quick facts
- Base URL
https://api.nbp.pl/api- Authentication
- No API key required.
- Rate limit
- No published hard limit; fair use expected.
- Pricing
- Free official central bank data.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the National Bank of Poland API
Every request below was executed against the live API on 2026-08-20, and the response shown is the real body it returned — not an illustration.
1. Fetch official zloty exchange rates
GET https://api.nbp.pl/api/exchangerates/tables/A?format=json
curl 'https://api.nbp.pl/api/exchangerates/tables/A?format=json'const res = await fetch("https://api.nbp.pl/api/exchangerates/tables/A?format=json");
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.nbp.pl/api/exchangerates/tables/A?format=json", timeout=20)
res.raise_for_status()
print(res.json())[
{
"table": "A",
"no": "160/A/NBP/2026",
"effectiveDate": "2026-08-19",
"rates": [
{
"currency": "bat (Tajlandia)",
"code": "THB",
"mid": 0.1128
},
{
"currency": "dolar amerykański",
"code": "USD",
"mid": 3.7306
},
{
"currency": "dolar australijski",
"code": "AUD",
"mid": 2.6403
},
{
"currency": "dolar Hongkongu",
"code": "HKD",
"mid": 0.4757
},
{
"currency": "dolar kanadyjski",
"code": "CAD",
"mid": 2.6882
},
{
"currency": "dolar nowozelandzki",
"code": "NZD",
"mid": 2.1922
},
{
"currency": "dolar singapurski",
"code": "SGD",
"mid": 2.9223
},
{
"currency": "euro",
"code": "EUR",
"mid": 4.3267
},
{
"currency": "forint (Węgry)",
"code": "HUF",
"mid": 0.011851
},
{
"currency": "frank szwajcarski",
"code": "CHF",
"mid": 4.6007
},
{
"currency": "funt szterling",
"code": "GBP",
"mid": 5.056
},
{
"currency": "hrywna (Ukraina)",
"code": "UAH",
"mid": 0.0834
},
{
"currency": "jen (Japonia)",
"code": "JPY",
"mid": 0.023438
},
{
"currency": "korona czeska",
"code": "CZK",
"mid": 0.179
},
{
"currency": "korona duńska",
"code": "DKK",
"mid": 0Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
exchangerates/tables/<table> | path | Required | Table A, B or C. exchangerates/tables/A |
format | string | Required | json — the default is XML. json |
exchangerates/rates/<table>/<code> | path | Optional | One currency's rate. rates/A/EUR |
last/<n> | path | Optional | The last n published rates. last/10 |
cenyzlota | path | Optional | Daily gold prices. cenyzlota |
Response fields
tablestring- Which rate table this is — A, B or C.
nostring- Publication number, e.g. 160/A/NBP/2026.
effectiveDatestring- Date the rates take effect.
ratesarray- Currency entries.
rates[].currency / codestring- Currency name in Polish and its ISO code.
rates[].midnumber- Mid rate in zloty, on tables A and B.
rates[].bid / asknumber- Buy and sell rates, on table C only.
What you can build with the National Bank of Poland API
- Convert to zloty using officially recognised rates
- Support Polish accounting and tax reporting
- Chart historical zloty exchange rates
- Track official gold prices in Poland
Common errors and how to fix them
XML instead of JSON
XML is the default format.
Fix: Always append ?format=json.
Currency not in table A
Table A covers major currencies only.
Fix: Less common currencies are in table B; buy/sell spreads are in table C.
404 for a weekend date
Rates publish on working days.
Fix: The API returns 404 rather than the previous day — handle it and step back a day.
National Bank of Poland API — frequently asked questions
Is the NBP API free?
Yes, completely free with no API key. It is the Polish central bank's official data service.
What is the difference between tables A, B and C?
Table A has mid rates for major currencies, table B covers less common currencies, and table C gives separate bid and ask rates. Pick based on whether you need a mid rate or a spread.
Why do I get XML?
XML is the default. Append ?format=json to every request.
Why does a weekend date return 404?
Rates are published on working days only, and NBP returns 404 rather than falling back. Step back to the previous working day in your code.
Tools that pair with this API
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.
Percentage Calculator
Calculate what X% of a number is, what percent one number is of another, and percentage increase or decrease between two values — instantly and free.
Unit Converter
Convert between units of length, weight, temperature, area, volume, speed, time and data storage instantly, with a swap button and common conversion tables.
National Bank of Poland is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-20; always check the official documentation before relying on this API in production, as terms and limits can change.