Osella

API v1

Warsaw property data, by address, in one call

Likely sale prices from notarial deeds, the latest sales, schools with exam results, door-to-door commute times, noise, flood and zoning: the data behind Osella reports, as JSON for your CRM, listing site or model.

curl -G "https://osela.app/api/v1/price" \
  --data-urlencode "address=Hoża 50" \
  --data-urlencode "area_m2=52" \
  -H "X-API-Key: $HD_KEY"

Authentication and responses

Send your key in the X-API-Key header of every call. Keys are created and revoked in your account; we store only a hash of each, so a lost key is replaced, never recovered.

  • Base URL https://osela.app/api/v1
  • Every response { data, meta } data is the answer; meta gives the data dates, the model version and the sources to credit.
  • Headers X-Quota-Limit, X-Quota-Remaining, X-Quota-Period, X-Data-As-Of, X-Model-Version

Prices are a statistical market analysis of notarial deeds, not a valuation (operat szacunkowy), which only a licensed property valuer may prepare.

Limits

The API is free for everyone signed in to Osella. The limits are per account, across all of its keys.

  • 50 successful calls a day. The day runs on Warsaw time: the calls come back at midnight Europe/Warsaw.
  • At most one call a second.
  • Keys are made in your account page, at most 2 at a time. A revoked key stops working at once.
  • Only an answer with data counts (status 2xx). Refused and failed calls (401, 403, 404, 422, 429, errors) don't count, nor do /usage and /sources; /usage still keeps to one call a second.
  • Past a limit the API answers 429 with Retry-After: the seconds to midnight in Warsaw when the day's calls are used up, 1 when the call came too soon.
  • Every successful answer to a call with a key carries X-Quota-Limit (50), X-Quota-Remaining (the calls left today) and X-Quota-Period (day). GET /v1/usage gives the same with the time the day turns.
  • Places are Warsaw only: an address outside Warsaw's address register, or a point outside the city, answers 404.

Errors

401No key was sentSend your API key in the X-API-Key header
401The key is not one of ours, or it was revokedUnknown or revoked API key
401The key belongs to no accountThis key belongs to no account; make a new key in your account page
401An old key, made before the limits per accountThis key was made before the API's per-account limits and no longer works; make a new key in your account page
403The account the key belongs to is blockedThis key's account is blocked, so its API keys do not work
404No such address in Warsaw (the response suggests close ones)No such address in Warsaw's address register
404lat and lon point outside WarsawThat point is outside Warsaw
422A parameter is missing or out of range, or there are no homes at the point
429The day's calls are used up: Retry-After gives the seconds to midnight in Warsaw, X-Quota-Remaining is 0This account's 50 API calls for today are used up; they come back at midnight Europe/Warsaw
429Less than a second after the account's last call: Retry-After is 1This account makes at most one API call a second
{
  "detail": {
    "message": "No such address in Warsaw's address register",
    "suggestions": [
      "Hoża 88",
      "Hoża 86",
      "Hoża 76/78"
    ]
  }
}

Sources and attribution

When you show the data, credit the sources listed in meta.attribution. OpenStreetMap-derived data is served only as scores and minutes, never as map features.

  • Rejestr Cen Nieruchomości, m.st. Warszawa deeds, price estimate, comparables
  • PRG address points, GUGiK address resolution
  • © OpenStreetMap contributors (ODbL 1.0) walking network and amenities, served as scores and minutes only
  • ZTM Warszawa, Koleje Mazowieckie and WKD GTFS, via mkuran.pl public transport times
  • CKE exam results, RSPO school register schools
  • m.st. Warszawa: strategic noise map 2022, school catchments, local zoning plans (MPZP) noise, schools, zoning
  • ISOK flood hazard maps (Wody Polskie) flood risk
  • Urząd m.st. Warszawy, city map portal (mapa.um.warszawa.pl): building permits, heritage register, paid parking and Clean Transport zones planning
  • Rejestr Żłobków i Klubów Dziecięcych, MRPiPS (CC0 1.0) nurseries
  • Komenda Stołeczna Policji, crime by district of Warsaw safety
  • GUS Bank Danych Lokalnych (CC BY 4.0) residents per district (safety rates)
  • Źródło danych: GIOŚ – EKOINFONET; modelling IOŚ-PIB (annual air-quality assessment), processed air

Places

GET/v1/geocode

Find official Warsaw addresses (and streets) for a text

ParameterTypeDescription
qrequiredstringWhat was typed: a street, with or without a number
limitintegerdefault 8How many results (1–20)
curl -G "https://osela.app/api/v1/geocode" \
  --data-urlencode "q=Hoża 50" \
  -H "X-API-Key: $HD_KEY"
Sample response
{
  "data": [
    {
      "kind": "address",
      "label": "Hoża 50",
      "official": "Hoża 50",
      "district": "Śródmieście",
      "postcode": "00-682",
      "lat": 52.2263,
      "lon": 21.0129,
      "addr_key": "ulica hoża|50",
      "street_official": "ulica Hoża",
      "number": "50",
      "match": "exact"
    }
  ],
  "meta": {
    "…": "as in every response: api_version, data_as_of, model_version, attribution, took_ms"
  }
}

Prices and deeds

GET/v1/price

Likely sale price with its ranges, comparable sales and the building's deeds

ParameterTypeDescription
addressstringA Warsaw address, matched against the official address register (PRG)
latnumberLatitude, instead of an address (with lon)
lonnumberLongitude, instead of an address (with lat)
area_m2numberdefault 50Floor area in m²
roomsintegerNumber of rooms
floorintegerFloor (0 = ground floor, −1 = basement)
marketsecondary | primarydefault secondarysecondary (resale) or primary (new build)
asking_pricenumberAn asking price in zł, to read against the deeds

Give an address or lat and lon. An address not in the register returns 404 with the closest ones.

curl -G "https://osela.app/api/v1/price" \
  --data-urlencode "address=Hoża 50" \
  --data-urlencode "area_m2=52" \
  --data-urlencode "rooms=2" \
  -H "X-API-Key: $HD_KEY"
Sample response
{
  "data": {
    "place": {
      "lat": 52.2263,
      "lon": 21.0129,
      "label": "Hoża 50",
      "addr_key": "ulica hoża|50"
    },
    "price": {
      "ppm2": 35135,
      "ppm2_low": 28110,
      "ppm2_high": 39594,
      "ppm2_low50": 31578,
      "ppm2_high50": 37175,
      "total": 1827000,
      "total_low": 1462000,
      "total_high": 2059000,
      "total_low50": 1642000,
      "total_high50": 1933000,
      "market": "secondary",
      "confidence": "low",
      "typical_error": 0.085,
      "as_of": "2026-04-30",
      "floor_assumed": [
        1,
        "… 6 more"
      ],
      "floor_basis": "building",
      "resale_only_building": false,
      "building": {
        "address": "Hoża 50",
        "match": "exact",
        "n_sales": 31,
        "n_recent": 5,
        "median_ppm2_now": 36487,
        "n_recent_other_market": 0,
        "median_ppm2_now_other_market": null,
        "first_year": 2016,
        "first_primary_year": 2016,
        "max_floor_seen": 7,
        "deeds": [
          {
            "date": "2025-12-31",
            "area": 74.7,
            "rooms": 3,
            "floor": 5,
            "market": "secondary",
            "price": 1720000,
            "ppm2": 23025,
            "ppm2_now": 23176,
            "excluded": "bulk",
            "contradicts_building": false
          },
          "… 30 more"
        ],
        "dist_m": 2
      },
      "model_version": "2026-10-12",
      "comps": [
        {
          "date": "2025-08-28",
          "address": "Hoża 50",
          "area": 72.1,
          "rooms": 3,
          "floor": 4,
          "market": "secondary",
          "price": 2600000,
          "ppm2": 36081,
          "ppm2_now": 36487,
          "dist_m": 2,
          "same_building": true,
          "buyer_company": false,
          "seller_company": false,
          "prev": null,
          "new_building": true,
          "lat": 52.2263,
          "lon": 21.0129,
          "developer_deed": false
        },
        "… 7 more"
      ]
    },
    "asking": null
  },
  "meta": {
    "api_version": "1.0",
    "data_as_of": {
      "deeds": "2026-04-30",
      "schools": "CKE 2024–2026",
      "noise": "2022"
    },
    "model_version": "2026-10-12",
    "attribution": [
      {
        "source": "Rejestr Cen Nieruchomości, m.st. Warszawa",
        "used_for": "deeds, price estimate, comparables",
        "url": "https://architektura.um.warszawa.pl/udostepniane-dane-rcn1"
      },
      {
        "source": "PRG address points, GUGiK",
        "used_for": "address resolution"
      },
      "… 5 more"
    ],
    "took_ms": 24
  }
}
GET/v1/deals

The latest deeds of a size band nearby, newest first

ParameterTypeDescription
addressstringA Warsaw address, matched against the official address register (PRG)
latnumberLatitude, instead of an address (with lon)
lonnumberLongitude, instead of an address (with lat)
min_areanumberdefault 40Smallest floor area, m²
max_areanumberdefault 50Largest floor area, m²
marketsecondary | primary | alldefault secondaryWhich market
radiusintegerdefault 1000Search radius in metres (200–3000)
limitintegerdefault 10How many deeds (1–50)
eraall | new | olddefault allBuildings: all, new (developer-sold since 2016) or older

Give an address or lat and lon. An address not in the register returns 404 with the closest ones.

curl -G "https://osela.app/api/v1/deals" \
  --data-urlencode "address=Hoża 50" \
  -H "X-API-Key: $HD_KEY"
Sample response
{
  "data": {
    "place": {
      "lat": 52.2263,
      "lon": 21.0129,
      "label": "Hoża 50",
      "addr_key": "ulica hoża|50"
    },
    "deals": [
      {
        "date": "2026-04-20",
        "address": "Wilcza 26",
        "area": 52.4,
        "rooms": 3,
        "floor": 5,
        "market": "secondary",
        "price": 992000,
        "ppm2": 18931,
        "ppm2_now": 18931,
        "dist_m": 314,
        "same_building": false,
        "buyer_company": false,
        "seller_company": false,
        "prev": null,
        "new_building": false,
        "lat": 52.2254,
        "lon": 21.0173
      },
      {
        "date": "2026-03-31",
        "address": "Hoża 5/7",
        "area": 54,
        "rooms": 3,
        "floor": 8,
        "market": "secondary",
        "price": 1250000,
        "ppm2": 23148,
        "ppm2_now": 23202,
        "dist_m": 554,
        "same_building": false,
        "buyer_company": false,
        "seller_company": false,
        "prev": null,
        "new_building": false,
        "lat": 52.2275,
        "lon": 21.0208
      },
      "… 1 more"
    ],
    "summary": {
      "n": 3,
      "n_12m": 59,
      "from": "2026-03-24",
      "to": "2026-04-20",
      "median_ppm2": 18931,
      "median_ppm2_now": 18931,
      "median_price": 992000,
      "median_area": 52.5
    },
    "excluded": [
      {
        "date": "2026-07-31",
        "address": "Al. Ujazdowskie 22",
        "area": 47.1,
        "floor": 4,
        "market": "secondary",
        "price": 1660000,
        "ppm2": 35206,
        "dist_m": 751,
        "reason": "bulk"
      },
      {
        "date": "2026-07-31",
        "address": "Al. Ujazdowskie 22",
        "area": 47.1,
        "floor": 4,
        "market": "secondary",
        "price": 1672700,
        "ppm2": 35476,
        "dist_m": 751,
        "reason": "bulk"
      },
      "… 19 more"
    ],
    "excluded_n": 21,
    "as_of": "2026-04-30",
    "newest": "2026-08-04",
    "era": "all"
  },
  "meta": {
    "…": "as in every response: api_version, data_as_of, model_version, attribution, took_ms"
  }
}

Full report

GET/v1/report

Everything for an address in one call: price, market, neighbourhood, schools, commute, risks

ParameterTypeDescription
addressstringA Warsaw address, matched against the official address register (PRG)
latnumberLatitude, instead of an address (with lon)
lonnumberLongitude, instead of an address (with lat)
area_m2numberdefault 50Floor area in m²
roomsintegerNumber of rooms
floorintegerFloor (0 = ground floor, −1 = basement)
marketsecondary | primarydefault secondarysecondary (resale) or primary (new build)
asking_pricenumberAn asking price in zł, to read against the deeds
langpl | en | ukdefault plLanguage of the generated texts
includestringdefault price,asking,market,neighbourhood,schools,commute,environmentComma-separated sections; add deals for the latest 40–50 m² deeds

Give an address or lat and lon. An address not in the register returns 404 with the closest ones.

curl -G "https://osela.app/api/v1/report" \
  --data-urlencode "address=Hoża 50" \
  --data-urlencode "area_m2=52" \
  --data-urlencode "rooms=2" \
  -H "X-API-Key: $HD_KEY"
Sample response
{
  "data": {
    "place": {
      "label": "Hoża 50",
      "lat": 52.2263,
      "lon": 21.0129,
      "district": "Śródmieście",
      "addr_key": "ulica hoża|50",
      "approximate": false
    },
    "price": "{ … the same as GET /price → data.price }",
    "schools": "{ … the same as GET /schools → data.schools }"
  },
  "meta": {
    "…": "as in every response"
  }
}

Neighbourhood

GET/v1/schools

The catchment primary school, nearby primaries and secondary schools with exam results, and nurseries within a walk (places, fees, hours)

ParameterTypeDescription
addressstringA Warsaw address, matched against the official address register (PRG)
latnumberLatitude, instead of an address (with lon)
lonnumberLongitude, instead of an address (with lat)
langpl | en | ukdefault plLanguage of the generated texts

Give an address or lat and lon. An address not in the register returns 404 with the closest ones.

curl -G "https://osela.app/api/v1/schools" \
  --data-urlencode "address=Hoża 50" \
  -H "X-API-Key: $HD_KEY"
Sample response
{
  "data": {
    "place": {
      "label": "Hoża 50",
      "lat": 52.226293145243204,
      "lon": 21.012934110534104,
      "district": "Śródmieście",
      "addr_key": "ulica hoża|50",
      "approximate": false
    },
    "schools": {
      "years": [
        2024,
        "… 2 more"
      ],
      "catchment": {
        "rspo": 35188,
        "name": "SP nr 203 im. Antoniny i Jana Żabińskich",
        "kind": "primary",
        "public": true,
        "address": "ul. ks. Ignacego Skorupki 8",
        "lat": 52.22592,
        "lon": 21.01667,
        "exam": "e8",
        "year": 2026,
        "years": [
          2024,
          "… 2 more"
        ],
        "pct": 20,
        "takers": 36,
        "subjects": [
          {
            "key": "pl",
            "level": "all",
            "n": 36,
            "mean": 69.9,
            "pass_rate": null,
            "pct": 30,
            "warsaw": 74,
            "poland": 64.8,
            "history": [
              [
                2024,
                "… 2 more"
              ],
              "… 2 more"
            ]
          },
          "… 2 more"
        ],
        "walk_min": 4.5
      },
      "catchment_area": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              21.013103,
              "… 1 more"
            ],
            "… 18 more"
          ]
        ]
      },
      "primary": [
        {
          "rspo": 35188,
          "name": "SP nr 203 im. Antoniny i Jana Żabińskich",
          "kind": "primary",
          "public": true,
          "address": "ul. ks. Ignacego Skorupki 8",
          "lat": 52.22592,
          "lon": 21.01667,
          "exam": "e8",
          "year": 2026,
          "years": [
            2024,
            "… 2 more"
          ],
          "pct": 20,
          "takers": 36,
          "subjects": [
            {
              "key": "pl",
              "level": "all",
              "n": 36,
              "mean": 69.9,
              "pass_rate": null,
              "pct": 30,
              "warsaw": 74,
              "poland": 64.8,
              "history": [
                [
                  2024,
                  "… 2 more"
                ],
                "… 2 more"
              ]
            },
            "… 2 more"
          ],
          "walk_min": 4.5,
          "catchment": true
        },
        "… 9 more"
      ],
      "secondary": [
        {
          "rspo": 39099,
          "name": "XXXIII LO Dwujęzyczne im. Mikołaja Kopernika",
          "kind": "high_school",
          "public": true,
          "address": "ul. Józefa Bema 76",
          "lat": 52.23078,
          "lon": 20.95983,
          "exam": "matura",
          "year": 2026,
          "years": [
            2024,
            "… 2 more"
          ],
          "pct": 99,
          "takers": 153,
          "pass_rate": 100,
          "subjects": [
            {
              "key": "pl",
              "level": "basic",
              "n": 153,
              "mean": 84.4,
              "pass_rate": 100,
              "pct": 97,
              "warsaw": 66.3,
              "poland": 63.5,
              "history": [
                [
                  2024,
                  "… 2 more"
                ],
                "… 2 more"
              ]
            },
            "… 12 more"
          ],
          "walk_min": null,
          "transit_min": 33
        },
        "… 9 more"
      ],
      "secondary_total": 153,
      "nurseries": {
        "nearest_city": {
          "name": "Żłobek nr 20",
          "walk_min": 5.5
        },
        "n_15": 3,
        "city_15": 3,
        "places_15": 207,
        "private_fee_median": null,
        "items": [
          {
            "name": "Żłobek nr 20",
            "kind": "nursery",
            "city": true,
            "address": "ul. Wilcza 27a",
            "places": 101,
            "fee": 1500,
            "food_day": 15.87,
            "food_month": null,
            "hours": [
              5,
              "… 2 more"
            ],
            "walk_min": 5.5,
            "lat": 52.2246433,
            "lon": 21.0170555
          },
          "… 3 more"
        ],
        "source": "MRPiPS Rejestr Żłobków, downloaded 2026-10-13"
      }
    }
  },
  "meta": {
    "…": "as in every response: api_version, data_as_of, model_version, attribution, took_ms"
  }
}
GET/v1/commute

Door-to-door public transport minutes to Warsaw's main destinations

ParameterTypeDescription
addressstringA Warsaw address, matched against the official address register (PRG)
latnumberLatitude, instead of an address (with lon)
lonnumberLongitude, instead of an address (with lat)
langpl | en | ukdefault plLanguage of the generated texts

Give an address or lat and lon. An address not in the register returns 404 with the closest ones.

curl -G "https://osela.app/api/v1/commute" \
  --data-urlencode "address=Hoża 50" \
  -H "X-API-Key: $HD_KEY"
Sample response
{
  "data": {
    "place": {
      "label": "Hoża 50",
      "lat": 52.2263,
      "lon": 21.0129,
      "district": "Śródmieście",
      "addr_key": "ulica hoża|50",
      "approximate": false
    },
    "commute": [
      {
        "key": "centrum",
        "label": "Centrum",
        "hint": "Dworzec Centralny",
        "minutes": 11
      },
      {
        "key": "wola",
        "label": "Rondo Daszyńskiego",
        "hint": "biurowce na Woli",
        "minutes": 25
      },
      "… 3 more"
    ]
  },
  "meta": {
    "…": "as in every response: api_version, data_as_of, model_version, attribution, took_ms"
  }
}
GET/v1/neighbourhood

Neighbourhood scores by category and household type, with what drives them

ParameterTypeDescription
addressstringA Warsaw address, matched against the official address register (PRG)
latnumberLatitude, instead of an address (with lon)
lonnumberLongitude, instead of an address (with lat)
langpl | en | ukdefault plLanguage of the generated texts

Give an address or lat and lon. An address not in the register returns 404 with the closest ones.

curl -G "https://osela.app/api/v1/neighbourhood" \
  --data-urlencode "address=Hoża 50" \
  -H "X-API-Key: $HD_KEY"
Sample response
{
  "data": {
    "place": {
      "label": "Hoża 50",
      "lat": 52.2263,
      "lon": 21.0129,
      "district": "Śródmieście",
      "addr_key": "ulica hoża|50",
      "approximate": false
    },
    "neighbourhood": {
      "categories": {
        "transit": {
          "score": 93.6,
          "factors": [
            {
              "key": "frequency",
              "label": "Częstotliwość kursów w pobliżu",
              "value": "51 linii w zasięgu 12 min, 302 odjazdów/h",
              "detail": null,
              "score": 99.8,
              "weight": 0.4
            },
            "… 2 more"
          ],
          "summary": "Metro M1 8 min pieszo, 11 min do Centrum",
          "label": "Komunikacja",
          "percentile": 93
        },
        "daily": {
          "score": 92.2,
          "factors": [
            {
              "key": "supermarket",
              "label": "Supermarket",
              "value": "Eurospar, 8 min",
              "detail": null,
              "score": 79.7,
              "weight": 0.3
            },
            "… 3 more"
          ],
          "summary": "supermarket 8 min, 83 sklepy spożywcze w zasięgu 10 min",
          "label": "Codzienne sprawy",
          "percentile": 86
        },
        "green": {
          "score": 41.2,
          "factors": [
            {
              "key": "park",
              "label": "Park lub ogród ≥ 1 ha",
              "value": "Park im. Marszałka Edwarda Rydza-Śmigłego, 13 min",
              "detail": "27,4 ha",
              "score": 46.5,
              "weight": 0.35
            },
            "… 3 more"
          ],
          "summary": "Park im. Marszałka Edwarda Rydza-Śmigłego 13 min, 3% zieleni w promieniu 1 km",
          "label": "Zieleń",
          "percentile": 16
        },
        "education": {
          "score": 70.2,
          "factors": [
            {
              "key": "primary",
              "label": "Publiczna szkoła podstawowa",
              "value": "SP nr 203 im. Antoniny i Jana Żabińskich, 4 min",
              "detail": null,
              "score": 94.2,
              "weight": 0.3
            },
            "… 4 more"
          ],
          "summary": "podstawówka 4 min, wyniki egzaminu lepsze niż w 20% szkół, szkoła rejonowa SP nr 203",
          "label": "Szkoły i dzieci",
          "percentile": 72
        },
        "health": {
          "score": 98,
          "factors": [
            {
              "key": "clinic",
              "label": "Przychodnia",
              "value": "Śródmiejskie Centrum Kliniczne, 2 min",
              "detail": null,
              "score": 98.5,
              "weight": 0.35
            },
            "… 3 more"
          ],
          "summary": "przychodnia 2 min, apteka 2 min",
          "label": "Zdrowie",
          "percentile": 98
        },
        "leisure": {
          "score": 87.1,
          "factors": [
            {
              "key": "food",
              "label": "Restauracje, kawiarnie i bary",
              "value": "229 w zasięgu 10 min pieszo",
              "detail": null,
              "score": 100,
              "weight": 0.4
            },
            "… 2 more"
          ],
          "summary": "229 lokali gastronomicznych w zasięgu 10 min",
          "label": "Gastronomia i czas wolny",
          "percentile": 87
        },
        "quiet": {
          "score": 48.1,
          "factors": [
            {
              "key": "noise",
              "label": "Typowy hałas wokół budynku",
              "value": "≈59 dB Lden",
              "detail": null,
              "score": 66.8,
              "weight": 0.7
            },
            "… 2 more"
          ],
          "summary": "zwykle ≈59 dB, do 73 dB od najgłośniejszej strony",
          "label": "Cisza",
          "percentile": 29
        }
      },
      "personas": {
        "balanced": {
          "score": 76.2,
          "parts": [
            {
              "category": "transit",
              "weight": 0.2,
              "score": 93.6,
              "contribution": 18.7
            },
            "… 6 more"
          ],
          "percentile": 77
        },
        "family": {
          "score": 71.1,
          "parts": [
            {
              "category": "education",
              "weight": 0.25,
              "score": 70.2,
              "contribution": 17.6
            },
            "… 6 more"
          ],
          "percentile": 68
        },
        "professional": {
          "score": 81.2,
          "parts": [
            {
              "category": "transit",
              "weight": 0.28,
              "score": 93.6,
              "contribution": 26.2
            },
            "… 6 more"
          ],
          "percentile": 86
        },
        "senior": {
          "score": 77.4,
          "parts": [
            {
              "category": "health",
              "weight": 0.25,
              "score": 98,
              "contribution": 24.5
            },
            "… 5 more"
          ],
          "percentile": 74
        }
      },
      "weights": {
        "balanced": {
          "transit": 0.2,
          "daily": 0.17,
          "green": 0.14,
          "education": 0.11,
          "health": 0.1,
          "leisure": 0.13,
          "quiet": 0.15
        },
        "family": {
          "transit": 0.12,
          "daily": 0.14,
          "green": 0.17,
          "education": 0.25,
          "health": 0.1,
          "leisure": 0.05,
          "quiet": 0.17
        },
        "professional": {
          "transit": 0.28,
          "daily": 0.17,
          "green": 0.1,
          "education": 0.03,
          "health": 0.07,
          "leisure": 0.24,
          "quiet": 0.11
        },
        "senior": {
          "transit": 0.13,
          "daily": 0.22,
          "green": 0.17,
          "education": 0,
          "health": 0.25,
          "leisure": 0.06,
          "quiet": 0.17
        }
      }
    }
  },
  "meta": {
    "…": "as in every response: api_version, data_as_of, model_version, attribution, took_ms"
  }
}
GET/v1/environment

Noise, yearly air pollution, flood and airport risks, the local zoning plan, building permits nearby, heritage and city zones, and crime in the district

ParameterTypeDescription
addressstringA Warsaw address, matched against the official address register (PRG)
latnumberLatitude, instead of an address (with lon)
lonnumberLongitude, instead of an address (with lat)
langpl | en | ukdefault plLanguage of the generated texts

Give an address or lat and lon. An address not in the register returns 404 with the closest ones.

curl -G "https://osela.app/api/v1/environment" \
  --data-urlencode "address=Hoża 50" \
  -H "X-API-Key: $HD_KEY"
Sample response
{
  "data": {
    "place": {
      "label": "Hoża 50",
      "lat": 52.226293145243204,
      "lon": 21.012934110534104,
      "district": "Śródmieście",
      "addr_key": "ulica hoża|50",
      "approximate": false
    },
    "environment": {
      "noise": {
        "bands": {
          "road": "70–75",
          "rail": "<40",
          "tram": "60–65",
          "air": "<40",
          "industry": "<40",
          "road_night": "60–65"
        },
        "codes": {
          "road": 7,
          "rail": 0,
          "tram": 5,
          "air": 0,
          "industry": 0,
          "road_night": 5
        },
        "lden_total": 72.9,
        "lden_typical": 58.7,
        "dominant": "ruch drogowy",
        "dominant_key": "road",
        "night_road": 5
      },
      "risks": [
        {
          "key": "noise",
          "level": "high",
          "label": "Bardzo głośna lokalizacja",
          "detail": "Strategiczna mapa hałasu 2022: ≈73 dB Lden przy najgłośniejszej elewacji, głównie ruch drogowy. WHO zaleca, by hałas drogowy nie przekraczał 53 dB. Sprawdź, na którą stronę wychodzą sypialnie: pokoje od podwórza są dużo cichsze."
        }
      ],
      "zoning": {
        "covered": true,
        "symbol": "8MW/U",
        "designation": "zabudowa wielorodzinna z usługami",
        "plan": "Śródmieście Płd w rej. ul. Poznańskiej",
        "max_height": "30",
        "intensity": "15"
      },
      "planning": {
        "permits": {
          "radius_m": 400,
          "months": 36,
          "n": 4,
          "by_kind": {
            "demolition": 1,
            "storeys": 2,
            "extension": 1
          },
          "items": [
            {
              "date": "2025-09-22",
              "kind": "demolition",
              "works": "rozbiórka istniejącego obiektu budowlanego",
              "name": "Rozbiórka łącznika między budynkami",
              "address": "ul. Nowogrodzka -",
              "dist_m": 271,
              "lat": 52.22765,
              "lon": 21.00964
            },
            "… 3 more"
          ],
          "source": "RWDZ, Urząd m.st. Warszawy"
        },
        "heritage": null,
        "zones": [
          {
            "kind": "sct",
            "url": "https://transport.um.warszawa.pl/sct",
            "as_of": null,
            "label": "Strefa Czystego Transportu",
            "detail": "Starsze auta spalinowe nie mogą wjeżdżać; zasady zaostrzają się etapami (transport.um.warszawa.pl/sct)."
          },
          "… 1 more"
        ]
      },
      "safety": {
        "district": "Śródmieście",
        "period": "2025-10..2026-09",
        "change_period": {
          "now": "2026-01..2026-09",
          "before": "2025-01..2025-09"
        },
        "downloaded": "2026-10-13",
        "rows": [
          {
            "key": "burglary",
            "n": 226,
            "rate": 2.383,
            "city_rate": 1.115,
            "change": {
              "now": 172,
              "before": 231,
              "pct": -0.255,
              "clear": false
            },
            "city_change": {
              "now": 1520,
              "before": 2166,
              "pct": -0.298,
              "clear": true
            }
          },
          "… 4 more"
        ]
      }
    }
  },
  "meta": {
    "…": "as in every response: api_version, data_as_of, model_version, attribution, took_ms"
  }
}

Account and sources

GET/v1/usage

Your account's calls today, what is left and when the day turns; it does not count as a call

curl -G "https://osela.app/api/v1/usage" \
  -H "X-API-Key: $HD_KEY"
Sample response
{
  "data": {
    "key": "My CRM",
    "calls_today": 1,
    "quota_day": 50,
    "remaining_today": 49,
    "resets_at": "2026-10-17T00:00:00+02:00",
    "rate_per_sec": 1
  },
  "meta": {
    "…": "as in every response: api_version, data_as_of, model_version, attribution, took_ms"
  }
}
GET/v1/sourcesno key needed

Data sources, their licences and dates (no key needed)

curl -G "https://osela.app/api/v1/sources"
Sample response
{
  "data": {
    "sources": [
      {
        "source": "Rejestr Cen Nieruchomości, m.st. Warszawa",
        "used_for": "deeds, price estimate, comparables",
        "url": "https://architektura.um.warszawa.pl/udostepniane-dane-rcn1"
      },
      {
        "source": "PRG address points, GUGiK",
        "used_for": "address resolution"
      },
      {
        "source": "© OpenStreetMap contributors (ODbL 1.0)",
        "used_for": "walking network and amenities, served as scores and minutes only",
        "url": "https://www.openstreetmap.org/copyright"
      },
      {
        "source": "ZTM Warszawa, Koleje Mazowieckie and WKD GTFS, via mkuran.pl",
        "used_for": "public transport times",
        "url": "https://mkuran.pl/gtfs/"
      },
      {
        "source": "CKE exam results, RSPO school register",
        "used_for": "schools"
      },
      {
        "source": "m.st. Warszawa: strategic noise map 2022, school catchments, local zoning plans (MPZP)",
        "used_for": "noise, schools, zoning"
      },
      {
        "source": "ISOK flood hazard maps (Wody Polskie)",
        "used_for": "flood risk"
      },
      {
        "source": "Urząd m.st. Warszawy, city map portal (mapa.um.warszawa.pl): building permits, heritage register, paid parking and Clean Transport zones",
        "used_for": "planning",
        "url": "https://mapa.um.warszawa.pl/"
      },
      {
        "source": "Rejestr Żłobków i Klubów Dziecięcych, MRPiPS (CC0 1.0)",
        "used_for": "nurseries",
        "url": "https://rejestrzlobkow.mrpips.gov.pl/"
      },
      {
        "source": "Komenda Stołeczna Policji, crime by district of Warsaw",
        "used_for": "safety",
        "url": "https://ksp.bip.policja.gov.pl/ksp/statystyki/46374,Przestepczosc-w-ujeciu-administracyjnym-mst-Warszawy.html"
      },
      {
        "source": "GUS Bank Danych Lokalnych (CC BY 4.0)",
        "used_for": "residents per district (safety rates)",
        "url": "https://bdl.stat.gov.pl/"
      },
      {
        "source": "Źródło danych: GIOŚ – EKOINFONET; modelling IOŚ-PIB (annual air-quality assessment), processed",
        "used_for": "air",
        "url": "https://powietrze.gios.gov.pl/pjp/maps/modeling"
      }
    ],
    "notes": [
      "Prices are a market analysis of deeds, not a valuation (operat szacunkowy).",
      "OpenStreetMap-derived data is served as scores and minutes, never as features.",
      "Deeds are as published by the register; portfolio deals and outliers are excluded from estimates and lists."
    ]
  },
  "meta": {
    "…": "as in every response"
  }
}

Try it

Calls go from this page with your key; the key stays in this tab only. Get a free key

Paste your key first.
Warsaw property data API | Osella