mcpField
F
finwire.pl - Polish financial data

finwire.pl - Polish financial data

Remote
finwire.plOther2Updated today

About finwire.pl - Polish financial data

finwire.pl is a free REST API for Polish financial, labor-market, and real-estate data, for application developers, researchers, and AI clients. Its JSON responses include sources, license details, and ready-to-use citations, and it also supports MCP.

Key features

  1. 01Interest rates, inflation, and FX data
  2. 02Housing transaction prices, rents, and supply
  3. 03Wages, unemployment, and credit-market data
  4. 04Macro indicators, calendar, and legal limits
  5. 05Responses include sources, licenses, and citations

Use cases

  1. 01Build mortgage and savings calculators
  2. 02Create research charts with source citations
  3. 03Analyze housing prices and rents by city
  4. 04Look up wages by occupation and regional unemployment

MCP support

It provides a keyless, read-only MCP server over Streamable HTTP, exposing financial, macroeconomic, housing, credit, and legal data to clients. Tools, resources, and prompts support dataset discovery, indicator queries, and report generation.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://public-api.finwire.pl/mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

Tools

Details

From the project README

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.

DataEndpointPrimary sourceFrequencyHistory
NBP policy rates (reference, lombard, deposit, rediscount, discount)/v1/series/interest-rate/{id}NBPon MPC decisionsup to 10 years
CPI inflation (YoY, MoM)/v1/series/cpiGUSmonthlysince 1982
NBP exchange rates (table A mid, table C bid/ask)/v1/series/fx/{code}NBPdaily (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_mmonthlysince 2001
Retail government bonds (OTS, ROR, DOR, TOS, COI, EDO, ROS, ROD)/v1/bondsMinistry of Financemonthly issuescurrent 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 dailylast 12 quarters per city
Housing prices per m² in 17 cities/v1/series/housing/{city}GUSquarterlylatest quarters
Housing supply: dwellings per 1000, completions, permits, migration/v1/housing/supply/{city}GUS BDL, Census 2021yearlysince 2010
Asking rents per city and district/v1/rent/{city}znajdznajem.pldaily snapshotcurrent + previous month
Rental yield (gross, net, payback)/v1/rent/yieldfinwire.pl (rents + RCN prices)dailycurrent
Wages: median, percentiles, 16 provinces/v1/wagesGUSon GUS releasecurrent
Wages by occupation: mean, median, deciles, gender gap - about 175 groups/v1/wages/occupations/{code}GUSevery 2 yearssurvey editions
Registered unemployment: Poland, 16 provinces, highest/lowest counties/v1/series/unemploymentGUS BDLmonthlysince 2011
Macroeconomic indicators: GDP, retail sales, output, CPI, unemployment, wages, FX, credit, limits/v1/macro/indicatorsGUS, NBP, Eurostat, Ministry of Financeon releasefull history per indicator
Consumer sentiment: BWUK, WWUK and 13 components/v1/macro/consumer-sentimentGUSmonthlysince 2010
Average wage, enterprise sector by province/v1/wages/enterpriseGUSmonthly2 years
Gold price (1 g, fineness 1000)/v1/series/goldNBPdaily (business days)since 2013
Maximum fuel prices: Pb95, Pb98, diesel/v1/fuel-pricesMinister of Energy (Monitor Polski)on announcementall announcements
Regulated electricity and gas prices: household tariffs G11, G12, G12w and W-1.1 to W-4/v1/energy/regulated-pricesPresident of URE (tariff decisions)on new decisiontariff years in force
Brokerage account fees: commissions on GPW, US and German stocks, account and FX fees/v1/brokersbrokers' official fee tables, compiled by finwire.plweekly checkcurrent fee tables
Legal changes radar: acts entering into force, bills in the Sejm/v1/legal-changesSejm ELI APIdailyupcoming and recent
Residents income by municipality and county/v1/income/municipalitiesMinistry of Finance (Rb-27S), GUS BDL, computed by finwire.plyearly, quarterly updatebudget years
Housing running costs in 20 cities/v1/housing/upkeep/{city}GUS BDLyearlylatest year
House prices and housing conditions in Europe/v1/housing/europeEurostatquarterly, yearlysince 2010 (conditions)
Bank lending survey/v1/credit-market/surveyNBPquarterlyeditions
Household loans and deposits/v1/credit-market/monetaryNBPmonthlyup to 400 months
Interest rates on new loans in Europe/v1/credit-market/ecb-ratesECB MIRmonthlysince 2014
Economic calendar: MPC (RPP) decisions, CPI, wages, GDP, unemployment/v1/calendarGUS, NBP, compiled by finwire.plcontinuousupcoming events
IKE / IKZE contribution limits/v1/legal-limitsMinistry of Family announcementsyearlycurrent year
Property tax upper limits/v1/legal-limits/local-taxMinister of Finance (Monitor Polski)yearlyannounced tax years
Deposit, savings, mortgage and cash loan rate aggregates/v1/market/*finwire.pl (aggregate of offers on the market)dailycurrent
Entry threshold: wage needed for a mortgage on a model flat, 17 cities/v1/index/entry-thresholdfinwire.pl (GUS prices, mortgage offers, GUS wage distribution)dailysince September 2026
Finwire Nowcast: forecasts of CPI and core inflation and the RPP decision/v1/macro/nowcastfinwire.pl model (inputs: GUS, NBP, EC Oil Bulletin)daily, frozen 3 working days before publicationbacktest since 2019 (CPI, core), 2012 (RPP)
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 - an MCP server (Streamable HTTP, no key) serves rates, FX, housing prices, rents, the credit market, legal limits, law changes and macro data to Claude, ChatGPT, Cursor, VS Code and other MCP clients; 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"])

MCP server for AI assistants

https://public-api.finwire.pl/mcp - Model Context Protocol over Streamable HTTP, stateless, no key, read-only. The same data, whitelist and licenses as /v1.

ClientHow to connect
Claude (claude.ai, Desktop)Settings - Connectors - Add custom connector - URL https://public-api.finwire.pl/mcp
Claude Codeclaude mcp add --transport http finwire https://public-api.finwire.pl/mcp
ChatGPTConnectors in developer mode - create a connector with the URL above, no authentication
Cursor~/.cursor/mcp.json: {"mcpServers": {"finwire": {"url": "https://public-api.finwire.pl/mcp"}}}
VS Code.vscode/mcp.json: {"servers": {"finwire": {"type": "http", "url": "https://public-api.finwire.pl/mcp"}}}

Tools (all read-only, each with outputSchema):

  • Macro: get_macro_snapshot, list_macro_indicators, get_macro_indicator, compare_macro_indicators, get_macro_changes, get_macro_calendar
  • Rates and prices: get_interest_rates (NBP), get_currency_rates (NBP FX, gold), get_fuel_prices, get_energy_prices (URE electricity and gas tariffs)
  • Forecasts: get_nowcast (Finwire Nowcast: CPI and core inflation, RPP decision probabilities, accuracy)
  • Housing: get_housing_prices (notarial deeds, cities and districts), get_rents (rents, rental yield), get_housing_costs
  • Credit, savings and investing: get_credit_market, get_bank_rates (aggregates only, no single offers; retail bonds), get_broker_fees (brokerage fee tables)
  • Law: get_legal_limits (IKE/IKZE, PIT, minimum wage, local tax limits), get_legal_changes
  • Regions and Europe: get_regional_data, get_europe_data
  • Any dataset: search_datasets, get_dataset

Every result carries the period of the data, the original source, license, a ready citation and url - the finwire.pl page with the full table, chart and calculator (with utm_source=mcp). Resources: macro://catalog, finwire://datasets, finwire://dataset/{id}; prompts: macro_briefing, explain_indicator, city_housing_report, personal_finance_limits.

Discovery: server card (application/mcp-server-card+json), /.well-known/ai-catalog.json, registry manifest server.json.


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>

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

Endpoints

Interest rates, inflation, FX, bond yields, unemployment
EndpointReturns
GET /v1/series/interest-rateCurrent table of NBP policy rates
GET /v1/series/interest-rate/{id}?days=365Daily history. id: stopa-referencyjna, stopa-lombardowa, stopa-depozytowa, stopa-redyskontowa, stopa-dyskontowa. days: 7-3650
GET /v1/series/cpi?type=monthly&limit=24CPI YoY and MoM. type: monthly or yearly, limit: 1-600
GET /v1/series/fxCurrent NBP FX table
GET /v1/series/fx/{code}?days=365FX history, e.g. EUR, USD, CHF, GBP
GET /v1/series/bond-yieldsLatest 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-01Monthly history for one geo
GET /v1/series/unemploymentRegistered unemployment rate: Poland and 16 provinces, latest month, YoY change in pp
GET /v1/series/unemployment/counties?limit=10Counties (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
EndpointReturns
GET /v1/housing/transactions17 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/yieldGross and net rental yield and payback period per city
GET /v1/housing/supplyDwellings 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
EndpointReturns
GET /v1/bondsRetail government bond rates by issue
GET /v1/wagesGUS wage median, percentiles and provincial averages
GET /v1/wages/occupationsGross 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-limitsIKE / IKZE annual contribution limits and related values
GET /v1/legal-limits/local-taxUpper limits of property tax rates (land, buildings, structures) per tax year, with the act and legal basis
GET /v1/macro/indicatorsHeadline indicators with the latest reading, change, sparkline and source
GET /v1/macro/indicators/{key}/history?from=2020-01Full history of one indicator
GET /v1/macro/consumer-sentimentGUS BWUK, WWUK and components with the history
GET /v1/wages/enterpriseGUS average wage in the enterprise sector, real change, by province
GET /v1/series/goldNBP gold price: latest, period changes, all-time high, 12-month average
GET /v1/series/gold/history?range=1yGold price history, range: 1m, 1y, 5y, max
GET /v1/fuel-pricesMaximum fuel prices: in force today, announced for tomorrow, history
GET /v1/energy/regulated-prices?date=2026-10-29Household electricity and gas tariffs approved by URE in force on a day (default today): energy and distribution rates, fees, cheaper-zone hours, decision and PDF per row; net amounts
GET /v1/brokersBroker fee tables: commissions by market, account and FX fees, IKE/IKZE, active promotions, fee table URL and weekly check status
GET /v1/legal-changes?days=90Acts entering into force soon and recently, open bills in the Sejm
GET /v1/legal-changes/process/{term}/{number}One bill: last stage, passage, published act
GET /v1/income/municipalities?year=2025Residents income per capita by municipality: rank, ratio to the national average, change
GET /v1/income/counties?year=2025The same by county
GET /v1/housing/upkeep/{city}Monthly running costs of a flat in a city (list: /v1/housing/upkeep)
GET /v1/housing/europeEurostat house price index: Poland vs EU vs euro area and country ranking
GET /v1/housing/europe/overburden and /overcrowdingHousing cost overburden and overcrowding rates by country
GET /v1/credit-market/survey?quarters=12NBP bank lending survey
GET /v1/credit-market/monetary?months=25NBP household loans, deposits and new loans
GET /v1/credit-market/ecb-rates?product=mortgage_total&period=2026-08ECB MIR rate on new loans by country
GET /v1/credit-market/ecb-rates/series?areas=PL,U2,DE&from=2018-01ECB MIR history for selected countries
GET /v1/calendar?limit=10Upcoming releases and decisions with date, Warsaw time, category, importance 1-10
GET /v1/market/deposit-rates?amount=10000&period=3Term deposit rates: median, percentiles, spread
GET /v1/market/savings-rates?amount=10000Savings account rates: median, percentiles
GET /v1/market/mortgage-rates?amount=400000&period=25Mortgage APRC (RRSO), margin, nominal rate: median, percentiles
GET /v1/market/cash-loan-rates?amount=20000&period=48Cash loan APRC and nominal rate: median, percentiles
finwire indicators
EndpointReturns
GET /v1/macro/nowcastFinwire Nowcast: next CPI and core inflation reading (point, 80% interval) and RPP decision probabilities, freeze date and status, settled history vs actual readings, backtest and live accuracy
GET /v1/index/entry-thresholdGross 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=singleDaily change points per city, household: single or couple
GET /v1/index/credit-stressMortgage installment for a 50 m² flat as % of the average net wage in 16 provinces, with KNF Recommendation S DSTI thresholds
GET /v1/indexAll 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/snapshotRates, 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 ([email protected]). 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.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.