REST API
Gør fra din egen software det, appen gør med dine projekter, mapper og produkter, din Enterprise-organisation og dine Open Guest-leads; prøv forespørgsler fra siden Udvikler, og modtag webhooks, når der sker noget.
REST API'et lader din egen software gøre det, appen gør: projekter og deres målinger, mapper og produktkataloget; med Enterprise din organisation, som siden Enterprise styrer den; med Open Guest dit gæstelink, gæsteprojekter og anmodninger om tilbud. Det svarer i JSON. Den fulde reference, med alle felter og eksempler, er API-dokumentationen; denne side er overblikket.
For at åbne dokumentationen fra appen går du til Udvikler > REST API og trykker på Se dokumentationen.
Base-URL#
Alle forespørgsler går til:
https://api.measuremaponline.com/api/v2
Godkendelse#
Send din API-nøgle, som den er, i headeren Authorization i hver forespørgsel.
Opret nøglen på siden Udvikler: se API-nøgler.
curl https://api.measuremaponline.com/api/v2/projects/YOUR_PROJECT_ID \
-H "Authorization: YOUR_API_KEY"
Hver forespørgsel kontrolleres mod nøglens adgang (for eksempel Projekter Læs), dit abonnement og, for en forespørgsel sendt fra en webside, nøglens begrænsninger for websteder. Opbevar nøgler, der kan ændre data, på din server: se hold din nøgle sikker.
Live og sandbox#
Der er én base-URL til begge. Nøglen afgør det: en sandboxnøgle læser og skriver sandboxprojekter, -mapper og -produkter, som livenøgler aldrig ser. Din organisations brugere, pladser og teams er de samme i begge, så for at ændre dem skal du bruge en livenøgle. Gæsteprojekter oprettet med en sandboxnøgle faktureres aldrig, og sandboxprojekter kan ikke indlejres på dit websted. Tokens oplyser, hvilket miljø de tilhører.
Hvad API'et dækker#
| Gruppe | Endpoints | Nødvendig nøgleadgang |
|---|---|---|
| Login-tokens | POST /auth/token, POST /auth/iframe/token |
Indlejrede kort (på Open Guest Gæsteprojekter) |
| Konto | Kontoens abonnement, pladser og nøgle med GET /account; API-forespørgslerne de seneste 30 dage og, på Open Guest, periodens gæsteprojekter og budget med GET /usage |
Konto: Læs |
| Projekter og mapper | Dine projekter (GET /projects, Papirkurv med trashed=true) og mapper (GET /folders); hent et projekt, dets målinger (/projects/{pid}/data), dets kommentarer eller dets .mmp-fil (/projects/{pid}/mmp); opret, opdater og flyt projekter og mapper; flet projekter (POST /projects/merge); slet til Papirkurv og gendan (POST /projects/{pid}/restore); et projekts versioner (/projects/{pid}/versions); fjern og gendan kommentarer; del et projekt eller en mappe via e-mail (PUT /projects/{pid}/members) |
Projekter: Læs for at læse, Læs og ændr for at ændre |
| Projektfiler og kopier | Eksportér et projekt i appens formater (POST /projects/{pid}/export) eller hent dets PDF-rapport (GET /projects/{pid}/pdf), begge som links, der virker i 24 timer; kopiér et projekt, eller lav en skabelon af det (POST /projects/{pid}/copy) |
Projekter: Læs; Læs og ændr for at kopiere. Priser i en rapport kræver Produkter: Læs |
| Overslag | Et projekts overslag linje for linje (GET /projects/{pid}/estimate) |
Projekter og Produkter: Læs |
| Produkter | GET /products, GET /products/{id}, opret, opdater og arkivér med DELETE /products/{id} |
Produkter: Læs eller Læs og ændr |
| Profil | Profilen og e-mailindstillingerne (/account/profile); for en partners klient: hvem der betaler for planen, og invitationerne (/account/partner) |
Konto: Læs, Læs og ændr |
| Importer | Importer filer i et projekt (POST /projects/{pid}/imports), som appens Importer gør: tilføj eller erstat, og følg den derefter |
Projekter: Læs og ændr |
| Nøgler og webhook | Kontoens API-nøgler (/keys: vis, tilbagekald, websteder; aldrig hele nøglen, aldrig ud over den kaldende nøgles adgang) og dens webhook (/webhook) |
Udvikler: Læs, Læs og ændr |
| Partner | Klienter og invitationer, en klients plan, licenser, budget, betaling og fakturaer (/partner) |
Klienter: Læs, Læs og ændr |
| Enterprise: brugere, invitationer, pladser, teams | Brugere (/enterprise/users): list, ændr deres rolle eller oplysninger, deaktivér og aktivér, log ud overalt, fjern fra organisationen, slet, angiv deres teams, overdrag deres projekter. Invitationer (/enterprise/invitations): invitér, list, send igen, træk tilbage. Pladser (GET /enterprise/seats). Teams (/enterprise/teams). Alle organisationens projekter (GET /enterprise/projects) og projekter på teams |
Brugere: Læs eller Læs og ændr; projekterne kræver Projekter |
| Enterprise: organisationen | Dens profil og politik (/enterprise/organization), single sign-on (GET /enterprise/sso), dens aktivitetslog (GET /enterprise/activity) og køb eller tilbagelevering af pladser (PUT /enterprise/seats) |
Organisation: Læs eller Læs og ændr |
| Open Guest | Dit gæstelink (/open-guest/link: hent, opret eller erstat, sæt på pause, vælg dets mappe); gæsteprojekter (/open-guest/projects: list, start et til en besøgende, hent et); tilbudsanmodninger med tilbuddet (/open-guest/requests); denne periodes forbrug (GET /open-guest/usage) og budgettet (PUT /open-guest/budget) |
Gæster: Læs; Læs og ændr for at ændre |
Nogle ting er godt at vide:
- En nøgle når projekterne på sin egen konto og med Enterprise dem, der tilhører organisationens brugere.
- Når du sletter et projekt, kommer det i Papirkurv, som i appen, og kun dets
opretter kan gøre det; slet det for altid fra Papirkurv med
forever=true. Når du sletter en mappe, kommer dens projekter i Papirkurv. - I et projekts målinger angiver en figur sine produkter i
productIdsi rækkefølge;productIder det første af dem. /projects/{pid}/mmpgiver den samme.mmp-fil, som appen eksporterer. Dens skema er udgivet på github.com/blueblinkone/mmp-validator. Nye elementer tilføjes kun som valgfrie, så en læser skrevet til en ældre fil bliver ved med at virke.- Med Open Guest tæller et gæsteprojekt, der er startet via API'et
(
POST /open-guest/projects), med i dit Open Guest-forbrug og -budget, ligesom et, der er startet fra dit gæstelink. - På Open Guest har afsnittet Gæstelink
vejledningen Open Guest API med kode til din server og din side: din
server henter et token fra
POST /auth/tokenmed din livenøgle og sender den besøgende til et nyt projekt til dem selv, med deres oplysninger udfyldt. - Folk kommer kun ind i din organisation via invitation
(
POST /enterprise/invitations), som på siden Enterprise: den, der ikke har en konto, får en og vælger selv sin adgangskode. API'et opretter aldrig en konto og angiver aldrig en adgangskode. - Når du fjerner en bruger (
POST /enterprise/users/{uid}/remove), beholder vedkommende sin konto; når du sletter en (DELETE /enterprise/users/{uid}), slettes kontoen. Uanset hvad bliver det arbejde, vedkommende har lavet, hos organisationen i en ny mappe med vedkommendes navn, som dine administratorer deler. - Når en gæst beder om dit tilbud, svarer
GET /open-guest/requests/{pid}med, hvem gæsten er, hvad vedkommende skrev, hvad vedkommende målte og, med Produkter: Læs, selve tilbuddet. - På Open Guest starter tokens gæsteprojekter til dine besøgende.
POST /auth/iframe/token, som logger en besøgende ind på et indlejret kort, er til Enterprise-nøgler. - Produkter slettes aldrig via API'et, kun arkiveres, og et produkts kostpris returneres aldrig.
- Matrikelparceller er ikke en del af API'et.
Svar og fejl#
En vellykket forespørgsel svarer med status 200 og JSON (eksporten af .mmp
svarer med XML). En mislykket svarer med en fejlstatus og en tekst som denne:
{"errorCode": "insufficient_scope", "errorMessage": "This API key does not have the scope required for this endpoint"}
| Status | errorCode |
Hvad du skal tjekke |
|---|---|---|
| 400 | invalid_body, invalid_uid, invalid_project_id, pagination_invalid_page_number, pagination_invalid_page_limit |
En værdi i forespørgslen mangler eller accepteres ikke, for eksempel page og limit i en liste med sider. |
| 401 | unauthorized_action |
Forespørgslen blev sendt fra en webside på et websted, nøglen ikke tillader, eller emnet ligger ikke på din konto eller dine medlemmers. |
| 402 | budget_limit_reached |
Open Guest: din budgetgrænse er nået, så der kan ikke oprettes flere gæsteprojekter i denne periode. |
| 403 | invalid_api_key |
Der blev ikke sendt nogen nøgle i headeren Authorization, eller nøglen er ukendt, tilbagekaldt eller forbi sine 24 timer efter udskiftning. |
| 403 | api_key_suspended |
API-adgangen på din konto er suspenderet. Kontakt support. |
| 403 | subscription_expired, invalid_subscription |
Abonnementet er ikke aktivt, eller dets plan har ikke noget API. |
| 403 | insufficient_scope |
Nøglen har ikke den adgang, dette endpoint kræver. |
| 403 | scope_not_in_plan |
Dit abonnement indeholder ikke dette endpoint, for eksempel Enterprise-afsnittet med Open Guest. |
| 403 | embed_needs_enterprise |
Indlejrede kort er en del af Enterprise-abonnementet. En Open Guest-nøgle åbner kun sine egne gæsteprojekter. |
| 404 | not_found, project_not_found, user_not_found |
Emnet findes ikke, eller personen er ikke bruger i din organisation. |
| 409 | enterprise_add_users_limit |
Ved invitation af en person: alle pladser er optaget, og automatiske pladser er slået fra. |
| 409 | project_not_in_trash |
Gendan eller slet for altid blev anmodet for et projekt, der ikke er i Papirkurv. |
| 429 | too_many_requests |
Mere end 600 tokens i timen. Vent lidt, og prøv igen. |
| 500 | server_error |
Forespørgslen kunne ikke gennemføres. Tjek de ID'er, du sendte, prøv igen, og kontakt support, hvis det fortsætter. |
Prøv API'et fra siden Udvikler#
Udvikler > Prøv API'en sender rigtige forespørgsler med din nøgle og viser præcis, hvad der kommer tilbage.
- Vælg Live eller Sandbox.
- Vælg et Endpoint, for eksempel "Vis dine projekter", "Hent målinger" eller "Hent kontoen". Listen tilbyder de endpoints, dit abonnement omfatter.
- Udfyld dets parametre. Et projekt eller et produkt vælges ved navn blandt dem, nøglen kan læse; hvor der skal bruges en person, er din egen konto udfyldt for dig.
- Tryk på Send anmodning. Status og svaret vises nedenunder.
Der tilbydes kun forespørgsler, der læser, så intet ændres ved at prøve, og forespørgslerne tæller ikke med i dit forbrug. Hvis din nøgle ikke har den adgang, et endpoint kræver, advarer siden dig om, at det vil svare 403.
Webhooks#
En webhook fortæller din server, når der sker noget, ligesom notifikationsmails fortæller dig det. Webhooks er en del af abonnementerne Enterprise og Open Guest.
Opsæt en webhook#
I Udvikler > Webhooks:
- Skriv din Endpoint-URL: en
https://-adresse på internettet. Adresser på private netværk afvises, og det kontrolleres igen før hver levering. - Afkryds de Hændelser, du vil have (se hændelser). Et nyt endpoint starter med de hændelser, dit abonnement sender, og mindst én skal være afkrydset.
- Tryk på Gem. Første gang viser siden din Signeringshemmelighed i sin helhed. Kopiér den dér: bagefter vises kun dens sidste tegn.
- Tryk på Send testhændelse, og vælg en hændelse.
En test sender et eksempel på den hændelse, med opdigtede værdier og
"test": true i dens data, til dit gemte endpoint, selv når hændelsen ikke
er afkrydset, eller endpointet er slået fra. For at stoppe alle leveringer
skal du trykke på Fjern: endpointet og
dets secret slettes.
Under indstillingerne har Webhook-reference det, du skal bruge for at skrive den modtagende side: headerne og body, kode der kontrollerer signaturen i Node.js, Python og PHP, og eksempeldata for hver hændelse.
Hvad din server modtager#
Hver hændelse er ét POST til dit endpoint med en JSON-body:
{"id": "evt_3f9a1c2b7d4e5f60718293a4", "type": "project.created", "created": 1790000000000, "data": { ... }}
id er unik for hver hændelse, created er, hvornår den skete, i millisekunder
siden 1. januar 1970 (UTC), og hvad data indeholder, afhænger af hændelsen.
Forespørgslen har også disse headere:
| Header | Værdi |
|---|---|
X-MMO-Event |
Hændelsens navn, som type i body. |
X-MMO-Delivery |
Hændelsens id. |
X-MMO-Signature |
t=<milliseconds>,v1=<hex>: hvornår leveringen blev signeret, og dens signatur. |
User-Agent |
MeasureMapOnline-Webhooks/1 |
- Svar med en 2xx-status inden for 8 sekunder, før du går i gang med noget langsomt. Enhver anden status, en omdirigering eller en timeout tæller som en fejl.
- Hver hændelse sendes én gang og forsøges aldrig igen. Afsnittet viser Seneste levering og Fejl i træk.
- Efter 10 fejl i træk slås endpointet fra, og ejeren får en e-mail. Ret din server, og tryk på Gem for at slå det til igen.
- En gang imellem kommer en hændelse to gange eller i forkert rækkefølge. Brug
idtil at ignorere gentagelser ogcreatedtil at sætte hændelser i rækkefølge.
Kontrollér signaturen#
Alle, der kender din adresse, kan sende til den, så kontrollér hver levering, før du stoler på den:
- Del headeren
X-MMO-Signatureved kommaet itogv1. - Beregn en HMAC-SHA256 af
t, et punktum og den rå forespørgselsbody, med din signing secret som nøgle, skrevet som hexadecimal. - Sammenlign resultatet med
v1med en sammenligning i konstant tid. - Afvis leveringen, hvis
tligger mere end 5 minutter fra det aktuelle tidspunkt.ter i millisekunder.
Brug body præcis som den ankom: hvis du parser JSON'en og skriver den ud igen, ændres den, og signaturen passer ikke længere.
Roter hemmelighed erstatter secret med det samme og viser den nye i sin helhed, én gang. Opdater din server, så snart du roterer.
Hændelser#
| Hændelse | Sendes når |
|---|---|
project.created |
Et projekt oprettes på din konto. I appen, via API'et eller fra et indlejret kort. |
project.deleted |
Et projekt slettes permanent (at flytte et til papirkurven tæller ikke). |
project.comment.added |
Nogen kommenterer et projekt – som regel din kunde, der svarer. |
guest.project.created (Open Guest) |
En gæst starter et projekt fra dit link eller via API'en. Kun når gæstens e-mailadresse er kendt. |
guest.measurement.completed (Open Guest) |
En gæst afslutter en måling og efterlader sine kontaktoplysninger. |
budget.warning_reached (Open Guest) |
Det forbrugsbaserede forbrug overskrider din advarselsgrænse. |
budget.limit_reached (Open Guest) |
Det forbrugsbaserede forbrug når din grænse – yderligere gæsteprojekter afvises. |
enterprise.user.created (Enterprise) |
En plads tilføjes til din organisation, også via single sign-on. |
Brug for mere hjælp?
Skriv til vores supportteam og fortæl, hvad du prøvede at gøre. Skærmbilleder hjælper.