Documentación API

Referencia completa de la API catastral

Base URL

https://api.parcelgps.com

Especificación OpenAPI 3.1

Todos los endpoints de esta página en formato máquina, para Postman, Insomnia o generadores de clientes:

https://api.parcelgps.com/api/openapi.json

Las páginas de unidades y las búsquedas de dirección llevan ETag: con If-None-Match la respuesta es 304 sin cuerpo y no gasta cuota.

apartmentGuía: importar una comunidad de propietarios en 3 llamadas

Códigos de país

Los endpoints aceptan ?country=XX. Es opcional: sin él, la API detecta el país por la forma de la referencia en 21 países. Si la referencia es ambigua responde 300 CNV_AMBIGUOUS con los candidatos; si es de un país sin cobertura, 422 CNV_COVERAGE; si parece un nombre de lugar, 422 CNV_PLACE_NAME con el punto geocodificado. La España peninsular usa ES, pero el País Vasco y Navarra tienen catastro propio (foral) y requieren su propio código: con ES sus parcelas no se encuentran.

ES · EspañaPV · País VascoNA · NavarraPT · PortugalFR · FranciaIT · ItaliaDE · AlemaniaAT · AustriaPL · PoloniaNL · Países BajosCZ · ChequiaFI · FinlandiaBE · BélgicaEE · EstoniaSI · EsloveniaLT · LituaniaLU · LuxemburgoSK · EslovaquiaBG · BulgariaCY · ChipreIS · IslandiaLI · LiechtensteinCH · Suiza

Referencia de endpoints

MétodoEndpointAuthDescripción
GET/api/resolve?q=TEXTAPI KeyClasifica cualquier texto: referencia (y país), coordenadas o topónimo. Sin cuota.
GET/api/search/address/candidates?q=TEXT&country=XXAPI KeyDirección → parcela con candidatos por confianza: España y otros 25 países europeos
GET/api/catastro/:refcatAPI KeyConsulta de parcela
GET/api/catastro/:refcat14/unitsAPI KeyTodas las unidades de una finca (viviendas, locales, garajes) — España
GET/api/catastro/:refcat/polygon?country=XXAPI KeyGeometría de la parcela (GeoJSON)
GET/api/catastro/:refcat/terrain?country=XXAPI KeyRelieve (altitud, pendiente, orientación) y Red Natura 2000 / espacios protegidos de la parcela
GET/api/catastro/:refcat/ground-motion?country=XXAPI KeyMovimiento del terreno (hundimiento o subida en mm/año, 2020-2024) medido por satélite
GET/api/catastro/:refcat/solar?country=XXAPI KeyPotencial solar
GET/api/catastro/:refcat/agro?country=XXAPI KeyDatos agrícolas del suelo
GET/api/export/kml?refcat=X&country=XAPI KeyExportar KML/GPX/PDF/DXF
GET/api/catastro/:refcat/market?country=XXWeb y appDatos de mercado (no vía API)
GET/api/catastro/:refcat/score?country=XXWeb y appScore de inversión (no vía API)

Fiabilidad

Qué servimos desde nuestra propia infraestructura y qué depende de un organismo público. Si vas a producción, esto es lo que conviene saber antes.

EndpointDe dónde salen los datos
/catastro/:refcat (ES)Copia propia del catastro (50,9 M de parcelas). No depende del Catastro para responder.
/polygon · /search/address · /search/coordinatesCatastro (organismo público). Puede fallar sin previo aviso.
/agroSIGPAC
/solarPVGIS

Errores y reintentos

Un 503 significa que una fuente oficial no responde en ese momento: reinténtalo con espera creciente y volverá solo. Un 429 es tu cuota, y reintentar no la devuelve — espera al reinicio o sube de plan. Un 404 es una referencia que no existe y no debe reintentarse.

Página de estado

Publicamos el estado de nuestra API y de las nueve fuentes catastrales de las que dependemos, comprobado cada cinco minutos y alojado fuera de esta API para que siga siendo fiable durante una caída: catastrogps.es/status.

Autenticación

Todas las peticiones a la API requieren una API key enviada en la cabecera X-API-Key.

curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/9872023VH5797S"

Obtiene tu API key gratuita en tu panel de desarrollador.

Códigos de error

EstadoCódigoDescripción
200—OK — La petición se ha completado correctamente.
400VALIDATION_ERRORBad Request — Parámetros inválidos o referencia catastral con formato incorrecto.
401UNAUTHORIZEDUnauthorized — API key inválida, expirada o no proporcionada.
404NOT_FOUNDNot Found — No se encontró la parcela con la referencia o coordenadas indicadas. No gasta cuota.
429KEY_AUTH_004Quota Exceeded — Has agotado la cuota mensual de tu plan. Las cabeceras X-Quota-Remaining y X-Quota-Reset indican cuánto te queda y cuándo se reinicia.
429RATE_LIMIT_EXCEEDED / DAILY_LIMIT_REACHEDToo Many Requests — KEY_RATE_002: superaste el límite de ráfaga por minuto de tu clave (Free 10, Developer 60, Startup 120, Growth 300). RATE_LIMIT_EXCEEDED: demasiadas peticiones desde la misma IP. Ambos llevan X-RateLimit-* y Retry-After. DAILY_LIMIT_REACHED: límite diario de búsquedas gratuitas sin API key.
500INTERNAL_ERRORInternal Server Error — Error en nuestro servidor. Si persiste, contacta con soporte.
503SERVICE_UNAVAILABLEService Unavailable — El servicio catastral externo del país consultado no está disponible temporalmente. Estos servicios los gestionan organismos públicos (Catastro, DGT, Géoportail, Agenzia Entrate, ALKIS...) y están fuera de nuestro control. Reintenta en unos minutos.

Cabeceras de cuota y de rate limit

Hay dos familias de cabeceras y miden cosas distintas. X-Quota-* es la cuota mensual de tu plan: la que se agota con KEY_AUTH_004.

CabeceraDescripción
X-Quota-LimitLlamadas incluidas al mes en tu plan (p. ej. 5000).
X-Quota-RemainingLlamadas que te quedan este mes.
X-Quota-ResetFecha de reinicio de la cuota mensual (ISO 8601, UTC).
X-Quota-TierNombre del tier actual (free, basic, pro, business).

X-RateLimit-* es el límite de ráfaga por minuto de tu clave, según el plan: Free 10, Developer 60, Startup 120 y Growth 300 peticiones cada 60 segundos. No tiene nada que ver con la cuota mensual.

CabeceraDescripción
X-RateLimit-LimitPeticiones permitidas por minuto con tu clave (según tu plan).
X-RateLimit-RemainingPeticiones que te quedan en el minuto en curso.
X-RateLimit-ResetSegundos que faltan para que se reinicie la ventana de un minuto.

Guías por caso de uso

Cuatro trabajos reales resueltos con llamadas de la API. Cada paso trae la llamada en cURL, con el SDK de JavaScript y con el de Python, y la respuesta real que devolvió producción.

Comprobar una finca antes de comprarla

De la dirección del anuncio a lo que dice el Catastro y lo que se ve desde el satélite: qué finca es, qué hay dentro, si cae en un espacio protegido y si el terreno se mueve. Cada paso usa una finca distinta para enseñar un caso con datos; en tu flujo es la misma referencia de principio a fin.

Países: ES

1. De la dirección a la finca

La dirección en texto libre devuelve candidatos ordenados por confianza (0 a 1) con la referencia de 14 caracteres, el uso, las viviendas y el año. Por encima de 0,75 coinciden número y municipio. Cuesta 1 unidad solo si hay candidatos.

curl -G "https://api.parcelgps.com/api/search/address/candidates" \
  --data-urlencode "q=Avenida José Rodríguez de la Borbolla Camoyán 10, Dos Hermanas" \
  --data-urlencode "limit=3" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Respuesta real

