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.
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}/mmpger 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/tokenmed 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.
- Välj Live eller Sandbox.
- 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.
- 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.
- 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.
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:
- Skriv din Endpoint-URL: en
https://-adress på internet. Adresser på privata nätverk avvisas, och det kontrolleras igen före varje leverans. - 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.
- Tryck på Spara. Första gången visar sidan din Signeringshemlighet i sin helhet. Kopiera den då: efteråt visas bara dess sista tecken.
- 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.
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
idför att ignorera upprepningar ochcreatedfö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:
- Dela
X-MMO-Signature-huvudet vid kommatecknet itochv1. - Beräkna en HMAC-SHA256 av
t, en punkt och den råa förfrågningskroppen, med din signeringshemlighet som nyckel, skriven hexadecimalt. - Jämför resultatet med
v1med en jämförelse i konstant tid. - Avvisa leveransen om
tligger 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.