Przejdź do treści
LIVE
EUR/PLN: 4,2341 ▲
USD/PLN: 3,6319 ▼
GBP/PLN: 4,8924 ▲
CHF/PLN: 4,6378 ▼
poniedziałek, 1 czerwca 2026

API kursów walut NBP

Publiczne API REST i embeddable widget z aktualnymi kursami walut Narodowego Banku Polskiego. Dane Tabela A (kursy średnie 32 walut) + Tabela C (kursy kupna/sprzedaży 13 walut). Aktualizacja codziennie po publikacji NBP.

Przegląd

Cztery endpointy GET zwracają JSON ze wspólną kopertą {data, meta}. Brak autoryzacji — API publiczne, read-only. CORS otwarty (Access-Control-Allow-Origin: *). Limit 60 zapytań/min/IP (HTTP 429 + Retry-After).

  • Źródło danych: api.nbp.pl (oficjalne API NBP)
  • Aktualizacja: Tabela A ~12:30, Tabela C ~08:30 (Europe/Warsaw, dni robocze)
  • Format: JSON UTF-8
  • Cache: Cache-Control: public, max-age=300
  • Licencja: dane publiczne NBP; przy użyciu wymagane podanie źródła (NBP + bankowynet.pl)

Endpointy REST

Aktualne kursy

GET https://bankowynet.pl/wp-json/bn-currency/v1/rates

Zwraca najnowsze snapshoty Tabela A (32 waluty, kurs średni) i Tabela C (13 walut, bid/ask).

Odpowiedź

{
  "data": {
    "effective_date_a": "2026-05-21",
    "effective_date_c": "2026-05-21",
    "no_a": "097/A/NBP/2026",
    "no_c": "097/C/NBP/2026",
    "rates_a": [{"code":"AUD","currency":"dolar australijski","mid":2.6052}, ...],
    "rates_c": [{"code":"AUD","currency":"dolar australijski","bid":...,"ask":...}, ...]
  },
  "meta": { "source": "NBP (Narodowy Bank Polski)", "license": "...", "last_updated": "2026-05-21", "docs": "..." }
}

Pojedyncza waluta — aktualny kurs + 30 dni

GET https://bankowynet.pl/wp-json/bn-currency/v1/currency/{kod}

Parametr {kod} — ISO 4217 (EUR, USD, GBP, ...). Zwraca nazwę polską, link do strony, kurs średni z dziś, oraz historię z ostatnich 30 notowań.

Przykład

curl https://bankowynet.pl/wp-json/bn-currency/v1/currency/eur

Historia waluty — dowolny zakres

GET https://bankowynet.pl/wp-json/bn-currency/v1/history/{kod}?from=YYYY-MM-DD&to=YYYY-MM-DD

Maksymalny zakres: 1830 dni (~5 lat). Daty opcjonalne — bez parametrów zwraca pełną dostępną historię.

Przykład

curl "https://bankowynet.pl/wp-json/bn-currency/v1/history/eur?from=2026-01-01&to=2026-05-21"

Archiwum — pełny snapshot dnia

GET https://bankowynet.pl/wp-json/bn-currency/v1/archive?date=YYYY-MM-DD

Zwraca pełen snapshot Tabela A + Tabela C dla danego dnia. 404 dla weekendów/świąt (brak publikacji NBP).

Przykład

curl "https://bankowynet.pl/wp-json/bn-currency/v1/archive?date=2026-04-21"

Limit zapytań

60 zapytań na minutę z jednego IP (sliding window per 60s). Każda odpowiedź zawiera nagłówki:

  • X-Bn-Currency-Limit: 60 — łączny limit w oknie
  • X-Bn-Currency-Remaining: N — pozostała pula
  • X-Bn-Currency-Reset: N — sekund do resetu okna
  • Retry-After: N — dodawany przy 429

Przekroczenie → HTTP 429 z polskim komunikatem. Klienci za Cloudflare są identyfikowani po CF-Connecting-IP.

Widget JavaScript (każda strona)

Embeddable widget do umieszczenia kursów wybranych walut na dowolnej stronie HTML. Vanilla JS (~4KB), inline styles, brak zależności.

Snippet

<div data-bn-currency-widget="EUR,USD,GBP,CHF"></div>
<script src="https://bankowynet.pl/widget/kursy" async></script>

Atrybut data-bn-currency-widget — lista kodów ISO oddzielonych przecinkiem. Pusty atrybut → fallback EUR/USD/GBP/CHF.

Wymagania

  • Backlink "Powered by Bankowynet.pl" jest częścią widgetu i nie może być usunięty
  • Dozwolone modyfikacje CSS są tylko zewnętrzne (kontener, margines) — nie nadpisuj inline-styles widgetu
  • Aktualizacja danych: cache 5 minut (max-age=300)

Wtyczka WordPress (shortcode)

Dla stron WordPress dostępna jest gotowa wtyczka z shortcodem [bn_currency_widget]. Server-side render (brak JS na frontendzie), Gutenberg block, cache 5 min w transient.

⬇ Pobierz bn-currency-widget-1.0.0.zip (5 KB)

Instalacja

  1. Pobierz ZIP powyżej
  2. WordPress admin → Wtyczki → Dodaj nową → Wyślij wtyczkę → wybierz ZIP
  3. Aktywuj wtyczkę
  4. Wstaw shortcode w treść posta/strony

Użycie

[bn_currency_widget]

[bn_currency_widget codes="EUR,USD,GBP,CHF,NOK" size="large" title="Kursy NBP"]

Parametry shortcode

  • codes — lista kodów ISO (do 12, domyślnie EUR,USD,GBP,CHF)
  • size — small | medium | large (domyślnie medium)
  • title — nagłówek widgetu (pusty = bez nagłówka)
  • link — yes | no (domyślnie yes; "no" wymaga akceptacji TOS)

Wymagania: PHP 7.4+, WordPress 5.0+.

Changelog

v1.1.0 — 2026-06-01
Dodane endpointy /rates, /currency/{kod}, /history/{kod}. Wspólna koperta {data, meta}. CORS, rate limit 60/min, widget endpoint /widget/kursy.
v1.0.0 — 2026-05-21
Pierwszy release. Endpoint /archive?date=. Codzienny cron NBP Tabela A + C.