{
  "success": true,
  "data": {
    "consulta": {
      "texto": "Avenida José Rodríguez de la Borbolla Camoyán 10, Dos Hermanas",
      "calle": "Avenida José Rodríguez de la Borbolla Camoyán",
      "numero": 10,
      "municipio": "Dos Hermanas"
    },
    "candidatos": [
      {
        "refCatastral": "0745901TG4304N",
        "pais": "ES",
        "direccion": "AVENIDA JOSE RGUEZ BORBOLLA CAMOY 10",
        "numero": 10,
        "codigoPostal": "41704",
        "municipio": "Dos Hermanas",
        "provincia": "Sevilla",
        "latitud": 37.31947088654626,
        "longitud": -5.926788955974699,
        "confianza": 0.93,
        "coincideNumero": true,
        "coincideMunicipio": true,
        "enCopia": true,
        "direccionCatastro": "AV JOSE RGUEZ BORBOLLA CAMOY 10",
        "uso": "Residencial",
        "viviendas": 346,
        "anioConstruccion": 2023
      },
      {
        "refCatastral": "0747201TG4304N",
        "pais": "ES",
        "direccion": "BULEVAR JOSE RODRIGUEZ DE LA BORBOLLA CAMOYAN 11",
        "numero": 11,
        "confianza": 0.55,
        "coincideNumero": false,
        "coincideMunicipio": true,
        "enCopia": true
      }
    ],
    "attribution": "CartoCiudad (Instituto Geográfico Nacional) y Dirección General del Catastro"
  }
}

2. Qué hay dentro: viviendas, locales y anejos

Con la referencia de 14 caracteres salen todas las unidades de la finca con uso, superficie, planta, puerta y coeficiente de participación. Sirve para comprobar que la superficie y el uso del anuncio coinciden con el Catastro. Cuesta 1 unidad por unidad servida.

curl "https://api.parcelgps.com/api/catastro/0745901TG4304N/units" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Respuesta real

HTTP/2 200
etag: "5ab6bd3d95f85dddba81818bcb0cb65e"
cache-control: private, max-age=21600
x-quota-remaining: 2893

{
  "success": true,
  "data": {
    "refCatastral": "0745901TG4304N",
    "direccion": "AV JOSE RGUEZ BORBOLLA CAMOY 10",
    "codigoPostal": "41704",
    "municipio": "DOS HERMANAS",
    "provincia": "Sevilla",
    "usoGeneral": "Residencial",
    "superficieTotal": 32789,
    "anioConstruccion": 2023,
    "totalUnidades": 200,
    "totalUnidadesFinca": 365,
    "unidades": [
      {
        "refCatastral": "0745901TG4304N0002KH",
        "escalera": "",
        "planta": "01",
        "puerta": "B",
        "uso": "Residencial",
        "superficie": 155,
        "descripcion": "Planta 01, Pta. B - Residencial",
        "participacion": 0.279543,
        "anio": 2023,
        "direccion": "AV JOSE RGUEZ BORBOLLA CAMOY 10 Pl:01 Pt:B"
      },
      {
        "refCatastral": "0745901TG4304N0003LJ",
        "escalera": "",
        "planta": "01",
        "puerta": "C",
        "uso": "Residencial",
        "superficie": 163,
        "descripcion": "Planta 01, Pta. C - Residencial",
        "participacion": 0.293879,
        "anio": 2023,
        "direccion": "AV JOSE RGUEZ BORBOLLA CAMOY 10 Pl:01 Pt:C"
      }
    ],
    "truncated": true,
    "nextCursor": "0745901TG4304N0201MZ",
    "dataSource": "clone",
    "dataDate": "2026-01-23",
    "attribution": "Dirección General del Catastro"
  },
  "searchesRemaining": -1
}

3. Espacios protegidos: Natura 2000 y parques

Antes de comprar suelo rústico conviene saber si cae dentro de un espacio protegido: limita lo que se puede construir o plantar. /terrain cruza el contorno de la parcela con Natura 2000 y los espacios nacionales (CDDA) y dice qué parte de la parcela queda dentro. Ejemplo real: una parcela entera dentro del Parque Nacional de Monfragüe.

curl "https://api.parcelgps.com/api/catastro/10194A00110004/terrain?country=ES" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Respuesta real, recortada

{
  "success": true,
  "data": {
    "refcat": "10194A00110004",
    "country": "ES",
    "protected_areas": {
      "status": "ok",
      "intersects": true,
      "inside": true,
      "max_overlap_pct": 100,
      "natura2000": [
        {
          "code": "ES0000014",
          "name": "Monfragüe y las Dehesas del Entorno",
          "type": "SPA",
          "country": "ES",
          "overlap_pct": 100
        },
        {
          "code": "ES4320077",
          "name": "Monfragüe",
          "type": "SCI",
          "country": "ES",
          "overlap_pct": 100
        }
      ],
      "national": [
        {
          "code": "4820",
          "name": "Monfragüe",
          "designation": "National Park",
          "country": "ES",
          "overlap_pct": 100
        }
      ],
      "method": "parcel",
      "sources": [
        {
          "name": "Natura 2000",
          "license": "CC BY 4.0",
          "edition": "end 2024"
        },
        {
          "name": "Nationally designated areas (CDDA)",
          "license": "CC BY 4.0",
          "edition": "2025"
        }
      ]
    }
  }
}

4. Si el terreno se hunde

/ground-motion da la velocidad vertical del terreno medida por el radar de Sentinel-1 (Copernicus EGMS, 2020-2024) sobre la parcela. Ejemplo real: una parcela de Murcia que baja 40,9 mm al año, clase severe_subsidence. Si el satélite no tiene reflectores (campo abierto, bosque, agua), responde status no_data en vez de inventar.

curl "https://api.parcelgps.com/api/catastro/30024A16000286/ground-motion?country=ES" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Respuesta real

{
  "success": true,
  "data": {
    "refcat": "30024A16000286",
    "country": "ES",
    "status": "ok",
    "period": { "from": "2020-01", "to": "2024-12", "label": "2020-2024" },
    "ground_motion": {
      "class": "severe_subsidence",
      "worst_class": "severe_subsidence",
      "vertical": {
        "mean_mm_year": -40.9, "max_subsidence_mm_year": -40.9, "max_uplift_mm_year": 0,
        "std_mm_year": 0.1, "acceleration_mm_year2": -0.7, "rmse_mm": 2.3
      },
      "east_west": { "mean_mm_year": -5.1, "std_mm_year": 0.1 },
      "yearly_displacement": [
        { "year": 2020, "mm": -17.9 }, { "year": 2021, "mm": -57.2 }, { "year": 2022, "mm": -95.8 },
        { "year": 2023, "mm": -141.8 }, { "year": 2024, "mm": -179.8 }
      ],
      "cells_with_data": 1, "cells_considered": 1, "coverage_pct": 100,
      "basis": "parcel", "cell_size_m": 100
    },
    "source": {
      "name": "European Ground Motion Service (EGMS) L3 Ortho",
      "license": "Copernicus data policy (Regulation (EU) No 1159/2013): free, commercial use allowed with attribution",
      "attribution": "Contains modified Copernicus Land Monitoring Service information, European Ground Motion Service 2020-2024 (© European Union, Copernicus Land Monitoring Service, EEA)",
      "resolution": "100 m"
    },
    "calculated_at": "2026-10-01T06:14:34Z",
    "provenance": "1"
  }
}

Cartera de un administrador de fincas

Importar todas las fincas que gestionas con sus unidades y volver a comprobarlas cada mes sin pagar dos veces por lo que no ha cambiado.

Países: ES

1. Primera importación

Recorre tu lista de referencias de 14 caracteres. Cada página trae hasta 200 unidades y un nextCursor; los SDK siguen el cursor por ti. Guarda el ETag de cada página junto a la finca. La cuota que te queda viene en la cabecera X-Quota-Remaining y en lastQuota del SDK.

curl -i "https://api.parcelgps.com/api/catastro/0745901TG4304N/units" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

curl -i "https://api.parcelgps.com/api/catastro/0745901TG4304N/units?cursor=0745901TG4304N0201MZ" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Respuesta real

HTTP/2 200
etag: "5ab6bd3d95f85dddba81818bcb0cb65e"
cache-control: private, max-age=21600
x-quota-remaining: 2893

