get_permits_in_area
Find building permits and works notifications registered since 2016 within a radius around a point to see what is being built nearby.
Instructions
List the building permits and works notifications registered since 2016 within a radius of a point - issued decisions only, matched through the parcel geometry we hold, which is near-complete but not the whole cadastre - to see what is being built nearby. Returns cases newest first, NOT nearest first (a permit and a notification for one investment are two cases), plus an aggregate by year and statutory object category over ALL matched cases (do not add it up across pages) with the permit/notification split and building volume. truncated = more cases than the limit: pass the returned cursor back as cursor with the same filters. Examples: apartment blocks → categories=[XIII]; drop utility-network noise (XXVI can be most of a list) → excludeCategories=[XXVI]; utility works as a sign that land is being serviced for development → categories=[XXVI]. For "how many / how much" pass aggregateOnly=true (same price). The list is ordered by date: for what is closest use a smaller radiusKm (e.g. 0.3) instead of paging; radiusKm is 0.1–2 (default 2), for a wider area make several calls for neighbouring centres. Reading it: decision outcomes (granted or refused) are not held; notifications only where accepted without objection; pending cases not at all. Matching uses the parcel's current identifier and geometry, so cases filed before a split or merge may be missed, parcels without geometry are not searched and a parcel number with a sheet segment may be matched less exactly. The answer states how many parcels we hold in the circle (0 = no data for the area) and the date of the last refresh: loaded periodically, not live. A volume marked suspect stays in the sums. A short or empty list is never a statement that nothing is being built. A query over the time limit returns an error asking for a smaller radius. Coordinates: for a parcel take them from resolve_parcel (or search_parcels); for a street use list_parcels_in_area(location, street) and the centre point of a returned row; otherwise from the user - never guess them. Cost: 5 API tokens per call, also for an empty list; each page is a separate call. It can be switched off for maintenance (a plain "temporarily unavailable" reply).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Circle centre latitude (WGS84, Poland), from resolve_parcel / list_parcels_in_area or the user; never guessed. | |
| lng | Yes | Circle centre longitude (WGS84, Poland), from resolve_parcel / list_parcels_in_area or the user; never guessed. | |
| limit | No | Cases in the list, 1–200 (default 50). The aggregate counts all matched cases. | |
| cursor | No | Cursor from the previous answer, for the next page; pass it back unchanged with the same filters. Not with aggregateOnly. | |
| dateTo | No | Window end, YYYY-MM-DD, inclusive, not before dateFrom. When older than two years, pass dateFrom as well. | |
| intent | No | multi_family = categories [XIII], single_family = [I] (incl. semi-detached and terraced), all = no filter (default). Not with categories. | |
| dateFrom | No | Window start, YYYY-MM-DD (decision date; intake date for notifications). Default two years back; earlier than 2016-01-01 counts as 2016-01-01. | |
| radiusKm | No | Radius in km, 0.1–2 (default 2). | |
| worksType | No | new_construction (default) or all (adds extensions, demolitions and other works). | |
| categories | No | Keep only these object categories (Roman numerals I–XXX). Not with intent other than all; must not overlap excludeCategories. | |
| aggregateOnly | No | true = only the aggregate (year × category counts, split, volumes), no case list. Same price; not with cursor. | |
| excludeCategories | No | Drop these object categories (cases without a category stay). Must not overlap categories. |