API REST
Fes des del teu propi programari el que fa l'app amb els teus projectes, carpetes i productes, la teva organització Enterprise i els teus contactes d'Open Guest; prova peticions des de la pàgina Desenvolupador i rep webhooks quan passin coses.
L'API REST deixa que el teu propi programari faci el que fa l'app: projectes i les seves mesures, carpetes i el catàleg de productes; a Enterprise, la teva organització, tal com la gestiona la pàgina Enterprise; a Open Guest, el teu enllaç de convidat, els projectes de convidat i les sol·licituds de pressupost. Respon en JSON. La referència completa, amb tots els camps i exemples, és la documentació de l'API; aquesta pàgina n'és la visió general.
Per obrir la documentació des de l'aplicació, ves a Desenvolupador > REST API i prem Mostra la documentació.
URL base#
Cada petició va a:
https://api.measuremaponline.com/api/v2
Autenticació#
Envia la teva clau d'API, tal com és, a la capçalera Authorization de cada
petició. Crea la clau a la pàgina Desenvolupador: consulta claus
d'API.
curl https://api.measuremaponline.com/api/v2/projects/YOUR_PROJECT_ID \
-H "Authorization: YOUR_API_KEY"
Cada petició es comprova segons l'accés de la clau (per exemple, Projectes Lectura), la teva subscripció i, per a una petició enviada des d'una pàgina web, les restriccions de llocs web de la clau. Mantén al teu servidor les claus que poden canviar dades: consulta mantén la clau segura.
Live i sandbox#
Hi ha una sola URL base per als dos. Ho decideix la clau: una clau sandbox llegeix i escriu projectes, carpetes i productes sandbox, que les claus reals no veuen mai. Els usuaris, les places i els equips de la teva organització són els mateixos en tots dos, de manera que canviar-los necessita una clau real. Els projectes de convidat fets amb una clau sandbox no es facturen mai, i els projectes sandbox no es poden incrustar al teu lloc web. Els tokens informen de l'entorn al qual pertanyen.
Què cobreix l'API#
| Grup | Punts finals | Accés de la clau necessari |
|---|---|---|
| Tokens d'inici de sessió | POST /auth/token, POST /auth/iframe/token |
Mapes incrustats (a Open Guest, Projectes de convidats) |
| Compte | El pla, les places i la clau del compte amb GET /account; les peticions d'API dels darrers 30 dies i, a Open Guest, els projectes de convidat i el pressupost del període amb GET /usage |
Compte: Lectura |
| Projectes i carpetes | Els teus projectes (GET /projects, la Paperera amb trashed=true) i carpetes (GET /folders); obté un projecte, les seves mesures (/projects/{pid}/data), els seus comentaris o el seu fitxer .mmp (/projects/{pid}/mmp); crea, actualitza i mou projectes i carpetes; combina projectes (POST /projects/merge); elimina cap a la Paperera i restaura (POST /projects/{pid}/restore); les versions d'un projecte (/projects/{pid}/versions); elimina i restaura comentaris; comparteix un projecte o una carpeta per correu (PUT /projects/{pid}/members) |
Projectes: Lectura per llegir, Lectura i canvis per canviar |
| Fitxers i còpies de projectes | Exporta un projecte en els formats de l'app (POST /projects/{pid}/export) o obté el seu informe en PDF (GET /projects/{pid}/pdf), tots dos com a enllaços que funcionen durant 24 hores; copia un projecte o en fa una plantilla (POST /projects/{pid}/copy) |
Projectes: Lectura; Lectura i canvis per copiar. Els preus en un informe necessiten Productes: Lectura |
| Pressupostos | El pressupost d'un projecte, línia per línia (GET /projects/{pid}/estimate) |
Projectes i Productes: Lectura |
| Productes | GET /products, GET /products/{id}, crear, actualitzar i arxivar amb DELETE /products/{id} |
Productes: Lectura o Lectura i canvis |
| Perfil | El perfil i la configuració del correu (/account/profile); per al client d'un partner, qui li paga el pla i les seves invitacions (/account/partner) |
Compte: Lectura, Lectura i canvis |
| Importacions | Importa fitxers a un projecte (POST /projects/{pid}/imports), com fa Importa a l'aplicació: afegeix o substitueix, i en segueix el progrés |
Projectes: Lectura i canvis |
| Claus i webhook | Les claus d'API del compte (/keys: llista, revoca, llocs web; mai senceres, mai més enllà de l'accés de la clau que crida) i el seu webhook (/webhook) |
Desenvolupador: Lectura, Lectura i canvis |
| Partner | Clients i invitacions, el pla, les llicències, el pressupost, el pagament i les factures d'un client (/partner) |
Clients: Lectura, Lectura i canvis |
| Enterprise: usuaris, invitacions, places, equips | Usuaris (/enterprise/users): llista, canvia el seu rol o dades, desactiva i activa, tanca la sessió a tot arreu, treu de l'organització, elimina, defineix els seus equips, passa els seus projectes a un altre. Invitacions (/enterprise/invitations): convida, llista, torna a enviar, retira. Places (GET /enterprise/seats). Equips (/enterprise/teams). Tots els projectes de l'organització (GET /enterprise/projects) i projectes en equips |
Usuaris: Lectura o Lectura i canvis; els projectes necessiten Projectes |
| Enterprise: l'organització | El seu perfil i política (/enterprise/organization), l'inici de sessió únic (GET /enterprise/sso), el seu registre d'activitat (GET /enterprise/activity), i la compra o devolució de places (PUT /enterprise/seats) |
Organització: Lectura o Lectura i canvis |
| Open Guest | El teu enllaç de convidat (/open-guest/link: obtenir, crear o substituir, posar en pausa, triar-ne la carpeta); projectes de convidat (/open-guest/projects: llistar, iniciar-ne un per a un visitant, obtenir-ne un); sol·licituds de pressupost amb el pressupost (/open-guest/requests); l'ús d'aquest període (GET /open-guest/usage) i el pressupost màxim (PUT /open-guest/budget) |
Convidats: Lectura; Lectura i canvis per canviar |
Algunes coses que cal saber:
- Una clau arriba als projectes del seu propi compte i, a Enterprise, als dels usuaris de l'organització.
- Eliminar un projecte el posa a la Paperera, com a l'app, i només el seu
creador pot fer-ho; elimina'l definitivament des de la Paperera amb
forever=true. Eliminar una carpeta posa els seus projectes a la Paperera. - A les mesures d'un projecte, una figura llista els seus productes a
productIds, en ordre;productIdés el primer. /projects/{pid}/mmpdona el mateix fitxer.mmpque exporta l'aplicació. El seu esquema està publicat a github.com/blueblinkone/mmp-validator. Els elements nous només s'afegeixen com a opcionals, de manera que un lector escrit per a un fitxer més antic continua funcionant.- A Open Guest, un projecte de convidat iniciat per l'API
(
POST /open-guest/projects) compta per a l'ús i el pressupost màxim d'Open Guest, igual que un iniciat des del teu enllaç de convidat. - A Open Guest, la secció Enllaç de convidat té la
guia Open Guest API, amb codi per al teu servidor i la teva pàgina:
el teu servidor obté un token amb
POST /auth/tokeni la teva clau real, i envia el visitant a un projecte nou propi, amb les seves dades emplenades. - Les persones només s'incorporen a la teva organització per invitació
(
POST /enterprise/invitations), com a la pàgina Enterprise: qui no té compte en rep un i tria la seva contrasenya. L'API mai no crea un compte ni defineix una contrasenya. - Treure un usuari (
POST /enterprise/users/{uid}/remove) li deixa el seu compte; eliminar-lo (DELETE /enterprise/users/{uid}) l'elimina. En tots dos casos la feina que ha fet es queda a l'organització, en una carpeta nova amb el seu nom que comparteixen els teus administradors. - Quan un convidat demana el teu pressupost,
GET /open-guest/requests/{pid}respon qui és, què ha escrit, què ha mesurat i, amb Productes: Lectura, el pressupost mateix. - A Open Guest, els tokens inicien projectes de convidat per als teus
visitants.
POST /auth/iframe/token, que fa iniciar la sessió a un visitant en un mapa incrustat, és per a claus Enterprise. - Els productes mai no s'eliminen amb l'API, només s'arxiven, i el preu de cost d'un producte no es retorna mai.
- Les parcel·les cadastrals no formen part de l'API.
Respostes i errors#
Una petició correcta respon amb l'estat 200 i JSON (l'exportació .mmp
respon amb XML). Una de fallida respon amb un estat d'error i un cos com
aquest:
{"errorCode": "insufficient_scope", "errorMessage": "This API key does not have the scope required for this endpoint"}
| Estat | errorCode |
Què cal comprovar |
|---|---|---|
| 400 | invalid_body, invalid_uid, invalid_project_id, pagination_invalid_page_number, pagination_invalid_page_limit |
Falta un valor a la petició o no s'accepta, com ara page i limit d'una llista paginada. |
| 401 | unauthorized_action |
La petició s'ha enviat des d'una pàgina web d'un lloc que la clau no permet, o l'element no és al teu compte ni als dels teus membres. |
| 402 | budget_limit_reached |
Open Guest: s'ha arribat al límit del pressupost, de manera que no hi ha més projectes de convidat aquest període. |
| 403 | invalid_api_key |
No s'ha enviat cap clau a la capçalera Authorization, o la clau és desconeguda, revocada o ha passat les seves 24 hores després de ser substituïda. |
| 403 | api_key_suspended |
L'accés a l'API del teu compte s'ha suspès. Contacta amb el suport. |
| 403 | subscription_expired, invalid_subscription |
La subscripció no és activa, o el seu pla no inclou l'API. |
| 403 | insufficient_scope |
La clau no té l'accés que necessita aquest punt final. |
| 403 | scope_not_in_plan |
El teu pla no inclou aquest punt final, per exemple la secció Enterprise a Open Guest. |
| 403 | embed_needs_enterprise |
Els mapes incrustats formen part del pla Enterprise. Una clau Open Guest només obre els seus propis projectes de convidat. |
| 404 | not_found, project_not_found, user_not_found |
L'element no existeix, o la persona no és un usuari de la teva organització. |
| 409 | enterprise_add_users_limit |
En convidar algú: totes les places estan ocupades i les places automàtiques estan desactivades. |
| 409 | project_not_in_trash |
S'ha demanat restaurar o eliminar definitivament un projecte que no és a la Paperera. |
| 429 | too_many_requests |
Més de 600 tokens en una hora. Espera una mica i torna-ho a provar. |
| 500 | server_error |
No s'ha pogut completar la petició. Comprova els ID que has enviat, torna-ho a provar i contacta amb el suport si continua. |
Prova l'API des de la pàgina Desenvolupador#
Desenvolupador > Prova l'API envia peticions reals amb la teva clau i mostra exactament què torna.
- Tria Producció o Sandbox.
- Tria un Punt final, com ara "Llista els teus projectes", "Obté les mesures" o "Obté el compte". La llista ofereix els punts finals que inclou el teu pla.
- Omple'n els paràmetres. Un projecte o un producte es tria pel nom entre els que la clau pot llegir; quan cal una persona, s'omple el teu propi compte per tu.
- Prem Envia la sol·licitud. L'estat i la resposta apareixen a sota.
Només s'ofereixen peticions que llegeixen, de manera que provar no canvia res, i aquestes peticions no es compten a l'ús. Si la teva clau no té l'accés que necessita un punt final, la pàgina t'avisa que respondrà 403.
Webhooks#
Un webhook avisa el teu servidor quan passa alguna cosa, com et criden l'atenció els correus de notificació. Els webhooks formen part dels plans Enterprise i Open Guest.
Configura un webhook#
A Desenvolupador > Webhooks:
- Escriu la teva URL del punt final: una adreça
https://a internet. Les adreces de xarxes privades es rebutgen, i es torna a comprovar abans de cada lliurament. - Marca els Esdeveniments que vols (consulta esdeveniments). Un punt final nou comença amb els esdeveniments que envia el teu pla, i n'hi ha d'haver almenys un de marcat.
- Prem Desa. La primera vegada, la pàgina et mostra el Secret de signatura sencer. Copia'l aleshores: després només se'n mostren els darrers caràcters.
- Prem Envia un esdeveniment de prova i tria un esdeveniment.
Una prova envia un exemple d'aquell esdeveniment, amb valors inventats i
"test": true al seu data, al teu punt final desat, encara que
l'esdeveniment no estigui marcat o el punt final estigui desactivat. Per
aturar tots els lliuraments, prem Elimina: el punt final i el seu secret s'eliminen.
Sota la configuració, la Referència dels webhooks té el que necessites per escriure la part receptora: les capçaleres i el cos, codi que comprova la signatura en Node.js, Python i PHP, i dades d'exemple per a cada esdeveniment.
Què rep el teu servidor#
Cada esdeveniment és un POST al teu punt final, amb un cos JSON:
{"id": "evt_3f9a1c2b7d4e5f60718293a4", "type": "project.created", "created": 1790000000000, "data": { ... }}
id és únic per a cada esdeveniment, created és quan va passar en
mil·lisegons des de l'1 de gener de 1970 (UTC), i el que conté data
depèn de l'esdeveniment. La petició també té aquestes capçaleres:
| Capçalera | Valor |
|---|---|
X-MMO-Event |
El nom de l'esdeveniment, com type al cos. |
X-MMO-Delivery |
L'id de l'esdeveniment. |
X-MMO-Signature |
t=<milliseconds>,v1=<hex>: quan es va signar el lliurament, i la seva signatura. |
User-Agent |
MeasureMapOnline-Webhooks/1 |
- Respon amb un estat 2xx en menys de 8 segons, abans de qualsevol feina lenta. Qualsevol altre estat, una redirecció o un temps d'espera esgotat compta com a error.
- Cada esdeveniment s'envia una sola vegada i no es reintenta mai. La secció mostra l'Darrer lliurament i els Errors consecutius.
- Després de 10 errors seguits, el punt final es desactiva i el propietari rep un correu. Arregla el teu servidor i prem Desa per tornar-lo a activar.
- De tant en tant un esdeveniment arriba dues vegades o desordenat. Fes servir
idper ignorar les repeticions icreatedper ordenar els esdeveniments.
Comprova la signatura#
Qualsevol que conegui la teva adreça hi pot enviar peticions, així que comprova cada lliurament abans de fiar-te'n:
- Divideix la capçalera
X-MMO-Signatureper la coma entiv1. - Calcula un HMAC-SHA256 de
t, un punt i el cos en brut de la petició, amb el teu secret de signatura com a clau, escrit en hexadecimal. - Compara el resultat amb
v1amb una comparació de temps constant. - Rebutja el lliurament si
tdifereix més de 5 minuts de l'hora actual.tés en mil·lisegons.
Fes servir el cos exactament tal com ha arribat: analitzar el JSON i tornar-lo a escriure el canvia, i la signatura ja no coincideix.
Rota el secret substitueix el secret a l'instant i mostra el nou sencer, una sola vegada. Actualitza el teu servidor tan bon punt el rotis.
Esdeveniments#
| Esdeveniment | S'envia quan |
|---|---|
project.created |
Es crea un projecte al teu compte. A l'aplicació, amb l'API o des d'un incrustat. |
project.deleted |
Un projecte se suprimeix definitivament (moure'l a la paperera no compta). |
project.comment.added |
Algú comenta en un projecte, normalment el teu client que respon. |
guest.project.created (Open Guest) |
Un convidat comença un projecte des del teu enllaç o mitjançant l'API. Només quan es coneix l'adreça de correu del convidat. |
guest.measurement.completed (Open Guest) |
Un convidat acaba una mesura i deixa les seves dades de contacte. |
budget.warning_reached (Open Guest) |
La despesa per ús supera el teu llindar d'avís. |
budget.limit_reached (Open Guest) |
La despesa per ús arriba al teu límit: es rebutgen més projectes de convidats. |
enterprise.user.created (Enterprise) |
S'afegeix una llicència a la teva organització, també mitjançant l'inici de sessió únic. |
Encara necessites ajuda?
Escriu al nostre equip de suport i explica'ns què intentaves fer. Les captures de pantalla ajuden.