@cenogram/mcp-server 0.5.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -8
- package/dist/api-client.d.ts +279 -1
- package/dist/api-client.js +117 -4
- package/dist/error-messages.js +1 -1
- package/dist/formatters.d.ts +14 -1
- package/dist/formatters.js +647 -9
- package/dist/index.d.ts +1 -0
- package/dist/index.js +129 -108
- package/dist/tools.js +336 -47
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
[](https://nodejs.org)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
**Polish Real Estate Transaction Data for AI**
|
|
7
|
+
**Polish Real Estate Transaction & Parcel Data for AI**
|
|
8
8
|
|
|
9
|
-
MCP server for Polish real estate data. Access 8M+ real estate transactions from the national Registry of Prices and Values (Rejestr Cen Nieruchomosci, RCN) directly from Claude, Cursor, or any MCP-compatible AI assistant.
|
|
9
|
+
MCP server for Polish real estate data. Access 8M+ real estate transactions from the national Registry of Prices and Values (Rejestr Cen Nieruchomosci, RCN) - prices from notarial deeds, not listings - directly from Claude, Cursor, ChatGPT, Grok, or any MCP-compatible AI assistant. Beyond transaction prices, the server resolves cadastral parcels and adds per-parcel context: zoning, flood and landslide risk, heritage register, building permits and construction activity, public transport access, agricultural land classification, surrounding land use, nature - nearby forest and overlapping protected areas - what lies underground (mining terrains and major groundwater reservoirs), the land-use and soil-quality classification, and road access.
|
|
10
10
|
|
|
11
11
|
Data source: Polish national RCN registry (Rejestr Cen Nieruchomosci) | Platform: [cenogram.pl](https://cenogram.pl?src=mcpstdio)
|
|
12
12
|
|
|
@@ -18,6 +18,18 @@ Data source: Polish national RCN registry (Rejestr Cen Nieruchomosci) | Platform
|
|
|
18
18
|
|
|
19
19
|
Manage your keys at [cenogram.pl/ustawienia](https://cenogram.pl/ustawienia).
|
|
20
20
|
|
|
21
|
+
### Free tier
|
|
22
|
+
|
|
23
|
+
New accounts start with 1,000 tokens and a 14-day trial of the Standard plan. After that the key keeps
|
|
24
|
+
working on 50 tokens a week - the balance is restored to 50 every 7 days rather than accumulating -
|
|
25
|
+
with no expiry date and no card.
|
|
26
|
+
|
|
27
|
+
A call costs 1 token for statistics, reference data, parcel identity and municipal context; 2 for a
|
|
28
|
+
transaction search, a price histogram or a list of the parcels in an area; 4 for one context layer of
|
|
29
|
+
a parcel or transaction; 5 for spatial search, parcel outlines, valuation and a multi-district
|
|
30
|
+
comparison; 45 for `get_parcel_report`, which returns every layer at once. Location catalogues are
|
|
31
|
+
free. Paid plans raise the allowance - see [cenogram.pl/api](https://cenogram.pl/api?src=mcpstdio#cennik).
|
|
32
|
+
|
|
21
33
|
## Installation
|
|
22
34
|
|
|
23
35
|
Pick your client. All options below use the hosted server - no local install needed (except npx/stdio).
|
|
@@ -193,7 +205,8 @@ You can also use the `--http` CLI flag instead of `MCP_TRANSPORT=http`.
|
|
|
193
205
|
**Polish:**
|
|
194
206
|
- "Jaka jest mediana cen mieszkan w Krakowie w 2025?"
|
|
195
207
|
- "Pokaz transakcje z ulicy Pulawskiej 15 na Mokotowie"
|
|
196
|
-
- "Znajdz transakcje na dzialce
|
|
208
|
+
- "Znajdz transakcje na dzialce 126104_9.0015.201"
|
|
209
|
+
- "Sprawdz plan miejscowy i ryzyko powodziowe dla dzialki 126104_9.0015.201"
|
|
197
210
|
- "Znajdz transakcje gruntow w promieniu 5km od centrum Wroclawia powyzej 500 000 PLN"
|
|
198
211
|
- "Porownaj ceny mieszkan na Mokotowie i Woli"
|
|
199
212
|
- "Pokaz rozklad cen nieruchomosci w Polsce"
|
|
@@ -201,7 +214,8 @@ You can also use the `--http` CLI flag instead of `MCP_TRANSPORT=http`.
|
|
|
201
214
|
**English:**
|
|
202
215
|
- "What's the median apartment price in Krakow in 2025?"
|
|
203
216
|
- "Show transactions at Pulawska 15 in Mokotow"
|
|
204
|
-
- "Find all transactions on parcel
|
|
217
|
+
- "Find all transactions on parcel 126104_9.0015.201 and then search nearby"
|
|
218
|
+
- "Check the zoning and flood risk for parcel 126104_9.0015.201"
|
|
205
219
|
- "Find land transactions within 5km of Wroclaw center above 500,000 PLN"
|
|
206
220
|
- "Compare apartment prices in Mokotow and Wola districts"
|
|
207
221
|
- "Show the price distribution of real estate in Poland"
|
|
@@ -213,15 +227,16 @@ You can also use the `--http` CLI flag instead of `MCP_TRANSPORT=http`.
|
|
|
213
227
|
| `search_transactions` | Search transactions with filters | location, street, buildingNumber, parcelId, propertyType, marketType, price/date/area range |
|
|
214
228
|
| `get_price_statistics` | Price/m2 stats by location (residential only) | location (optional) |
|
|
215
229
|
| `get_price_distribution` | Price histogram | bins, maxPrice |
|
|
216
|
-
| `search_by_area` | Search by geographic radius | latitude, longitude, radiusKm |
|
|
230
|
+
| `search_by_area` | Search transactions by geographic radius | latitude, longitude, radiusKm |
|
|
217
231
|
| `get_market_overview` | Database overview and stats | (none) |
|
|
218
232
|
| `list_locations` | List available locations | search (optional) |
|
|
219
233
|
| `search_parcels` | Search parcels by cadastral ID prefix | q (parcel ID prefix, min 3 chars) |
|
|
220
|
-
| `
|
|
234
|
+
| `list_parcels_in_area` | List the cadastral parcels in an area - light list or full outlines | teryt, location, bbox, lat + lng + radiusKm, or polygon; includeGeometry, minArea/maxArea, street/buildingNumber, cursor |
|
|
235
|
+
| `search_by_polygon` | Search transactions within a GeoJSON polygon | polygon, propertyType, dateFrom/dateTo |
|
|
221
236
|
| `compare_locations` | Compare stats across 2-5 districts | districts (comma-separated), propertyType |
|
|
222
237
|
| `get_building_breakdown` | Per-building breakdown for one transaction (footprint, storeys, est. floor area) | transaction_id (UUID from a search result) |
|
|
223
|
-
| `get_parcel_report` | Composite dossier for one parcel: core,
|
|
224
|
-
| `resolve_parcel` | Resolve a
|
|
238
|
+
| `get_parcel_report` | Composite dossier for one parcel: core, 13 enrichment layers, transaction history, local price context and municipal context | parcelId (cadastral id or UUID) |
|
|
239
|
+
| `resolve_parcel` | Resolve a parcel to its cadastral identity | parcelId, q (full cadastral id or 'locality + parcel number' - not a street address), or lat + lng |
|
|
225
240
|
| `get_demographics` | Population and demographic context for a location | location or teryt, year (or yearFrom/yearTo), category |
|
|
226
241
|
| `get_infrastructure_signals` | Municipal infrastructure signals (tenders, utilities, capital spending) | location or teryt |
|
|
227
242
|
| `estimate_value` | Comparable-sales value estimate for a property | area, plus lat + lng or parcelId; rooms, market |
|
|
@@ -233,6 +248,9 @@ You can also use the `--http` CLI flag instead of `MCP_TRANSPORT=http`.
|
|
|
233
248
|
| `get_transaction_permits` | Building permits recorded for the property | transaction_id |
|
|
234
249
|
| `get_transaction_planning` | Local zoning and planning status for the property | transaction_id |
|
|
235
250
|
| `get_transaction_farmland` | Agricultural land-use classification for the property | transaction_id |
|
|
251
|
+
| `get_transaction_nature` | Nearby forest and overlapping protected natural areas for the property | transaction_id |
|
|
252
|
+
| `get_transaction_subsurface` | Mining terrains and major groundwater reservoirs under the property | transaction_id |
|
|
253
|
+
| `get_transaction_roads` | Geometric evidence of road access for the property (distances, road class, access indicator) | transaction_id |
|
|
236
254
|
|
|
237
255
|
### Location naming
|
|
238
256
|
|
|
@@ -264,12 +282,24 @@ Results include parcel IDs and GPS coordinates, enabling multi-step research:
|
|
|
264
282
|
|
|
265
283
|
This mimics how a property appraiser finds comparable transactions for valuation reports.
|
|
266
284
|
|
|
285
|
+
Starting from the land rather than from a deed is a different route:
|
|
286
|
+
|
|
287
|
+
```
|
|
288
|
+
1. List the parcels -> list_parcels_in_area(location="Wawer", minArea=800)
|
|
289
|
+
2. Draw the ones you want -> list_parcels_in_area(bbox="21.10,52.20,21.14,52.23", includeGeometry=true)
|
|
290
|
+
3. Open one in full -> get_parcel_report(parcelId="146518_8.0108.27")
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Step 1 pages by cursor; step 2 is capped and usually truncated, so narrow the box rather than reading
|
|
294
|
+
a truncated answer as the parcel list of the area.
|
|
295
|
+
|
|
267
296
|
## Data
|
|
268
297
|
|
|
269
298
|
- **8M+ transactions** from all of Poland (380 counties)
|
|
270
299
|
- **Date range:** 2003 - present
|
|
271
300
|
- **Source:** Polish national RCN registry (Rejestr Cen Nieruchomosci)
|
|
272
301
|
- **Refresh:** periodic updates from RCN
|
|
302
|
+
- **Per-parcel context:** zoning, flood and landslide risk, heritage register, building permits and construction activity, transit access, agricultural land use, surroundings, nature (nearby forest and protected areas), subsurface (mining terrains and major groundwater reservoirs), land-use and soil-quality classification, and road access - addressable by cadastral ID
|
|
273
303
|
|
|
274
304
|
## Troubleshooting
|
|
275
305
|
|
|
@@ -281,6 +311,8 @@ This mimics how a property appraiser finds comparable transactions for valuation
|
|
|
281
311
|
|
|
282
312
|
**401 Unauthorized (HTTP mode)** - The `Authorization` header must be `Bearer cngrm_...` (with the `Bearer` prefix). Double-check that the full API key is included, not just the prefix.
|
|
283
313
|
|
|
314
|
+
**402 Payment Required** - The account is out of tokens. On a free account the response says the date from which the balance is back at its weekly 50; the key and the connection stay valid until then. A paid plan lifts the limit - see [cenogram.pl/api](https://cenogram.pl/api?src=mcpstdio#cennik).
|
|
315
|
+
|
|
284
316
|
## Development
|
|
285
317
|
|
|
286
318
|
```bash
|
package/dist/api-client.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type AuthMode } from "./error-messages.js";
|
|
1
2
|
export interface StatsResponse {
|
|
2
3
|
counts: {
|
|
3
4
|
transactions: number;
|
|
@@ -338,6 +339,7 @@ export declare function getInfrastructureSignals(params: {
|
|
|
338
339
|
export interface CreditInfo {
|
|
339
340
|
balance: number;
|
|
340
341
|
cost: number;
|
|
342
|
+
refunded?: number;
|
|
341
343
|
}
|
|
342
344
|
export interface ApiResponse<T> {
|
|
343
345
|
data: T;
|
|
@@ -351,6 +353,19 @@ export declare function decodeOAuthCtx(key: string): {
|
|
|
351
353
|
} | null;
|
|
352
354
|
export declare function parseRetryAfterSeconds(headerValue: string | null | undefined): number | null;
|
|
353
355
|
export declare function formatRetryAfter(seconds: number): string;
|
|
356
|
+
export declare class ApiHttpError extends Error {
|
|
357
|
+
readonly status: number;
|
|
358
|
+
readonly code: string | undefined;
|
|
359
|
+
readonly authMode: AuthMode;
|
|
360
|
+
readonly retryAfterSeconds: number | undefined;
|
|
361
|
+
constructor(message: string, opts: {
|
|
362
|
+
status: number;
|
|
363
|
+
code?: string | undefined;
|
|
364
|
+
authMode: AuthMode;
|
|
365
|
+
retryAfterSeconds?: number | undefined;
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
export declare function isExpectedApiError(error: unknown): boolean;
|
|
354
369
|
export declare function fetchApi<T>(path: string, params?: Record<string, string>, apiKey?: string): Promise<ApiResponse<T>>;
|
|
355
370
|
export declare function fetchApiPost<T>(path: string, body: unknown, apiKey?: string): Promise<ApiResponse<T>>;
|
|
356
371
|
export declare function getStats(apiKey?: string): Promise<ApiResponse<StatsResponse>>;
|
|
@@ -379,6 +394,10 @@ export interface TransactionParams {
|
|
|
379
394
|
floodRisk?: string;
|
|
380
395
|
heritageStatus?: string;
|
|
381
396
|
landslideRisk?: string;
|
|
397
|
+
landUse?: string;
|
|
398
|
+
buildingStoreys?: string;
|
|
399
|
+
minFootprintArea?: number;
|
|
400
|
+
maxFootprintArea?: number;
|
|
382
401
|
limit?: number;
|
|
383
402
|
page?: number;
|
|
384
403
|
sort?: string;
|
|
@@ -405,6 +424,51 @@ export declare function getPriceSpread(params: {
|
|
|
405
424
|
export declare function getPriceSpreadLocations(params: {
|
|
406
425
|
search?: string;
|
|
407
426
|
}, apiKey?: string): Promise<ApiResponse<PriceSpreadLocationsResponse>>;
|
|
427
|
+
export interface FloodRiskResponse {
|
|
428
|
+
location: LocationRef;
|
|
429
|
+
metric: "flood_exposure_share";
|
|
430
|
+
result: {
|
|
431
|
+
flood_share_pct: number | null;
|
|
432
|
+
by_severity: {
|
|
433
|
+
low: number | null;
|
|
434
|
+
medium: number | null;
|
|
435
|
+
high: number | null;
|
|
436
|
+
};
|
|
437
|
+
};
|
|
438
|
+
inputs: {
|
|
439
|
+
assessed_sample_n: number | null;
|
|
440
|
+
window: "all_time";
|
|
441
|
+
};
|
|
442
|
+
quality: {
|
|
443
|
+
coverage: "full" | "low_sample" | "suppressed";
|
|
444
|
+
confidence: "high" | "low";
|
|
445
|
+
as_of: string | null;
|
|
446
|
+
stale: boolean;
|
|
447
|
+
notes: string[];
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
export interface FloodRiskLocation {
|
|
451
|
+
location: string;
|
|
452
|
+
county_code: string;
|
|
453
|
+
voivodeship: string;
|
|
454
|
+
type: "city" | "county";
|
|
455
|
+
assessed_sample_n: number;
|
|
456
|
+
confidence: "high" | "low";
|
|
457
|
+
}
|
|
458
|
+
export interface FloodRiskLocationsResponse {
|
|
459
|
+
data: FloodRiskLocation[];
|
|
460
|
+
meta: {
|
|
461
|
+
total: number;
|
|
462
|
+
snapshot_date: string | null;
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
export declare function getFloodRisk(params: {
|
|
466
|
+
location?: string;
|
|
467
|
+
teryt?: string;
|
|
468
|
+
}, apiKey?: string): Promise<ApiResponse<FloodRiskResponse>>;
|
|
469
|
+
export declare function getFloodRiskLocations(params: {
|
|
470
|
+
search?: string;
|
|
471
|
+
}, apiKey?: string): Promise<ApiResponse<FloodRiskLocationsResponse>>;
|
|
408
472
|
export interface ValuationComparable {
|
|
409
473
|
distance_m: number;
|
|
410
474
|
transaction_date: string;
|
|
@@ -475,8 +539,13 @@ export interface LocationItem {
|
|
|
475
539
|
name: string;
|
|
476
540
|
typeName: string | null;
|
|
477
541
|
level: "voivodeship" | "county" | "municipality" | "precinct";
|
|
542
|
+
parent_name: string | null;
|
|
543
|
+
}
|
|
544
|
+
export interface LocationSearchItem extends LocationItem {
|
|
545
|
+
rcn_district?: boolean;
|
|
478
546
|
}
|
|
479
547
|
export declare function getLocations(parent?: string, apiKey?: string): Promise<ApiResponse<LocationItem[]>>;
|
|
548
|
+
export declare function searchLocations(q: string, apiKey?: string): Promise<ApiResponse<LocationSearchItem[]>>;
|
|
480
549
|
export declare function getPriceHistogram(bins?: number, max?: number, apiKey?: string): Promise<ApiResponse<HistogramBin[]>>;
|
|
481
550
|
export interface ParcelSearchResult {
|
|
482
551
|
parcel_id?: string;
|
|
@@ -487,8 +556,102 @@ export interface ParcelSearchResult {
|
|
|
487
556
|
}
|
|
488
557
|
export interface ParcelSearchResponse {
|
|
489
558
|
results: ParcelSearchResult[];
|
|
559
|
+
corpus_coverage?: CorpusCoverage | null;
|
|
490
560
|
}
|
|
491
561
|
export declare function searchParcels(q: string, limit?: number, apiKey?: string): Promise<ApiResponse<ParcelSearchResponse>>;
|
|
562
|
+
export interface ParcelListRow {
|
|
563
|
+
id: string;
|
|
564
|
+
parcel_id: string | null;
|
|
565
|
+
parcel_key: string | null;
|
|
566
|
+
district: string | null;
|
|
567
|
+
lat: number | null;
|
|
568
|
+
lng: number | null;
|
|
569
|
+
street?: string | null;
|
|
570
|
+
building_number?: string | null;
|
|
571
|
+
address_source?: "rcn" | "approx_high" | "approx_low" | "none" | null;
|
|
572
|
+
}
|
|
573
|
+
export interface CorpusCoverage {
|
|
574
|
+
basis: string;
|
|
575
|
+
held_parcels: number | null;
|
|
576
|
+
source_parcels: number | null;
|
|
577
|
+
held_pct: number | null;
|
|
578
|
+
counties: number | null;
|
|
579
|
+
as_of: string | null;
|
|
580
|
+
note: string;
|
|
581
|
+
}
|
|
582
|
+
export interface ParcelListResponse {
|
|
583
|
+
data: ParcelListRow[];
|
|
584
|
+
pagination: {
|
|
585
|
+
limit: number;
|
|
586
|
+
has_more: boolean;
|
|
587
|
+
next_cursor?: string;
|
|
588
|
+
};
|
|
589
|
+
corpus_coverage?: CorpusCoverage | null;
|
|
590
|
+
suggestions?: {
|
|
591
|
+
streets?: string[];
|
|
592
|
+
building_numbers?: string[];
|
|
593
|
+
};
|
|
594
|
+
hint?: string;
|
|
595
|
+
}
|
|
596
|
+
export interface ParcelListParams {
|
|
597
|
+
location?: string;
|
|
598
|
+
teryt?: string;
|
|
599
|
+
bbox?: string;
|
|
600
|
+
lat?: number;
|
|
601
|
+
lng?: number;
|
|
602
|
+
radiusKm?: number;
|
|
603
|
+
minArea?: number;
|
|
604
|
+
maxArea?: number;
|
|
605
|
+
street?: string;
|
|
606
|
+
buildingNumber?: string;
|
|
607
|
+
limit?: number;
|
|
608
|
+
cursor?: string;
|
|
609
|
+
}
|
|
610
|
+
export declare function listParcels(p: ParcelListParams, apiKey?: string): Promise<ApiResponse<ParcelListResponse>>;
|
|
611
|
+
export interface StreetListRow {
|
|
612
|
+
street: string;
|
|
613
|
+
address_source: "rcn" | "approx";
|
|
614
|
+
}
|
|
615
|
+
export interface StreetListResponse {
|
|
616
|
+
data: StreetListRow[];
|
|
617
|
+
scope: {
|
|
618
|
+
teryt: string;
|
|
619
|
+
resolved_from: "teryt" | "location";
|
|
620
|
+
};
|
|
621
|
+
pagination: {
|
|
622
|
+
limit: number;
|
|
623
|
+
has_more: boolean;
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
export declare function getStreets(scope: {
|
|
627
|
+
q: string;
|
|
628
|
+
teryt?: string;
|
|
629
|
+
location?: string;
|
|
630
|
+
}, apiKey?: string): Promise<ApiResponse<StreetListResponse>>;
|
|
631
|
+
export interface ParcelFeature {
|
|
632
|
+
type: "Feature";
|
|
633
|
+
geometry: {
|
|
634
|
+
type: string;
|
|
635
|
+
coordinates: unknown;
|
|
636
|
+
} | null;
|
|
637
|
+
properties: {
|
|
638
|
+
id: string;
|
|
639
|
+
parcel_id: string | null;
|
|
640
|
+
parcel_key: string | null;
|
|
641
|
+
district: string | null;
|
|
642
|
+
};
|
|
643
|
+
}
|
|
644
|
+
export interface ParcelFeatureCollection {
|
|
645
|
+
type: "FeatureCollection";
|
|
646
|
+
truncated: boolean;
|
|
647
|
+
features: ParcelFeature[];
|
|
648
|
+
corpus_coverage?: CorpusCoverage | null;
|
|
649
|
+
}
|
|
650
|
+
export declare function getParcelsMap(bbox: string, limit: number | undefined, apiKey?: string): Promise<ApiResponse<ParcelFeatureCollection>>;
|
|
651
|
+
export declare function searchParcelsByPolygon(polygon: {
|
|
652
|
+
type: "Polygon";
|
|
653
|
+
coordinates: number[][][];
|
|
654
|
+
}, limit: number | undefined, apiKey?: string): Promise<ApiResponse<ParcelFeatureCollection>>;
|
|
492
655
|
export interface ParcelResolveMatch {
|
|
493
656
|
id: string;
|
|
494
657
|
parcel_id: string | null;
|
|
@@ -511,10 +674,11 @@ export interface ParcelResolveResponse {
|
|
|
511
674
|
lat?: number;
|
|
512
675
|
lng?: number;
|
|
513
676
|
};
|
|
514
|
-
coverage: "covered" | "not_covered";
|
|
677
|
+
coverage: "covered" | "not_covered" | "not_computed";
|
|
515
678
|
as_of: string | null;
|
|
516
679
|
matches: ParcelResolveMatch[];
|
|
517
680
|
truncated: boolean;
|
|
681
|
+
corpus_coverage?: CorpusCoverage | null;
|
|
518
682
|
}
|
|
519
683
|
export interface ResolveParcelParams {
|
|
520
684
|
q?: string;
|
|
@@ -606,12 +770,16 @@ export interface ParcelReportResponse {
|
|
|
606
770
|
flood: ReportSection;
|
|
607
771
|
heritage: ReportSection;
|
|
608
772
|
landslide: ReportSection;
|
|
773
|
+
subsurface: ReportSection;
|
|
609
774
|
surroundings: ReportSection;
|
|
610
775
|
transit: ReportSection;
|
|
611
776
|
planning: ReportSection;
|
|
612
777
|
buildings: ReportSection;
|
|
613
778
|
permits: ReportSection;
|
|
614
779
|
farmland: ReportSection;
|
|
780
|
+
land_class: ReportSection;
|
|
781
|
+
nature: ReportSection;
|
|
782
|
+
roads: ReportSection;
|
|
615
783
|
market_context: ReportMarketContext;
|
|
616
784
|
location_context: ReportLocationContext;
|
|
617
785
|
};
|
|
@@ -623,6 +791,24 @@ export interface ParcelReportResponse {
|
|
|
623
791
|
note?: string | null;
|
|
624
792
|
}
|
|
625
793
|
export declare function getParcelReport(parcelKey: string, apiKey?: string): Promise<ApiResponse<ParcelReportResponse>>;
|
|
794
|
+
export interface ParcelLandClassResponse {
|
|
795
|
+
parcel: {
|
|
796
|
+
id: string | null;
|
|
797
|
+
parcel_id: string | null;
|
|
798
|
+
parcel_key: string | null;
|
|
799
|
+
};
|
|
800
|
+
coverage: string;
|
|
801
|
+
as_of: string | null;
|
|
802
|
+
use_codes: string[];
|
|
803
|
+
use_names: string[];
|
|
804
|
+
soil_classes: string[];
|
|
805
|
+
protected_class_present: boolean;
|
|
806
|
+
in_city: boolean | null;
|
|
807
|
+
legal_note: string | null;
|
|
808
|
+
legal_state_as_of: string | null;
|
|
809
|
+
note?: string | null;
|
|
810
|
+
}
|
|
811
|
+
export declare function getParcelLandClass(parcelKey: string, apiKey?: string): Promise<ApiResponse<ParcelLandClassResponse>>;
|
|
626
812
|
export interface SpatialSearchParams {
|
|
627
813
|
polygon: {
|
|
628
814
|
type: "Polygon";
|
|
@@ -645,6 +831,10 @@ export interface SpatialSearchParams {
|
|
|
645
831
|
transactionType?: string;
|
|
646
832
|
rooms?: string;
|
|
647
833
|
floor?: string;
|
|
834
|
+
landUse?: string;
|
|
835
|
+
buildingStoreys?: string;
|
|
836
|
+
minFootprintArea?: number;
|
|
837
|
+
maxFootprintArea?: number;
|
|
648
838
|
limit?: number;
|
|
649
839
|
}
|
|
650
840
|
export interface SpatialFeatureProperties {
|
|
@@ -737,6 +927,19 @@ export interface CompareParams {
|
|
|
737
927
|
include?: string;
|
|
738
928
|
}
|
|
739
929
|
export declare function compareLocations(p: CompareParams, apiKey?: string): Promise<ApiResponse<CompareResponse>>;
|
|
930
|
+
export interface BuildingAgeEstimate {
|
|
931
|
+
status: "estimated" | "older_than_register" | "ambiguous_permits" | "ambiguous_buildings" | "ambiguous_both" | "no_parcel_key" | "not_applicable" | "not_computed";
|
|
932
|
+
year_from: number | null;
|
|
933
|
+
year_to: number | null;
|
|
934
|
+
year_point: number | null;
|
|
935
|
+
basis: string | null;
|
|
936
|
+
basis_year: number | null;
|
|
937
|
+
match_rule: string | null;
|
|
938
|
+
confidence: string | null;
|
|
939
|
+
offset_model: string | null;
|
|
940
|
+
last_works_year: number | null;
|
|
941
|
+
note: string;
|
|
942
|
+
}
|
|
740
943
|
export interface BuildingBreakdownRow {
|
|
741
944
|
building_type: number | null;
|
|
742
945
|
footprint_area_m2: number | null;
|
|
@@ -745,6 +948,7 @@ export interface BuildingBreakdownRow {
|
|
|
745
948
|
storeys: number | null;
|
|
746
949
|
est_total_area_m2: number | null;
|
|
747
950
|
match_confidence: string | null;
|
|
951
|
+
age_estimate?: BuildingAgeEstimate;
|
|
748
952
|
}
|
|
749
953
|
export interface BuildingBreakdownResponse {
|
|
750
954
|
data: BuildingBreakdownRow[];
|
|
@@ -806,6 +1010,25 @@ export interface LandslideBreakdownResponse {
|
|
|
806
1010
|
data: LandslideBreakdownRow[];
|
|
807
1011
|
truncated: boolean;
|
|
808
1012
|
}
|
|
1013
|
+
export interface NatureArea {
|
|
1014
|
+
form: string | null;
|
|
1015
|
+
name: string | null;
|
|
1016
|
+
overlap_pct: number | string | null;
|
|
1017
|
+
}
|
|
1018
|
+
export interface NatureBreakdownRow {
|
|
1019
|
+
forest_distance_m: number | null;
|
|
1020
|
+
forest_overlap_pct: number | string | null;
|
|
1021
|
+
protection_rank: number | null;
|
|
1022
|
+
building_restriction: "statutory_ban" | "conditional" | null;
|
|
1023
|
+
protected_overlap_pct: number | string | null;
|
|
1024
|
+
protected_forms: string[] | null;
|
|
1025
|
+
protected_areas: NatureArea[] | null;
|
|
1026
|
+
}
|
|
1027
|
+
export interface NatureBreakdownResponse {
|
|
1028
|
+
data: NatureBreakdownRow[];
|
|
1029
|
+
truncated: boolean;
|
|
1030
|
+
coverage?: "covered" | "covered_no_data" | "not_covered";
|
|
1031
|
+
}
|
|
809
1032
|
export interface TransitBreakdownRow {
|
|
810
1033
|
rail_distance_m: number | null;
|
|
811
1034
|
rail_stop_name: string | null;
|
|
@@ -841,6 +1064,41 @@ export interface PermitsResponse {
|
|
|
841
1064
|
}
|
|
842
1065
|
export declare function getTransactionHeritage(transactionId: string, apiKey?: string): Promise<ApiResponse<HeritageBreakdownResponse>>;
|
|
843
1066
|
export declare function getTransactionLandslide(transactionId: string, apiKey?: string): Promise<ApiResponse<LandslideBreakdownResponse>>;
|
|
1067
|
+
export declare function getTransactionNature(transactionId: string, apiKey?: string): Promise<ApiResponse<NatureBreakdownResponse>>;
|
|
1068
|
+
export interface SubsurfaceMiningTerrain {
|
|
1069
|
+
name: string | null;
|
|
1070
|
+
status: "active" | "former" | string | null;
|
|
1071
|
+
mineral_class: "subsidence" | "surface" | "fluid" | "other" | string | null;
|
|
1072
|
+
oversight_authority: string | null;
|
|
1073
|
+
valid_until: string | null;
|
|
1074
|
+
revoked_on: string | null;
|
|
1075
|
+
overlap_pct: number | string | null;
|
|
1076
|
+
}
|
|
1077
|
+
export interface SubsurfaceGroundwaterBody {
|
|
1078
|
+
number: number | null;
|
|
1079
|
+
name: string | null;
|
|
1080
|
+
documentation_status: "documented" | "undocumented" | string | null;
|
|
1081
|
+
documented_year: number | null;
|
|
1082
|
+
depth_from_m: number | null;
|
|
1083
|
+
medium_type: string | null;
|
|
1084
|
+
overlap_pct: number | string | null;
|
|
1085
|
+
}
|
|
1086
|
+
export interface SubsurfaceBreakdownRow {
|
|
1087
|
+
mining_status: "active" | "former" | string | null;
|
|
1088
|
+
mineral_class: "subsidence" | "surface" | "fluid" | "other" | string | null;
|
|
1089
|
+
mining_overlap_pct: number | string | null;
|
|
1090
|
+
mining_terrains: SubsurfaceMiningTerrain[] | null;
|
|
1091
|
+
mining_terrains_capped?: boolean | null;
|
|
1092
|
+
groundwater_status: "documented" | "undocumented" | string | null;
|
|
1093
|
+
groundwater_overlap_pct: number | string | null;
|
|
1094
|
+
groundwater_bodies: SubsurfaceGroundwaterBody[] | null;
|
|
1095
|
+
groundwater_bodies_capped?: boolean | null;
|
|
1096
|
+
}
|
|
1097
|
+
export interface SubsurfaceBreakdownResponse {
|
|
1098
|
+
data: SubsurfaceBreakdownRow[];
|
|
1099
|
+
truncated: boolean;
|
|
1100
|
+
}
|
|
1101
|
+
export declare function getTransactionSubsurface(transactionId: string, apiKey?: string): Promise<ApiResponse<SubsurfaceBreakdownResponse>>;
|
|
844
1102
|
export interface SurroundingsRow {
|
|
845
1103
|
assessed: boolean;
|
|
846
1104
|
cemetery_distance_m: number | string | null;
|
|
@@ -849,12 +1107,32 @@ export interface SurroundingsRow {
|
|
|
849
1107
|
industrial_area_distance_m: number | string | null;
|
|
850
1108
|
industrial_plant_distance_m: number | string | null;
|
|
851
1109
|
livestock_farm_distance_m: number | string | null;
|
|
1110
|
+
power_line_hv_distance_m?: number | string | null;
|
|
1111
|
+
power_line_ehv_distance_m?: number | string | null;
|
|
852
1112
|
}
|
|
853
1113
|
export interface SurroundingsResponse {
|
|
854
1114
|
data: SurroundingsRow[];
|
|
855
1115
|
truncated?: boolean;
|
|
856
1116
|
}
|
|
857
1117
|
export declare function getTransactionSurroundings(transactionId: string, apiKey?: string): Promise<ApiResponse<SurroundingsResponse>>;
|
|
1118
|
+
export interface RoadsBreakdownRow {
|
|
1119
|
+
assessed: boolean;
|
|
1120
|
+
access_indicator: "likely" | "uncertain" | "unlikely" | string | null;
|
|
1121
|
+
access_rule_version: number | null;
|
|
1122
|
+
public_road_distance_m: number | string | null;
|
|
1123
|
+
public_road_edge_distance_m: number | string | null;
|
|
1124
|
+
public_road_category: "national" | "voivodeship" | "county" | "municipal" | string | null;
|
|
1125
|
+
public_road_class: "motorway" | "expressway" | "main_accelerated" | "main" | "collector" | "local" | "access" | "other" | string | null;
|
|
1126
|
+
public_road_at_grade: boolean | null;
|
|
1127
|
+
any_road_distance_m: number | string | null;
|
|
1128
|
+
major_road_distance_m: number | string | null;
|
|
1129
|
+
source_as_of: string | null;
|
|
1130
|
+
}
|
|
1131
|
+
export interface RoadsBreakdownResponse {
|
|
1132
|
+
data: RoadsBreakdownRow[];
|
|
1133
|
+
truncated?: boolean;
|
|
1134
|
+
}
|
|
1135
|
+
export declare function getTransactionRoads(transactionId: string, apiKey?: string): Promise<ApiResponse<RoadsBreakdownResponse>>;
|
|
858
1136
|
export declare function getTransactionTransit(transactionId: string, apiKey?: string): Promise<ApiResponse<TransitBreakdownResponse>>;
|
|
859
1137
|
export declare function getTransactionPermits(transactionId: string, apiKey?: string): Promise<ApiResponse<PermitsResponse>>;
|
|
860
1138
|
export interface PlanningRow {
|