{
  "success": true,
  "data": {
    "refCatastral": "0745901TG4304N",
    "direccion": "AV JOSE RGUEZ BORBOLLA CAMOY 10",
    "codigoPostal": "41704",
    "municipio": "DOS HERMANAS",
    "provincia": "Sevilla",
    "usoGeneral": "Residencial",
    "superficieTotal": 32789,
    "anioConstruccion": 2023,
    "totalUnidades": 200,
    "totalUnidadesFinca": 365,
    "unidades": [
      {
        "refCatastral": "0745901TG4304N0002KH",
        "escalera": "",
        "planta": "01",
        "puerta": "B",
        "uso": "Residencial",
        "superficie": 155,
        "descripcion": "Planta 01, Pta. B - Residencial",
        "participacion": 0.279543,
        "anio": 2023,
        "direccion": "AV JOSE RGUEZ BORBOLLA CAMOY 10 Pl:01 Pt:B"
      },
      {
        "refCatastral": "0745901TG4304N0003LJ",
        "escalera": "",
        "planta": "01",
        "puerta": "C",
        "uso": "Residencial",
        "superficie": 163,
        "descripcion": "Planta 01, Pta. C - Residencial",
        "participacion": 0.293879,
        "anio": 2023,
        "direccion": "AV JOSE RGUEZ BORBOLLA CAMOY 10 Pl:01 Pt:C"
      }
    ],
    "truncated": true,
    "nextCursor": "0745901TG4304N0201MZ",
    "dataSource": "clone",
    "dataDate": "2026-01-23",
    "attribution": "Dirección General del Catastro"
  },
  "searchesRemaining": -1
}

2. Comprobación mensual con ETag

Repite la llamada con If-None-Match y el ETag guardado. Si la finca no ha cambiado, la respuesta es 304 Not Modified y no gasta cuota. Con el SDK basta con pasar el resultado anterior: changed dice si algo se ha movido. Respeta el límite por minuto de tu plan (Free 10, Developer 60, Startup 120, Growth 300): los SDK reintentan solos un 429.

curl -i "https://api.parcelgps.com/api/catastro/0745901TG4304N/units" \
  -H "X-API-Key: $CATASTROGPS_API_KEY" \
  -H 'If-None-Match: "5ab6bd3d95f85dddba81818bcb0cb65e"'

HTTP/2 304
x-quota-remaining: 2929
Guía completa para importar una comunidad de propietarios

Viabilidad solar de una parcela

Producción estimada con PVGIS, ahorro, retorno de la inversión y, para placas en suelo, la pendiente y la orientación reales del terreno. /solar cubre España (con País Vasco y Navarra), Portugal, Francia, Italia y Alemania; fuera responde 422 CNV_COVERAGE.

Países: ESPVNAPTFRITDE

1. Producción y economía de la instalación

La respuesta trae los kWp instalables, los kWh al año, el ahorro, la amortización, el CO2 evitado y un bloque economics con autoconsumo, excedentes, ingreso neto, payback y TIR. Si no hay datos solares, responde disponible false y no gasta cuota.

curl "https://api.parcelgps.com/api/catastro/9872023VH5797S/solar" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Respuesta real

{
  "success": true,
  "data": {
    "kwh_year": 23749.9,
    "kw_instalables": 17.86,
    "ahorro_anual_eur": 3562.49,
    "amortizacion_anos": 5,
    "co2_evitado_kg": 5533.73,
    "irradiacion_media": 1807.08,
    "nota_solar": 5,
    "orientacion_optima": "Sur",
    "angulo_inclinacion": 34,
    "costo_instalacion_eur": 17865,
    "disponible": true,
    "estado": "ok",
    "fuente": "PVGIS (JRC)",
    "economics": {
      "autoconsumo_kwh_ano": 5000,
      "excedentes_kwh_ano": 18749.9,
      "ingreso_neto_anual_eur": 1473.18,
      "payback_anos": 12.13,
      "tir_pct": 6.56,
      "retorno_total_25_anos_eur": 18964.5
    }
  }
}

2. Pendiente y orientación del terreno

Para una instalación en suelo, /terrain da la pendiente media y máxima con su clase y la orientación dominante sobre el contorno real (Copernicus DEM GLO-30, 30 m). Ejemplo real: una ladera muy empinada orientada al norte, mala candidata para placas en suelo.

curl "https://api.parcelgps.com/api/catastro/10194A00110004/terrain?country=ES" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Respuesta real, recortada

{
  "success": true,
  "data": {
    "refcat": "10194A00110004",
    "country": "ES",
    "relief": {
      "status": "ok",
      "elevation_m": {
        "mean": 365.8,
        "min": 212.3,
        "max": 506.6
      },
      "slope": {
        "mean_pct": 36.5,
        "mean_deg": 20,
        "max_pct": 71.6,
        "class": "very_steep",
        "max_class": "very_steep",
        "share_over_10_pct": 98.4,
        "classes_pct": {
          "flat": 0.2,
          "gentle": 1.4,
          "moderate": 6.8,
          "steep": 20,
          "very_steep": 71.7
        }
      },
      "aspect": {
        "dominant": "N",
        "dominant_share_pct": 75.3,
        "mean_deg": 0,
        "flat_share_pct": 0.2,
        "sectors_pct": {
          "N": 75.3,
          "NE": 10.6,
          "E": 0.6,
          "SE": 0.1,
          "S": 0,
          "SW": 1,
          "W": 1.4,
          "NW": 10.8
        }
      },
      "sample": {
        "method": "parcel",
        "cells": 1448,
        "resolution_m": 31
      },
      "source": {
        "name": "Copernicus DEM GLO-30",
        "license": "Copernicus DEM licence (free, commercial use allowed)",
        "attribution": "© DLR e.V. 2010-2014 and © Airbus Defence and Space GmbH 2014-2018 provided under COPERNICUS by the European Union and ESA; all rights reserved"
      }
    }
  }
}

Riesgo de una parcela para una aseguradora

Tres señales por parcela con fuentes europeas abiertas: hundimiento del terreno (EGMS), relieve y espacios protegidos (Copernicus DEM, EEA) y clima (ERA5-Land). Funciona en toda la cobertura de EGMS (EEA-39) allí donde tenemos el contorno; fuera de España, Portugal, Francia, Italia y Alemania pasa también lat y lng.

Países: EEA-39

1. Hundimiento y aceleración

class y worst_class resumen el movimiento (stable, slow_subsidence, notable_subsidence, severe_subsidence y sus equivalentes de subida). vertical trae la media, el hundimiento más rápido, la aceleración y el desplazamiento acumulado de cada año. Cada respuesta incluye la atribución de Copernicus que hay que mostrar.

curl "https://api.parcelgps.com/api/catastro/30024A16000286/ground-motion?country=ES" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Respuesta real

{
  "success": true,
  "data": {
    "refcat": "30024A16000286",
    "country": "ES",
    "status": "ok",
    "period": { "from": "2020-01", "to": "2024-12", "label": "2020-2024" },
    "ground_motion": {
      "class": "severe_subsidence",
      "worst_class": "severe_subsidence",
      "vertical": {
        "mean_mm_year": -40.9, "max_subsidence_mm_year": -40.9, "max_uplift_mm_year": 0,
        "std_mm_year": 0.1, "acceleration_mm_year2": -0.7, "rmse_mm": 2.3
      },
      "east_west": { "mean_mm_year": -5.1, "std_mm_year": 0.1 },
      "yearly_displacement": [
        { "year": 2020, "mm": -17.9 }, { "year": 2021, "mm": -57.2 }, { "year": 2022, "mm": -95.8 },
        { "year": 2023, "mm": -141.8 }, { "year": 2024, "mm": -179.8 }
      ],
      "cells_with_data": 1, "cells_considered": 1, "coverage_pct": 100,
      "basis": "parcel", "cell_size_m": 100
    },
    "source": {
      "name": "European Ground Motion Service (EGMS) L3 Ortho",
      "license": "Copernicus data policy (Regulation (EU) No 1159/2013): free, commercial use allowed with attribution",
      "attribution": "Contains modified Copernicus Land Monitoring Service information, European Ground Motion Service 2020-2024 (© European Union, Copernicus Land Monitoring Service, EEA)",
      "resolution": "100 m"
    },
    "calculated_at": "2026-10-01T06:14:34Z",
    "provenance": "1"
  }
}

