Skip to content
finwire-plPublic

About

Free Polish financial data API: NBP rates, WIBOR, POLSTR, CPI, FX, bond yields, RCN flat transaction prices, rents, economic calendar. No key, OpenAPI, CC BY 4.0.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

finwire API - free Polish financial data API (NBP, GUS, RCN)

finwire API is a free, open REST API with financial, labour market and real estate data for Poland: NBP policy rates, CPI inflation, NBP exchange rates, 10-year government bond yields, flat transaction prices from notarial deeds, rents, housing supply, wages by occupation, unemployment by province and county, and an economic calendar. No API key, JSON over HTTPS, OpenAPI 3 specification, every response with its primary source and a ready-to-paste citation. Built and maintained by finwire.pl.

Docs OpenAPI Data license

curl "https://public-api.finwire.pl/v1/series/interest-rate/stopa-referencyjna?days=90"
  • Base URL: https://public-api.finwire.pl
  • Auth: none - no key, no sign-up, GET only, CORS enabled (works from the browser)
  • Format: JSON, UTF-8, { data, meta } envelope
  • Specification: openapi.json · interactive reference · llms.txt · dataset pages
  • Data license: CC BY 4.0 for finwire indicators and aggregates; public data requires attribution to the original source; the license of each dataset is in its license field
  • WIBOR and POLSTR: not available. They are GPW Benchmark data; redistribution requires a Market Data License Agreement with GPW (gpwbenchmark.pl)
  • Changes: CHANGELOG.md

Po polsku: darmowe API z polskimi danymi finansowymi - stopy NBP, inflacja CPI (GUS), kursy walut NBP, rentowności obligacji, ceny transakcyjne mieszkań z Rejestru Cen Nieruchomości, czynsze i rentowność najmu, podaż mieszkań, wynagrodzenia GUS (także według zawodów), bezrobocie w województwach i powiatach, próg wejścia (ile trzeba zarabiać na kredyt na mieszkanie), limity podatku od nieruchomości, kalendarz odczytów makro. Bez klucza i rejestracji. Opis po polsku: finwire.pl/otwarte-api.


Contents


Data coverage

Every dataset comes from its primary source and is served in one format, with that source in meta.

Each dataset name links to its documentation page with fields, source and citation.

