---
title: "Relief, protected areas and climate normals of a parcel"
method: GET
path: "/api/catastro/{refcat}/terrain"
tags: ["Hazards"]
---

# Relief, protected areas and climate normals of a parcel

`GET /api/catastro/{refcat}/terrain`

## Request

- Base URL: `https://api.parcelgps.com`
- URL: `https://api.parcelgps.com/api/catastro/{refcat}/terrain`
- Auth: API key in header `X-API-Key`

Three blocks for one parcel, each with its own `status` and `source` (licence and the attribution string that must be shown next to the data):

- `relief`: elevation, slope and aspect over the parcel outline from Copernicus DEM GLO-30 (30 m).
- `protected_areas`: Natura 2000 sites and nationally designated areas (EEA) that overlap the parcel, with the overlap share.
- `climate`: ERA5-Land climate normals at the parcel point (mean temperature, precipitation, frost and hot days, recent change); `status: unavailable` while the grid cannot be read.

In `ES`, `PV`, `NA`, `PT`, `FR`, `IT` and `DE` the reference alone is enough. In every other covered country pass `lat` and `lng` (the `latitud` and `longitud` of `/api/catastro/{refcat}` or `/api/search/coordinates`) so the outline can be found. A reference with a slash goes URL-encoded (`%2F`). Costs 1 unit of the monthly quota.

## Path parameters

- `refcat` string, required

## Query parameters

- `country` string
- `lat` number
- `lng` number

## Response `200`

Relief, protected areas and climate of the parcel. Real response measured in production on 30 September 2026 (climate block left out).

