Measure MapHilfe
Measure Map öffnen

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.

Der Abschnitt „REST-API“ der Seite „Entwickler“

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 productIds auf, in ihrer Reihenfolge; productId ist das erste davon.
  • /projects/{pid}/mmp liefert 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/token und schickt den Besucher zu einem neuen eigenen Projekt, in dem seine Angaben schon eingetragen sind.
  • Wenn Sie mit POST /users/new ein 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.

  1. Wählen Sie Live oder Sandbox.
  2. Wählen Sie einen Endpunkt, etwa „Alle Projekte auflisten“ oder „Messungen abrufen“.
  3. 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.
  4. 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.

„API ausprobieren“ mit einer gesendeten Anfrage und ihrer JSON-Antwort

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Webhooks mit einem Endpunkt und den Ereignissen, die er erhält

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, und created, 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:

  1. Teilen Sie den Header X-MMO-Signature am Komma in t und v1.
  2. 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.
  3. Vergleichen Sie das Ergebnis mit v1, mit einem Vergleich in konstanter Zeit.
  4. Lehnen Sie die Zustellung ab, wenn t mehr als 5 Minuten von der aktuellen Zeit abweicht. t ist 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.

E-Mail an den Support