Data Endpoint Primary source Frequency History
NBP policy rates (reference, lombard, deposit, rediscount, discount) /v1/series/interest-rate/{id} NBP on MPC decisions up to 10 years
CPI inflation (YoY, MoM) /v1/series/cpi GUS monthly since 1982
NBP exchange rates (table A mid, table C bid/ask) /v1/series/fx/{code} NBP daily (business days) up to 10 years
10-year government bond yields: PL, DE, euro area, EU + spreads /v1/series/bond-yields/{geo} Eurostat irt_lt_mcby_m monthly since 2001
Retail government bonds (OTS, ROR, DOR, TOS, COI, EDO, ROS, ROD) /v1/bonds Ministry of Finance monthly issues current issues
Flat transaction prices per m² (median, quartiles, primary/secondary) - 17 cities and their districts /v1/housing/transactions/{city} Real Estate Price Register (RCN, GUGiK + city registers) quarterly, ingested daily last 12 quarters per city
Housing prices per m² in 17 cities /v1/series/housing/{city} GUS quarterly latest quarters
Housing supply: dwellings per 1000, completions, permits, migration /v1/housing/supply/{city} GUS BDL, Census 2021 yearly since 2010
Asking rents per city and district /v1/rent/{city} znajdznajem.pl daily snapshot current + previous month
Rental yield (gross, net, payback) /v1/rent/yield finwire.pl (rents + RCN prices) daily current
Wages: median, percentiles, 16 provinces /v1/wages GUS on GUS release current
Wages by occupation: mean, median, deciles, gender gap - about 175 groups /v1/wages/occupations/{code} GUS every 2 years survey editions
Registered unemployment: Poland, 16 provinces, highest/lowest counties /v1/series/unemployment GUS BDL monthly since 2011
Economic calendar: MPC (RPP) decisions, CPI, wages, GDP, unemployment /v1/calendar GUS, NBP, compiled by finwire.pl continuous upcoming events
IKE / IKZE contribution limits /v1/legal-limits Ministry of Family announcements yearly current year
Property tax upper limits /v1/legal-limits/local-tax Minister of Finance (Monitor Polski) yearly announced tax years
Deposit, savings, mortgage and cash loan rate aggregates /v1/market/* finwire.pl (aggregate of offers on the market) daily current
Entry threshold: wage needed for a mortgage on a model flat, 17 cities /v1/index/entry-threshold finwire.pl (GUS prices, mortgage offers, GUS wage distribution) daily since September 2026
finwire indicators: credit stress map, barometers /v1/index/* finwire.pl (computed from the above) daily (credit stress), monthly (barometers) barometers since 2015

Aggregates never expose single offers, deeds or listings - only medians, percentiles and counts.


Use cases

  • Mortgage and savings calculators - NBP reference rate and market median mortgage rates in one call (/v1/snapshot).
  • Newsroom and research charts - CPI since 1982, unemployment since 2011, bond yields since 2001, with a ready citation in meta.
  • Real estate analysis - transaction prices per district, rents, rental yield and housing supply for 17 cities.
  • Labour market and HR - wages by occupation with deciles and the gender pay gap, unemployment by county.
  • Personal finance apps - IKE/IKZE limits, retail bond rates, deposit and savings rate medians.
  • AI assistants and agents - llms.txt and the OpenAPI spec describe every dataset in machine-readable form.

Quick start

curl

# Current table of NBP policy rates
curl "https://public-api.finwire.pl/v1/series/interest-rate"

# Median flat transaction price per m² by district in Kraków
curl "https://public-api.finwire.pl/v1/housing/transactions/krakow"

# Next 10 macro releases and MPC decisions
curl "https://public-api.finwire.pl/v1/calendar?limit=10"

JavaScript / TypeScript (browser or Node 18+)

const res = await fetch('https://public-api.finwire.pl/v1/series/interest-rate/stopa-referencyjna?days=365');
const { data, meta } = await res.json();
console.log(data.points.at(-1), meta.citation);

Python

import requests

r = requests.get("https://public-api.finwire.pl/v1/series/cpi", params={"type": "monthly", "limit": 24})
payload = r.json()
for row in payload["data"]["entries"]:
    print(row["period"], row["yoy"])
print(payload["meta"]["citation"])

Response format and citation

Every response uses the same envelope. Values below are illustrative - call the endpoint for current data.

{
  "data": { "...": "dataset-specific payload" },
  "meta": {
    "datasetId": "interest-rates",
    "source": "NBP, GPW Benchmark",
    "sourceUrl": "https://nbp.pl",
    "license": "Public NBP / GPW Benchmark data - attribution required.",
    "asOf": "2026-10-14",
    "fetchedAt": "2026-10-15T08:00:00.000Z",
    "citation": "Source: finwire.pl (NBP, GPW Benchmark), https://public-api.finwire.pl/datasets/interest-rates",
    "docsUrl": "https://public-api.finwire.pl/datasets/interest-rates"
  }
}
  • meta.asOf - the date of the data at the source (not the time of your request).
  • meta.citation - a ready-to-use attribution string with a link. Use it as is.

How to cite: Source: finwire.pl (<primary source>), https://public-api.finwire.pl/datasets/<dataset-id>

Code Meaning
200 OK
404 Unknown dataset, indicator, city or geo code
429 Rate limit exceeded (see Retry-After)
503 Primary source temporarily unavailable

Endpoints

Interest rates, inflation, FX, bond yields, unemployment

Endpoint Returns
GET /v1/series/interest-rate Current table of NBP policy rates
GET /v1/series/interest-rate/{id}?days=365 Daily history. id: stopa-referencyjna, stopa-lombardowa, stopa-depozytowa, stopa-redyskontowa, stopa-dyskontowa. days: 7-3650
GET /v1/series/cpi?type=monthly&limit=24 CPI YoY and MoM. type: monthly or yearly, limit: 1-600
GET /v1/series/fx Current NBP FX table
GET /v1/series/fx/{code}?days=365 FX history, e.g. EUR, USD, CHF, GBP
GET /v1/series/bond-yields Latest 10-year yields for PL, DE, EA, EU27_2020, PL-DE and PL-EA spreads in bps
GET /v1/series/bond-yields/{geo}?since=2015-01 Monthly history for one geo
GET /v1/series/unemployment Registered unemployment rate: Poland and 16 provinces, latest month, YoY change in pp
GET /v1/series/unemployment/counties?limit=10 Counties (powiaty) with the lowest and highest rate, limit 1-50
GET /v1/series/unemployment/history?unit={unitId} Monthly history since 2011 for Poland (default) or a province (unitId from regions[])

Real estate

Endpoint Returns
GET /v1/housing/transactions 17 cities: median, p25, p75 price per m² from notarial deeds, primary vs secondary market, transaction count, YoY, quarterly trend
GET /v1/housing/transactions/{city} Districts of a city: 12-month median price per m², transaction count, YoY, difference vs city median
GET /v1/series/housing and /{city} GUS housing prices per m² for 17 cities, latest quarters, nominal and real YoY
GET /v1/rent and /{city} Asking rents: median, mean, per m², month-over-month change, districts
GET /v1/rent/yield Gross and net rental yield and payback period per city
GET /v1/housing/supply Dwellings per 1000 residents, stock, completions, permits, floor area per person, population and migration: Poland, 16 provinces, 17 cities, yearly since 2010, Census 2021, GUS population forecast
GET /v1/housing/supply/{city} One city vs its province and Poland, rank among 17 cities, yearly history

provisionalQuarters in transaction data lists quarters the registry is still filling in - treat them as preliminary.

Wages, legal limits, calendar, market aggregates

Endpoint Returns
GET /v1/bonds Retail government bond rates by issue
GET /v1/wages GUS wage median, percentiles and provincial averages
GET /v1/wages/occupations Gross wages for about 175 occupation groups: mean, median, deciles D1-D9, men vs women, public vs private, gender pay gap
GET /v1/wages/occupations/{code} One occupation group with its parent groups and survey edition history
GET /v1/legal-limits IKE / IKZE annual contribution limits and related values
GET /v1/legal-limits/local-tax Upper limits of property tax rates (land, buildings, structures) per tax year, with the act and legal basis
GET /v1/calendar?limit=10 Upcoming releases and decisions with date, Warsaw time, category, importance 1-10
GET /v1/market/deposit-rates?amount=10000&period=3 Term deposit rates: median, percentiles, spread
GET /v1/market/savings-rates?amount=10000 Savings account rates: median, percentiles
GET /v1/market/mortgage-rates?amount=400000&period=25 Mortgage APRC (RRSO), margin, nominal rate: median, percentiles
GET /v1/market/cash-loan-rates?amount=20000&period=48 Cash loan APRC and nominal rate: median, percentiles

finwire indicators

Endpoint Returns
GET /v1/index/entry-threshold Gross monthly wage per person needed for a mortgage on a model flat (parameters in params) within KNF DSTI limits in 17 cities, the installment, and the share of employees earning at least that
GET /v1/index/entry-threshold/history?household=single Daily change points per city, household: single or couple
GET /v1/index/credit-stress Mortgage installment for a 50 m² flat as % of the average net wage in 16 provinces, with KNF Recommendation S DSTI thresholds
GET /v1/index All barometers with value, position against history and monthly change
GET /v1/index/{slug} One barometer with monthly series, methodology and best/worst month since 2015. slug: real-deposit-rate, housing-affordability, credit-cost, borrowing-power, purchasing-power
GET /v1/snapshot Rates, inflation, FX, credit stress and barometers in one call

Full field-level schemas: openapi.json.


FAQ

Does the API return WIBOR or POLSTR?

No. WIBOR and POLSTR are administered by GPW Benchmark, and redistributing them requires a Market Data License Agreement with GPW (dystrybucja.informacji@gpw.pl). The API returns NBP policy rates: current values at /v1/series/interest-rate and daily history at /v1/series/interest-rate/{id}.

Where can I get Polish CPI inflation data as JSON?

/v1/series/cpi returns GUS consumer price inflation year-over-year and month-over-month, monthly since 1982 (type=monthly) or annually (type=yearly), with the GUS source in meta.

Is there an API for real estate transaction prices in Poland?

/v1/housing/transactions returns median, quartile and per-district flat prices per m² computed from notarial deeds in the Polish Real Estate Price Register (Rejestr Cen Nieruchomości) for 17 cities, with a quarterly trend for the last 12 quarters and a 12-month median per district. Single deeds are never exposed.

How much do I need to earn to buy a flat in a Polish city?

/v1/index/entry-threshold returns, for 17 Polish cities, the gross monthly wage one person needs to get a mortgage on a model 50 m² secondary-market flat (20% down payment, 25 years) within the KNF DSTI limits, the monthly installment and the share of employees who earn at least that. It is recomputed every night from GUS prices, current mortgage offers and the GUS wage distribution; /history shows how it changed.

Where can I get unemployment data by county (powiat)?

/v1/series/unemployment returns the GUS registered unemployment rate for Poland and the 16 provinces, /v1/series/unemployment/counties the counties with the lowest and highest rate, and /v1/series/unemployment/history the monthly series since 2011, all from the GUS Local Data Bank (BDL).

Is there an API for salaries by occupation in Poland?

/v1/wages/occupations returns mean, median and deciles of gross monthly wages for about 175 occupation groups from the GUS survey of wages by occupation (published every two years), split by gender and by public vs private sector, with the gender pay gap.

Do I need an API key or an account?

No key, token or sign-up is required. All endpoints are public, read-only (GET) and CORS-enabled, so they can be called directly from a browser.

Can I use the data commercially?

finwire indicators and aggregates are licensed under CC BY 4.0, which allows commercial use with attribution. Public data (NBP, GUS, Ministry of Finance, Eurostat, GPW Benchmark) requires attribution to the original source; meta.license states the terms per dataset.

How fresh is the data?

Each dataset is refreshed automatically from its primary source on the source's own schedule (daily for FX and rents, monthly for CPI and bond yields, quarterly for housing prices). meta.asOf always shows the date of the data at the source.

What is the difference between WIBOR and POLSTR?

WIBOR and POLSTR are both Polish interest rate benchmarks administered by GPW Benchmark. In the ongoing Polish benchmark reform supervised by KNF, POLSTR is the designated successor to WIBOR. Neither is available in this API (license required from GPW Benchmark).

Does the API give investment advice?

No. The data is informational. finwire.pl is not a licensed investment adviser and does not issue recommendations within the meaning of the EU Market Abuse Regulation (MAR).


Glossary

  • NBP reference rate - the main policy rate of Narodowy Bank Polski, set by the Monetary Policy Council (RPP).
  • WIBOR (Warsaw Interbank Offered Rate) - Polish interbank benchmark used for floating-rate loans.
  • POLSTR (Polish Short Term Rate) - GPW Benchmark interest rate index, WIBOR's successor in the benchmark reform.
  • CPI - consumer price index published monthly by GUS (Statistics Poland).
  • RCN (Rejestr Cen Nieruchomości) - Real Estate Price Register with prices from notarial deeds.
  • RRSO - Polish APRC (annual percentage rate of charge), the total cost of a loan.
  • DSTI - debt service to income ratio, the share of income spent on loan installments.
  • bps - basis points, 1 bps = 0.01 percentage point.
  • BDL (Bank Danych Lokalnych) - GUS Local Data Bank with statistics for provinces, counties and municipalities.
  • TERYT - official Polish territorial code of provinces, counties and municipalities.
  • Entry threshold (próg wejścia) - finwire indicator: the wage needed to qualify for a mortgage on a model flat.
  • Property tax upper limit - the maximum local property tax rate set yearly by the Minister of Finance; municipalities choose their rate up to it.

OpenAPI specification and TypeScript types

This repository ships the OpenAPI specification and TypeScript types generated from it. Both are regenerated from the live API on every release.

import type { paths } from './types/api';

type TransactionPrices =
  paths['/v1/housing/transactions/{city}']['get']['responses']['200']['content']['application/json'];

Rate limits

  • 120 requests per minute per IP, 30 per minute for /v1/snapshot.
  • Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset; 429 comes with Retry-After.
  • Responses are cached at the edge (5 minutes to 1 hour depending on the dataset), so typical use never hits the limit.

Usage policy and disclaimer

  • Free and open, GET only. Please cache responses on your side.
  • Attribute the data with the meta.citation string or Source: finwire.pl, https://public-api.finwire.pl.
  • Single bank offers, notarial deeds and rental listings are never exposed - only statistics.
  • Informational data only, not investment advice (see FAQ).

Built by finwire.pl - Polish personal finance tools: mortgage decision tool, flat prices by city, deposit rankings.

About

Free Polish financial data API: NBP rates, WIBOR, POLSTR, CPI, FX, bond yields, RCN flat transaction prices, rents, economic calendar. No key, OpenAPI, CC BY 4.0.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages