Measure MapHjälp
Öppna Measure Map

REST-API

Gör från din egen programvara det appen gör med dina projekt, mappar och produkter, din Enterprise-organisation och dina Open Guest-leads; prova förfrågningar från utvecklarsidan och ta emot webhooks när saker händer.

REST-API:t låter din egen programvara göra det appen gör: projekt och deras mätningar, mappar och produktkatalogen; med Enterprise din organisation, så som sidan Enterprise sköter den; med Open Guest din gästlänk, gästprojekt och offertförfrågningar. Det svarar i JSON. Den fullständiga referensen, med alla fält och exempel, är API-dokumentationen; den här sidan är översikten.

För att öppna dokumentationen från appen går du till Utvecklare > REST API och trycker på Visa dokumentation.

Avsnittet REST-API på utvecklarsidan

Bas-URL#

Varje förfrågan går till:

https://api.measuremaponline.com/api/v2

Autentisering#

Skicka din API-nyckel, precis som den är, i Authorization-huvudet i varje förfrågan. Skapa nyckeln på utvecklarsidan: se API-nycklar.

curl https://api.measuremaponline.com/api/v2/projects/YOUR_PROJECT_ID \
  -H "Authorization: YOUR_API_KEY"

Varje förfrågan kontrolleras mot nyckelns åtkomst (till exempel Projekt Läsa), din prenumeration och, för en förfrågan som skickas från en webbsida, nyckelns webbplatsbegränsningar. Förvara nycklar som kan ändra data på din server: se håll din nyckel säker.

Live och sandbox#

Det finns en bas-URL för båda. Nyckeln avgör: en sandbox-nyckel läser och skriver sandbox-projekt, mappar och produkter, som livenycklar aldrig ser. Din organisations användare, platser och team är desamma i båda, så för att ändra dem krävs en livenyckel. Gästprojekt som skapas med en sandbox-nyckel faktureras aldrig, och sandbox-projekt kan inte bäddas in på din webbplats. Token anger vilken miljö de tillhör.

Vad API:t omfattar#

