REST-API
Arbeiten Sie aus Ihrer eigenen Software mit Ihren Projekten, Ordnern, Produkten und Mitgliedern, probieren Sie Anfragen auf der Seite „Entwickler“ aus und erhalten Sie Webhooks, wenn etwas geschieht.
Mit der REST-API kann Ihre eigene Software lesen und ändern, was sich in Ihrem Konto bei Measure Map Online befindet: Projekte und ihre Messungen, Ordner, den Produktkatalog und, bei Enterprise, die Mitglieder Ihrer Organisation. Sie antwortet in JSON. Die vollständige Referenz mit jedem Feld und Beispiel ist die API-Dokumentation; diese Seite gibt den Überblick.
Um die Dokumentation aus der App zu öffnen, gehen Sie zu Entwickler > REST-API und klicken Sie auf Dokumentation anzeigen.
Basis-URL#
Jede Anfrage geht an:
https://api.measuremaponline.com/api/v2
Authentifizierung#
Senden Sie Ihren API-Schlüssel unverändert im Header Authorization jeder
Anfrage. Erstellen Sie den Schlüssel auf der Seite „Entwickler“: siehe
API-Schlüssel.
curl https://api.measuremaponline.com/api/v2/projects/YOUR_PROJECT_ID \
-H "Authorization: YOUR_API_KEY"
Jede Anfrage wird gegen den Zugriff des Schlüssels (zum Beispiel Projekte Lesen), Ihr Abonnement und, bei einer Anfrage aus einer Webseite, die Website-Einschränkungen des Schlüssels geprüft. Bewahren Sie Schlüssel, die Daten ändern können, auf Ihrem Server auf: siehe Ihren Schlüssel schützen.
Live und Sandbox#
Für beide gibt es dieselbe Basis-URL. Der Schlüssel entscheidet: Ein Sandbox-Schlüssel liest und schreibt Sandbox-Projekte, -Ordner und -Produkte, die Live-Schlüssel nie sehen. Mitglieder sind in beiden dieselben, aber um sich als Mitglied anzumelden, brauchen Sie einen Live-Schlüssel. Gastprojekte, die mit einem Sandbox-Schlüssel angelegt werden, werden nie abgerechnet, und Sandbox-Projekte lassen sich nicht auf Ihrer Website einbetten. Tokens geben an, zu welcher Umgebung sie gehören.
Was die API abdeckt#
| Gruppe | Endpunkte | Benötigter Zugriff des Schlüssels |
|---|---|---|
| Anmelde-Tokens | POST /auth/token, POST /auth/iframe/token |
Eingebettete Karten |
| Projekte und Ordner | Projekte (alle oder seitenweise, bis zu 200 pro Seite) und Ordner einer Person auflisten; ein Projekt, seine Messungen (/projects/{pid}/data), seine Kommentare oder seine .mmp-Datei (/projects/{pid}/mmp) abrufen; einen Ordner abrufen; Projekte und Ordner erstellen, aktualisieren und löschen |
Projekte: Lesen zum Lesen, Lesen & ändern zum Ändern |
| Produkte | GET /products, GET /products/{id}, erstellen, aktualisieren und mit DELETE /products/{id} archivieren |
Produkte: Lesen oder Lesen & ändern |
| Mitglieder (Enterprise) | GET /users, GET /users/{uid}, POST /users/new, PUT /users/{uid}, DELETE /users/{uid} |
Benutzer: Lesen oder Lesen & ändern |
| Als Mitglied anmelden (Enterprise) | POST /auth/{uid}/login liefert ein Anmelde-Token für ein Mitglied Ihrer Organisation |
Benutzer: Lesen & ändern |
Einige Punkte, die Sie wissen sollten:
- Ein Schlüssel erreicht die Projekte seines eigenen Kontos und, bei Enterprise, die der Mitglieder der Organisation.
- Ein Projekt oder einen Ordner über die API zu löschen ist endgültig: Nichts landet im Papierkorb. Ein Ordner nimmt die Ordner und Projekte darin mit, die zu Ihrem Konto oder zu Ihren Mitgliedern gehören.
- In den Messungen eines Projekts listet eine Form ihre Produkte in
productIdsauf, in ihrer Reihenfolge;productIdist das erste davon. /projects/{pid}/mmpliefert dieselbe.mmp-Datei, die die App exportiert. Ihr Schema ist unter github.com/blueblinkone/mmp-validator veröffentlicht. Neue Elemente kommen nur als optionale hinzu, sodass ein Programm, das für eine ältere Datei geschrieben wurde, weiter funktioniert.- Bei Open Guest zählt ein über die API erstelltes Projekt mit der Zugriffsebene Open Guest zu Ihrer Open-Guest-Nutzung und zu Ihrem Budget, wie eines, das über Ihren Gastlink gestartet wurde.
- Bei Open Guest enthält der Abschnitt Gastlink die Anleitung Open-Guest-API mit Code für Ihren
Server und Ihre Seite: Ihr Server holt mit Ihrem Live-Schlüssel ein Token von
POST /auth/tokenund schickt den Besucher zu einem neuen eigenen Projekt, in dem seine Angaben schon eingetragen sind. - Wenn Sie mit
POST /users/newein Mitglied anlegen, belegt das einen Platz, wie eine Einladung, und das Mitglied erhält die Standardrolle Ihrer Organisation. - Ein Token von
POST /auth/{uid}/loginöffnet das Konto dieses Mitglieds. Dafür ist daher ein Schlüssel nötig, der Mitglieder ändern darf, niemals der Schlüssel in Ihren Einbettungen. Für einen Administrator oder einen Manager wird es nicht ausgegeben, ebenso wenig mit einem Sandbox-Schlüssel. - Produkte werden über die API nie gelöscht, nur archiviert, und der Einkaufspreis eines Produkts wird nie zurückgegeben.
- Katasterparzellen sind nicht Teil der API.
Antworten und Fehler#
Eine erfolgreiche Anfrage antwortet mit Status 200 und JSON (der .mmp-Export
antwortet mit XML). Eine fehlgeschlagene antwortet mit einem Fehlerstatus und
einem Inhalt wie:
{"errorCode": "insufficient_scope", "errorMessage": "This API key does not have the scope required for this endpoint"}
| Status | errorCode |
Was Sie prüfen sollten |
|---|---|---|
| 400 | invalid_body, invalid_uid, invalid_project_id, pagination_invalid_page_number, pagination_invalid_page_limit |
Ein Wert der Anfrage fehlt oder wird nicht akzeptiert, etwa page und limit einer seitenweisen Liste. |
| 401 | unauthorized_action |
Die Anfrage wurde von einer Webseite auf einer Website gesendet, die der Schlüssel nicht erlaubt, oder das Element gehört weder zu Ihrem Konto noch zu Ihren Mitgliedern. |
| 402 | budget_limit_reached |
Open Guest: Ihr Budgetlimit ist erreicht, daher gibt es in diesem Zeitraum keine weiteren Gastprojekte. |
| 403 | invalid_api_key |
Im Header Authorization wurde kein Schlüssel gesendet, oder der Schlüssel ist unbekannt, widerrufen oder nach dem Ersetzen älter als 24 Stunden. |
| 403 | api_key_suspended |
Der API-Zugriff Ihres Kontos wurde gesperrt. Wenden Sie sich an den Support. |
| 403 | subscription_expired, invalid_subscription |
Das Abonnement ist nicht aktiv, oder sein Tarif hat keine API. |
| 403 | insufficient_scope |
Der Schlüssel hat nicht den Zugriff, den dieser Endpunkt braucht. |
| 403 | scope_not_in_plan |
Ihr Tarif enthält diesen Endpunkt nicht, zum Beispiel Mitglieder bei Open Guest. |
| 404 | not_found, project_not_found, user_not_found |
Das Element existiert nicht, oder die Person ist kein Mitglied Ihrer Organisation. |
| 409 | enterprise_add_users_limit |
Beim Anlegen eines Mitglieds: Alle Plätze sind belegt. |
| 429 | too_many_requests |
Mehr als 600 Tokens in einer Stunde. Warten Sie kurz und versuchen Sie es erneut. |
| 500 | server_error |
Die Anfrage konnte nicht ausgeführt werden. Prüfen Sie die gesendeten IDs, versuchen Sie es erneut und wenden Sie sich an den Support, wenn der Fehler bleibt. |
Die API auf der Seite „Entwickler“ ausprobieren#
Entwickler > API ausprobieren sendet echte Anfragen mit Ihrem Schlüssel und zeigt genau, was zurückkommt.
- Wählen Sie Live oder Sandbox.
- Wählen Sie einen Endpunkt, etwa „Alle Projekte auflisten“ oder „Messungen abrufen“.
- Füllen Sie seine Parameter aus. Ein Projekt oder Produkt wählen Sie nach Namen aus denen, die der Schlüssel lesen kann; wo eine Person gebraucht wird, wird Ihr eigenes Konto für Sie eingetragen.
- Klicken Sie auf Anfrage senden. Status und Antwort erscheinen darunter.
Es werden nur lesende Anfragen angeboten, sodass beim Ausprobieren nichts geändert wird, und diese Anfragen zählen nicht zu Ihrer Nutzung. Wenn Ihr Schlüssel nicht den Zugriff hat, den ein Endpunkt braucht, warnt die Seite Sie, dass er mit 403 antworten wird.
Webhooks#
Ein Webhook teilt Ihrem Server mit, wenn etwas geschieht, so wie die Benachrichtigungs-E-Mails es Ihnen mitteilen. Webhooks gehören zu den Tarifen Enterprise und Open Guest.
Einen Webhook einrichten#
Unter Entwickler > Webhooks:
- Geben Sie Ihre Endpunkt-URL ein: eine
https://-Adresse im Internet. Adressen in privaten Netzwerken werden abgelehnt, und das wird vor jeder Zustellung erneut geprüft. - Setzen Sie die Häkchen bei den gewünschten Ereignisse (siehe Ereignisse). Ein neuer Endpunkt beginnt mit den Ereignissen, die Ihr Tarif sendet, und mindestens eines muss angehakt sein.
- Klicken Sie auf Speichern. Beim ersten Mal zeigt die Seite Ihr Signatur-Secret vollständig an. Kopieren Sie es dann: Danach werden nur noch seine letzten Zeichen angezeigt.
- Klicken Sie auf Testereignis senden und wählen Sie ein Ereignis.
Ein Test sendet ein Beispiel dieses Ereignisses mit erfundenen Werten und
"test": true in seinem data an Ihren gespeicherten Endpunkt, auch wenn das
Ereignis nicht angehakt oder der Endpunkt ausgeschaltet ist. Um alle
Zustellungen zu beenden, klicken Sie auf Entfernen: Der Endpunkt und sein Geheimnis werden gelöscht.
Unter den Einstellungen enthält die Webhook-Referenz alles, was Sie zum Schreiben der Empfangsseite brauchen: die Header und den Inhalt, Code zum Prüfen der Signatur in Node.js, Python und PHP sowie Beispieldaten für jedes Ereignis.
Was Ihr Server erhält#
Jedes Ereignis ist ein POST an Ihren Endpunkt mit einem JSON-Inhalt:
{"id": "evt_3f9a1c2b7d4e5f60718293a4", "type": "project.created", "created": 1790000000000, "data": { ... }}
id ist für jedes Ereignis eindeutig, created ist der Zeitpunkt des
Ereignisses in Millisekunden seit dem 1. Januar 1970 (UTC), und was data
enthält, hängt vom Ereignis ab. Die Anfrage hat außerdem diese Header:
| Header | Wert |
|---|---|
X-MMO-Event |
Der Name des Ereignisses, wie type im Inhalt. |
X-MMO-Delivery |
Die id des Ereignisses. |
X-MMO-Signature |
t=<milliseconds>,v1=<hex>: wann die Zustellung signiert wurde, und ihre Signatur. |
User-Agent |
MeasureMapOnline-Webhooks/1 |
- Antworten Sie innerhalb von 8 Sekunden mit einem 2xx-Status, vor jeder langsamen Verarbeitung. Jeder andere Status, eine Weiterleitung oder eine Zeitüberschreitung gilt als Fehlschlag.
- Jedes Ereignis wird einmal gesendet und nie wiederholt. Der Abschnitt zeigt die Letzte Zustellung und die Aufeinanderfolgende Fehler.
- Nach 10 Fehlschlägen in Folge wird der Endpunkt ausgeschaltet, und der Eigentümer erhält eine E-Mail. Beheben Sie das Problem auf Ihrem Server und klicken Sie auf Speichern, um ihn wieder einzuschalten.
- Hin und wieder kommt ein Ereignis doppelt oder in falscher Reihenfolge an.
Verwenden Sie
id, um Wiederholungen zu ignorieren, undcreated, um die Ereignisse zu ordnen.
Die Signatur prüfen#
Jeder, der Ihre Adresse kennt, kann an sie senden. Prüfen Sie daher jede Zustellung, bevor Sie ihr vertrauen:
- Teilen Sie den Header
X-MMO-Signatuream Komma intundv1. - Berechnen Sie einen HMAC-SHA256 aus
t, einem Punkt und dem unveränderten Inhalt der Anfrage, mit Ihrem Signatur-Secret als Schlüssel, in hexadezimaler Schreibweise. - Vergleichen Sie das Ergebnis mit
v1, mit einem Vergleich in konstanter Zeit. - Lehnen Sie die Zustellung ab, wenn
tmehr als 5 Minuten von der aktuellen Zeit abweicht.tist in Millisekunden angegeben.
Verwenden Sie den Inhalt genau so, wie er angekommen ist: Wenn Sie das JSON einlesen und wieder ausgeben, ändert er sich, und die Signatur passt nicht mehr.
Secret erneuern ersetzt das Secret sofort und zeigt das neue einmal vollständig an. Aktualisieren Sie Ihren Server, sobald Sie es erneuern.
Ereignisse#
| Ereignis | Gesendet, wenn |
|---|---|
project.created |
In Ihrem Konto wird ein Projekt erstellt. In der App, über die API oder aus einer Einbettung. |
project.deleted |
Ein Projekt wird endgültig gelöscht (in den Papierkorb verschieben zählt nicht). |
project.comment.added |
Jemand kommentiert ein Projekt – meist Ihr Kunde, der antwortet. |
guest.project.created (Offener Gast) |
Ein Gast startet ein Projekt über Ihren Link oder über die API. Nur wenn die E-Mail-Adresse des Gastes bekannt ist. |
guest.measurement.completed (Offener Gast) |
Ein Gast schließt eine Messung ab und hinterlässt seine Kontaktdaten. |
budget.warning_reached (Offener Gast) |
Die abgerechneten Kosten überschreiten Ihre Warnschwelle. |
budget.limit_reached (Offener Gast) |
Die abgerechneten Kosten erreichen Ihr Limit – weitere Gastprojekte werden abgelehnt. |
enterprise.user.created (Unternehmen) |
Ihrer Organisation wird ein Platz hinzugefügt, auch per Single Sign-on. |
Brauchen Sie weitere Hilfe?
Schreiben Sie unserem Support-Team und beschreiben Sie, was Sie tun wollten. Screenshots helfen.