- TerrainResponse
  - `success` boolean
  - `data` Terrain
    - `refcat` string, required
    - `country` string, required
    - `relief` object, required: Copernicus DEM GLO-30 cells inside the outline (`sample.method: parcel`); for a parcel smaller than a cell, the cell under its centroid or point.
      - `status` 'ok' | 'no_data' | 'unavailable': `ok`: the block carries data. `no_data`: there is nothing to measure here (for example no elevation over open sea). `unavailable`: the source could not be read; retry later.
      - `elevation_m` object
        - `mean` number
        - `min` number
        - `max` number
      - `slope` object
        - `mean_pct` number
        - `mean_deg` number
        - `max_pct` number
        - `class` 'flat' | 'gentle' | 'moderate' | 'steep' | 'very_steep'
        - `max_class` 'flat' | 'gentle' | 'moderate' | 'steep' | 'very_steep'
        - `share_over_10_pct` number: Share of the parcel with a slope above 10 %.
        - `classes_pct` object
      - `aspect` object
        - `dominant` 'N' | 'NE' | 'E' | 'SE' | 'S' | 'SW' | 'W' | 'NW' | 'flat'
        - `dominant_share_pct` number
        - `mean_deg` number, nullable
        - `flat_share_pct` number
        - `sectors_pct` object
      - `sample` object
        - `method` 'parcel' | 'centroid' | 'point'
        - `cells` integer
        - `resolution_m` number
      - `source` TerrainDataSource
        - `name` string
        - `provider` string
        - `license` string
        - `attribution` string: Show it next to the data.
        - `url` string
        - `resolution` string
        - `edition` string
    - `protected_areas` object, required
      - `status` 'ok' | 'no_data' | 'unavailable': `ok`: the block carries data. `no_data`: there is nothing to measure here (for example no elevation over open sea). `unavailable`: the source could not be read; retry later.
      - `intersects` boolean: Some protected site touches the parcel.
      - `inside` boolean: The parcel lies entirely inside a protected site.
      - `max_overlap_pct` number, nullable
      - `natura2000` object[]
        - `code` string
        - `name` string
        - `type` 'SPA' | 'SCI' | 'SPA_SCI': Natura 2000 only: Birds Directive (SPA), Habitats Directive (SCI) or both.
        - `designation` string: National areas only, for example National Park.
        - `country` string
        - `overlap_pct` number, nullable: Share of the parcel inside the site; null when only the point was checked.
      - `national` object[]
        - `code` string
        - `name` string
        - `type` 'SPA' | 'SCI' | 'SPA_SCI': Natura 2000 only: Birds Directive (SPA), Habitats Directive (SCI) or both.
        - `designation` string: National areas only, for example National Park.
        - `country` string
        - `overlap_pct` number, nullable: Share of the parcel inside the site; null when only the point was checked.
      - `method` 'parcel' | 'point'
      - `sources` TerrainDataSource[]
        - `name` string
        - `provider` string
        - `license` string
        - `attribution` string: Show it next to the data.
        - `url` string
        - `resolution` string
        - `edition` string
    - `climate` object, required: ERA5-Land monthly means over the 0.1° cell of the parcel point.
      - `status` 'ok' | 'no_data' | 'unavailable': `ok`: the block carries data. `no_data`: there is nothing to measure here (for example no elevation over open sea). `unavailable`: the source could not be read; retry later.
      - `baseline` object
        - `start_year` integer
        - `end_year` integer
        - `mean_temp_c` number
        - `annual_precip_mm` number
        - `frost_days_per_year` number
        - `hot_days_per_year` number
      - `recent` object
        - `start_year` integer
        - `end_year` integer
        - `mean_temp_c` number
        - `annual_precip_mm` number
        - `frost_days_per_year` number
        - `hot_days_per_year` number
      - `change` object
        - `mean_temp_c` number
        - `annual_precip_mm` number
        - `annual_precip_pct` number
        - `frost_days_per_year` number
        - `hot_days_per_year` number
      - `frost_threshold_c` integer
      - `hot_threshold_c` integer
      - `cell` object
        - `lat` number
        - `lng` number
        - `resolution_deg` number
      - `source` TerrainDataSource
        - `name` string
        - `provider` string
        - `license` string
        - `attribution` string: Show it next to the data.
        - `url` string
        - `resolution` string
        - `edition` string
    - `calculated_at` string, date-time, required
    - `provenance` string
    - `nitrate_zones` object: Spain only (ES, PV, NA): nitrate vulnerable zones designated under Real Decreto 47/2022 (MITECO layer). Absent for other countries.
      - `status` 'ok' | 'no_data' | 'unavailable'
      - `intersects` boolean: Some vulnerable zone touches the parcel.
      - `inside` boolean: The parcel lies entirely inside a vulnerable zone.
      - `max_overlap_pct` number, nullable
      - `zones` object[]
        - `code` string: MITECO zone identifier, e.g. `ES52_46019`.
        - `name` string
        - `designated_on` string, date
        - `overlap_pct` number, nullable: Share of the parcel inside the zone; null when only the point was checked.
      - `edition` string: Edition of the MITECO layer, e.g. `dic2024`.
      - `method` 'parcel' | 'point'
      - `source` TerrainDataSource
        - `name` string
        - `provider` string
        - `license` string
        - `attribution` string: Show it next to the data.
        - `url` string
        - `resolution` string
        - `edition` string

## Other responses

- `400`: Malformed parameters (code VALIDATION_ERROR).
- `401`: Missing, malformed or unknown API key (KEY_AUTH_001, KEY_AUTH_002, KEY_AUTH_003, UNAUTHORIZED).
- `404`: NOT_FOUND: the parcel was not found, or `lat` and `lng` are missing in a country that needs them. Free.
- `429`: KEY_AUTH_004: monthly quota used up and no prepaid balance left to cover the request (see X-Quota-*); nothing is charged. The message says the plan, the price per 1,000 extra units, where to top up and when the quota resets. KEY_RATE_002 or RATE_LIMIT_EXCEEDED: per-minute limit, wait Retry-After seconds.
- `503`: TRN_040: terrain data is temporarily unavailable. Free.

---

[API](https://skmtc.dev/catastrogps/apis/catastro-gps-api.md) · [All operations](https://skmtc.dev/catastrogps/apis/catastro-gps-api/llms.txt) · [OpenAPI document](https://skmtc.dev/catastrogps/apis/catastro-gps-api/revisions/1a86d44aa8ae?raw)
