Measure MapGuida
Apri Measure Map

API REST

Fai dal tuo software ciò che fa l'app con i tuoi progetti, cartelle e prodotti, la tua organizzazione Enterprise e i tuoi contatti Open Guest; prova le richieste dalla pagina Sviluppatori e ricevi webhook quando succede qualcosa.

L'API REST permette al tuo software di fare ciò che fa l'app: progetti e relative misure, cartelle e catalogo prodotti; con Enterprise, la tua organizzazione, come la gestisce la pagina Enterprise; con Open Guest, il tuo link per ospiti, i progetti ospite e le richieste di preventivo. Risponde in JSON. Il riferimento completo, con ogni campo ed esempio, è la documentazione API; questa pagina ne è la panoramica.

Per aprire la documentazione dall'app, vai in Sviluppatori > REST API e premi Vedi la documentazione.

La sezione API REST della pagina Sviluppatori

URL di base#

Ogni richiesta va a:

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

Autenticazione#

Invia la tua chiave API, così com'è, nell'intestazione Authorization di ogni richiesta. Crea la chiave nella pagina Sviluppatori: vedi chiavi API.

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

Ogni richiesta viene verificata rispetto all'accesso della chiave (per esempio Progetti Lettura), al tuo abbonamento e, per una richiesta inviata da una pagina web, alle restrizioni per i siti web della chiave. Tieni sul tuo server le chiavi che possono modificare i dati: vedi tenere al sicuro la chiave.

Live e sandbox#

C'è un solo URL di base per entrambi. Decide la chiave: una chiave sandbox legge e scrive progetti, cartelle e prodotti sandbox, che le chiavi live non vedono mai. Gli utenti, i posti e i team della tua organizzazione sono gli stessi in entrambi, quindi per modificarli serve una chiave live. I progetti ospite creati con una chiave sandbox non vengono mai fatturati, e i progetti sandbox non si possono incorporare nel tuo sito web. I token riportano l'ambiente a cui appartengono.

Cosa copre l'API#

Gruppo Endpoint Accesso della chiave necessario
Token di accesso POST /auth/token, POST /auth/iframe/token Mappe incorporate (con Open Guest, Progetti degli ospiti)
Account Il piano, i posti e la chiave dell'account con GET /account; le richieste API degli ultimi 30 giorni e, con Open Guest, i progetti ospite e il budget del periodo con GET /usage Account: Lettura
Progetti e cartelle I tuoi progetti (GET /projects, il Cestino con trashed=true) e cartelle (GET /folders); ottieni un progetto, le sue misure (/projects/{pid}/data), i suoi commenti o il suo file .mmp (/projects/{pid}/mmp); crea, aggiorna e sposta progetti e cartelle; unisci progetti (POST /projects/merge); elimina nel Cestino e ripristina (POST /projects/{pid}/restore); le versioni di un progetto (/projects/{pid}/versions); rimuovi e ripristina commenti; condividi un progetto o una cartella via e-mail (PUT /projects/{pid}/members) Progetti: Lettura per leggere, Lettura e modifica per modificare
File e copie dei progetti Esporta un progetto nei formati dell'app (POST /projects/{pid}/export) o ottieni il suo report PDF (GET /projects/{pid}/pdf), entrambi come link validi per 24 ore; copia un progetto, o crea un modello da esso (POST /projects/{pid}/copy) Progetti: Lettura; Lettura e modifica per copiare. I prezzi in un report richiedono Prodotti: Lettura
Preventivi Il preventivo di un progetto, voce per voce (GET /projects/{pid}/estimate) Progetti e Prodotti: Lettura
Prodotti GET /products, GET /products/{id}, crea, aggiorna e archivia con DELETE /products/{id} Prodotti: Lettura oppure Lettura e modifica
Profilo Il profilo e le impostazioni email (/account/profile); per il cliente di un partner, chi gli paga il piano e i suoi inviti (/account/partner) Account: Lettura, Lettura e modifica
Importazioni Importa file in un progetto (POST /projects/{pid}/imports), come fa Importa nell'app: aggiungi o sostituisci, poi segui l'avanzamento Progetti: Lettura e modifica
Chiavi e webhook Le chiavi API dell'account (/keys: elenco, revoca, siti web; mai per intero, mai oltre l'accesso della chiave che chiama) e il suo webhook (/webhook) Sviluppatori: Lettura, Lettura e modifica
Partner Clienti e inviti, piano, licenze, budget, pagamento e fatture di un cliente (/partner) Clienti: Lettura, Lettura e modifica
Enterprise: utenti, inviti, posti, team Utenti (/enterprise/users): elenca, cambia il loro ruolo o i loro dati, disattiva e attiva, disconnetti ovunque, rimuovi dall'organizzazione, elimina, imposta i loro team, passa i loro progetti a un altro. Inviti (/enterprise/invitations): invita, elenca, reinvia, ritira. Posti (GET /enterprise/seats). Team (/enterprise/teams). Tutti i progetti dell'organizzazione (GET /enterprise/projects) e i progetti nei team Utenti: Lettura o Lettura e modifica; i progetti richiedono Progetti
Enterprise: l'organizzazione Il suo profilo e la sua politica (/enterprise/organization), il single sign-on (GET /enterprise/sso), il suo registro attività (GET /enterprise/activity), e l'acquisto o la restituzione di posti (PUT /enterprise/seats) Organizzazione: Lettura oppure Lettura e modifica
Open Guest Il tuo link per ospiti (/open-guest/link: ottieni, crea o sostituisci, metti in pausa, scegli la sua cartella); i progetti ospite (/open-guest/projects: elenca, avviane uno per un visitatore, ottienine uno); le richieste di preventivo con il preventivo (/open-guest/requests); l'utilizzo del periodo (GET /open-guest/usage) e il budget (PUT /open-guest/budget) Ospiti: Lettura; Lettura e modifica per modificare