2. Relieve, espacios protegidos y clima

La misma llamada a /terrain trae el relieve, los espacios protegidos y el bloque climate con las normales de ERA5-Land: temperatura media, lluvia anual, días de helada y días por encima de 35 grados de un periodo de referencia frente a los años recientes. La rejilla ERA5-Land se está cargando: hasta que termine, climate responde status unavailable y el resto de la respuesta llega igual. Ejemplo con una referencia belga, que lleva barra y va codificada como %2F.

curl "https://api.parcelgps.com/api/catastro/21802B1307%2F00B000/terrain?country=BE&lat=50.848139&lng=4.353613" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Bloque climate mientras se carga la rejilla ERA5-Land

"climate": {
  "status": "unavailable",
  "source": {
    "name": "ERA5-Land",
    "provider": "Copernicus Climate Change Service (C3S) / ECMWF",
    "license": "CC BY 4.0",
    "attribution": "Contains modified Copernicus Climate Change Service information; …",
    "url": "https://cds.climate.copernicus.eu/datasets/reanalysis-era5-land-monthly-means",
    "resolution": "0.1° (~9 km)"
  }
}

SDK y MCP

Clientes oficiales para JavaScript/TypeScript y Python, y un servidor MCP para que un asistente de IA consulte parcelas con tu clave. Los tres leen la clave de la variable de entorno CATASTROGPS_API_KEY.

JavaScript y TypeScript (npm)

npm install catastrogps
import { CatastroGPS } from 'catastrogps'

const client = new CatastroGPS({ apiKey: process.env.CATASTROGPS_API_KEY })

const parcel = await client.parcels.get('9872023VH5797S0001WX')
const inWarsaw = await client.parcels.atPoint({ lat: 52.2297, lng: 21.0122 })
const terrain = await client.request('GET', '/api/catastro/10194A00110004/terrain', { query: { country: 'ES' } })
console.log(parcel.municipio, inWarsaw.referenciaCatastral, terrain.relief.slope.class, client.lastQuota)

Python (PyPI)

pip install catastrogps
from catastrogps import CatastroGPS

client = CatastroGPS()

parcel = client.parcels.get("9872023VH5797S0001WX")
in_warsaw = client.parcels.at_point(52.2297, 21.0122)
terrain = client.request("GET", "/api/catastro/10194A00110004/terrain", query={"country": "ES"})
print(parcel["municipio"], in_warsaw["referenciaCatastral"], terrain["relief"]["slope"]["class"], client.last_quota)

Para un endpoint sin método propio en el SDK, como /terrain o /ground-motion, usa client.request: firma la llamada, reintenta los 429 y 5xx y actualiza la cuota igual que los demás métodos.

Conectar el MCP a un asistente

El servidor MCP catastro-gps-mcp (npm) expone la API como herramientas para Claude, Cursor, VS Code y cualquier cliente MCP. Cada llamada de herramienta es una llamada de la API contra tu cuota.

Claude Desktop: añade esto a claude_desktop_config.json y reinicia la aplicación.

{
  "mcpServers": {
    "catastro-gps": {
      "command": "npx",
      "args": ["-y", "catastro-gps-mcp"],
      "env": { "CATASTROGPS_API_KEY": "pk_live_your_key_here" }
    }
  }
}

Claude Code: un comando en la terminal.

claude mcp add catastro-gps --env CATASTROGPS_API_KEY=pk_live_your_key_here -- npx -y catastro-gps-mcp

Cursor, Windsurf, VS Code y otros clientes MCP: el mismo comando con CATASTROGPS_API_KEY en el entorno.

npx -y catastro-gps-mcp

Herramientas

get_parcelsearch_addressget_boundariesget_solar_potentialget_terrainget_agricultureget_market_dataget_investment_scoreget_value_historycompare_parcels

Prueba a pedirle

  • Find the cadastral parcel at Calle Mallorca 213, Barcelona, and give me its area and outline.
  • What is the parcel at 52.2297, 21.0122? What is its area?
  • Look up the Polish parcel 146510_8.0502.1/3 and tell me its area.

España (ES)

Catastro español — Dirección General del Catastro

GET/api/search/address/candidates

Geocodifica una dirección española con CartoCiudad (IGN) y devuelve los portales que encajan, ordenados por confianza, con su referencia de 14 caracteres y, si están en nuestra copia, uso, viviendas y año. No depende del Catastro. Cuesta 1 unidad de cuota.

Parámetros

qstringDirección en texto libre: calle y número, municipio (y código postal si lo tienes).
street / number / municipality / postcode / limitstringOpcionales: street, number, municipality, postcode (sustituyen a lo leído en q) y limit (1-10, 5 por defecto).
curl -G "https://api.parcelgps.com/api/search/address/candidates" \
  --data-urlencode "q=Avenida José Rodríguez de la Borbolla Camoyán 10, Dos Hermanas" \
  --data-urlencode "limit=3" \
  -H "X-API-Key: $CATASTROGPS_API_KEY"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "consulta": {
      "texto": "Avenida José Rodríguez de la Borbolla Camoyán 10, Dos Hermanas",
      "calle": "Avenida José Rodríguez de la Borbolla Camoyán",
      "numero": 10,
      "municipio": "Dos Hermanas"
    },
    "candidatos": [
      {
        "refCatastral": "0745901TG4304N",
        "pais": "ES",
        "direccion": "AVENIDA JOSE RGUEZ BORBOLLA CAMOY 10",
        "numero": 10,
        "codigoPostal": "41704",
        "municipio": "Dos Hermanas",
        "provincia": "Sevilla",
        "latitud": 37.31947088654626,
        "longitud": -5.926788955974699,
        "confianza": 0.93,
        "coincideNumero": true,
        "coincideMunicipio": true,
        "enCopia": true,
        "direccionCatastro": "AV JOSE RGUEZ BORBOLLA CAMOY 10",
        "uso": "Residencial",
        "viviendas": 346,
        "anioConstruccion": 2023
      },
      {
        "refCatastral": "0747201TG4304N",
        "pais": "ES",
        "direccion": "BULEVAR JOSE RODRIGUEZ DE LA BORBOLLA CAMOYAN 11",
        "numero": 11,
        "confianza": 0.55,
        "coincideNumero": false,
        "coincideMunicipio": true,
        "enCopia": true
      }
    ],
    "attribution": "CartoCiudad (Instituto Geográfico Nacional) y Dirección General del Catastro"
  }
}

Errores posibles

CódigoHTTPDescripción
VALIDATION_ERROR400La referencia no tiene un formato válido para el país.
NOT_FOUND404Ningún portal con referencia catastral encaja con la dirección.
KEY_AUTH_004429Cuota mensual de la API key agotada (ver cabeceras X-Quota-*).
SERVICE_UNAVAILABLE503CartoCiudad no responde. Reintentar tras Retry-After.
GET/api/catastro/:refcat

Obtener datos de parcela por referencia catastral (14 o 20 caracteres).

Parámetros

:refcatstringReferencia catastral (p. ej. 9872023VH5797S0001WX)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/9872023VH5797S0001WX"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refCatastral": "9872023VH5797S0001WX",
    "direccion": "CL GLORIA 51",
    "codigoPostal": "13730",
    "municipio": "SANTA CRUZ DE MUDELA",
    "provincia": "CIUDAD REAL",
    "latitud": 38.640143,
    "longitud": -3.463284,
    "googleMapsUrl": "https://www.google.com/maps?q=38.640143,-3.463284",
    "uso": "Residencial",
    "clase": "Urbano",
    "superficieConstruida": 308,
    "superficieParcela": 397,
    "anioConstruccion": 1980,
    "coefParticipacion": "100",
    "poligono": [ /* geometría de la parcela */ ],
    "availableFields": {
      "uso": true, "clase": true, "anioConstruccion": true,
      "superficieConstruida": true, "coefParticipacion": true,
      "direccion": true, "busquedaDireccion": true
    }
  },
  "searchesRemaining": 4
}

Errores posibles

