---
title: "Get a parcel and its neighbouring parcels"
description: "Returns the raw GeoServer GeoJSON `FeatureCollection` for a parcel located by `lat`/`lng` or `egrid` (currently the same query as `/res_api/parcel_data`; a bounding-box neighbour filter is planned).\n\n**GET alias (cacheable).** Identical handler and identical response to the POST, with the inputs as query parameters. A POST is uncacheable by browsers and by any CDN, so apps on a first-load path should prefer this GET.\n\nThe response carries `Cache-Control: private, max-age=3600, stale-while-revalidate=600` and `Vary: Origin, token`. The policy is **private, never public**: the endpoint is gated on the `token` request header, and a header is not part of any shared-cache key - a `public`/`s-maxage` directive would let a CDN serve the payload to a caller that never presented the token. Error responses (including the legacy HTTP-200 plain-text ones) carry `Cache-Control: no-store`."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.aireon.ch/llms.txt
> Use this file to discover all available pages before exploring further.

Path: RES API (public) › Parcel

`GET /res_api/parcel_data_neighbor`

Returns the raw GeoServer GeoJSON `FeatureCollection` for a parcel located by `lat`/`lng` or `egrid` (currently the same query as `/res_api/parcel_data`; a bounding-box neighbour filter is planned).

**GET alias (cacheable).** Identical handler and identical response to the POST, with the inputs as query parameters. A POST is uncacheable by browsers and by any CDN, so apps on a first-load path should prefer this GET.

The response carries `Cache-Control: private, max-age=3600, stale-while-revalidate=600` and `Vary: Origin, token`. The policy is **private, never public**: the endpoint is gated on the `token` request header, and a header is not part of any shared-cache key - a `public`/`s-maxage` directive would let a CDN serve the payload to a caller that never presented the token. Error responses (including the legacy HTTP-200 plain-text ones) carry `Cache-Control: no-store`.

## Authentication

- `ResApiToken`, apiKey, in header, header `token`

## Query parameters

- `egrid` (`getParcelDataNeighborGet.query.egrid`; string, optional): Canonical federal parcel id (EGRID). Preferred over lat/lng.
- `lat` (`getParcelDataNeighborGet.query.lat`; number, optional): WGS84 latitude. Required together with `lng` when `egrid` is absent.
- `lng` (`getParcelDataNeighborGet.query.lng`; number, optional): WGS84 longitude. Required together with `lat` when `egrid` is absent.

## Code samples

### cURL

```bash
curl --request GET \
  --url https://res.aireon.ch/res_api/parcel_data_neighbor \
  --header 'token: <token>'
```

### TypeScript

```typescript
const url = 'https://res.aireon.ch/res_api/parcel_data_neighbor';
const options = {method: 'GET', headers: {token: '<token>'}};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://res.aireon.ch/res_api/parcel_data_neighbor"

headers = {"token": "<token>"}

response = requests.get(url, headers=headers)

print(response.text)
```

## Responses

### 200

GeoJSON FeatureCollection, or a plain-text error body.

#### Body (application/json)

- `type` (`getParcelDataNeighborGet.response.200.type`; string, optional)
- `features` (`getParcelDataNeighborGet.response.200.features`; array<object>, optional)
  - `type` (`getParcelDataNeighborGet.response.200.features.type`; string, optional)
  - `id` (`getParcelDataNeighborGet.response.200.features.id`; string, optional)
  - `geometry` (`getParcelDataNeighborGet.response.200.features.geometry`; object, optional)
  - `properties` (`getParcelDataNeighborGet.response.200.features.properties`; object, optional): Open property bag. /res_api/parcel_data adds the following room-app density fields on the first feature.
    - `ratio_v` (`getParcelDataNeighborGet.response.200.features.properties.ratio_v`; number | null, optional): Built volume relative to the zone reference volume (percent; 100 = typical for the zone), i.e. cz_util_now divided by the zone 20-year median utilization x 100. It is not utilization and not a share of a legal allowance. Existing value from the parcel table is passed through unchanged; computed as bldg_vol_sb3dgdb / vol_max * 100 when absent (vol_max is the zone reference volume).
    - `free_v` (`getParcelDataNeighborGet.response.200.features.properties.free_v`; number | null, optional): vol_max - bldg_vol_sb3dgdb, in m³: the zone reference volume minus the built volume. Negative when the parcel is built above the zone reference; not a legal allowance.
    - `ratio_s` (`getParcelDataNeighborGet.response.200.features.properties.ratio_s`; number | null, optional): Built-footprint / parcel_area (percent). Passed through from the parcel table when populated.
    - `gfz` (`getParcelDataNeighborGet.response.200.features.properties.gfz`; number | null, optional): Geschossflächenziffer - gfa_now / parcel_area.
    - `bldg_height_m` (`getParcelDataNeighborGet.response.200.features.properties.bldg_height_m`; number | null, optional): Tallest building on the parcel, in metres (= bldg_height_max).
    - `bldg_floors_n` (`getParcelDataNeighborGet.response.200.features.properties.bldg_floors_n`; number | null, optional): Max number of floors on the parcel (= bldg_floors).

##### Example

```json
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "id": "string",
      "geometry": {},
      "properties": {
        "ratio_v": 0,
        "free_v": 0,
        "ratio_s": 0,
        "gfz": 0,
        "bldg_height_m": 0,
        "bldg_floors_n": 0
      }
    }
  ]
}
```

#### Body (text/html)

##### Example

```text
Missing Token
```

### 401

Authentication missing or invalid.

#### Example

```json
{
  "error": "string",
  "message": "string"
}
```

- `error` (`getParcelDataNeighborGet.response.401.error`; string, required): Human-readable error description.
- `message` (`getParcelDataNeighborGet.response.401.message`; string, optional): Optional underlying error message.


Source: https://docs.aireon.ch/res/get-parcel-data-neighbor-get/index.md
