API REST per il Territorio Italiano — 100% Gratuite
Catasto, geocoding, confini e dati arricchiti. 9 endpoint, 1.000 req/ora, zero costi. Mai.
API v2 — Endpoint Disponibili
API REST gratuite con risposta JSON. Genera i tuoi token su app.zornade.com — 1.000 req/ora
/api/v2/healthVerifica lo stato dell'API e la versione corrente. Non richiede autenticazione.
Note utili
- Risposta: { status, version, timestamp, auth, rate_limit, endpoints[] }
- Endpoint pubblico — non serve x-api-key
/api/v2/geocode/searchGeocoding diretto — trova coordinate a partire da un indirizzo o nome di luogo. Scope: geocoding:read
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)
/api/v2/geocode/reverseGeocoding inverso — trova indirizzi vicini a coordinate. Scope: geocoding:read
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)
/api/v2/admin/regionsElenco completo delle 20 regioni italiane. Scope: admin:read
Note utili
- Risposta: { data: [{ id, code, name, area_km2 }], meta: { count: 20 } }
- Restituisce sempre tutte le 20 regioni italiane
/api/v2/admin/provincesElenco delle province italiane, filtrabile per regione. Scope: admin:read
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.
/api/v2/admin/municipalitiesElenco dei comuni, filtrabile per provincia. Scope: admin:read
Note utili
- Risposta: { data: [{ id, name, province, region, postal_code, fiscal_code }], meta: { count } }
- Filtrando per provincia si ottengono i comuni di quel territorio.
/api/v2/parcels/locateLocalizza particelle catastali per punto, multi-punto o bounding box. Scope: parcels:read
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)
/api/v2/parcels/searchCerca particelle catastali per riferimenti catastali (comune, foglio). Scope: parcels:read
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)
/api/v2/parcels/{id}Profilo arricchito completo di una particella — tutte le 11 sezioni dati, gratis. Scope: parcels:read
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 headerx-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 rimastex-ratelimit-resetUnix timestamp resetx-request-idID univoco richiestaCodici di errore
400INVALID_PARAMS — parametri mancanti o non validi401API_KEY_REQUIRED / INVALID_API_KEY404NOT_FOUND — risorsa non trovata405METHOD_NOT_ALLOWED — solo GET410GONE — endpoint legacy v1 deprecato429Rate limit superatoGeocoding 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"
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 gratuitoPronto a Iniziare?
Registrati gratuitamente su app.zornade.com per accedere alle API