CódigoHTTPDescripción
VALIDATION_ERROR400La referencia no tiene un formato válido para el país.
NOT_FOUND404Referencia no encontrada. Un ?country no soportado se trata como España (ES) y normalmente devuelve NOT_FOUND; usa ES/PT/FR/IT/DE/PV/NA. En catastros forales (NA, PV) el campo message añade una pista de formato.
RATE_LIMIT_EXCEEDED / DAILY_LIMIT_REACHED429KEY_RATE_002: límite de ráfaga por minuto de tu clave. RATE_LIMIT_EXCEEDED: demasiadas peticiones desde la misma IP. DAILY_LIMIT_REACHED: límite diario de búsquedas gratuitas sin API key.
KEY_AUTH_004429Cuota mensual de la API key agotada (ver cabeceras X-Quota-*).
SERVICE_UNAVAILABLE503El servicio catastral oficial del país está caído o en mantenimiento. Reintentar.
GET/api/catastro/:refcat14/units

Todas las unidades de una finca española a partir de su referencia de 14 caracteres, en una sola llamada (hasta 200 por página, con cursor). Cada unidad trae uso, superficie, coeficiente de participación, año y escalera/planta/puerta. Cuesta 1 unidad de cuota por cada unidad devuelta (mínimo 1). Requiere API key o sesión iniciada. Fuente: Dirección General del Catastro.

Parámetros

:refcat14stringReferencia catastral de 14 caracteres de la finca (p. ej. 0745901TG4304N)
cursorstringOpcional. El nextCursor de la página anterior cuando truncated es true.
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/0745901TG4304N/units"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refCatastral": "0745901TG4304N",
    "direccion": "AV JOSE RGUEZ BORBOLLA CAMOY 10",
    "codigoPostal": "41704",
    "municipio": "DOS HERMANAS",
    "provincia": "Sevilla",
    "usoGeneral": "Residencial",
    "superficieTotal": 32789,
    "anioConstruccion": 2023,
    "totalUnidades": 200,
    "totalUnidadesFinca": 365,
    "truncated": true,
    "nextCursor": "0745901TG4304N0201MZ",
    "dataSource": "clone",
    "dataDate": "2026-08-19",
    "attribution": "Dirección General del Catastro",
    "unidades": [
      {
        "refCatastral": "0745901TG4304N0002KH",
        "planta": "01",
        "puerta": "B",
        "uso": "Residencial",
        "superficie": 155,
        "participacion": 0.279543,
        "anio": 2023,
        "descripcion": "Planta 01, Pta. B - Residencial"
      }
    ]
  }
}

Errores posibles

CódigoHTTPDescripción
VALIDATION_ERROR400El cursor no es una referencia de 20 caracteres de esa finca.
UNAUTHORIZED / UNT_001401Sin API key de organización ni sesión iniciada.
NOT_FOUND404La finca no existe en nuestra copia del Catastro ni en el Catastro.
KEY_AUTH_004429Cuota mensual de la API key agotada (ver cabeceras X-Quota-*).
SERVICE_UNAVAILABLE503El servicio catastral oficial del país está caído o en mantenimiento. Reintentar.
GET/api/catastro/:refcat/terrain

Relieve calculado sobre el polígono de la parcela con Copernicus DEM GLO-30 (30 m): altitud media, mínima y máxima, pendiente media y máxima con su clase y reparto, % de superficie con pendiente > 10 % y orientación dominante. Y cruce con Red Natura 2000 (EEA, end 2024) y espacios protegidos nacionales (CDDA 2025): nombre, código, tipo (SPA = ZEPA, SCI = ZEC/LIC) y % de la parcela dentro de cada uno. Cada bloque trae su fuente y licencia. status = ok, no_data (sin cobertura) o unavailable (fallo temporal, reintentar). Misma parcela, misma unidad de cuota que la ficha.

Parámetros

:refcatstringReferencia catastral
countrystringOpcional. ES, PV, NA, PT, FR, IT, DE; se deduce de la referencia si falta.
lat, lngnumberSolo para el resto de países con geometría propia: posición aproximada de la parcela para localizar su contorno.
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/10194A00110004/terrain?country=ES"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refcat": "10194A00110004",
    "country": "ES",
    "relief": {
      "status": "ok",
      "elevation_m": { "mean": 365.8, "min": 212.3, "max": 506.6 },
      "slope": {
        "mean_pct": 36.5, "mean_deg": 20, "max_pct": 71.6,
        "class": "very_steep", "max_class": "very_steep", "share_over_10_pct": 98.4,
        "classes_pct": { "flat": 0.2, "gentle": 1.4, "moderate": 6.8, "steep": 20, "very_steep": 71.7 }
      },
      "aspect": {
        "dominant": "N", "dominant_share_pct": 75.3, "mean_deg": 0, "flat_share_pct": 0.2,
        "sectors_pct": { "N": 75.3, "NE": 10.6, "E": 0.6, "SE": 0.1, "S": 0, "SW": 1, "W": 1.4, "NW": 10.8 }
      },
      "sample": { "method": "parcel", "cells": 1448, "resolution_m": 31 },
      "source": { "name": "Copernicus DEM GLO-30", "license": "Copernicus DEM licence (free, commercial use allowed)", "attribution": "© DLR e.V. 2010-2014 and © Airbus Defence and Space GmbH 2014-2018 provided under COPERNICUS by the European Union and ESA; all rights reserved" }
    },
    "protected_areas": {
      "status": "ok",
      "intersects": true,
      "inside": true,
      "max_overlap_pct": 100,
      "natura2000": [
        { "code": "ES0000014", "name": "Monfragüe y las Dehesas del Entorno", "type": "SPA", "country": "ES", "overlap_pct": 100 },
        { "code": "ES4320077", "name": "Monfragüe", "type": "SCI", "country": "ES", "overlap_pct": 100 }
      ],
      "national": [
        { "code": "4820", "name": "Monfragüe", "designation": "National Park", "country": "ES", "overlap_pct": 100 }
      ],
      "method": "parcel",
      "sources": [
        { "name": "Natura 2000", "license": "CC BY 4.0", "edition": "end 2024" },
        { "name": "Nationally designated areas (CDDA)", "license": "CC BY 4.0", "edition": "2025" }
      ]
    },
    "calculated_at": "2026-09-30T19:45:02Z",
    "provenance": "3"
  }
}

Errores posibles

CódigoHTTPDescripción
UNAUTHORIZED401Sin API key de organización ni sesión iniciada.
NOT_FOUND404La parcela no existe o, fuera de los siete países principales, no hay contorno en esa posición.
KEY_AUTH_004429Cuota mensual de la API key agotada (ver cabeceras X-Quota-*).
TRN_040503El servicio catastral oficial del país está caído o en mantenimiento. Reintentar.
GET/api/catastro/:refcat/ground-motion

Velocidad vertical y este-oeste del terreno sobre el polígono de la parcela, del European Ground Motion Service de Copernicus (EGMS L3 Ortho, radar Sentinel-1, rejilla de 100 m, 2020-2024): media, hundimiento máximo, subida máxima, clase (stable, slow_subsidence, notable_subsidence, severe_subsidence, slow_uplift, notable_uplift), celdas con dato y desplazamiento medio de cada año. Si el satélite no encuentra reflectores (campo, bosque, agua) responde status = no_data con reason = no_reflectors en vez de inventar. Toda la cobertura EGMS (EEA-39). Trae fuente, licencia y la atribución que hay que mostrar. Misma parcela, misma unidad de cuota que la ficha.

Parámetros

