Eziwan REST-API
Met de REST-API van Eziwan kunt u het platform integreren in uw bestaande systemen — SCADA, ERP, ITSM, BI — of uw eigen monitoringapplicaties ontwikkelen.
Basis-URL en authenticatie
Eindpunt
https://api.eziwan.com/v1
Bearer-authenticatie
Voor alle verzoeken is een Bearer-API-token vereist:
Authorization: Bearer np_api_xxxxxxxxxxxxxxxxxxxxxxxx
Genereer een token via Instellingen → API → Een token aanmaken.
Beschikbare machtigingsniveaus per token:
- Alleen lezen: uitsluitend GET — dashboard, gegevens, status
- Lezen/schrijven: GET + POST/PUT — waarschuwingen, herstart, configuratie
- Beheerder: volledige toegang, inclusief gebruikersbeheer en facturering
Belangrijkste eindpunten
Maatregelen
# Alle apparaten weergeven
GET /v1/devices
# Detail van een apparaat
GET /v1/devices/{device_id}
# Realtime status (signaal, VPN, actieve simkaart)
GET /v1/devices/{device_id}/status
# Verbindingsgeschiedenis
GET /v1/devices/{device_id}/connectivity?from=2026-01-01&to=2026-06-01
Sensorgegevens
# Laatste waarden van alle variabelen van een apparaat
GET /v1/devices/{device_id}/data/latest
# Tijdreeks voor één variabele
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
Waarschuwingen
# Actieve waarschuwingen over de organisatie
GET /v1/organization/alarms/active
# Historique des alertes
GET /v1/organization/alarms?from=2026-06-01&severity=critical
# Een waarschuwing afsluiten
POST /v1/alarms/{alarm_id}/acknowledge
Body: { "comment": "Technicien en route" }
# Een waarschuwing oplossen
POST /v1/alarms/{alarm_id}/resolve
Body: { "comment": "Pompe réparée, retour à la normale" }
Maatregelen
# Een apparaat opnieuw opstarten (lees-/schrijfrechten vereist)
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
Praktische voorbeelden
Python — Offline apparaten ophalen
import requests
API_TOKEN = "np_api_xxxxxxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://api.eziwan.com/v1"
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# Offline apparaten weergeven
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 — Gegevens van een sensor ophalen
import requests
from datetime import datetime, timedelta
API_TOKEN = "np_api_xxxxxxxxxxxxxxxxxxxxxxxx"
DEVICE_ID = "d_a1b2c3d4"
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# Laatste 24 uur — actief vermogen
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 — CSV-export voor maandelijks rapport
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
Webhooks sturen gebeurtenissen via een pushbericht naar uw HTTP-eindpunt.
Configuratie
Dashboard → Waarschuwingen → Webhooks → Een webhook toevoegen
Instellingen:
- URL: uw HTTPS-eindpunt (bijv.:
https://your-app.com/eziwan-events) - Secret: HMAC-SHA256-sleutel om de handtekening te verifiëren (optioneel, maar aanbevolen)
- Gebeurtenissen: selecteer de typen (device.offline, alarm.triggered, failover, enz.)
Payload-formaat
{
"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"
}
Controle van de handtekening
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)
# In je Flask/FastAPI-handler:
# signature = request.headers.get("X-Eziwan-Signature")
# valid = verify_eziwan_webhook(request.body, signature, WEBHOOK_SECRET)
Beschikbare evenementen
| Gebeurtenis | Trigger |
|---|---|
device.offline | Apparaat offline |
device.online | Weer online |
alarm.triggered | Alarmdrempel overschreden |
alarm.resolved | Alarm opgeheven |
failover.activated | Omschakeling SIM1 → SIM2 |
failover.recovered | Terug naar SIM1 |
firmware.updated | Firmware-update geslaagd |
provisioning.completed | ZTP voltooid — gateway online |
ITSM-integraties via webhooks
ServiceNow
// Transformatiescript voor 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
# Automatisch een ticket aanmaken via de Jira-API
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://uw-instantie.atlassian.net/rest/api/3/issue"
Limieten en quota
| Pakket | API-verzoeken/dag | Webhooks | CSV-export |
|---|---|---|---|
| Starter | 1 000 | 2 endpoints | 90 dagen |
| Growth | 10.000 | 10 endpoints | 1 jaar |
| Scale | 100.000 | 50 endpoints | 3 jaar |
| Enterprise | Onbeperkt | Onbeperkt | Onbeperkt |
De volledige OpenAPI-referentie (Swagger) is beschikbaar op api.eziwan.com/docs.
Veelgestelde vragen
Hoe log je in op de API?
Via een Bearer-token dat vanuit de console wordt gegenereerd (bereik en vervaldatum kunnen worden geconfigureerd). De tokens worden onmiddellijk ingetrokken en elke aanroep wordt samen met de afzender gelogd.
Welke gegevens zijn via de API beschikbaar?
De inventaris van de apparatuur en de status daarvan (signaal, SIM, VPN, firmware), de verzamelde meetgegevens (Modbus, sensoren), de geschiedenis van de waarschuwingen en de beheersacties (herstart, configuratie doorsturen).
Is het mogelijk om via pushmeldingen te worden geïnformeerd in plaats van via polling?
Ja, via webhooks: het platform roept bij elke geselecteerde gebeurtenis (waarschuwing, verbroken verbinding, overschrijding van een drempelwaarde) uw HTTP-eindpunt aan, ideaal voor het aanmaken van ITSM-tickets of het voeden van uw bestaande monitoring.
Zijn er snelheidsbeperkingen?
Ja, rate-limiting beschermt het platform; de standaardquota’s zijn ruim voldoende voor de gebruikelijke integraties en kunnen op verzoek worden aangepast voor intensief gebruik.
Gerelateerde bronnen
- MQTT-integratie — de realtime gegevensstroom
- Industriële gegevensrapportage — het totaaloverzicht
- Technische architectuur — waar past de API in het platform?
- Beheer van het machinepark — het machinepark aansturen via de API