API v2 — 100% Gratuite

API REST per il Territorio Italiano — 100% Gratuite

Catasto, geocoding, confini e dati arricchiti. 9 endpoint, 1.000 req/ora, zero costi. Mai.

14 Fonti IntegrateCatasto, OMI, rischio, demografia e terreno arricchiti su ogni particella
100% Gratuite1.000 req/ora, nessun costo nascosto, nessun piano a pagamento
Token PersonaliFino a 5 token API con scope granulari per controllo accessi
Geocoding + CatastoGeocoding diretto/inverso, ricerca particelle, dati arricchiti
Scroll

API v2 — Endpoint Disponibili

API REST gratuite con risposta JSON. Genera i tuoi token su app.zornade.com — 1.000 req/ora

GET
/api/v2/health

Verifica lo stato dell'API e la versione corrente. Non richiede autenticazione.

Parametri:
Nessun parametro richiesto

Note utili

  • Risposta: { status, version, timestamp, auth, rate_limit, endpoints[] }
  • Endpoint pubblico — non serve x-api-key
GET
/api/v2/geocode/search

Geocoding diretto — trova coordinate a partire da un indirizzo o nome di luogo. Scope: geocoding:read

Parametri:
q (obbligatorio) — Testo dell'indirizzo o località (min. 2 caratteri)
city (opzionale) — Filtra risultati per città (es. "firenze")
limit (opzionale, default: 5, max: 20)

Note utili

  • Risposta: { data: [{ address_id, street_name, street_number, municipality_name, province, region, latitude, longitude, formatted_address }], meta: { query, city, count } }
  • Ricerca su tutto il territorio italiano. Il filtro city restringe i risultati alla città indicata.

Possibili errori

  • INVALID_PARAMS se q è assente o ha meno di 2 caratteri (HTTP 400)
GET
/api/v2/geocode/reverse

Geocoding inverso — trova indirizzi vicini a coordinate. Scope: geocoding:read

Parametri:
lat (obbligatorio) — Latitudine (35.5–47.5)
lng (obbligatorio) — Longitudine (6.0–19.0)
radius (opzionale, default: 100, max: 500) — Raggio in metri
limit (opzionale, default: 5, max: 20)

Note utili

  • Risposta: { data: [{ address_id, street_name, street_number, municipality_name, province, latitude, longitude, distance_meters, formatted_address }], meta: { lat, lng, radius_m, count } }
  • Coordinate in formato WGS84. Le coordinate devono ricadere entro i confini italiani.

Possibili errori

  • INVALID_PARAMS se lat/lng mancanti o fuori range (HTTP 400)
GET
/api/v2/admin/regions

Elenco completo delle 20 regioni italiane. Scope: admin:read

Parametri:
Nessun parametro richiesto

Note utili

  • Risposta: { data: [{ id, code, name, area_km2 }], meta: { count: 20 } }
  • Restituisce sempre tutte le 20 regioni italiane
GET
/api/v2/admin/provinces

Elenco delle province italiane, filtrabile per regione. Scope: admin:read

Parametri:
region (opzionale) — Nome della regione per filtrare (es. "Lazio")

Note utili

  • Risposta: { data: [{ id, code, name, abbreviation, region_code }], meta: { count } }
  • Senza filtro restituisce tutte le 100+ province. Con filtro (es. Lazio) restituisce le 5 province della regione.
GET
/api/v2/admin/municipalities

Elenco dei comuni, filtrabile per provincia. Scope: admin:read

Parametri:
province (opzionale) — Nome della provincia per filtrare (es. "Trento")

Note utili

  • Risposta: { data: [{ id, name, province, region, postal_code, fiscal_code }], meta: { count } }
  • Filtrando per provincia si ottengono i comuni di quel territorio.
GET
/api/v2/parcels/locate

Localizza particelle catastali per punto, multi-punto o bounding box. Scope: parcels:read

Parametri:
lat + lng — Modo punto singolo: latitudine e longitudine
points — Modo multi-punto: coppie lat,lng separate da ";" (es. "41.90,12.49;45.43,10.99")
bbox — Modo bounding box: minLng,minLat,maxLng,maxLat (ordine GeoJSON, max 0.05° per lato)
limit (opzionale, default: 50 per bbox / 10 per punto, max: 200)

