Handbuch › Anbindung an andere Systeme
Schnittstelle (API)
Zählerstände automatisch melden, Störungen auslösen, Fälligkeiten abfragen, Maschinen aus dem ERP abgleichen: Alles, was Sie dafür brauchen, steht hier. Die technische Beschreibung jedes Abrufs zum Ausprobieren liegt unter /api/v1/docs.
Was ist möglich?
| Aufgabe | Wie |
|---|---|
| Zählerstände automatisch melden | API, einzeln oder als Sammelabruf |
| Störungen aus Überwachungssystemen auslösen | API, mit Entdoppelung |
| Fälligkeiten und Wartungen abfragen oder im Kalender abonnieren | API, iCal |
| Maschinen und Standorte aus ERP/CMMS abgleichen | API, über die externe Kennung |
| Ihre Systeme über Ereignisse informieren | Webhooks |
| Bei Zählergrenzen automatisch Aufgaben oder Störungen anlegen | Zähler-Regeln |
Alles davon ist ein Tarif-Merkmal. Ob es für Ihre Organisation freigeschaltet ist, steht unter Team → Tarif & Nutzung und auf den Seiten selbst („im Tarif nicht enthalten“).
| Merkmal | Bedeutung |
|---|---|
| Schnittstelle (API) | API und Zugangsschlüssel nutzen |
| API-Zugangsschlüssel | Anzahl gleichzeitig aktiver Schlüssel |
| API-Abrufe je Abrechnungsperiode | Abrufe aller Schlüssel zusammen |
| Webhooks, Webhook-Empfänger | Ereignisse melden, Anzahl der Adressen |
| Zähler-Regeln | Grenzwert-Regeln auf Zählern |
Schnellstart: der erste Zählerstand
- Unter Team → API auf Neuer Zugangsschlüssel. Dafür brauchen Sie die Rolle Verwaltung oder das Gruppenrecht „API-Zugangsschlüssel verwalten“ (siehe Team, Rollen und Rechte).
- Bezeichnung eintragen (z. B. „Kompressor-Gateway Halle 1“), das Recht Zählerstände melden ankreuzen, Bereich und Ablauf nach Bedarf, Schlüssel erzeugen.
- Den Schlüssel (
vmk_…) jetzt kopieren. Er wird nur einmal angezeigt. - Die Nummer der Maschine steht in der Adresse ihrer Seite (
/maschinen/17/). Den Zählerstand melden:
curl -X POST https://vormerk.de/api/v1/machines/17/meter-readings \
-H "Authorization: Bearer vmk_…" \
-H "Content-Type: application/json" \
-d '{"value": 1234.5}'
Antwort: 201 mit dem gespeicherten Stand. Die Maschine muss einen Zähler führen (Maschinenformular: „Zähler führen“).
Zugangsschlüssel
Ein Schlüssel ist ein Dienstkonto der Organisation: Er gehört keiner Person, und niemand muss ihn mit einem Passwort teilen. Vormerk speichert nur einen Fingerabdruck, den Klartext sehen Sie nur beim Anlegen.
Rechte (Scopes). Geben Sie nur, was das Fremdsystem braucht.
| Recht | Erlaubt |
|---|---|
objects:read |
Objekte, Maschinen, Standorte, Arten lesen |
objects:write |
Standorte, Objekte und Maschinen anlegen und ändern |
meters:read / meters:write |
Zählerstände lesen / melden |
incidents:read / incidents:create / incidents:update |
Störungen lesen / auslösen / kommentieren und Status setzen |
tasks:read / tasks:write |
Aufgaben lesen / anlegen und erledigen |
maintenance:read |
Fälligkeiten, Wartungen, Prüfprotokolle lesen |
calendar:read |
Fälligkeiten als Kalender abonnieren |
Bereich. Standorte (inklusive Unterstandorten), Objektarten und einzelne Objekte, beliebig kombinierbar. Ein Objekt gehört zum Bereich, wenn es zu einer der Auswahlen passt. Nichts gewählt bedeutet: die ganze Organisation. Was außerhalb liegt, gibt es für den Schlüssel nicht (Antwort 404, nicht 403). Beispiel: Der Schlüssel „Sensor Presse 4“ darf nur an der einen Maschine Zählerstände melden.
Weitere Einschränkungen. Ablaufdatum (Vorgabe: ein Jahr), Liste erlaubter Adressen (eine Adresse oder ein Netz wie 203.0.113.0/24 je Zeile) und ein eigenes Limit pro Minute.
Pflege. - Widerrufen wirkt sofort. Auf der Seite des Schlüssels sehen Sie letzte Nutzung und Abrufe der letzten Tage. - Rotation: neuen Schlüssel anlegen, im Fremdsystem eintragen, den alten widerrufen. - Bewahren Sie Schlüssel wie Passwörter auf: nicht im Quelltext, nicht in Adressen, nicht in Tickets.
Die Schnittstelle im Alltag
Grundregeln
- Adresse: https://vormerk.de/api/v1/…. Anmeldung mit Authorization: Bearer vmk_….
- Daten als JSON. Zeiten nach ISO 8601 mit Zeitzone (2026-10-15T08:30:00+02:00). Dezimalzahlen kommen als Text ("1234.50"), damit nichts gerundet wird.
- Listen nehmen limit (höchstens 200) und offset. Antwort: {"count": …, "items": […]}.
- Fehler haben immer die Form {"code": "…", "detail": "…"}.
Wiederholen ohne Doppelungen. Schreibende Abrufe nehmen die Kopfzeile Idempotency-Key (bis 64 Zeichen) an. Sendet Ihr System denselben Abruf mit demselben Schlüssel nochmals, zum Beispiel nach einem Netzfehler, liefert Vormerk 24 Stunden lang dieselbe Antwort und führt nichts ein zweites Mal aus. Mit anderen Daten unter demselben Schlüssel: 422 idempotency_conflict.
Objekte ansprechen. Wo ein Objekt gebraucht wird, genügt eine der Angaben id, inventory_no (Inventarnummer) oder external_id (Kennung in Ihrem System, im Maschinenformular unter „Externe Kennung“).
Abrufe im Überblick
| Abruf | Recht | Zweck |
|---|---|---|
GET /objects, GET /machines, GET /machines/{id} |
objects:read |
suchen und lesen (q, inventory_no, external_id, location_id, type_id) |
GET /objects/by-qr/{token} |
objects:read |
Objekt zu einem QR-Code finden |
GET /locations, GET /object-types |
objects:read |
Stammdaten lesen |
POST /locations, POST /machines, PATCH /machines/{id} |
objects:write |
anlegen und ändern |
PUT /machines/by-external-id/{kennung} |
objects:write |
abgleichen: anlegen oder ändern |
GET/POST /machines/{id}/meter-readings |
meters:read/write |
Zählerstände |
POST /meter-readings/batch |
meters:write |
bis 500 Stände auf einmal |
GET /incidents, GET /incidents/{id} |
incidents:read |
Störungen lesen (status=open, all oder ein Status) |
POST /incidents |
incidents:create |
Störung auslösen |
POST /incidents/{id}/comments, /status |
incidents:update |
kommentieren, Status setzen |
GET /tasks, POST /tasks, POST /tasks/{id}/complete |
tasks:read/write |
Aufgaben |
GET /due |
maintenance:read |
überfällige und bald fällige Wartungen |
GET /maintenance-records, …/{id}/protocol.pdf |
maintenance:read |
Wartungen und Prüfprotokolle |
GET /calendar.ics?token=… |
calendar:read |
Kalender-Abonnement |
Zählerstände
Ein Stand darf nicht kleiner sein als der letzte (422 meter_decreased) und nicht in der Zukunft liegen (read_at_in_future). Ohne read_at gilt der Zeitpunkt des Abrufs.
Sammelabruf für Gateways, mit Ergebnis je Zeile:
curl -X POST https://vormerk.de/api/v1/meter-readings/batch \
-H "Authorization: Bearer vmk_…" -H "Content-Type: application/json" \
-d '[{"external_id": "PLC-7", "value": 1210.5},
{"inventory_no": "K-1", "value": 880}]'
{"ok": 2, "errors": 0, "results": [{"index": 0, "status": "ok", "id": 91}, {"index": 1, "status": "ok", "id": 92}]}
Fehlerhafte Zeilen stehen mit status: "error" und code in der Antwort. Die übrigen werden gespeichert.
Störungen auslösen
curl -X POST https://vormerk.de/api/v1/incidents \
-H "Authorization: Bearer vmk_…" -H "Content-Type: application/json" \
-d '{"title": "Druckabfall Kompressor", "priority": "high",
"object": {"external_id": "PLC-7"}, "external_ref": "ALARM-4711"}'
Mit external_ref (Ihre Alarmnummer) entsteht keine zweite Störung, solange die erste offen ist: Die Antwort ist dann 200 mit "duplicate": true und der vorhandenen Störung. Priorität high und standstill benachrichtigen die Admins wie bei einer Meldung aus der Oberfläche. Der Verlauf der Störung vermerkt den Schlüssel.
Abgleich mit ERP oder CMMS
Der regelmäßige Abgleich läuft über die externe Kennung:
curl -X PUT https://vormerk.de/api/v1/machines/by-external-id/SAP-1000234 \
-H "Authorization: Bearer vmk_…" -H "Content-Type: application/json" \
-d '{"name": "Presse 4", "inventory_no": "P-4", "location_id": 3, "serial_no": "A-77"}'
Gibt es die Kennung, wird die Maschine geändert (200), sonst angelegt (201). Beim Anlegen gelten Ihre Tarifgrenze für Maschinen und der Bereich des Schlüssels; Pläne aus den Vorlagen der Objektart entstehen wie bei einer Anlage in der Oberfläche.
Kalender abonnieren
Ein Schlüssel nur mit dem Recht calendar:read genügt. Adresse für Kalender-Apps: https://vormerk.de/api/v1/calendar.ics?token=vmk_…. Weil dieser Schlüssel in der Adresse steht, darf er nichts anderes können.
Grenzen und Fehlercodes
Pro Schlüssel gelten Abrufe je Minute (Vorgabe 120, einstellbar) und für die Organisation das Kontingent des Tarifs je Abrechnungsperiode. Darüber antwortet die Schnittstelle mit 429 und Retry-After.
| Status | Code | Bedeutung |
|---|---|---|
| 401 | invalid_token |
Schlüssel unbekannt, widerrufen oder abgelaufen |
| 403 | feature_not_in_plan |
Die Schnittstelle (oder der Teil) ist im Tarif nicht enthalten |
| 403 | missing_scope |
Dem Schlüssel fehlt das Recht |
| 403 | ip_not_allowed |
Adresse nicht in der Liste des Schlüssels |
| 403 | subscription_locked |
Konto gesperrt: Lesen geht, Schreiben nicht |
| 403 | out_of_scope, limit_reached |
außerhalb des Bereichs; Tarifgrenze für Maschinen erreicht |
| 404 | not_found |
gibt es nicht, oder liegt außerhalb des Bereichs |
| 409 | duplicate_external_id, ambiguous |
Kennung doppelt / Angabe passt auf mehrere Objekte |
| 422 | invalid_reference, meter_decreased, no_meter, … |
Eingabe unzulässig, detail erklärt es |
| 429 | rate_limited, quota_exceeded |
zu viele Abrufe; Minutenlimit / Monatskontingent |
Etwas fehlt oder stimmt nicht? Schreiben Sie uns über das Kontaktformular.