REST API
Rób z własnego oprogramowania to, co robi aplikacja z Twoimi projektami, folderami i produktami, organizacją Enterprise i leadami z Open Guest; wypróbowuj żądania na stronie Developer i odbieraj webhooki, gdy coś się dzieje.
REST API pozwala Twojemu oprogramowaniu robić to, co robi aplikacja: projekty i ich pomiary, foldery i katalog produktów; w planie Enterprise Twoją organizację, tak jak prowadzi ją strona Enterprise; w planie Open Guest Twój link dla gościa, projekty gości i prośby o wycenę. Odpowiada w formacie JSON. Pełna dokumentacja, z każdym polem i przykładem, to dokumentacja API; ta strona jest jej przeglądem.
Aby otworzyć dokumentację z aplikacji, przejdź do Deweloper > REST API i naciśnij Zobacz dokumentację.
Adres bazowy#
Każde żądanie trafia pod adres:
https://api.measuremaponline.com/api/v2
Uwierzytelnianie#
Wysyłaj swój klucz API, bez zmian, w nagłówku Authorization każdego żądania.
Klucz utworzysz na stronie Developer: zobacz klucze API.
curl https://api.measuremaponline.com/api/v2/projects/YOUR_PROJECT_ID \
-H "Authorization: YOUR_API_KEY"
Każde żądanie jest sprawdzane pod kątem dostępu klucza (na przykład Projekty Odczyt), Twojej subskrypcji oraz, w przypadku żądania wysłanego ze strony internetowej, ograniczeń stron klucza. Klucze, które mogą zmieniać dane, trzymaj na swoim serwerze: zobacz dbaj o bezpieczeństwo klucza.
Live i sandbox#
Dla obu środowisk jest jeden adres bazowy. Decyduje klucz: klucz sandbox odczytuje i zapisuje projekty, foldery i produkty sandbox, których klucze live nigdy nie widzą. Użytkownicy, miejsca i zespoły Twojej organizacji są takie same w obu, więc ich zmiana wymaga klucza live. Projekty gości utworzone kluczem sandbox nigdy nie są rozliczane, a projektów sandbox nie można osadzić na Twojej stronie. Tokeny zawierają informację o środowisku, do którego należą.
Co obejmuje API#
| Grupa | Endpointy | Wymagany dostęp klucza |
|---|---|---|
| Tokeny logowania | POST /auth/token, POST /auth/iframe/token |
Osadzone mapy (w Open Guest Projekty gości) |
| Konto | Plan, miejsca i klucz konta przez GET /account; żądania API z ostatnich 30 dni oraz, w Open Guest, projekty gości i budżet okresu przez GET /usage |
Konto: Odczyt |
| Projekty i foldery | Twoje projekty (GET /projects, Kosz z trashed=true) i foldery (GET /folders); pobieranie projektu, jego pomiarów (/projects/{pid}/data), komentarzy lub pliku .mmp (/projects/{pid}/mmp); tworzenie, aktualizowanie i przenoszenie projektów i folderów; scalanie projektów (POST /projects/merge); usuwanie do kosza (Kosz) i przywracanie (POST /projects/{pid}/restore); wersje projektu (/projects/{pid}/versions); usuwanie i przywracanie komentarzy; udostępnianie projektu lub folderu e-mailem (PUT /projects/{pid}/members) |
Projekty: Odczyt do odczytu, Odczyt i zmiany do zmian |
| Pliki projektów i kopie | Eksport projektu w formatach aplikacji (POST /projects/{pid}/export) lub pobranie jego raportu PDF (GET /projects/{pid}/pdf), oba jako linki działające przez 24 godziny; kopiowanie projektu lub tworzenie z niego szablonu (POST /projects/{pid}/copy) |
Projekty: Odczyt; Odczyt i zmiany do kopiowania. Ceny w raporcie wymagają Produkty: Odczyt |
| Wyceny | Wycena projektu, pozycja po pozycji (GET /projects/{pid}/estimate) |
Projekty i Produkty: Odczyt |
| Produkty | GET /products, GET /products/{id}, tworzenie, aktualizowanie i archiwizowanie przez DELETE /products/{id} |
Produkty: Odczyt lub Odczyt i zmiany |
| Profil | Profil i ustawienia e-mail (/account/profile); dla klienta partnera: kto płaci za jego plan i jego zaproszenia (/account/partner) |
Konto: Odczyt, Odczyt i zmiany |
| Importy | Import plików do projektu (POST /projects/{pid}/imports), jak Import w aplikacji: dodanie lub zastąpienie, a potem śledzenie postępu |
Projekty: Odczyt i zmiany |
| Klucze i webhook | Klucze API konta (/keys: lista, unieważnianie, witryny; nigdy w całości, nigdy poza dostęp wywołującego klucza) i jego webhook (/webhook) |
Deweloper: Odczyt, Odczyt i zmiany |
| Partner | Klienci i zaproszenia, plan, licencje, budżet, płatności i faktury klienta (/partner) |
Klienci: Odczyt, Odczyt i zmiany |
| Enterprise: użytkownicy, zaproszenia, miejsca, zespoły | Użytkownicy (/enterprise/users): lista, zmiana roli lub danych, wyłączanie i włączanie, wylogowanie wszędzie, usunięcie z organizacji, usunięcie konta, ustawianie zespołów, przekazanie projektów. Zaproszenia (/enterprise/invitations): zapraszanie, lista, ponowne wysłanie, wycofanie. Miejsca (GET /enterprise/seats). Zespoły (/enterprise/teams). Każdy projekt organizacji (GET /enterprise/projects) i projekty w zespołach |
Użytkownicy: Odczyt lub Odczyt i zmiany; projekty wymagają Projekty |
| Enterprise: organizacja | Jej profil i polityka (/enterprise/organization), logowanie jednokrotne (GET /enterprise/sso), dziennik aktywności (GET /enterprise/activity) oraz kupowanie i oddawanie miejsc (PUT /enterprise/seats) |
Organizacja: Odczyt lub Odczyt i zmiany |
| Open Guest | Twój link dla gościa (/open-guest/link: pobranie, utworzenie lub zastąpienie, wstrzymanie, wybór jego folderu); projekty gości (/open-guest/projects: lista, rozpoczęcie jednego dla odwiedzającego, pobranie jednego); prośby o wycenę razem z wyceną (/open-guest/requests); zużycie w tym okresie (GET /open-guest/usage) i budżet (PUT /open-guest/budget) |
Goście: Odczyt; Odczyt i zmiany do zmian |
Kilka rzeczy, o których warto wiedzieć:
- Klucz ma dostęp do projektów własnego konta i, w planie Enterprise, do projektów użytkowników organizacji.
- Usunięcie projektu przenosi go do kosza (Kosz), tak jak w aplikacji, i
może to zrobić tylko jego twórca; usuń go na stałe z kosza (Kosz) za
pomocą
forever=true. Usunięcie folderu przenosi jego projekty do kosza (Kosz). - W pomiarach projektu kształt wymienia swoje produkty w
productIds, po kolei;productIdto pierwszy z nich. /projects/{pid}/mmpdaje ten sam plik.mmp, który eksportuje aplikacja. Jego schemat jest opublikowany pod adresem github.com/blueblinkone/mmp-validator. Nowe elementy są zawsze dodawane wyłącznie jako opcjonalne, więc czytnik napisany dla starszego pliku nadal działa.- W planie Open Guest projekt gościa rozpoczęty przez API
(
POST /open-guest/projects) wlicza się do zużycia i budżetu Open Guest, tak jak projekt rozpoczęty z Twojego linku dla gościa. - W Open Guest sekcja Link dla gościa zawiera
poradnik Open Guest API z kodem dla Twojego serwera i Twojej strony:
serwer pobiera token przez
POST /auth/tokenza pomocą klucza live i kieruje odwiedzającego do nowego, własnego projektu, z wypełnionymi jego danymi. - Osoby dołączają do Twojej organizacji tylko przez zaproszenie
(
POST /enterprise/invitations), tak jak na stronie Enterprise: kto nie ma konta, dostaje je i sam wybiera hasło. API nigdy nie tworzy konta ani nie ustawia hasła. - Usunięcie użytkownika z organizacji (
POST /enterprise/users/{uid}/remove) zostawia mu konto; usunięcie go (DELETE /enterprise/users/{uid}) usuwa konto. W obu przypadkach jego praca zostaje w organizacji, w nowym folderze z jego nazwą, który współdzielą Twoi administratorzy. - Gdy gość prosi o Twoją wycenę,
GET /open-guest/requests/{pid}odpowiada, kim jest, co napisał, co zmierzył i, z Produkty: Odczyt, samą wycenę. - W Open Guest tokeny rozpoczynają projekty gości dla Twoich odwiedzających.
POST /auth/iframe/token, który loguje odwiedzającego w osadzonej mapie, jest przeznaczony dla kluczy Enterprise. - Produkty nigdy nie są usuwane przez API, tylko archiwizowane, a cena zakupu produktu nigdy nie jest zwracana.
- Działki katastralne nie są częścią API.
Odpowiedzi i błędy#
Udane żądanie odpowiada statusem 200 i JSON-em (eksport .mmp odpowiada
XML-em). Nieudane odpowiada statusem błędu i treścią w rodzaju:
{"errorCode": "insufficient_scope", "errorMessage": "This API key does not have the scope required for this endpoint"}
| Status | errorCode |
Co sprawdzić |
|---|---|---|
| 400 | invalid_body, invalid_uid, invalid_project_id, pagination_invalid_page_number, pagination_invalid_page_limit |
Brakuje wartości w żądaniu lub nie jest akceptowana, na przykład page i limit listy stronicowanej. |
| 401 | unauthorized_action |
Żądanie wysłano ze strony internetowej, której klucz nie dopuszcza, albo element nie należy do Twojego konta ani do kont Twoich członków. |
| 402 | budget_limit_reached |
Open Guest: osiągnięto limit budżetu, więc w tym okresie nie powstaną kolejne projekty gości. |
| 403 | invalid_api_key |
W nagłówku Authorization nie wysłano klucza albo klucz jest nieznany, unieważniony lub minęło 24 godziny po jego wymianie. |
| 403 | api_key_suspended |
Dostęp do API na Twoim koncie został zawieszony. Skontaktuj się z pomocą techniczną. |
| 403 | subscription_expired, invalid_subscription |
Subskrypcja nie jest aktywna albo jej plan nie ma API. |
| 403 | insufficient_scope |
Klucz nie ma dostępu, którego wymaga ten endpoint. |
| 403 | scope_not_in_plan |
Twój plan nie obejmuje tego punktu końcowego, na przykład sekcji Enterprise w planie Open Guest. |
| 403 | embed_needs_enterprise |
Osadzone mapy są częścią planu Enterprise. Klucz Open Guest otwiera tylko własne projekty gości. |
| 404 | not_found, project_not_found, user_not_found |
Element nie istnieje albo osoba nie jest użytkownikiem Twojej organizacji. |
| 409 | enterprise_add_users_limit |
Zapraszanie kogoś: wszystkie miejsca są zajęte, a miejsca automatyczne są wyłączone. |
| 409 | project_not_in_trash |
Zażądano przywrócenia lub trwałego usunięcia projektu, którego nie ma w koszu (Kosz). |
| 429 | too_many_requests |
Ponad 600 tokenów w ciągu godziny. Poczekaj chwilę i spróbuj ponownie. |
| 500 | server_error |
Nie udało się zrealizować żądania. Sprawdź wysłane identyfikatory, spróbuj ponownie, a jeśli problem się powtarza, skontaktuj się z pomocą techniczną. |
Wypróbuj API na stronie Developer#
Deweloper > Wypróbuj API wysyła prawdziwe żądania z Twoim kluczem i pokazuje dokładnie, co wraca.
- Wybierz Produkcyjne lub Piaskownica.
- Wybierz Punkt końcowy, na przykład „Lista Twoich projektów”, „Pobierz pomiary” lub „Pobierz konto”. Lista oferuje endpointy, które obejmuje Twój plan.
- Wypełnij jego parametry. Projekt lub produkt wybierasz po nazwie spośród tych, które klucz może odczytać; tam, gdzie potrzebna jest osoba, Twoje własne konto jest wypełniane za Ciebie.
- Naciśnij Wyślij żądanie. Status i odpowiedź pojawią się poniżej.
Dostępne są tylko żądania odczytu, więc próbowanie niczego nie zmienia, a te żądania nie są wliczane do Twojego wykorzystania. Jeśli Twój klucz nie ma dostępu, którego wymaga endpoint, strona ostrzega, że odpowie 403.
Webhooki#
Webhook informuje Twój serwer, gdy coś się dzieje, tak jak e-maile z powiadomieniami informują Ciebie. Webhooki są częścią planów Enterprise i Open Guest.
Skonfiguruj webhook#
W Deweloper > Webhooki:
- Wpisz swój Adres punktu końcowego: adres
https://w internecie. Adresy w sieciach prywatnych są odrzucane, a sprawdzane jest to ponownie przed każdym dostarczeniem. - Zaznacz Zdarzenia, które chcesz otrzymywać (zobacz zdarzenia). Nowy endpoint zaczyna od zdarzeń, które wysyła Twój plan, a co najmniej jedno musi być zaznaczone.
- Naciśnij Zapisz. Za pierwszym razem strona pokazuje Twój Klucz podpisujący w całości. Skopiuj go wtedy: potem widać tylko jego ostatnie znaki.
- Naciśnij Wyślij zdarzenie testowe i wybierz zdarzenie.
Test wysyła próbkę tego zdarzenia, z wymyślonymi wartościami i "test": true
w data, na zapisany endpoint, nawet gdy zdarzenie nie jest zaznaczone lub
endpoint jest wyłączony. Aby zatrzymać wszystkie dostarczenia, naciśnij
Usuń: endpoint i jego klucz tajny
zostają usunięte.
Pod ustawieniami Dokumentacja webhooków zawiera wszystko, czego potrzebujesz do napisania strony odbierającej: nagłówki i treść, kod sprawdzający podpis w Node.js, Pythonie i PHP oraz przykładowe dane dla każdego zdarzenia.
Co otrzymuje Twój serwer#
Każde zdarzenie to jedno żądanie POST na Twój endpoint, z treścią JSON:
{"id": "evt_3f9a1c2b7d4e5f60718293a4", "type": "project.created", "created": 1790000000000, "data": { ... }}
id jest unikalne dla każdego zdarzenia, created to moment zdarzenia w
milisekundach od 1 stycznia 1970 (UTC), a zawartość data zależy od zdarzenia.
Żądanie ma też te nagłówki:
| Nagłówek | Wartość |
|---|---|
X-MMO-Event |
Nazwa zdarzenia, jako type w treści. |
X-MMO-Delivery |
id zdarzenia. |
X-MMO-Signature |
t=<milliseconds>,v1=<hex>: kiedy dostarczenie zostało podpisane i jego podpis. |
User-Agent |
MeasureMapOnline-Webhooks/1 |
- Odpowiedz statusem 2xx w ciągu 8 sekund, przed jakąkolwiek powolną pracą. Każdy inny status, przekierowanie lub przekroczenie czasu liczy się jako niepowodzenie.
- Każde zdarzenie jest wysyłane raz i nigdy ponawiane. Sekcja pokazuje Ostatnie dostarczenie i Kolejne niepowodzenia.
- Po 10 niepowodzeniach z rzędu endpoint zostaje wyłączony, a właściciel dostaje e-mail. Napraw serwer i naciśnij Zapisz, aby włączyć go ponownie.
- Czasem zdarzenie przychodzi dwa razy lub w złej kolejności. Użyj
id, aby ignorować powtórzenia, icreated, aby ustawić zdarzenia w kolejności.
Sprawdź podpis#
Każdy, kto zna Twój adres, może na niego wysyłać żądania, więc sprawdzaj każde dostarczenie, zanim mu zaufasz:
- Podziel nagłówek
X-MMO-Signaturena przecinku nativ1. - Oblicz HMAC-SHA256 z
t, kropki i surowej treści żądania, z Twoim kluczem tajnym do podpisywania jako kluczem, zapisany szesnastkowo. - Porównaj wynik z
v1porównaniem w stałym czasie. - Odrzuć dostarczenie, jeśli
tróżni się od bieżącego czasu o więcej niż 5 minut.tjest w milisekundach.
Używaj treści dokładnie takiej, w jakiej przyszła: sparsowanie JSON-a i zapisanie go z powrotem zmienia go, a podpis przestaje się zgadzać.
Zmień klucz tajny natychmiast wymienia klucz tajny i pokazuje nowy w całości, jednorazowo. Zaktualizuj serwer zaraz po wymianie.
Zdarzenia#
| Zdarzenie | Wysyłane, gdy |
|---|---|
project.created |
Na Twoim koncie zostaje utworzony projekt. W aplikacji, przez API lub z osadzenia. |
project.deleted |
Projekt zostaje trwale usunięty (przeniesienie do kosza się nie liczy). |
project.comment.added |
Ktoś komentuje projekt — zwykle Twój klient odpisuje. |
guest.project.created (Open Guest) |
Gość rozpoczyna projekt z Twojego linku lub przez API. Tylko gdy adres e-mail gościa jest znany. |
guest.measurement.completed (Open Guest) |
Gość kończy pomiar i zostawia swoje dane kontaktowe. |
budget.warning_reached (Open Guest) |
Wydatki rozliczane według zużycia przekraczają Twój próg ostrzegawczy. |
budget.limit_reached (Open Guest) |
Wydatki rozliczane według zużycia osiągają Twój limit — kolejne projekty gości są odrzucane. |
enterprise.user.created (Enterprise) |
Do Twojej organizacji zostaje dodane miejsce, także przez logowanie jednokrotne. |
Nadal potrzebujesz pomocy?
Napisz do naszego zespołu wsparcia i opisz, co chciałeś zrobić. Zrzuty ekranu bardzo pomagają.