Note utili

  • Risposta: { data: [{ fid, gml_id, label, municipality: { code, name, province, region }, area_m2, centroid: { lat, lng } }], meta: { mode, count, ... } }
  • Il campo meta.mode indica la modalità usata: "point", "points" o "bbox"
  • Bbox: max 0.05° per lato (~5.5 km), altrimenti errore BBOX_TOO_LARGE
  • Coordinate in formato WGS84 — devono ricadere entro i confini italiani

Possibili errori

  • INVALID_PARAMS se nessun parametro di localizzazione è presente (HTTP 400)
  • BBOX_TOO_LARGE se il bounding box supera 0.05° per lato (HTTP 400)
GET
/api/v2/parcels/search

Cerca particelle catastali per riferimenti catastali (comune, foglio). Scope: parcels:read

Parametri:
comune (obbligatorio) — Nome del comune (es. "Trento")
foglio (opzionale) — Numero foglio catastale
limit (opzionale, default: 20)

Note utili

  • Risposta: { data: [{ fid, gml_id, label, municipality, area_m2, centroid }], meta: { comune, foglio, count } }
  • Se specificato solo il comune, restituisce tutte le particelle (con paginazione)

Possibili errori

  • INVALID_PARAMS se il parametro comune è assente (HTTP 400)
GET
/api/v2/parcels/{id}

Profilo arricchito completo di una particella — tutte le 11 sezioni dati, gratis. Scope: parcels:read

Parametri:
id (obbligatorio, path) — Identificativo della particella (fid)
include (opzionale) — Sezioni specifiche da includere, separate da virgola (es. "basic,risk,valuation")

Note utili

  • Sezioni disponibili (tutte gratuite, nessun tier gate):
  • basic, cadastral, address, risk, subsidence, land_cover, land_use, valuation, coastal_erosion, cultural_heritage, poi
  • Risposta: { data: { fid, ... }, meta: { sections_included: [...] } }
  • Senza il parametro include, restituisce tutte le 11 sezioni
  • land_use proviene da Urban Atlas 2018 (Copernicus/EEA) — disponibile solo per alcune città; altrove restituisce null
  • L'endpoint restituisce 404 se il fid non esiste

Possibili errori

  • NOT_FOUND se la particella non esiste (HTTP 404)

Autenticazione

Come autenticare le richieste API

  • Tutte le richieste (tranne /health) richiedono il header x-api-key
  • Solo il metodo GET è supportato — POST/PUT/DELETE restituiscono 405 Method Not Allowed
  • Token invalido o assente → 401 API_KEY_REQUIRED
  • Rate limit: 1.000 req/ora per account. Superamento → 429 Too Many Requests
  • Genera fino a 5 token con scope granulari: geocoding:read, parcels:read, admin:read
# Header richiesto
x-api-key: zrn_your_token_here

# Esempio completo
curl -X GET "https://wupqwfqjfpwrapgnogjv.supabase.co/functions/v1/api-v2/api/v2/health" -H "x-api-key: zrn_..."

health

Nessuna autenticazione richiesta

{
  "status": "ok",
  "version": "2.3.0",
  "rate_limit": "1000 requests/hour",
  "endpoints": [
    "GET /api/v2/geocode/search",
    "GET /api/v2/geocode/reverse",
    "GET /api/v2/admin/{regions,provinces,municipalities}",
    "GET /api/v2/parcels/{id}",
    "GET /api/v2/parcels/search",
    "GET /api/v2/parcels/locate"
  ]
}

geocode/search

?q=piazza+del+duomo&city=firenze&limit=2

{
  "data": [
    {
      "address_id": 10753169,
      "street_name": "Piazza Del Duomo",
      "street_number": "1",
      "municipality_code": "D612",
      "municipality_name": "Firenze",
      "province": "Firenze",
      "region": "Toscana",
      "latitude": 43.7735371,
      "longitude": 11.255523,
      "formatted_address": "Piazza Del Duomo 1, , Firenze"
    }
  ],
  "meta": {
    "query": "piazza del duomo",
    "city": "firenze",
    "count": 2
  }
}

geocode/reverse