Grupp Endpoints Nyckelåtkomst som krävs
Inloggningstoken POST /auth/token, POST /auth/iframe/token Inbäddade kartor (på Open Guest, Gästprojekt)
Konto Kontots plan, platser och nyckel med GET /account; API-förfrågningarna de senaste 30 dagarna och, på Open Guest, periodens gästprojekt och budget med GET /usage Konto: Läsa
Projekt och mappar Dina projekt (GET /projects, Papperskorg med trashed=true) och mappar (GET /folders); hämta ett projekt, dess mätningar (/projects/{pid}/data), dess kommentarer eller dess .mmp-fil (/projects/{pid}/mmp); skapa, uppdatera och flytta projekt och mappar; slå ihop projekt (POST /projects/merge); ta bort till Papperskorg och återställ (POST /projects/{pid}/restore); ett projekts versioner (/projects/{pid}/versions); ta bort och återställ kommentarer; dela ett projekt eller en mapp via e-post (PUT /projects/{pid}/members) Projekt: Läsa för att läsa, Läsa och ändra för att ändra
Projektfiler och kopior Exportera ett projekt i appens format (POST /projects/{pid}/export) eller hämta dess PDF-rapport (GET /projects/{pid}/pdf), båda som länkar som fungerar i 24 timmar; kopiera ett projekt, eller gör en mall av det (POST /projects/{pid}/copy) Projekt: Läsa; Läsa och ändra för att kopiera. Priser i en rapport kräver Produkter: Läsa
Kostnadsförslag Ett projekts kostnadsförslag, rad för rad (GET /projects/{pid}/estimate) Projekt och Produkter: Läsa
Produkter GET /products, GET /products/{id}, skapa, uppdatera och arkivera med DELETE /products/{id} Produkter: Läsa eller Läsa och ändra
Profil Profilen och e-postinställningarna (/account/profile); för en partners kund: vem som betalar planen, och inbjudningarna (/account/partner) Konto: Läsa, Läsa och ändra
Importer Importera filer till ett projekt (POST /projects/{pid}/imports), som appens Importera: lägg till eller ersätt, och följ sedan importen Projekt: Läsa och ändra
Nycklar och webhook Kontots API-nycklar (/keys: lista, återkalla, webbplatser; aldrig hela nyckeln, aldrig utöver den anropande nyckelns åtkomst) och dess webhook (/webhook) Utvecklare: Läsa, Läsa och ändra
Partner Kunder och inbjudningar, en kunds plan, licenser, budget, betalning och fakturor (/partner) Kunder: Läsa, Läsa och ändra
Enterprise: användare, inbjudningar, platser, team Användare (/enterprise/users): lista, ändra deras roll eller uppgifter, inaktivera och aktivera, logga ut överallt, ta bort från organisationen, radera, ange deras team, överlämna deras projekt. Inbjudningar (/enterprise/invitations): bjud in, lista, skicka igen, dra tillbaka. Platser (GET /enterprise/seats). Team (/enterprise/teams). Alla organisationens projekt (GET /enterprise/projects) och projekt i team Användare: Läsa eller Läsa och ändra; projekten kräver Projekt
Enterprise: organisationen Dess profil och policy (/enterprise/organization), enkel inloggning (GET /enterprise/sso), dess aktivitetslogg (GET /enterprise/activity) och köp eller återlämnande av platser (PUT /enterprise/seats) Organisation: Läsa eller Läsa och ändra
Open Guest Din gästlänk (/open-guest/link: hämta, skapa eller ersätt, pausa, välj dess mapp); gästprojekt (/open-guest/projects: lista, starta ett för en besökare, hämta ett); offertförfrågningar med offerten (/open-guest/requests); den här periodens användning (GET /open-guest/usage) och budgeten (PUT /open-guest/budget) Gäster: Läsa; Läsa och ändra för att ändra

Några saker att känna till:

  • En nyckel når projekten på sitt eget konto och, med Enterprise, organisationens användares projekt.
  • Att ta bort ett projekt lägger det i Papperskorg, som i appen, och bara dess skapare kan göra det; ta bort det för gott från Papperskorg med forever=true. Att ta bort en mapp lägger dess projekt i Papperskorg.
  • I ett projekts mätningar listar en form sina produkter i productIds, i ordning; productId är den första av dem.
  • /projects/{pid}/mmp ger samma .mmp-fil som appen exporterar. Dess schema är publicerat på github.com/blueblinkone/mmp-validator. Nya element läggs bara till som valfria, så en läsare skriven för en äldre fil fortsätter fungera.
  • Med Open Guest räknas ett gästprojekt som startats via API:t (POST /open-guest/projects) in i din Open Guest-användning och -budget, som ett som startats från din gästlänk.
  • På Open Guest har avsnittet Gästlänk guiden Open Guest API, med kod för din server och din sida: din server hämtar en token från POST /auth/token med din livenyckel och skickar besökaren till ett nytt projekt som är deras eget, med deras uppgifter ifyllda.
  • Personer går bara med i din organisation via inbjudan (POST /enterprise/invitations), som på sidan Enterprise: den som saknar konto får ett och väljer sitt eget lösenord. API:t skapar aldrig ett konto och anger aldrig ett lösenord.
  • Att ta bort en användare från organisationen (POST /enterprise/users/{uid}/remove) låter dem behålla sitt konto; att radera en (DELETE /enterprise/users/{uid}) raderar kontot. Oavsett vilket blir det arbete de gjort kvar hos organisationen, i en ny mapp med deras namn som dina administratörer delar.
  • När en gäst ber om din offert svarar GET /open-guest/requests/{pid} vem gästen är, vad hen skrev, vad hen mätte och, med Produkter: Läsa, själva offerten.
  • På Open Guest startar token gästprojekt åt dina besökare. POST /auth/iframe/token, som loggar in en besökare på en inbäddad karta, är till för Enterprise-nycklar.
  • Produkter raderas aldrig via API:t, bara arkiveras, och en produkts inköpspris returneras aldrig.
  • Katastralparceller ingår inte i API:t.