:refcatstringReferencia catastral
countrystringOpcional. ES, PV, NA, PT, FR, IT, DE; se deduce de la referencia si falta.
lat, lngnumberSolo para el resto de países con geometría propia: posición aproximada de la parcela para localizar su contorno.
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/30024A16000286/ground-motion?country=ES"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refcat": "30024A16000286",
    "country": "ES",
    "status": "ok",
    "period": { "from": "2020-01", "to": "2024-12", "label": "2020-2024" },
    "ground_motion": {
      "class": "severe_subsidence",
      "worst_class": "severe_subsidence",
      "vertical": {
        "mean_mm_year": -40.9, "max_subsidence_mm_year": -40.9, "max_uplift_mm_year": 0,
        "std_mm_year": 0.1, "acceleration_mm_year2": -0.7, "rmse_mm": 2.3
      },
      "east_west": { "mean_mm_year": -5.1, "std_mm_year": 0.1 },
      "yearly_displacement": [
        { "year": 2020, "mm": -17.9 }, { "year": 2021, "mm": -57.2 }, { "year": 2022, "mm": -95.8 },
        { "year": 2023, "mm": -141.8 }, { "year": 2024, "mm": -179.8 }
      ],
      "cells_with_data": 1, "cells_considered": 1, "coverage_pct": 100,
      "basis": "parcel", "cell_size_m": 100
    },
    "source": {
      "name": "European Ground Motion Service (EGMS) L3 Ortho",
      "license": "Copernicus data policy (Regulation (EU) No 1159/2013): free, commercial use allowed with attribution",
      "attribution": "Contains modified Copernicus Land Monitoring Service information, European Ground Motion Service 2020-2024 (© European Union, Copernicus Land Monitoring Service, EEA)",
      "resolution": "100 m"
    },
    "calculated_at": "2026-10-01T06:14:34Z",
    "provenance": "1"
  }
}

Errores posibles

CódigoHTTPDescripción
UNAUTHORIZED401Sin API key de organización ni sesión iniciada.
NOT_FOUND404La parcela no existe o, fuera de los siete países principales, no hay contorno en esa posición.
KEY_AUTH_004429Cuota mensual de la API key agotada (ver cabeceras X-Quota-*).
GMV_040503El servicio catastral oficial del país está caído o en mantenimiento. Reintentar.
POST/api/search/coordinates

Geocodificación inversa: encontrar la parcela catastral en unas coordenadas GPS.

Parámetros

latitudenumberLatitud (WGS84)
longitudenumberLongitud (WGS84)
countrystringCódigo de país (opcional: se detecta por la referencia)
curl -X POST -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"latitude": 40.4196, "longitude": -3.7029, "country": "ES"}' \
  "https://api.parcelgps.com/api/search/coordinates"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "referenciaCatastral": "0447502VK4704G",
    "refCat14": "0447502VK4704G",
    "direccion": "CL TRES CRUCES 7",
    "municipio": "MADRID",
    "tipoInmueble": "Urbano",
    "coordenadas": { "latitud": 40.4196984, "longitud": -3.7028067 },
    "googleMapsUrl": "https://www.google.com/maps?q=40.419698,-3.702807",
    "pais": "ES"
  },
  "searchesRemaining": -1
}

Errores posibles

CódigoHTTPDescripción
VALIDATION_ERROR400Coordenadas fuera de los límites del país indicado o detectado, o lat/lng ausentes o mal formadas.
NOT_FOUND404No hay ninguna parcela en esas coordenadas.
RATE_LIMIT_EXCEEDED / DAILY_LIMIT_REACHED429KEY_RATE_002: límite de ráfaga por minuto de tu clave. RATE_LIMIT_EXCEEDED: demasiadas peticiones desde la misma IP. DAILY_LIMIT_REACHED: límite diario de búsquedas gratuitas sin API key.
SERVICE_UNAVAILABLE503Servicio catastral no disponible temporalmente.
POST/api/search/address/parse

Buscar parcela catastral por dirección postal.

Parámetros

direccionstringDirección en texto libre (solo España). Formato recomendado: «Calle, Número, Municipio» — p. ej. «Calle Mallorca, 213, Barcelona». El número también puede ir pegado a la calle («Gran Vía 1, Madrid»).
curl -X POST -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"direccion": "Gran Via 1, Madrid"}' \
  "https://api.parcelgps.com/api/search/address/parse"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "referenciaCatastral": "0847106VK4704F",
    "refCat14": "0847106VK4704F",
    "direccion": "CL GRAN VIA, 1, Madrid",
    "tipoVia": "CL",
    "nombreVia": "GRAN VIA",
    "numero": 1,
    "municipio": "Madrid",
    "provincia": "MADRID"
  },
  "searchesRemaining": -1
}

Errores posibles

CódigoHTTPDescripción
VALIDATION_ERROR400Cuerpo de la petición inválido (faltan campos o JSON mal formado).
NOT_FOUND404Dirección no encontrada (calle, municipio o número inexistente o sin correspondencia catastral). La búsqueda por dirección solo está disponible en España.
RATE_LIMIT_EXCEEDED / DAILY_LIMIT_REACHED429KEY_RATE_002: límite de ráfaga por minuto de tu clave. RATE_LIMIT_EXCEEDED: demasiadas peticiones desde la misma IP. DAILY_LIMIT_REACHED: límite diario de búsquedas gratuitas sin API key.

País Vasco (PV)

Catastros forales — Araba/Álava, Bizkaia y Gipuzkoa (WFS INSPIRE)

GET/api/catastro/:refcat?country=PV

Consulta de parcela en los tres territorios forales. Requiere country=PV: sus parcelas tienen catastro propio y no están en el Catastro central.

Parámetros

:refcatstringReferencia foral. Bizkaia con puntos (48.020.1611.02001); Álava y Gipuzkoa en dígitos (64010007, 8594149).
countrystringObligatorio: PV.
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/48.020.1611.02001?country=PV"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refCatastral": "48.020.1611.02001",
    "pais": "PV",
    "municipio": "Bizkaia",
    "provincia": "Bizkaia",
    "latitud": 43.263633,
    "longitud": -2.935856,
    "superficieParcela": 3061,
    "googleMapsUrl": "https://www.google.com/maps?q=43.263633,-2.935856",
    "poligono": [ /* geometría de la parcela */ ]
  }
}

Con country=ES (incorrecto)

404
{
  "success": false,
  "error": "No parcel was found for this reference or location.",
  "code": "NOT_FOUND"
}

Portugal (PT)

Catastro portugués — Direção-Geral do Território

GET/api/catastro/:refcat?country=PT

Obtener datos de parcela portuguesa por referencia cadastral.

Parámetros

:refcatstringReferencia cadastral portuguesa (p. ej. AAA000587359). La cobertura es parcial (~30 %); zonas como Lisboa y Oporto aún no están digitalizadas por la DGT.
countrystringObligatorio: PT.
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/AAA000587359?country=PT"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refCatastral": "AAA000587359",
    "pais": "PT",
    "municipio": "TAVIRA, Tavira (Santa Maria e Santiago)",
    "latitud": 37.127156,
    "longitud": -7.648066,
    "superficieParcela": 49,
    "googleMapsUrl": "https://www.google.com/maps?q=37.127156,-7.648066",
    "poligono": [ /* geometría de la parcela */ ]
  }
}

Francia (FR)

Catastro francés — Cadastre / Géoplateforme

GET/api/search/address/candidates?country=FR

Convierte una dirección francesa en la parcela catastral (IDU de 14 caracteres) que hay bajo ella: geocodifica con la Base Adresse Nationale y consulta el catastro oficial en ese punto. Candidatos ordenados por confianza (0 a 1). Cuesta 1 unidad de cuota solo si devuelve candidatos.

Parámetros

qstringDirección en texto libre: calle y número, municipio (y código postal si lo tienes).
countrystringObligatorio: FR.
street / number / municipality / postcode / limitstringOpcionales: street, number, municipality, postcode (sustituyen a lo leído en q) y limit (1-10, 5 por defecto).
curl -G -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/search/address/candidates" \
  --data-urlencode "q=8 boulevard du Port, Amiens" -d country=FR

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "consulta": { "texto": "8 boulevard du Port, Amiens", "calle": "boulevard du Port", "numero": 8, "municipio": "Amiens" },
    "candidatos": [
      {
        "refCatastral": "80021000VA0065",
        "pais": "FR",
        "direccion": "8 Boulevard du Port 80000 Amiens",
        "numero": 8,
        "codigoPostal": "80000",
        "municipio": "Amiens",
        "provincia": "Somme",
        "latitud": 49.897442,
        "longitud": 2.290084,
        "confianza": 0.99,
        "coincideNumero": true,
        "coincideMunicipio": true,
        "enCopia": false
      }
    ],
    "attribution": "Base Adresse Nationale (data.gouv.fr); Plan cadastral (DGFiP, Géoplateforme IGN)"
  }
}

