@cenogram/mcp-server 0.6.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 +35 -6
- 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 -121
- package/dist/tools.js +334 -45
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
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) - 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 and
|
|
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).
|
|
@@ -215,15 +227,16 @@ You can also use the `--http` CLI flag instead of `MCP_TRANSPORT=http`.
|
|
|
215
227
|
| `search_transactions` | Search transactions with filters | location, street, buildingNumber, parcelId, propertyType, marketType, price/date/area range |
|
|
216
228
|
| `get_price_statistics` | Price/m2 stats by location (residential only) | location (optional) |
|
|
217
229
|
| `get_price_distribution` | Price histogram | bins, maxPrice |
|
|
218
|
-
| `search_by_area` | Search by geographic radius | latitude, longitude, radiusKm |
|
|
230
|
+
| `search_by_area` | Search transactions by geographic radius | latitude, longitude, radiusKm |
|
|
219
231
|
| `get_market_overview` | Database overview and stats | (none) |
|
|
220
232
|
| `list_locations` | List available locations | search (optional) |
|
|
221
233
|
| `search_parcels` | Search parcels by cadastral ID prefix | q (parcel ID prefix, min 3 chars) |
|
|
222
|
-
| `
|
|
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 |
|
|
223
236
|
| `compare_locations` | Compare stats across 2-5 districts | districts (comma-separated), propertyType |
|
|
224
237
|
| `get_building_breakdown` | Per-building breakdown for one transaction (footprint, storeys, est. floor area) | transaction_id (UUID from a search result) |
|
|
225
|
-
| `get_parcel_report` | Composite dossier for one parcel: core,
|
|
226
|
-
| `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 |
|
|
227
240
|
| `get_demographics` | Population and demographic context for a location | location or teryt, year (or yearFrom/yearTo), category |
|
|
228
241
|
| `get_infrastructure_signals` | Municipal infrastructure signals (tenders, utilities, capital spending) | location or teryt |
|
|
229
242
|
| `estimate_value` | Comparable-sales value estimate for a property | area, plus lat + lng or parcelId; rooms, market |
|
|
@@ -235,6 +248,9 @@ You can also use the `--http` CLI flag instead of `MCP_TRANSPORT=http`.
|
|
|
235
248
|
| `get_transaction_permits` | Building permits recorded for the property | transaction_id |
|
|
236
249
|
| `get_transaction_planning` | Local zoning and planning status for the property | transaction_id |
|
|
237
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 |
|
|
238
254
|
|
|
239
255
|
### Location naming
|
|
240
256
|
|
|
@@ -266,13 +282,24 @@ Results include parcel IDs and GPS coordinates, enabling multi-step research:
|
|
|
266
282
|
|
|
267
283
|
This mimics how a property appraiser finds comparable transactions for valuation reports.
|
|
268
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
|
+
|
|
269
296
|
## Data
|
|
270
297
|
|
|
271
298
|
- **8M+ transactions** from all of Poland (380 counties)
|
|
272
299
|
- **Date range:** 2003 - present
|
|
273
300
|
- **Source:** Polish national RCN registry (Rejestr Cen Nieruchomosci)
|
|
274
301
|
- **Refresh:** periodic updates from RCN
|
|
275
|
-
- **Per-parcel context:** zoning, flood and landslide risk, heritage register, building permits and construction activity, transit access, agricultural land use and
|
|
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
|
|
276
303
|
|
|
277
304
|
## Troubleshooting
|
|
278
305
|
|
|
@@ -284,6 +311,8 @@ This mimics how a property appraiser finds comparable transactions for valuation
|
|
|
284
311
|
|
|
285
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.
|
|
286
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
|
+
|
|
287
316
|
## Development
|
|
288
317
|
|
|
289
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 {
|