?lat=41.9028&lng=12.4964&radius=100

{
  "data": [
    {
      "address_id": 960481,
      "street_name": "Piazza Della Repubblica",
      "street_number": "11",
      "municipality_code": "H501",
      "municipality_name": "Roma",
      "province": "Roma",
      "latitude": 41.90318,
      "longitude": 12.4965448,
      "distance_meters": 43.88,
      "formatted_address": "Piazza Della Repubblica 11, , Roma"
    }
  ],
  "meta": {
    "lat": 41.9028,
    "lng": 12.4964,
    "radius_m": 100,
    "count": 1
  }
}

parcels/locate

?lat=41.9028&lng=12.4964

{
  "data": [
    {
      "fid": 28009975,
      "gml_id": "CadastralParcel.IT.AGE.PLA.H501A048100.A",
      "label": "A",
      "municipality": {
        "code": "H501",
        "name": "Roma",
        "province": "Roma",
        "region": "Lazio"
      },
      "area_m2": 1919.81,
      "centroid": {
        "lat": 41.9026975,
        "lng": 12.4962434
      }
    }
  ],
  "meta": {
    "mode": "point",
    "lat": 41.9028,
    "lng": 12.4964,
    "count": 1
  }
}

parcels/{id} (sezioni selettive)

?include=basic,risk,subsidence,valuation — Piazza della Repubblica, Roma

{
  "data": {
    "fid": 28009975,
    "gml_id": "CadastralParcel.IT.AGE.PLA.H501A048100.A",
    "label": "A",
    "area_m2": 1919.81,
    "centroid": { "lat": 41.9026975, "lng": 12.4962434 },
    "municipality": {
      "code": "H501", "name": "Roma",
      "province": "Roma", "region": "Lazio"
    },
    "risk": {
      "seismic_zone": 3,
      "pga": 0.1154,
      "flood_level": null,
      "landslide_level": null
    },
    "subsidence": {
      "velocity_mm_year": -0.6,
      "acceleration": -0.15,
      "risk_class": 1,
      "risk_label": "trascurabile",
      "risk_index": 0.03,
      "direction": "stabile",
      "trend": "stabile"
    },
    "valuation": [
      {
        "zone": "B29",
        "zone_description": "VIMINALE (VIA TORINO)",
        "fascia": "B",
        "microzona": 8,
        "property_type": "Abitazioni civili",
        "condition": "NORMALE",
        "purchase": { "min_eur_m2": 4600, "max_eur_m2": 6300 },
        "rental": { "min_eur_m2": 15.3, "max_eur_m2": 21.3 }
      }
    ]
  },
  "meta": {
    "sections_included": ["basic","risk","subsidence","valuation"]
  }
}

Headers di risposta

x-ratelimit-limitLimite orario (1000)
x-ratelimit-remainingRichieste rimaste
x-ratelimit-resetUnix timestamp reset
x-request-idID univoco richiesta

Codici di errore

400INVALID_PARAMS — parametri mancanti o non validi
401API_KEY_REQUIRED / INVALID_API_KEY
404NOT_FOUND — risorsa non trovata
405METHOD_NOT_ALLOWED — solo GET
410GONE — endpoint legacy v1 deprecato
429Rate limit superato

Geocoding inverso

Trova indirizzi vicini a coordinate geografiche.

curl -X GET \
  "https://wupqwfqjfpwrapgnogjv.supabase.co/functions/v1/api-v2/api/v2/geocode/reverse?lat=41.9028&lng=12.4964&radius=200" \
  -H "x-api-key: <YOUR_API_TOKEN>"

Ricerca indirizzo

Cerca coordinate a partire da un indirizzo, con filtro opzionale per città.

curl -X GET \
  "https://wupqwfqjfpwrapgnogjv.supabase.co/functions/v1/api-v2/api/v2/geocode/search?q=piazza+del+duomo&city=firenze&limit=5" \
  -H "x-api-key: <YOUR_API_TOKEN>"

Localizza (punto)

Trova le particelle catastali in prossimità di un punto.

curl -X GET \
  "https://wupqwfqjfpwrapgnogjv.supabase.co/functions/v1/api-v2/api/v2/parcels/locate?lat=41.9028&lng=12.4964&limit=5" \
  -H "x-api-key: <YOUR_API_TOKEN>"