Errores posibles

CódigoHTTPDescripción
VALIDATION_ERROR400La referencia no tiene un formato válido para el país.
NOT_FOUND404Ningún portal con referencia catastral encaja con la dirección.
CNV_COVERAGE422El país no tiene búsqueda por dirección (SE, HR o un país sin cobertura)
KEY_AUTH_004429Cuota mensual de la API key agotada (ver cabeceras X-Quota-*).
SERVICE_UNAVAILABLE503CartoCiudad no responde. Reintentar tras Retry-After.
GET/api/catastro/:refcat?country=FR

Obtener datos de parcela francesa por referencia cadastrale.

Parámetros

:refcatstringReferencia cadastrale francesa (p. ej. 75104000AE0003)
countrystringObligatorio: FR.
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/75104000AE0003?country=FR"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refCatastral": "75104000AE0003",
    "pais": "FR",
    "municipio": "Paris",
    "provincia": "75",
    "latitud": 48.856347,
    "longitud": 2.352415,
    "superficieParcela": 15168,
    "googleMapsUrl": "https://www.google.com/maps?q=48.856347,2.352415",
    "poligono": [ /* geometría de la parcela */ ]
  }
}

Italia (IT)

Catastro italiano — Agenzia delle Entrate

GET/api/search/address/candidates?country=IT

Convierte una dirección italiana en la particella catastral que hay bajo ella: geocodifica con OpenStreetMap (Photon, con Nominatim de respaldo) y consulta la Agenzia delle Entrate en ese punto. Nunca devuelve calles ni aguas (STRADA, ACQUA): si el punto cae en la calle, toma la parcela más cercana. Cuesta 1 unidad de cuota solo si devuelve candidatos.

Parámetros

qstringDirección en texto libre: calle y número, municipio (y código postal si lo tienes).
countrystringObligatorio: IT.
street / number / municipality / postcode / limitstringOpcionales: street, number, municipality, postcode (sustituyen a lo leído en q) y limit (1-10, 5 por defecto).
curl -G -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/search/address/candidates" \
  --data-urlencode "q=Via Toledo 256, Napoli" -d country=IT

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "consulta": { "texto": "Via Toledo 256, Napoli", "calle": "Via Toledo", "numero": 256, "municipio": "Napoli" },
    "candidatos": [
      {
        "refCatastral": "F839_019800.166",
        "pais": "IT",
        "direccion": "Via Toledo 256, 80132 Napoli",
        "numero": 256,
        "codigoPostal": "80132",
        "municipio": "Napoli",
        "provincia": "Napoli",
        "latitud": 40.8386034,
        "longitud": 14.248223,
        "confianza": 1,
        "coincideNumero": true,
        "coincideMunicipio": true,
        "enCopia": false
      }
    ],
    "attribution": "OpenStreetMap contributors (ODbL); Agenzia delle Entrate, cartografia catastale (CC BY 4.0)"
  }
}

Errores posibles

CódigoHTTPDescripción
VALIDATION_ERROR400La referencia no tiene un formato válido para el país.
NOT_FOUND404Ningún portal con referencia catastral encaja con la dirección.
CNV_COVERAGE422El país no tiene búsqueda por dirección (SE, HR o un país sin cobertura)
KEY_AUTH_004429Cuota mensual de la API key agotada (ver cabeceras X-Quota-*).
SERVICE_UNAVAILABLE503CartoCiudad no responde. Reintentar tras Retry-After.
GET/api/catastro/:refcat?country=IT

Obtener datos de parcela italiana por referencia catastale.

Parámetros

:refcatstringReferencia catastale italiana (foglio/particella, p. ej. H501A048100.A)
countrystringObligatorio: IT.
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/H501A048100.A?country=IT"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refCatastral": "H501A048100.A",
    "pais": "IT",
    "municipio": "H501",
    "provincia": "H501",
    "latitud": 41.902698,
    "longitud": 12.496247,
    "superficieParcela": 1059,
    "googleMapsUrl": "https://www.google.com/maps?q=41.902698,12.496247",
    "poligono": [ /* geometría de la parcela */ ]
  }
}

Alemania (DE)

Catastro alemán — ALKIS (8 Bundesländer)

GET/api/catastro/:refcat?country=DE

Obtener datos de parcela alemana por referencia catastral.

Parámetros

:refcatstringReferencia catastral alemana (Flurstückskennzeichen)
countrystringObligatorio: DE.
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/05495803101122?country=DE"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refCatastral": "05495803101122",
    "pais": "DE",
    "latitud": 50.937566,
    "longitud": 6.960140,
    "superficieParcela": 54,
    "googleMapsUrl": "https://www.google.com/maps?q=50.937566,6.960140",
    "poligono": [ /* geometría de la parcela */ ]
  }
}

Austria (AT)

Catastro austriaco — BEV (Katastralgemeinde / Grundstück)

GET/api/catastro/:refcat?country=AT

Consulta de parcela en Austria. Requiere country=AT. La referencia es KATASTRALGEMEINDE-GRUNDSTÜCK. Cobertura parcial, en expansión.

Parámetros

:refcatstringFormato Katastralgemeinde-Grundstück (p. ej. 01004-1711).
countrystringObligatorio: AT.
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/01004-1711?country=AT"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "refCatastral": "01004-1711",
    "pais": "AT",
    "municipio": "Innere Stadt",
    "provincia": "Wien",
    "latitud": 48.208478,
    "longitud": 16.372810,
    "uso": "Gebäude, Straßenverkehrsanlagen",
    "superficieParcela": 10641,
    "googleMapsUrl": "https://www.google.com/maps?q=48.208478,16.372810",
    "poligono": [ /* geometría de la parcela */ ]
  }
}

Con country=ES (incorrecto)

400
{
  "success": false,
  "error": "A Spanish cadastral reference has at least 14 characters. For any other country add ?country=XX (coverage: https://parcelgps.com/developers).",
  "code": "VALIDATION_ERROR"
}

Resto de Europa (dirección)

La búsqueda por dirección funciona igual en 26 países: en los Países Bajos, Suiza, Polonia, Chequia, Estonia, Dinamarca y Flandes con el registro oficial de direcciones; en el resto con OpenStreetMap. La parcela sale siempre del catastro oficial de cada país. Suecia y Croacia no la tienen.

GET/api/search/address/candidates?country=NL

Convierte una dirección europea en la parcela catastral que hay debajo: geocodifica con el registro nacional de direcciones (PDOK en los Países Bajos) u OpenStreetMap y consulta el catastro oficial del país en ese punto. Candidatos ordenados por confianza (0 a 1). Cuesta 1 unidad de cuota solo si devuelve candidatos.

Parámetros

qstringDirección en texto libre: calle y número, municipio (y código postal si lo tienes).
countrystringObligatorio: NL.
street / number / municipality / postcode / limitstringOpcionales: street, number, municipality, postcode (sustituyen a lo leído en q) y limit (1-10, 5 por defecto).
curl -G -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/search/address/candidates" \
  --data-urlencode "q=Damrak 1, 1012 LG Amsterdam" -d country=NL

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "consulta": { "texto": "Damrak 1, 1012 LG Amsterdam", "calle": "Damrak", "numero": 1, "municipio": "Amsterdam", "codigoPostal": "1012 LG" },
    "candidatos": [
      {
        "refCatastral": "ASD04-F-3937",
        "pais": "NL",
        "direccion": "Damrak 1, 1012LG Amsterdam",
        "numero": 1,
        "codigoPostal": "1012LG",
        "municipio": "Amsterdam",
        "provincia": "Noord-Holland",
        "latitud": 52.37714446,
        "longitud": 4.89803846,
        "confianza": 1,
        "coincideNumero": true,
        "coincideMunicipio": true,
        "enCopia": false
      }
    ],
    "attribution": "PDOK Locatieserver (Kadaster, BAG); Kadaster, Basisregistratie Kadaster (PDOK, CC BY 4.0)"
  }
}

Errores posibles