Alcune cose da sapere:

  • Una chiave raggiunge i progetti del proprio account e, con Enterprise, quelli degli utenti dell'organizzazione.
  • Eliminare un progetto lo mette nel Cestino, come nell'app, e può farlo solo il suo creatore; eliminalo definitivamente dal Cestino con forever=true. Eliminare una cartella mette i suoi progetti nel Cestino.
  • Nelle misurazioni di un progetto, una forma elenca i suoi prodotti in productIds, in ordine; productId è il primo di essi.
  • /projects/{pid}/mmp restituisce lo stesso file .mmp che esporta l'app. Il suo schema è pubblicato su github.com/blueblinkone/mmp-validator. I nuovi elementi vengono sempre e solo aggiunti come facoltativi, quindi un lettore scritto per un file più vecchio continua a funzionare.
  • Con Open Guest, un progetto ospite avviato tramite l'API (POST /open-guest/projects) conta per il tuo utilizzo e il tuo budget Open Guest, come uno avviato dal tuo link per ospiti.
  • Con Open Guest, la sezione Link per ospiti ha la guida Open Guest API, con il codice per il tuo server e la tua pagina: il tuo server ottiene un token da POST /auth/token con la tua chiave live e porta il visitatore su un nuovo progetto tutto suo, con i suoi dati già compilati.
  • Le persone entrano nella tua organizzazione solo su invito (POST /enterprise/invitations), come nella pagina Enterprise: chi non ha un account ne riceve uno e sceglie la propria password. L'API non crea mai un account e non imposta mai una password.
  • Rimuovere un utente (POST /enterprise/users/{uid}/remove) gli lascia il suo account; eliminarlo (DELETE /enterprise/users/{uid}) elimina l'account. In entrambi i casi il lavoro che ha fatto resta all'organizzazione, in una nuova cartella con il suo nome che i tuoi amministratori condividono.
  • Quando un ospite chiede il tuo preventivo, GET /open-guest/requests/{pid} risponde chi è, cosa ha scritto, cosa ha misurato e, con Prodotti: Lettura, il preventivo stesso.
  • Con Open Guest, i token avviano progetti ospite per i tuoi visitatori. POST /auth/iframe/token, che fa accedere un visitatore a una mappa incorporata, è per le chiavi Enterprise.
  • I prodotti non vengono mai eliminati tramite l'API, solo archiviati, e il prezzo di costo di un prodotto non viene mai restituito.
  • Le particelle catastali non fanno parte dell'API.