Localizza (bbox)

Tutte le particelle dentro un rettangolo (max 0.05° per lato).

curl -X GET \
  "https://wupqwfqjfpwrapgnogjv.supabase.co/functions/v1/api-v2/api/v2/parcels/locate?bbox=12.490,41.890,12.500,41.895&limit=50" \
  -H "x-api-key: <YOUR_API_TOKEN>"

Ricerca catastale

Cerca particelle per comune e foglio catastale.

curl -X GET \
  "https://wupqwfqjfpwrapgnogjv.supabase.co/functions/v1/api-v2/api/v2/parcels/search?comune=Trento&foglio=1&limit=5" \
  -H "x-api-key: <YOUR_API_TOKEN>"

Dettaglio particella

Profilo arricchito con sezioni selettive (11 sezioni disponibili).

curl -X GET \
  "https://wupqwfqjfpwrapgnogjv.supabase.co/functions/v1/api-v2/api/v2/parcels/28009975?include=basic,risk,subsidence,valuation" \
  -H "x-api-key: <YOUR_API_TOKEN>"

Quick Start — Python & JavaScript

Python (requests)

Geocoding + dettaglio particella

import requests

API = "https://app.zornade.com/api/v2"
KEY = {"x-api-key": "<YOUR_TOKEN>"}

# Geocoding
r = requests.get(
    f"{API}/geocode/search",
    params={"q": "piazza del duomo", "city": "firenze"},
    headers=KEY,
)
coords = r.json()["data"][0]

# Particella più vicina
r = requests.get(
    f"{API}/parcels/locate",
    params={"lat": coords["latitude"], "lng": coords["longitude"]},
    headers=KEY,
)
parcel = r.json()["data"][0]

# Dettaglio con rischio e valutazione
r = requests.get(
    f"{API}/parcels/{parcel['id']}?include=basic,risk,valuation",
    headers=KEY,
)
print(r.json())

JavaScript (fetch)

Geocoding + dettaglio particella

const API = "https://app.zornade.com/api/v2";
const headers = { "x-api-key": "<YOUR_TOKEN>" };

// Geocoding
const geo = await fetch(
  `${API}/geocode/search?q=piazza+del+duomo&city=firenze`,
  { headers }
).then(r => r.json());

const { latitude, longitude } = geo.data[0];

// Particella più vicina
const loc = await fetch(
  `${API}/parcels/locate?lat=${latitude}&lng=${longitude}`,
  { headers }
).then(r => r.json());

const parcelId = loc.data[0].id;

// Dettaglio con rischio e valutazione
const detail = await fetch(
  `${API}/parcels/${parcelId}?include=basic,risk,valuation`,
  { headers }
).then(r => r.json());

console.log(detail);

Casi d'Uso

Come le aziende usano le nostre API

Real Estate & PropTech

Valutazioni automatiche, due diligence territoriale, analisi di mercato immobiliare.

"Arricchisci il tuo CRM con dati catastali in tempo reale"

Financial Services

Risk assessment, mortgage lending, collateral valuation per banche e assicurazioni.

"Calcola automaticamente il valore degli immobili in garanzia"

Legal Tech & Notai

Verifiche preliminari, conformità urbanistica, ricerche catastali automatizzate.

"Genera report preliminari per rogiti in 5 secondi"

SaaS & Platform

Arricchisci i tuoi database con dati territoriali certificati e aggiornati.

"Integra dati catastali arricchiti nel tuo prodotto con 3 righe di codice"

Coming Soon

API Visure Catastali

Stiamo finalizzando l'API per richiedere visure catastali ufficiali direttamente dalla tua applicazione. Iscriviti per ricevere aggiornamenti e accesso anticipato.

Hai bisogno di un backend personalizzato sopra le nostre API?

Progettiamo e sviluppiamo integrazioni backend su misura: da semplici wrapper fino a piattaforme enterprise complete con dati catastali, GIS e visure.

Richiedi un preventivo gratuito

Pronto a Iniziare?

Registrati gratuitamente su app.zornade.com per accedere alle API

Leggi la Documentazione