Svar och fel#

En lyckad förfrågan svarar med status 200 och JSON (.mmp-exporten svarar med XML). En misslyckad svarar med en felstatus och en kropp som denna:

{"errorCode": "insufficient_scope", "errorMessage": "This API key does not have the scope required for this endpoint"}
Status errorCode Vad du ska kontrollera
400 invalid_body, invalid_uid, invalid_project_id, pagination_invalid_page_number, pagination_invalid_page_limit Ett värde i förfrågan saknas eller godtas inte, till exempel page och limit i en sidindelad lista.
401 unauthorized_action Förfrågan skickades från en webbsida på en webbplats som nyckeln inte tillåter, eller så finns objektet inte på ditt konto eller dina medlemmars.
402 budget_limit_reached Open Guest: din budgetgräns är nådd, så inga fler gästprojekt den här perioden.
403 invalid_api_key Ingen nyckel skickades i Authorization-huvudet, eller så är nyckeln okänd, återkallad eller förbi sina 24 timmar efter att den ersattes.
403 api_key_suspended API-åtkomsten på ditt konto har stängts av. Kontakta supporten.
403 subscription_expired, invalid_subscription Prenumerationen är inte aktiv, eller så har dess plan inget API.
403 insufficient_scope Nyckeln har inte den åtkomst som den här endpointen kräver.
403 scope_not_in_plan Din plan innehåller inte den här slutpunkten, till exempel Enterprise-avsnittet med Open Guest.
403 embed_needs_enterprise Inbäddade kartor ingår i Enterprise-planen. En Open Guest-nyckel öppnar bara sina egna gästprojekt.
404 not_found, project_not_found, user_not_found Objektet finns inte, eller personen är inte användare i din organisation.
409 enterprise_add_users_limit Vid inbjudan av någon: alla platser är upptagna och automatiska platser är avstängda.
409 project_not_in_trash Återställning eller borttagning för gott begärdes för ett projekt som inte ligger i Papperskorg.
429 too_many_requests Mer än 600 token på en timme. Vänta en stund och försök igen.
500 server_error Förfrågan kunde inte slutföras. Kontrollera de ID:n du skickade, försök igen och kontakta supporten om det fortsätter.

Prova API:t från utvecklarsidan#

Utvecklare > Testa API:t skickar riktiga förfrågningar med din nyckel och visar exakt vad som kommer tillbaka.

  1. Välj Live eller Sandbox.
  2. Välj en Endpoint, till exempel "Lista dina projekt", "Hämta mätningar" eller "Hämta kontot". Listan erbjuder de endpoints som din plan omfattar.
  3. Fyll i dess parametrar. Ett projekt eller en produkt väljs med namn bland dem nyckeln kan läsa; där en person behövs fylls ditt eget konto i åt dig.
  4. Tryck på Skicka förfrågan. Statusen och svaret visas nedanför.

Bara förfrågningar som läser erbjuds, så ingenting ändras av att prova, och de här förfrågningarna räknas inte i din användning. Om din nyckel inte har den åtkomst en endpoint kräver varnar sidan dig för att den kommer att svara 403.

Prova API:t med en skickad förfrågan och dess JSON-svar

Webhooks#

En webhook talar om för din server när något händer, på samma sätt som aviseringsmejlen talar om det för dig. Webhooks ingår i planerna Enterprise och Open Guest.

Ställ in en webhook#

I Utvecklare > Webhooks:

  1. Skriv din Endpoint-URL: en https://-adress på internet. Adresser på privata nätverk avvisas, och det kontrolleras igen före varje leverans.
  2. Kryssa i de Händelser du vill ha (se händelser). En ny endpoint börjar med de händelser som din plan skickar, och minst en måste vara ikryssad.
  3. Tryck på Spara. Första gången visar sidan din Signeringshemlighet i sin helhet. Kopiera den då: efteråt visas bara dess sista tecken.
  4. Tryck på Skicka testhändelse och välj en händelse.

