API-ul REST
Fă din propriul software ce face aplicația cu proiectele, dosarele și produsele tale, organizația ta Enterprise și contactele tale Open Guest; încearcă cereri din pagina Dezvoltator și primește webhook-uri când se întâmplă ceva.
API-ul REST îți permite software-ului tău să facă ce face aplicația: proiectele și măsurătorile lor, dosarele și catalogul de produse; la Enterprise, organizația ta, așa cum o conduce pagina Enterprise; la Open Guest, linkul tău de invitat, proiectele de invitat și cererile de ofertă. Răspunde în JSON. Referința completă, cu fiecare câmp și exemplu, este documentația API; această pagină este prezentarea generală.
Ca să deschizi documentația din aplicație, mergi la Dezvoltator > REST API și apasă Vezi documentația.
URL de bază#
Fiecare cerere merge la:
https://api.measuremaponline.com/api/v2
Autentificare#
Trimite cheia ta API, așa cum este, în antetul Authorization al fiecărei
cereri. Creează cheia în pagina Dezvoltator: vezi cheile
API.
curl https://api.measuremaponline.com/api/v2/projects/YOUR_PROJECT_ID \
-H "Authorization: YOUR_API_KEY"
Fiecare cerere este verificată în raport cu accesul cheii (de exemplu, Proiecte Citire), cu abonamentul tău și, pentru o cerere trimisă dintr-o pagină web, cu restricțiile de site ale cheii. Ține pe serverul tău cheile care pot modifica date: vezi păstrează-ți cheia în siguranță.
Live și sandbox#
Există un singur URL de bază pentru ambele. Cheia decide: o cheie sandbox citește și scrie proiecte, dosare și produse sandbox, pe care cheile live nu le văd niciodată. Utilizatorii, locurile și echipele organizației tale sunt aceleași în ambele, așa că modificarea lor necesită o cheie live. Proiectele de invitat create cu o cheie sandbox nu se facturează niciodată, iar proiectele sandbox nu pot fi încorporate pe site-ul tău. Tokenurile indică mediul căruia îi aparțin.
Ce acoperă API-ul#
| Grup | Endpoint-uri | Acces necesar al cheii |
|---|---|---|
| Tokenuri de autentificare | POST /auth/token, POST /auth/iframe/token |
Hărți încorporate (pe Open Guest, Proiecte pentru invitați) |
| Cont | Planul contului, licențele și cheia cu GET /account; cererile API din ultimele 30 de zile și, pe Open Guest, proiectele de invitat și bugetul perioadei cu GET /usage |
Cont: Citire |
| Proiecte și dosare | Proiectele tale (GET /projects, Coș de gunoi cu trashed=true) și dosarele (GET /folders); obține un proiect, măsurătorile lui (/projects/{pid}/data), comentariile lui sau fișierul lui .mmp (/projects/{pid}/mmp); creează, actualizează și mută proiecte și dosare; îmbină proiecte (POST /projects/merge); șterge în Coș de gunoi și restaurează (POST /projects/{pid}/restore); versiunile unui proiect (/projects/{pid}/versions); elimină și restaurează comentarii; partajează un proiect sau un dosar prin e-mail (PUT /projects/{pid}/members) |
Proiecte: Citire pentru citire, Citire și modificare pentru modificare |
| Fișierele și copiile proiectelor | Exportă un proiect în formatele aplicației (POST /projects/{pid}/export) sau obține raportul lui PDF (GET /projects/{pid}/pdf), ambele sub formă de linkuri valabile 24 de ore; copiază un proiect sau fă un șablon din el (POST /projects/{pid}/copy) |
Proiecte: Citire; Citire și modificare pentru copiere. Prețurile dintr-un raport necesită Produse: Citire |
| Estimări | Estimarea unui proiect, rând cu rând (GET /projects/{pid}/estimate) |
Proiecte și Produse: Citire |
| Produse | GET /products, GET /products/{id}, creare, actualizare și arhivare cu DELETE /products/{id} |
Produse: Citire sau Citire și modificare |
| Profil | Profilul și setările de e-mail (/account/profile); pentru clientul unui partener, cine îi plătește planul și invitațiile (/account/partner) |
Cont: Citire, Citire și modificare |
| Importuri | Importă fișiere într-un proiect (POST /projects/{pid}/imports), ca Importul din aplicație: adaugă sau înlocuiește, apoi urmărește-l |
Proiecte: Citire și modificare |
| Chei și webhook | Cheile API ale contului (/keys: listare, revocare, site-uri; niciodată întregi, niciodată peste accesul cheii care apelează) și webhookul (/webhook) |
Dezvoltator: Citire, Citire și modificare |
| Partener | Clienți și invitații, planul, licențele, bugetul, plata și facturile unui client (/partner) |
Clienți: Citire, Citire și modificare |
| Enterprise: utilizatori, invitații, locuri, echipe | Utilizatori (/enterprise/users): listează, schimbă rolul sau datele lor, dezactivează și activează, deconectează de peste tot, elimină din organizație, șterge, stabilește echipele lor, predă proiectele lor. Invitații (/enterprise/invitations): invită, listează, retrimite, retrage. Locuri (GET /enterprise/seats). Echipe (/enterprise/teams). Toate proiectele organizației (GET /enterprise/projects) și proiectele din echipe |
Utilizatori: Citire sau Citire și modificare; proiectele necesită Proiecte |
| Enterprise: organizația | Profilul și politica ei (/enterprise/organization), autentificarea unică (GET /enterprise/sso), jurnalul ei de activitate (GET /enterprise/activity) și cumpărarea sau returnarea de locuri (PUT /enterprise/seats) |
Organizație: Citire sau Citire și modificare |
| Open Guest | Linkul tău de invitat (/open-guest/link: obține, creează sau înlocuiește, pune pe pauză, alege dosarul lui); proiectele de invitat (/open-guest/projects: listează, începe unul pentru un vizitator, obține unul); cererile de ofertă cu oferta (/open-guest/requests); utilizarea din această perioadă (GET /open-guest/usage) și bugetul (PUT /open-guest/budget) |
Invitați: Citire; Citire și modificare pentru modificare |
Câteva lucruri de știut:
- O cheie ajunge la proiectele propriului cont și, la Enterprise, la cele ale utilizatorilor organizației.
- Ștergerea unui proiect îl pune în Coș de gunoi, ca în aplicație, și numai
creatorul lui poate face asta; șterge-l definitiv din Coș de gunoi cu
forever=true. Ștergerea unui dosar pune proiectele lui în Coș de gunoi. - În măsurătorile unui proiect, o formă își listează produsele în
productIds, în ordine;productIdeste primul dintre ele. /projects/{pid}/mmpoferă același fișier.mmppe care îl exportă aplicația. Schema lui este publicată la github.com/blueblinkone/mmp-validator. Elementele noi se adaugă întotdeauna doar ca elemente opționale, așa că un cititor scris pentru un fișier mai vechi continuă să funcționeze.- La Open Guest, un proiect de invitat început prin API
(
POST /open-guest/projects) contează la utilizarea și bugetul tău Open Guest, ca unul început din linkul tău de invitat. - Pe Open Guest, secțiunea Link de invitat conține
ghidul Open Guest API, cu cod pentru serverul și pagina ta: serverul
tău obține un token de la
POST /auth/tokencu cheia ta live și îl trimite pe vizitator într-un proiect nou al lui, cu datele lui completate. - Persoanele se alătură organizației tale doar prin invitație
(
POST /enterprise/invitations), ca pe pagina Enterprise: cine nu are cont primește unul și își alege singur parola. API-ul nu creează niciodată un cont și nu stabilește niciodată o parolă. - Eliminarea unui utilizator (
POST /enterprise/users/{uid}/remove) îi lasă contul; ștergerea lui (DELETE /enterprise/users/{uid}) șterge contul. În ambele cazuri munca lui rămâne la organizație, într-un dosar nou cu numele lui pe care îl partajează administratorii tăi. - Când un invitat cere oferta ta,
GET /open-guest/requests/{pid}răspunde cine este, ce a scris, ce a măsurat și, cu Produse: Citire, oferta însăși. - Pe Open Guest, tokenurile pornesc proiecte de invitat pentru vizitatorii tăi.
POST /auth/iframe/token, care autentifică un vizitator într-o hartă încorporată, este pentru cheile Enterprise. - Produsele nu sunt șterse niciodată prin API, doar arhivate, iar prețul de cost al unui produs nu este returnat niciodată.
- Parcelele cadastrale nu fac parte din API.
Răspunsuri și erori#
O cerere reușită răspunde cu starea 200 și JSON (exportul .mmp răspunde cu
XML). Una eșuată răspunde cu o stare de eroare și un corp ca acesta:
{"errorCode": "insufficient_scope", "errorMessage": "This API key does not have the scope required for this endpoint"}
| Stare | errorCode |
Ce să verifici |
|---|---|---|
| 400 | invalid_body, invalid_uid, invalid_project_id, pagination_invalid_page_number, pagination_invalid_page_limit |
O valoare din cerere lipsește sau nu este acceptată, cum ar fi page și limit ale unei liste paginate. |
| 401 | unauthorized_action |
Cererea a fost trimisă dintr-o pagină web de pe un site pe care cheia nu îl permite sau elementul nu aparține contului tău ori membrilor tăi. |
| 402 | budget_limit_reached |
Open Guest: limita bugetului a fost atinsă, deci nu mai sunt proiecte de invitat în această perioadă. |
| 403 | invalid_api_key |
Nu a fost trimisă nicio cheie în antetul Authorization sau cheia este necunoscută, revocată sau a depășit cele 24 de ore după înlocuire. |
| 403 | api_key_suspended |
Accesul la API al contului tău a fost suspendat. Contactează asistența. |
| 403 | subscription_expired, invalid_subscription |
Abonamentul nu este activ sau planul lui nu include API. |
| 403 | insufficient_scope |
Cheia nu are accesul de care are nevoie acest endpoint. |
| 403 | scope_not_in_plan |
Planul tău nu include acest endpoint, de exemplu secțiunea Enterprise la Open Guest. |
| 403 | embed_needs_enterprise |
Hărțile încorporate fac parte din planul Enterprise. O cheie Open Guest deschide doar propriile proiecte de invitat. |
| 404 | not_found, project_not_found, user_not_found |
Elementul nu există sau persoana nu este utilizator al organizației tale. |
| 409 | enterprise_add_users_limit |
La invitarea cuiva: toate locurile sunt ocupate și locurile automate sunt dezactivate. |
| 409 | project_not_in_trash |
S-a cerut restaurarea sau ștergerea definitivă a unui proiect care nu este în Coș de gunoi. |
| 429 | too_many_requests |
Mai mult de 600 de tokenuri într-o oră. Așteaptă puțin și încearcă din nou. |
| 500 | server_error |
Cererea nu a putut fi finalizată. Verifică ID-urile trimise, încearcă din nou și contactează asistența dacă persistă. |
Încearcă API-ul din pagina Dezvoltator#
Dezvoltator > Încearcă API-ul trimite cereri reale cu cheia ta și arată exact ce primești înapoi.
- Alege Live sau Sandbox.
- Alege un Endpoint, de exemplu „Listează proiectele tale", „Obține măsurătorile" sau „Obține contul". Lista oferă endpoint-urile incluse în planul tău.
- Completează parametrii lui. Un proiect sau un produs se alege după nume dintre cele pe care cheia le poate citi; acolo unde este nevoie de o persoană, contul tău este completat pentru tine.
- Apasă Trimite cererea. Starea și răspunsul apar mai jos.
Se oferă doar cereri de citire, deci nimic nu se schimbă prin încercare, iar aceste cereri nu sunt numărate în utilizarea ta. Dacă cheia ta nu are accesul de care are nevoie un endpoint, pagina te avertizează că va răspunde cu 403.
Webhook-uri#
Un webhook anunță serverul tău când se întâmplă ceva, așa cum te anunță ție e-mailurile de notificare. Webhook-urile fac parte din planurile Enterprise și Open Guest.
Configurează un webhook#
În Dezvoltator > Webhook-uri:
- Scrie URL endpoint: o adresă
https://de pe internet. Adresele din rețele private sunt refuzate, iar verificarea se repetă înainte de fiecare livrare. - Bifează Evenimente dorite (vezi evenimente). Un endpoint nou pornește cu evenimentele pe care le trimite planul tău și cel puțin unul trebuie bifat.
- Apasă Salvează. Prima dată, pagina îți arată Secret de semnare în întregime. Copiază-l atunci: după aceea se afișează doar ultimele lui caractere.
- Apasă Trimite un eveniment de test și alege un eveniment.
Un test trimite un exemplu al acelui eveniment, cu valori inventate și
"test": true în data, la endpoint-ul tău salvat, chiar dacă evenimentul nu
este bifat sau endpoint-ul este oprit. Ca să oprești toate livrările, apasă
Elimină: endpoint-ul și secretul lui sunt
șterse.
Sub setări, Referință webhook conține ce ai nevoie ca să scrii partea care primește: antetele și corpul, cod care verifică semnătura în Node.js, Python și PHP și date de exemplu pentru fiecare eveniment.
Ce primește serverul tău#
Fiecare eveniment este un POST către endpoint-ul tău, cu un corp JSON:
{"id": "evt_3f9a1c2b7d4e5f60718293a4", "type": "project.created", "created": 1790000000000, "data": { ... }}
id este unic pentru fiecare eveniment, created este momentul în care s-a
întâmplat, în milisecunde de la 1 ianuarie 1970 (UTC), iar ce conține data
depinde de eveniment. Cererea are și aceste antete:
| Antet | Valoare |
|---|---|
X-MMO-Event |
Numele evenimentului, ca type din corp. |
X-MMO-Delivery |
id-ul evenimentului. |
X-MMO-Signature |
t=<milisecunde>,v1=<hex>: momentul semnării livrării și semnătura ei. |
User-Agent |
MeasureMapOnline-Webhooks/1 |
- Răspunde cu o stare 2xx în 8 secunde, înainte de orice lucru lent. Orice altă stare, o redirecționare sau o expirare a timpului se numără ca eșec.
- Fiecare eveniment este trimis o singură dată și nu se reîncearcă niciodată. Secțiunea arată Ultima livrare și Eșecuri consecutive.
- După 10 eșecuri la rând, endpoint-ul este oprit, iar proprietarul primește un e-mail. Repară serverul și apasă Salvează ca să-l reactivezi.
- Din când în când un eveniment sosește de două ori sau în altă ordine. Folosește
idca să ignori repetările șicreatedca să pui evenimentele în ordine.
Verifică semnătura#
Oricine îți cunoaște adresa poate trimite către ea, așa că verifică fiecare livrare înainte să ai încredere în ea:
- Împarte antetul
X-MMO-Signaturela virgulă întșiv1. - Calculează un HMAC-SHA256 din
t, un punct și corpul brut al cererii, cu secretul tău de semnare drept cheie, scris în hexazecimal. - Compară rezultatul cu
v1printr-o comparație în timp constant. - Respinge livrarea dacă
tdiferă cu mai mult de 5 minute de ora curentă.teste în milisecunde.
Folosește corpul exact așa cum a sosit: dacă analizezi JSON-ul și îl scrii din nou, el se schimbă, iar semnătura nu se mai potrivește.
Rotește secretul înlocuiește secretul imediat și îl afișează pe cel nou în întregime, o singură dată. Actualizează-ți serverul îndată ce rotești secretul.
Evenimente#
| Eveniment | Trimis când |
|---|---|
project.created |
Se creează un proiect în contul tău. În aplicație, prin API sau dintr-o încorporare. |
project.deleted |
Un proiect este șters definitiv (mutarea unuia în coșul de gunoi nu contează). |
project.comment.added |
Cineva comentează la un proiect — de obicei clientul tău care răspunde. |
guest.project.created (Open Guest) |
Un invitat începe un proiect din linkul tău sau prin API. Doar când adresa de e-mail a invitatului este cunoscută. |
guest.measurement.completed (Open Guest) |
Un invitat termină o măsurătoare și își lasă datele de contact. |
budget.warning_reached (Open Guest) |
Cheltuielile contorizate depășesc pragul tău de avertizare. |
budget.limit_reached (Open Guest) |
Cheltuielile contorizate ating limita ta — proiectele noi de invitați sunt refuzate. |
enterprise.user.created (Enterprise) |
Un loc este adăugat în organizația ta, inclusiv prin autentificare unică. |
Mai ai nevoie de ajutor?
Scrie echipei noastre de suport și spune-ne ce încercai să faci. Capturile de ecran ajută.