Live IndicePA Arricchito v1

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).

Nessuna chiave API richiesta. Nessun rate limit. CORS abilitato per tutti i domini.

Endpoint

GET https://ossodig.rfeed.it/public-api.php

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

Prima pagina (100 record)
https://ossodig.rfeed.it/public-api.php

Senza parametri restituisce i primi 100 record. Il campo result._links.next contiene l'URL della pagina successiva.

Pagina 2 (offset 100)
https://ossodig.rfeed.it/public-api.php?offset=100&limit=100

Scorrere con offset += limit finché result._links.next è assente o offset ≥ result.total.

Tutti gli enti che contengono "Comune di Roma"
https://ossodig.rfeed.it/public-api.php?q=comune+di+roma

La ricerca è case-insensitive e si applica a ogni campo del record.

Filtro per campo

Solo Comuni (Codice_Categoria = L6)
https://ossodig.rfeed.it/public-api.php?filters={"Codice_Categoria":"L6"}

Il parametro filters deve essere un JSON valido. Ricordare di URL-encode le parentesi graffe.

Enti con PEC Google Workspace
https://ossodig.rfeed.it/public-api.php?q=google&filters={"Tipo_Mail1":"Pec"}

Si possono combinare q e filters insieme.

Proiezione campi

Solo codice, nome e sito istituzionale
https://ossodig.rfeed.it/public-api.php?fields=Codice_IPA,Denominazione_ente,Sito_istituzionale&limit=5

Riduce significativamente la dimensione della risposta. Il campo _id è sempre incluso.

Download completo (Python)

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)

Shell
# 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.

JSON
{
  "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

CampoTipoDescrizione
_enriched_fieldsintNumero di record che hanno ricevuto almeno un dato di enrichment manuale.
_sourcestringIdentificativo della fonte dati.
_generated_atstring (ISO 8601)Timestamp UTC di generazione della risposta.

Campi disponibili

CampoTipoDescrizione
_idintIdentificatore numerico progressivo
Codice_IPAtextCodice identificativo univoco dell'ente su IndicePA
Denominazione_entetextDenominazione ufficiale dell'ente
Codice_fiscale_entetextCodice fiscale
TipologiatextTipologia di appartenenza (es. "Pubbliche Amministrazioni")
Codice_CategoriatextCodice categoria (es. L6 = Comuni, L33 = Istituti scolastici)
Codice_naturatextCodice natura giuridica
Codice_atecotextCodice ATECO
Ente_in_liquidazionetextS/N/null – indicatore liquidazione
Codice_MIURtextCodice MIUR (istituti scolastici)
Codice_ISTATtextCodice ISTAT dell'ente
AcronimotextSigla/acronimo dell'ente
Nome_responsabiletextNome del responsabile
Cognome_responsabiletextCognome del responsabile
Titolo_responsabiletextQualifica del responsabile
Codice_comune_ISTATtextCodice ISTAT del comune sede
Codice_catastale_comunetextCodice catastale del comune sede
CAPtextCodice di avviamento postale
IndirizzotextIndirizzo della sede
Mail1 … Mail5textIndirizzi email (fino a 5)
Tipo_Mail1 … Tipo_Mail5textTipo email: "Pec" o "Altro"
Sito_istituzionaletextURL del sito web istituzionale ✦ arricchito
Url_facebooktextPagina Facebook ✦ arricchito
Url_linkedintextProfilo LinkedIn ✦ arricchito
Url_twittertextProfilo X/Twitter ✦ arricchito
Url_youtubetextCanale YouTube ✦ arricchito
Data_aggiornamentotextData ultima modifica (YYYY-MM-DD)

✦ Campi tipicamente oggetto di enrichment manuale.

Compatibilità con l'API ufficiale

Drop-in replacement: qualsiasi script che consuma l'API ufficiale IndicePA tramite 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.
Nota: il parametro 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.