Ett test skickar ett exempel på den händelsen, med påhittade värden och "test": true i dess data, till din sparade endpoint, även när händelsen inte är ikryssad eller endpointen är avstängd. För att stoppa alla leveranser trycker du på Ta bort: endpointen och dess hemlighet raderas.

Under inställningarna har Webhook-referens det du behöver för att skriva mottagarsidan: huvudena och kroppen, kod som kontrollerar signaturen i Node.js, Python och PHP, och exempeldata för varje händelse.

Webhooks med en endpoint och de händelser den tar emot

Vad din server får#

Varje händelse är en POST till din endpoint, med en JSON-kropp:

{"id": "evt_3f9a1c2b7d4e5f60718293a4", "type": "project.created", "created": 1790000000000, "data": { ... }}

id är unikt för varje händelse, created är när den inträffade i millisekunder sedan 1 januari 1970 (UTC), och vad data innehåller beror på händelsen. Förfrågan har också dessa huvuden:

Huvud Värde
X-MMO-Event Händelsens namn, som type i kroppen.
X-MMO-Delivery Händelsens id.
X-MMO-Signature t=<milliseconds>,v1=<hex>: när leveransen signerades, och dess signatur.
User-Agent MeasureMapOnline-Webhooks/1
  • Svara med en 2xx-status inom 8 sekunder, före allt långsamt arbete. Varje annan status, en omdirigering eller en timeout räknas som ett misslyckande.
  • Varje händelse skickas en gång och försöks aldrig igen. Avsnittet visar Senaste leverans och Misslyckanden i rad.
  • Efter 10 misslyckanden i rad stängs endpointen av och ägaren får ett e-postmeddelande. Rätta till din server och tryck på Spara för att slå på den igen.
  • Då och då kommer en händelse två gånger eller i fel ordning. Använd id för att ignorera upprepningar och created för att lägga händelser i ordning.

Kontrollera signaturen#

Vem som helst som känner till din adress kan skicka till den, så kontrollera varje leverans innan du litar på den:

  1. Dela X-MMO-Signature-huvudet vid kommatecknet i t och v1.
  2. Beräkna en HMAC-SHA256 av t, en punkt och den råa förfrågningskroppen, med din signeringshemlighet som nyckel, skriven hexadecimalt.
  3. Jämför resultatet med v1 med en jämförelse i konstant tid.
  4. Avvisa leveransen om t ligger mer än 5 minuter från aktuell tid. t är i millisekunder.

Använd kroppen exakt som den kom: att tolka JSON och skriva ut den igen ändrar den, och signaturen stämmer inte längre.

Byt hemlighet byter ut hemligheten direkt och visar den nya i sin helhet, en gång. Uppdatera din server så snart du har bytt.

Händelser#

Händelse Skickas när
project.created Ett projekt skapas på ditt konto. I appen, via API:t eller från en inbäddning.
project.deleted Ett projekt raderas permanent (att flytta ett till papperskorgen räknas inte).
project.comment.added Någon kommenterar ett projekt – oftast din kund som svarar.
guest.project.created (Open Guest) En gäst startar ett projekt från din länk eller via API:t. Bara när gästens e-postadress är känd.
guest.measurement.completed (Open Guest) En gäst avslutar en mätning och lämnar sina kontaktuppgifter.
budget.warning_reached (Open Guest) Den mätta förbrukningen passerar din varningsgräns.
budget.limit_reached (Open Guest) Den mätta förbrukningen når din gräns – fler gästprojekt avvisas.
enterprise.user.created (Enterprise) En plats läggs till i din organisation, även via single sign-on.

Behöver du mer hjälp?

Skriv till vårt supportteam och berätta vad du försökte göra. Skärmdumpar hjälper.

Mejla supporten