IndicePA Arricchito – API Pubblica
Accesso libero all'indice delle pubbliche amministrazioni italiane con dati di enrichment manuale applicati. La struttura della risposta è compatibile con l'API ufficiale IndicePA (CKAN datastore_search).
Endpoint
Parametri
| Parametro | Tipo | Default | Descrizione |
|---|---|---|---|
| offset | int | 0 | Numero di record da saltare. Usato per la paginazione. |
| limit | int | 100 | Record per pagina. Massimo: 32000. |
| q | string | — | Ricerca full-text case-insensitive su tutti i campi del record. |
| filters | JSON | — | Oggetto JSON con filtri esatti per campo. Supporta valori singoli o array di valori. Es: {"Codice_Categoria":"L6"} oppure {"Tipologia":["Comuni","Unioni di Comuni"]} |
| fields | string | tutti | Campi da includere nella risposta, separati da virgola. Es: Codice_IPA,Denominazione_ente,Sito_istituzionale |
Esempi d'uso
Paginazione base
Senza parametri restituisce i primi 100 record. Il campo result._links.next contiene l'URL della pagina successiva.
Scorrere con offset += limit finché result._links.next è assente o offset ≥ result.total.
Ricerca full-text
La ricerca è case-insensitive e si applica a ogni campo del record.
Filtro per campo
Il parametro filters deve essere un JSON valido. Ricordare di URL-encode le parentesi graffe.
Si possono combinare q e filters insieme.
Proiezione campi
Riduce significativamente la dimensione della risposta. Il campo _id è sempre incluso.
Download completo (Python)
import requests
API = "https://ossodig.rfeed.it/public-api.php"
LIMIT = 100
all_records = []
offset = 0
while True:
resp = requests.get(API, params={"offset": offset, "limit": LIMIT})
data = resp.json()["result"]
all_records.extend(data["records"])
print(f"Scaricati {len(all_records)} / {data['total']}")
if not data["_links"].get("next"):
break
offset += LIMIT
print(f"Totale: {len(all_records)} enti")
Download completo (curl)
# Scarica tutte le pagine in file separati
OFFSET=0; LIMIT=100; TOTAL=999999
while [ $OFFSET -lt $TOTAL ]; do
FILE="page_${OFFSET}.json"
curl -s "https://ossodig.rfeed.it/public-api.php?offset=$OFFSET&limit=$LIMIT" -o "$FILE"
TOTAL=$(python3 -c "import json; print(json.load(open('$FILE'))['result']['total'])")
echo "Pagina offset=$OFFSET totale=$TOTAL"
OFFSET=$((OFFSET + LIMIT))
done
Struttura della risposta
La risposta JSON segue esattamente il formato CKAN datastore_search dell'IndicePA ufficiale.
{
"help": "...",
"success": true,
"result": {
"include_total": true,
"limit": 100,
"records_format": "objects",
"resource_id": "d09adf99-dc10-4349-8c53-27b1e5aa97b6",
"total_estimation_threshold": null,
"records": [ { "_id": 1, "Codice_IPA": "...", ... } ],
"fields": [ { "id": "Codice_IPA", "type": "text", "info": { ... } } ],
"_links": {
"start": "https://.../public-api.php?offset=0&limit=100",
"next": "https://.../public-api.php?offset=100&limit=100"
},
"total": 23710,
"total_was_estimated": false,
"_enriched_fields": 142,
"_source": "Osservatorio Sovranità Digitale – IndicePA Arricchito",
"_generated_at": "2026-06-18T21:00:00Z"
}
}
Campi aggiuntivi rispetto all'API ufficiale
| Campo | Tipo | Descrizione |
|---|---|---|
| _enriched_fields | int | Numero di record che hanno ricevuto almeno un dato di enrichment manuale. |
| _source | string | Identificativo della fonte dati. |
| _generated_at | string (ISO 8601) | Timestamp UTC di generazione della risposta. |
Campi disponibili
| Campo | Tipo | Descrizione |
|---|---|---|
| _id | int | Identificatore numerico progressivo |
| Codice_IPA | text | Codice identificativo univoco dell'ente su IndicePA |
| Denominazione_ente | text | Denominazione ufficiale dell'ente |
| Codice_fiscale_ente | text | Codice fiscale |
| Tipologia | text | Tipologia di appartenenza (es. "Pubbliche Amministrazioni") |
| Codice_Categoria | text | Codice categoria (es. L6 = Comuni, L33 = Istituti scolastici) |
| Codice_natura | text | Codice natura giuridica |
| Codice_ateco | text | Codice ATECO |
| Ente_in_liquidazione | text | S/N/null – indicatore liquidazione |
| Codice_MIUR | text | Codice MIUR (istituti scolastici) |
| Codice_ISTAT | text | Codice ISTAT dell'ente |
| Acronimo | text | Sigla/acronimo dell'ente |
| Nome_responsabile | text | Nome del responsabile |
| Cognome_responsabile | text | Cognome del responsabile |
| Titolo_responsabile | text | Qualifica del responsabile |
| Codice_comune_ISTAT | text | Codice ISTAT del comune sede |
| Codice_catastale_comune | text | Codice catastale del comune sede |
| CAP | text | Codice di avviamento postale |
| Indirizzo | text | Indirizzo della sede |
| Mail1 … Mail5 | text | Indirizzi email (fino a 5) |
| Tipo_Mail1 … Tipo_Mail5 | text | Tipo email: "Pec" o "Altro" |
| Sito_istituzionale | text | URL del sito web istituzionale ✦ arricchito |
| Url_facebook | text | Pagina Facebook ✦ arricchito |
| Url_linkedin | text | Profilo LinkedIn ✦ arricchito |
| Url_twitter | text | Profilo X/Twitter ✦ arricchito |
| Url_youtube | text | Canale YouTube ✦ arricchito |
| Data_aggiornamento | text | Data ultima modifica (YYYY-MM-DD) |
✦ Campi tipicamente oggetto di enrichment manuale.
Compatibilità con l'API ufficiale
datastore_search può essere reindirizzato a questo endpoint sostituendo solo il dominio base. I nomi dei parametri, la struttura dei campi e il formato di paginazione sono identici.
resource_id è accettato ma ignorato — questo endpoint espone sempre e solo il dataset IndicePA arricchito.
I filtri sort e distinct dell'API CKAN non sono supportati.