scopemy.city
Osservatorio civico
SegnalaWhatsApp

API e integrazioni

Le segnalazioni pubblicate sono disponibili tramite un'API JSON, tramite Open311 (compatibile con GIS come ArcGIS o QGIS e con i sistemi di manutenzione), tramite webhook e con un widget da integrare.

Principi

Specifica OpenAPI 3.1: openapi.yaml · openapi.json

curl -H 'Accept: application/json' 'https://scopemy.city/api/v1/signalements?statut=resolu&limite=20'

API JSON

GET /api/v1/signalements

Elenco paginato delle segnalazioni pubblicate

Parametri di GET /api/v1/signalements
ParametroDoveDescrizione
bbox queryArea minLng,minLat,maxLng,maxLat (WGS84).
categorie queryUna o più categorie (codici separati da virgole).
statut querynouveau, en_cours, resolu o rejete (più valori separati da virgole).
depuis queryCreate a partire da questa data (AAAA-MM-GG).
jusqua queryCreate fino a questa data inclusa (AAAA-MM-GG).
q queryRicerca in titolo, indirizzo, descrizione, riferimento ed etichette.
lang queryLingua delle etichette (fr, de, it, en), tra quelle del sito.
limite querySegnalazioni per pagina (da 1 a 100, predefinito 50).
curseur queryCursore opaco della pagina successiva (pagination.suivant).

Codici di risposta: 200, 400, 429

GET /api/v1/signalements/{reference}

Una segnalazione pubblicata, per riferimento

Parametri di GET /api/v1/signalements/{reference}
ParametroDoveDescrizione
reference * pathRiferimento SC-XXXX-XXXX (o il vecchio FMC-XXXXXX).

Codici di risposta: 200, 404

GET /api/v1/carte

Segnalazioni nell'area visibile della mappa, raggruppate a zoom basso

Parametri di GET /api/v1/carte
ParametroDoveDescrizione
bbox * queryArea visualizzata minLng,minLat,maxLng,maxLat (WGS84).
zoom queryLivello di zoom Web Mercator (da 0 a 22).
categorie queryUna o più categorie (codici separati da virgole).
statut querynouveau, en_cours, resolu o rejete (più valori separati da virgole).
depuis queryCreate a partire da questa data (AAAA-MM-GG).
jusqua queryCreate fino a questa data inclusa (AAAA-MM-GG).
q queryRicerca in titolo, indirizzo, descrizione, riferimento ed etichette.

Codici di risposta: 200, 400

Open311 GeoReport v2

Solo formato JSON. I servizi sono le categorie del sito, le richieste sono le segnalazioni pubblicate; status vale open (nuova, in corso) o closed (risolta, respinta).

GET /open311/v2/discovery.json

Scoperta Open311

Codici di risposta: 200

GET /open311/v2/services.json

Servizi (categorie del sito)

Codici di risposta: 200

GET /open311/v2/requests.json

Richieste pubblicate (filtri Open311)

Parametri di GET /open311/v2/requests.json
ParametroDoveDescrizione
service_request_id queryUno o più riferimenti, separati da virgole.
service_code queryCodice del servizio (categoria).
status queryopen (nuova, in corso) o closed (risolta, respinta).
start_date queryData ISO 8601 (al giorno).
end_date queryData ISO 8601 (al giorno, inclusa).
page queryPagina (estensione comune, da 1).
page_size queryDimensione della pagina (da 1 a 100, predefinito 50).

Codici di risposta: 200

POST /open311/v2/requests.json

Inviare una richiesta (chiave API in scrittura)

Codici di risposta: 201, 400, 401, 403

GET /open311/v2/requests/{id}.json

Una richiesta pubblicata

Parametri di GET /open311/v2/requests/{id}.json
ParametroDoveDescrizione
id * pathRiferimento della segnalazione.

Codici di risposta: 200, 404

Dati aperti

GET /donnees/signalements.csv

Esportazione CSV delle segnalazioni pubblicate (CC BY 4.0)

Codici di risposta: 200

GET /donnees/signalements.geojson

Esportazione GeoJSON delle segnalazioni pubblicate (CC BY 4.0)

Codici di risposta: 200

GET /donnees/statistiques.json

Statistiche pubbliche (volume, tempi mediani, tasso di risoluzione)

Codici di risposta: 200

Webhook

Un ente può abbonare un indirizzo https a questi eventi (amministrazione, pagina API). Inviamo un POST JSON entro 5 minuti; una segnalazione non ancora pubblicata contiene solo riferimento, categoria, stati, posizione e date.

EventoDescrizione
signalement.creeSegnalazione creata (in attesa di moderazione)
signalement.publieSegnalazione pubblicata
signalement.statutStato cambiato (data.ancien_statut indica il precedente)
signalement.reponseRisposta ufficiale aggiunta o modificata
signalement.affecteAssegnata a un servizio o a un incaricato (portale dei servizi)

Ogni invio è firmato nell'intestazione X-Scopemy-Signature: t=marca temporale,v1=HMAC-SHA256 del testo «t.corpo» con il vostro segreto. Verificatelo in tempo costante e rifiutate marche più vecchie di 5 minuti. X-Scopemy-Delivery fornisce un identificativo stabile: ignorate un invio già ricevuto.

$corps = file_get_contents('php://input');
[$t, $sig] = sscanf($_SERVER['HTTP_X_SCOPEMY_SIGNATURE'] ?? '', 't=%d,v1=%s');
$attendu = hash_hmac('sha256', $t . '.' . $corps, $secret);
if (!$sig || !hash_equals($attendu, $sig) || abs(time() - $t) > 300) {
    http_response_code(400); exit;
}
$evenement = json_decode($corps, true);   // id, type, tenant, data.signalement
http_response_code(204);

Qualsiasi risposta 2xx vale come ricezione. Altrimenti riproviamo fino a 8 volte, raddoppiando l'attesa (1 min, 2 min, 4 min…, al massimo 6 h). I reindirizzamenti non sono seguiti.

Widget per il sito del comune

Incollate questo codice in una pagina del sito del comune per mostrare la mappa e le ultime segnalazioni, con il marchio dell'ente. Il sito deve prima essere autorizzato nell'amministrazione (pagina API).

<script src="https://scopemy.city/embed.js" data-vue="carte-liste" data-hauteur="560" async></script>

Opzioni: data-vue (carte-liste, carte o liste), data-hauteur (in pixel, o auto), data-lang (fr, de, it, en). Il widget non installa cookie.