API REST Eziwan
L'API REST di Eziwan consente di integrare la piattaforma nei vostri strumenti esistenti — SCADA, ERP, ITSM, BI — oppure di creare le vostre applicazioni di monitoraggio.
URL di base e autenticazione
Endpoint
https://api.eziwan.com/v1
Autenticazione Bearer
Tutte le richieste richiedono un token API Bearer:
Authorization: Bearer np_api_xxxxxxxxxxxxxxxxxxxxxxxx
Genera un token in Impostazioni → API → Crea un token.
Livelli di autorizzazione disponibili per token:
- Solo lettura: solo GET — dashboard, dati, stato
- Lettura/Scrittura: GET + POST/PUT — avvisi, riavvio, configurazione
- Amministratore: accesso completo, compresa la gestione degli utenti e la fatturazione
Endpoint principali
Dispositivi
# Elenca tutti i dispositivi
GET /v1/devices
# Dettaglio di un dispositivo
GET /v1/devices/{device_id}
# Stato in tempo reale (segnale, VPN, SIM attiva)
GET /v1/devices/{device_id}/status
# Cronologia della connettività
GET /v1/devices/{device_id}/connectivity?from=2026-01-01&to=2026-06-01
Dati dei sensori
# Ultimi valori di tutte le variabili di un dispositivo
GET /v1/devices/{device_id}/data/latest
# Serie temporale per una variabile
GET /v1/devices/{device_id}/data?metric=active_power&from=2026-06-01T00:00:00Z&to=2026-06-01T23:59:59Z&interval=5m
# Export CSV
GET /v1/devices/{device_id}/data/export?format=csv&from=2026-01-01&to=2026-06-30
Avvisi
# Avvisi attivi relativi all'organizzazione
GET /v1/organization/alarms/active
# Historique des alertes
GET /v1/organization/alarms?from=2026-06-01&severity=critical
# Annullare un avviso
POST /v1/alarms/{alarm_id}/acknowledge
Body: { "comment": "Technicien en route" }
# Risolvere un avviso
POST /v1/alarms/{alarm_id}/resolve
Body: { "comment": "Pompe réparée, retour à la normale" }
Azioni relative alle misure
# Riavvio di un dispositivo (è richiesta l'autorizzazione di lettura/scrittura)
POST /v1/devices/{device_id}/reboot
# Forcer un failover SIM
POST /v1/devices/{device_id}/failover
Body: { "target_sim": 2 }
# Logs d'audit
GET /v1/audit-logs?from=2026-01-01&to=2026-06-30&format=csv
Esempi pratici
Python — Recuperare i dispositivi offline
import requests
API_TOKEN = "np_api_xxxxxxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://api.eziwan.com/v1"
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# Elencare i dispositivi offline
response = requests.get(f"{BASE_URL}/devices", headers=headers)
devices = response.json()["data"]
offline = [d for d in devices if d["status"] == "offline"]
print(f"{len(offline)} dispositifs hors ligne :")
for d in offline:
print(f" - {d['name']} ({d['id']}) — hors ligne depuis {d['last_seen']}")
Python — Recuperare i dati da un sensore
import requests
from datetime import datetime, timedelta
API_TOKEN = "np_api_xxxxxxxxxxxxxxxxxxxxxxxx"
DEVICE_ID = "d_a1b2c3d4"
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# Ultime 24 ore — potenza attiva
response = requests.get(
f"https://api.eziwan.com/v1/devices/{DEVICE_ID}/data",
headers=headers,
params={
"metric": "active_power",
"from": (datetime.utcnow() - timedelta(days=1)).isoformat() + "Z",
"to": datetime.utcnow().isoformat() + "Z",
"interval": "5m"
}
)
data = response.json()["data"]
print(f"{len(data)} points retournés")
for point in data[:5]:
print(f" {point['timestamp']}: {point['value']} {point['unit']}")
curl — Esportazione CSV per il rapporto mensile
curl -H "Authorization: Bearer np_api_xxxx" \
"https://api.eziwan.com/v1/devices/d_a1b2c3d4/data/export?format=csv&from=2026-06-01&to=2026-06-30" \
-o donnees_juin_2026.csv
Webhook
I webhook inviano eventi tramite notifiche push al tuo endpoint HTTP.
Configurazione
Dashboard → Avvisi → Webhook → Aggiungi un webhook
Parametri:
- URL: il proprio endpoint HTTPS (es.:
https://your-app.com/eziwan-events) - Secret: chiave HMAC-SHA256 per verificare la firma (facoltativo ma consigliato)
- Eventi: seleziona i tipi (device.offline, alarm.triggered, failover, ecc.)
Formato del payload
{
"event": "device.offline",
"severity": "critical",
"timestamp": "2026-06-15T02:14:33.412Z",
"device": {
"id": "d_a1b2c3d4",
"name": "GW-Valenciennes-03",
"group": "Région Nord / Site Valenciennes",
"tags": ["env:production", "criticite:haute"]
},
"detail": {
"last_seen": "2026-06-15T02:12:01.000Z",
"sim_active": 2,
"rsrp_dbm": -108
},
"dashboard_url": "https://app.eziwan.com/devices/d_a1b2c3d4"
}
Verifica della firma
import hmac, hashlib
def verify_eziwan_webhook(payload: bytes, signature: str, secret: str) -> bool:
expected = "hmac-sha256=" + hmac.new(
secret.encode(), payload, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
# Nel vostro handler Flask/FastAPI:
# signature = request.headers.get("X-Eziwan-Signature")
# valid = verify_eziwan_webhook(request.body, signature, WEBHOOK_SECRET)
Eventi disponibili
| Evento | Condizione di attivazione |
|---|---|
device.offline | Dispositivo offline |
device.online | Ritorno online |
alarm.triggered | Soglia di allarme superata |
alarm.resolved | Allarme risolto |
failover.activated | Passaggio da SIM1 a SIM2 |
failover.recovered | Ritorno a SIM1 |
firmware.updated | Aggiornamento firmware completato con successo |
provisioning.completed | ZTP completato — gateway online |
Integrazioni ITSM tramite webhook
ServiceNow
// Script di trasformazione per ServiceNow Integration Hub
(function process(/*RESTAPIRequest*/ request) {
var body = JSON.parse(request.body.dataString);
if (body.event === "device.offline" && body.severity === "critical") {
var incident = new GlideRecord("incident");
incident.short_description = "Gateway Eziwan hors ligne : " + body.device.name;
incident.description = "Site : " + body.device.group + "\nDernier vu : " + body.detail.last_seen;
incident.urgency = "1"; // Haute
incident.impact = "2"; // Moyen
incident.insert();
}
})(request);
Jira Service Management
# Creazione automatica di un ticket tramite l'API di Jira
curl -X POST \
-H "Authorization: Bearer JIRA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fields": {
"project": { "key": "OPS" },
"summary": "Gateway hors ligne : GW-Valenciennes-03",
"description": "Site : Région Nord\nDernier contact : 2026-06-15T02:12:01Z",
"issuetype": { "name": "Incident" },
"priority": { "name": "High" }
}
}' \
"https://votre-instance.atlassian.net/rest/api/3/issue"
Limiti e quote
| Piano | Richieste API/giorno | Webhook | Esportazione CSV |
|---|---|---|---|
| Starter | 1.000 | 2 endpoint | 90 giorni |
| Growth | 10.000 | 10 endpoint | 1 anno |
| Scale | 100.000 | 50 endpoint | 3 anni |
| Enterprise | Illimitato | Illimitato | Illimitato |
La documentazione completa di OpenAPI (Swagger) è disponibile su api.eziwan.com/docs.
Domande frequenti
Come effettuare l'autenticazione sull'API?
Tramite token Bearer generato dalla console (durata e scadenza configurabili). I token vengono revocati immediatamente e ogni chiamata viene registrata con il relativo mittente.
Quali dati sono accessibili tramite l'API?
L'inventario delle apparecchiature e il loro stato (segnale, SIM, VPN, firmware), i dati raccolti (Modbus, sensori), la cronologia degli avvisi e le azioni di gestione (riavvio, invio della configurazione).
È possibile ricevere notifiche tramite push anziché tramite polling?
Sì, tramite webhook: la piattaforma chiama il vostro endpoint HTTP ogni volta che si verifica un evento specificato (avviso, disconnessione, superamento di una soglia), soluzione ideale per creare ticket ITSM o integrare il vostro sistema di monitoraggio esistente.
Ci sono limiti di velocità?
Sì, un meccanismo di limitazione della frequenza protegge la piattaforma; le quote standard coprono ampiamente le integrazioni più comuni e possono essere adeguate su richiesta in caso di utilizzi intensivi.
Risorse correlate
- Integrazione MQTT — il flusso di dati in tempo reale
- Acquisizione dati industriali — la visione d'insieme
- Architettura tecnica — dove si inserisce l’API nella piattaforma
- Gestione del parco macchine — gestire la flotta tramite API