API REST Eziwan
L'API REST Eziwan permet d'intégrer la plateforme dans vos outils existants — SCADA, ERP, ITSM, BI — ou de créer vos propres applications de supervision.
Base URL et authentification
Endpoint
https://api.eziwan.com/v1
Authentification Bearer
Toutes les requêtes nécessitent un token API Bearer :
Authorization: Bearer np_api_xxxxxxxxxxxxxxxxxxxxxxxx
Générez un token dans Paramètres → API → Créer un token.
Niveaux de permission disponibles par token :
- Lecture seule : GET uniquement — dashboard, données, statut
- Lecture/Écriture : GET + POST/PUT — alertes, reboot, configuration
- Admin : accès complet incluant gestion utilisateurs et facturation
Endpoints principaux
Dispositifs
# Lister tous les dispositifs
GET /v1/devices
# Détail d'un dispositif
GET /v1/devices/{device_id}
# Statut temps réel (signal, VPN, SIM active)
GET /v1/devices/{device_id}/status
# Historique de connectivité
GET /v1/devices/{device_id}/connectivity?from=2026-01-01&to=2026-06-01
Données capteurs
# Dernières valeurs de toutes les variables d'un dispositif
GET /v1/devices/{device_id}/data/latest
# Série temporelle pour une variable
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
Alertes
# Alertes actives sur l'organisation
GET /v1/organization/alarms/active
# Historique des alertes
GET /v1/organization/alarms?from=2026-06-01&severity=critical
# Acquitter une alerte
POST /v1/alarms/{alarm_id}/acknowledge
Body: { "comment": "Technicien en route" }
# Résoudre une alerte
POST /v1/alarms/{alarm_id}/resolve
Body: { "comment": "Pompe réparée, retour à la normale" }
Actions dispositifs
# Reboot d'un dispositif (permission lecture/écriture requise)
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
Exemples pratiques
Python — Récupérer les dispositifs hors ligne
import requests
API_TOKEN = "np_api_xxxxxxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://api.eziwan.com/v1"
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# Lister les dispositifs 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 — Récupérer les données d'un capteur
import requests
from datetime import datetime, timedelta
API_TOKEN = "np_api_xxxxxxxxxxxxxxxxxxxxxxxx"
DEVICE_ID = "d_a1b2c3d4"
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# Dernières 24h — puissance active
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 — Export CSV pour rapport mensuel
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
Webhooks
Les webhooks envoient des événements en push vers votre endpoint HTTP.
Configuration
Dashboard → Alertes → Webhooks → Ajouter un webhook
Paramètres :
- URL : votre endpoint HTTPS (ex:
https://your-app.com/eziwan-events) - Secret : clé HMAC-SHA256 pour vérifier la signature (optionnel mais recommandé)
- Événements : sélectionnez les types (device.offline, alarm.triggered, failover, etc.)
Format 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"
}
Vérification de signature
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)
# Dans votre handler Flask/FastAPI :
# signature = request.headers.get("X-Eziwan-Signature")
# valid = verify_eziwan_webhook(request.body, signature, WEBHOOK_SECRET)
Événements disponibles
| Événement | Déclencheur |
|---|---|
device.offline | Dispositif hors ligne |
device.online | Retour en ligne |
alarm.triggered | Seuil d'alarme dépassé |
alarm.resolved | Alarme résolue |
failover.activated | Bascule SIM1 → SIM2 |
failover.recovered | Retour SIM1 |
firmware.updated | Mise à jour firmware réussie |
provisioning.completed | ZTP terminé — gateway en ligne |
Intégrations ITSM via webhooks
ServiceNow
// Script de transformation pour 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
# Création automatique d'un ticket via l'API 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"
Limites et quotas
| Plan | Requêtes API/jour | Webhooks | Export CSV |
|---|---|---|---|
| Starter | 1 000 | 2 endpoints | 90 jours |
| Growth | 10 000 | 10 endpoints | 1 an |
| Scale | 100 000 | 50 endpoints | 3 ans |
| Enterprise | Illimité | Illimité | Illimité |
La référence OpenAPI complète (Swagger) est disponible sur api.eziwan.com/docs.
Questions fréquentes
Comment s'authentifier sur l'API ?
Par jeton Bearer généré depuis la console (portée et expiration configurables). Les jetons se révoquent instantanément et chaque appel est journalisé avec son émetteur.
Quelles données sont accessibles via l'API ?
L'inventaire des équipements et leur état (signal, SIM, VPN, firmware), les mesures collectées (Modbus, capteurs), l'historique des alertes et les actions de gestion (redémarrage, push de configuration).
Peut-on être notifié en push plutôt qu'en polling ?
Oui, par webhooks : la plateforme appelle votre endpoint HTTP à chaque événement choisi (alerte, déconnexion, seuil franchi), idéal pour créer des tickets ITSM ou alimenter votre supervision existante.
Y a-t-il des limites de débit ?
Oui, un rate-limiting protège la plateforme ; les quotas standards couvrent largement les intégrations habituelles et s'ajustent sur demande pour les usages intensifs.
Ressources associées
- Intégration MQTT — le flux de données temps réel
- Remontée de données industrielles — la vue d'ensemble
- Architecture technique — où s'insère l'API dans la plateforme
- Gestion de parc machines — piloter la flotte par API