Risposte ed errori#

Una richiesta riuscita risponde con stato 200 e JSON (l'esportazione .mmp risponde con XML). Una richiesta fallita risponde con uno stato di errore e un corpo come:

{"errorCode": "insufficient_scope", "errorMessage": "This API key does not have the scope required for this endpoint"}
Stato errorCode Cosa controllare
400 invalid_body, invalid_uid, invalid_project_id, pagination_invalid_page_number, pagination_invalid_page_limit Un valore nella richiesta manca o non è accettato, come page e limit di un elenco a pagine.
401 unauthorized_action La richiesta è stata inviata da una pagina web di un sito che la chiave non consente, oppure l'elemento non appartiene al tuo account né a quelli dei tuoi membri.
402 budget_limit_reached Open Guest: hai raggiunto il limite del budget, quindi niente più progetti ospite in questo periodo.
403 invalid_api_key Nell'intestazione Authorization non è stata inviata nessuna chiave, oppure la chiave è sconosciuta, revocata o oltre le 24 ore dopo essere stata sostituita.
403 api_key_suspended L'accesso API sul tuo account è stato sospeso. Contatta il supporto.
403 subscription_expired, invalid_subscription L'abbonamento non è attivo, oppure il suo piano non include l'API.
403 insufficient_scope La chiave non ha l'accesso che questo endpoint richiede.
403 scope_not_in_plan Il tuo piano non include questo endpoint, per esempio la sezione Enterprise con Open Guest.
403 embed_needs_enterprise Le mappe incorporate fanno parte del piano Enterprise. Una chiave Open Guest apre solo i propri progetti ospite.
404 not_found, project_not_found, user_not_found L'elemento non esiste, o la persona non è un utente della tua organizzazione.
409 enterprise_add_users_limit Invitare qualcuno: tutti i posti sono occupati e i posti automatici sono disattivati.
409 project_not_in_trash È stato richiesto di ripristinare o eliminare definitivamente un progetto che non è nel Cestino.
429 too_many_requests Più di 600 token in un'ora. Attendi un po' e riprova.
500 server_error Non è stato possibile completare la richiesta. Controlla gli ID che hai inviato, riprova e, se persiste, contatta il supporto.

Provare l'API dalla pagina Sviluppatori#

Sviluppatori > Prova l'API invia richieste reali con la tua chiave e mostra esattamente cosa torna indietro.

  1. Scegli Produzione oppure Sandbox.
  2. Scegli un Endpoint, come "Elenca i tuoi progetti", "Ottieni le misure" o "Ottieni l'account". L'elenco propone gli endpoint inclusi nel tuo piano.
  3. Compila i suoi parametri. Un progetto o un prodotto si sceglie per nome tra quelli che la chiave può leggere; dove serve una persona, il tuo account viene inserito al posto tuo.
  4. Premi Invia richiesta. Lo stato e la risposta compaiono sotto.

Vengono proposte solo richieste di lettura, quindi provare non cambia nulla, e queste richieste non rientrano nel tuo utilizzo. Se la tua chiave non ha l'accesso che un endpoint richiede, la pagina ti avvisa che risponderà 403.

Prova l'API con una richiesta inviata e la sua risposta JSON

Webhook#

Un webhook avvisa il tuo server quando succede qualcosa, come le email di notifica avvisano te. I webhook fanno parte dei piani Enterprise e Open Guest.

Configurare un webhook#

In Sviluppatori > Webhook:

  1. Scrivi il tuo URL dell'endpoint: un indirizzo https:// su internet. Gli indirizzi su reti private vengono rifiutati, e il controllo si ripete prima di ogni consegna.
  2. Seleziona gli Eventi che vuoi (vedi eventi). Un nuovo endpoint parte con gli eventi che il tuo piano invia, e ne va selezionato almeno uno.
  3. Premi Salva. La prima volta, la pagina mostra per intero il tuo Segreto di firma. Copialo subito: in seguito ne vengono mostrati solo gli ultimi caratteri.
  4. Premi Invia evento di prova e scegli un evento.

Un test invia un esempio di quell'evento, con valori inventati e "test": true nel suo data, al tuo endpoint salvato, anche quando l'evento non è selezionato o l'endpoint è disattivato. Per fermare tutte le consegne, premi Rimuovi: l'endpoint e il suo secret vengono eliminati.

Sotto le impostazioni, il Riferimento webhook contiene ciò che serve per scrivere la parte ricevente: le intestazioni e il corpo, il codice che verifica la firma in Node.js, Python e PHP, e dati di esempio per ogni evento.

Webhook con un endpoint e gli eventi che riceve

Cosa riceve il tuo server#

Ogni evento è una POST al tuo endpoint, con un corpo JSON:

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

id è univoco per ogni evento, created indica quando è avvenuto in millisecondi dal 1° gennaio 1970 (UTC), e il contenuto di data dipende dall'evento. La richiesta ha anche queste intestazioni:

Intestazione Valore
X-MMO-Event Il nome dell'evento, come type nel corpo.
X-MMO-Delivery L'id dell'evento.
X-MMO-Signature t=<milliseconds>,v1=<hex>: quando la consegna è stata firmata, e la sua firma.
User-Agent MeasureMapOnline-Webhooks/1
  • Rispondi con uno stato 2xx entro 8 secondi, prima di qualsiasi lavoro lento. Qualsiasi altro stato, un reindirizzamento o un timeout conta come errore.
  • Ogni evento viene inviato una volta e mai ritentato. La sezione mostra Ultima consegna e Errori consecutivi.
  • Dopo 10 errori di fila, l'endpoint viene disattivato e il proprietario riceve un'email. Correggi il tuo server e premi Salva per riattivarlo.
  • Ogni tanto un evento arriva due volte o fuori ordine. Usa id per ignorare le ripetizioni e created per mettere gli eventi in ordine.

Verificare la firma#

Chiunque conosca il tuo indirizzo può inviarvi dati, quindi verifica ogni consegna prima di fidartene:

  1. Dividi l'intestazione X-MMO-Signature alla virgola in t e v1.
  2. Calcola un HMAC-SHA256 di t, un punto e il corpo grezzo della richiesta, con il tuo signing secret come chiave, scritto in esadecimale.
  3. Confronta il risultato con v1 usando un confronto a tempo costante.
  4. Rifiuta la consegna se t dista più di 5 minuti dall'ora attuale. t è in millisecondi.

Usa il corpo esattamente come è arrivato: analizzare il JSON e riscriverlo lo modifica, e la firma non corrisponde più.

Ruota il segreto sostituisce subito il secret e mostra quello nuovo per intero, una sola volta. Aggiorna il tuo server appena lo ruoti.

Eventi#

Evento Inviato quando
project.created Viene creato un progetto sul tuo account. Nell'app, tramite l'API o da un incorporamento.
project.deleted Un progetto viene eliminato definitivamente (spostarlo nel cestino non conta).
project.comment.added Qualcuno commenta un progetto, di solito il tuo cliente che risponde.
guest.project.created (Open Guest) Un ospite avvia un progetto dal tuo link o tramite l'API. Solo quando l'indirizzo email dell'ospite è noto.
guest.measurement.completed (Open Guest) Un ospite termina una misurazione e lascia i suoi dati di contatto.
budget.warning_reached (Open Guest) La spesa a consumo supera la tua soglia di avviso.
budget.limit_reached (Open Guest) La spesa a consumo raggiunge il tuo limite: ulteriori progetti ospite vengono rifiutati.
enterprise.user.created (Enterprise) Viene aggiunto un posto alla tua organizzazione, anche tramite single sign-on.

Hai ancora bisogno di aiuto?

Scrivi al nostro team di supporto e raccontaci cosa stavi cercando di fare. Gli screenshot aiutano.

Scrivi al supporto