CódigoHTTPDescripción
VALIDATION_ERROR400La referencia no tiene un formato válido para el país.
NOT_FOUND404Ningún portal con referencia catastral encaja con la dirección.
CNV_COVERAGE422El país no tiene búsqueda por dirección (SE, HR o un país sin cobertura)
KEY_AUTH_004429Cuota mensual de la API key agotada (ver cabeceras X-Quota-*).
SERVICE_UNAVAILABLE503CartoCiudad no responde. Reintentar tras Retry-After.

Inteligencia de parcela y exportaciones

Geometría, potencial solar, datos agrícolas y exportación de ficheros (KML/GPX/PDF/DXF), disponibles con tu API key. Los datos de mercado y el score de inversión se quedan en la web y en la app (Pro) y no se exponen por API.

GET/api/catastro/:refcat/polygon

Obtener el polígono GeoJSON de una parcela.

Parámetros

:refcatstringReferencia catastral
countrystringCódigo de país (parámetro de query, por defecto: ES)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/9872023VH5797S/polygon"

Ejemplo de respuesta

200 OK
{
  "data": {
    "refcat": "9872023VH5797S",
    "geojson": {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [ [ [-3.463391, 38.640317], [-3.463174, 38.640217], /* ... */ ] ]
      }
    }
  }
}

Cuota mensual agotada

429
{
  "success": false,
  "error": "Monthly quota used up (5000/5000). Upgrade at https://parcelgps.com/developers",
  "code": "KEY_AUTH_004"
}
GET/api/catastro/:refcat/solar

Obtener datos de potencial solar (PVGIS) de una parcela europea.

Parámetros

:refcatstringReferencia catastral
countrystringCódigo de país (parámetro de query, por defecto: ES)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/9872023VH5797S/solar"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "kwh_year": 23749.9,
    "kw_instalables": 17.86,
    "ahorro_anual_eur": 3562.49,
    "amortizacion_anos": 5,
    "co2_evitado_kg": 5533.73,
    "irradiacion_media": 1807.08,
    "nota_solar": 5,
    "orientacion_optima": "Sur",
    "angulo_inclinacion": 34,
    "costo_instalacion_eur": 17865,
    "disponible": true,
    "estado": "ok",
    "fuente": "PVGIS (JRC)",
    "economics": {
      "autoconsumo_kwh_ano": 5000,
      "excedentes_kwh_ano": 18749.9,
      "ingreso_neto_anual_eur": 1473.18,
      "payback_anos": 12.13,
      "tir_pct": 6.56,
      "retorno_total_25_anos_eur": 18964.5
    }
  }
}

Parcela sin datos solares

200
{
  "success": true,
  "data": { "disponible": false, "estado": "sin_datos" }
}
GET/api/catastro/:refcat/agro

Datos agrícolas del suelo de una parcela (SIGPAC): cultivo principal, uso del suelo, pendiente, altitud y superficie. Solo parcelas rústicas — las urbanas devuelven "cultivo_principal": "urbano".

Parámetros

:refcatstringReferencia catastral
countrystringCódigo de país (parámetro de query, por defecto: ES)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/catastro/23058A00700036/agro"

Ejemplo de respuesta

200 OK
{
  "success": true,
  "data": {
    "agro": {
      "cultivo_principal": "olivar",
      "uso_suelo": "Asociación olivar - viñedo",
      "superficie_ha": 10.6045,
      "coef_regadio": 1,
      "ndvi": {
        "valor_medio": 0.18,
        "salud_cultivo": "bajo",
        "ultima_actualizacion": "2026-06-18T00:00:00Z"
      },
      "precios_mercado": {
        "precio_kg": 8.5,
        "tendencia": "+12.5% vs periodo anterior"
      },
      "recinto": {
        "provincia": 23,
        "municipio": 58,
        "poligono": 7,
        "parcela": 36,
        "recinto": 1,
        "altitud": 559,
        "pendiente_media": 12.3
      }
    }
  }
}

Cuota mensual agotada

429
{
  "success": false,
  "error": "Monthly quota used up (5000/5000). Upgrade at https://parcelgps.com/developers",
  "code": "KEY_AUTH_004"
}
GET/api/export/kml?refcat=:refcat

Exportar datos de parcela en formato KML (Google Earth).

Parámetros

refcatstringReferencia catastral
countrystringCódigo de país (opcional: se detecta por la referencia)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/export/kml?refcat=9872023VH5797S" -o parcel.kml

Ejemplo de respuesta

200 OK
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <Placemark>
      <name>9872023VH5797S</name>
      ...
    </Placemark>
  </Document>
</kml>
GET/api/export/gpx?refcat=:refcat

Exportar datos de parcela en formato GPX (navegadores GPS).

Parámetros

refcatstringReferencia catastral
countrystringCódigo de país (opcional: se detecta por la referencia)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.parcelgps.com/api/export/gpx?refcat=9872023VH5797S" -o parcel.gpx

Ejemplo de respuesta

200 OK
<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.1">
  <wpt lat="40.4168" lon="-3.7038">
    <name>9872023VH5797S</name>
  </wpt>
</gpx>

Registro de cambios

Lo que se ha publicado en la API esta semana, con el número de cambio del repositorio. Las respuestas siguen siendo compatibles: ningún campo existente cambia de nombre.

  • /api/catastro/:refcat/units ya sirve las fincas del País Vasco y Navarra desde nuestra copia de los catastros forales, con el mismo contrato que el territorio común (200 por página, cursor, ETag, 1 unidad de cuota por unidad), la atribución de cada hacienda foral y sin coeficiente de participación, que los datos abiertos forales no publican. Álava, en carga. Cambios: #101, #102, #103

  • Dirección a parcela en 26 países europeos con /api/search/address/candidates?country=XX: registro oficial de direcciones donde existe (Países Bajos, Suiza, Polonia, Chequia, Estonia, Dinamarca, Flandes) y OpenStreetMap en el resto, con 10 segundos como máximo por punto. Cambios: #93, #94
  • Nuevo /api/catastro/:refcat/ground-motion: velocidad vertical y este-oeste del terreno desde Copernicus EGMS 2020-2024 en toda su cobertura, incluidas las teselas republicadas de Países Bajos, Bélgica y los Pirineos. Cambios: #80, #91
  • Bloque climate en /terrain con las normales de ERA5-Land. La rejilla se está cargando: hasta que termine responde status unavailable. Cambios: #78
  • Fuera de España: availableFields dice qué trae cada respuesta, lo vacío no gasta cuota, /solar /agro /score responden 422 CNV_COVERAGE donde no hay datos, los dígitos ambiguos responden 300 CNV_AMBIGUOUS, la referencia sale completa y Bélgica devuelve latitud y longitud en su orden. Cambios: #76
  • Con una API key, los textos de error salen en inglés; el campo code no cambia. Cambios: #77
  • Dirección a parcela en Francia (Base Adresse Nationale) e Italia; Alemania y Austria por coordenadas con superficie y contorno; Chipre en menos de un segundo; /terrain y /ground-motion encuentran el contorno en el resto de Europa. Cambios: #83, #84, #85, #86
  • POST /api/search/coordinates enruta todos los países igual que el GET. Cambios: #79
  • /terrain y /ground-motion decodifican las referencias con barra (Bélgica, Chequia, Polonia): el campo refcat ya no sale como %2F. Cambios: #95

  • Nuevo /api/catastro/:refcat/terrain: relieve sobre el contorno (Copernicus DEM GLO-30) y cruce con Natura 2000 y espacios protegidos nacionales (CDDA), sin repetir los espacios que aparecen en las dos listas. Cambios: #67, #69, #70
  • Nuevo /api/catastro/:refcat14/units: todas las unidades de una finca española, 200 por página con cursor, a 1 unidad de cuota por unidad servida y nunca más de las que te quedan; País Vasco y Navarra responden 422 CNV_COVERAGE. Cambios: #53, #55, #73, #74, #75
  • Dirección a finca en España con candidatos de CartoCiudad, ETag y 304 gratis para reimportar, y especificación OpenAPI 3.1 en /api/openapi.json. Cambios: #72
  • Cabeceras X-Quota-Limit, X-Quota-Remaining, X-Quota-Reset y X-Quota-Tier con la cuota mensual, y límite por minuto por clave según el plan. Cambios: #52, #58