API REST
Trabalhe com os seus projetos, pastas, produtos e membros a partir do seu próprio software, experimente pedidos na página Developer e receba webhooks quando algo acontece.
A API REST permite que o seu próprio software leia e altere o que está na sua conta do Measure Map Online: projetos e as suas medições, pastas, o catálogo de produtos e, no Enterprise, os membros da sua organização. Responde em JSON. A referência completa, com todos os campos e exemplos, é a documentação da API; esta página é a visão geral.
Para abrir a documentação a partir da aplicação, vá a Developer > API REST e prima Visualizar documentação.
URL base#
Todos os pedidos vão para:
https://api.measuremaponline.com/api/v2
Autenticação#
Envie a sua chave de API, tal como está, no cabeçalho Authorization de cada
pedido. Crie a chave na página Developer: consulte
chaves de API.
curl https://api.measuremaponline.com/api/v2/projects/YOUR_PROJECT_ID \
-H "Authorization: YOUR_API_KEY"
Cada pedido é verificado em função do acesso da chave (por exemplo, Projetos Ler), da sua subscrição e, num pedido enviado a partir de uma página web, das restrições de sites da chave. Guarde no seu servidor as chaves que podem alterar dados: consulte manter a sua chave segura.
Produção e testes#
Há um único URL base para os dois. É a chave que decide: uma chave de testes lê e escreve projetos, pastas e produtos de testes, que as chaves de produção nunca veem. Os membros são os mesmos nos dois, mas para iniciar sessão como um membro é preciso uma chave de produção. Os projetos de convidados criados com uma chave de testes nunca são faturados, e os projetos de testes não podem ser incorporados no seu site. Os tokens indicam o ambiente a que pertencem.
O que a API abrange#
| Grupo | Endpoints | Acesso necessário na chave |
|---|---|---|
| Tokens de início de sessão | POST /auth/token, POST /auth/iframe/token |
Mapas incorporados |
| Projetos e pastas | Listar os projetos (todos, ou página a página, até 200 por página) e as pastas de uma pessoa; obter um projeto, as suas medições (/projects/{pid}/data), os seus comentários ou o seu ficheiro .mmp (/projects/{pid}/mmp); obter uma pasta; criar, atualizar e eliminar projetos e pastas |
Projetos: Ler para ler, Ler e alterar para alterar |
| Produtos | GET /products, GET /products/{id}, criar, atualizar e arquivar com DELETE /products/{id} |
Produtos: Ler ou Ler e alterar |
| Membros (Enterprise) | GET /users, GET /users/{uid}, POST /users/new, PUT /users/{uid}, DELETE /users/{uid} |
Usuários: Ler ou Ler e alterar |
| Iniciar sessão como um membro (Enterprise) | POST /auth/{uid}/login devolve um token de início de sessão para um membro da sua organização |
Usuários: Ler e alterar |
Algumas coisas a saber:
- Uma chave chega aos projetos da sua própria conta e, no Enterprise, aos dos membros da organização.
- Eliminar um projeto ou uma pasta através da API é definitivo: nada vai para a Reciclagem. Uma pasta leva consigo as pastas e os projetos que contém e que pertencem à sua conta ou aos seus membros.
- Nas medições de um projeto, uma forma lista os seus produtos em
productIds, por ordem;productIdé o primeiro deles. /projects/{pid}/mmpdevolve o mesmo ficheiro.mmpque a aplicação exporta. O seu esquema está publicado em github.com/blueblinkone/mmp-validator. Os elementos novos só são acrescentados como opcionais, por isso um leitor escrito para um ficheiro mais antigo continua a funcionar.- No Open Guest, um projeto criado através da API com o nível de acesso Open Guest conta para a sua utilização e orçamento do Open Guest, como um iniciado a partir da sua ligação de convidado.
- No Open Guest, a secção Ligação de convidado tem o
guia API Open Guest, com código para o seu servidor e a sua página:
o seu servidor obtém um token de
POST /auth/tokencom a sua chave de produção e envia o visitante para um projeto novo só dele, com os seus dados já preenchidos. - Criar um membro com
POST /users/newocupa um lugar, tal como um convite, e dá-lhe a função predefinida da sua organização. - Um token de
POST /auth/{uid}/loginabre a conta desse membro, por isso requer uma chave que possa alterar membros, nunca a chave das suas incorporações. Não é dado para um Administrador nem para um Gestor, nem com uma chave de testes. - Os produtos nunca são eliminados através da API, só arquivados, e o preço de custo de um produto nunca é devolvido.
- As parcelas cadastrais não fazem parte da API.
Respostas e erros#
Um pedido bem-sucedido responde com o estado 200 e JSON (a exportação .mmp
responde com XML). Um pedido falhado responde com um estado de erro e um corpo
como:
{"errorCode": "insufficient_scope", "errorMessage": "This API key does not have the scope required for this endpoint"}
| Estado | errorCode |
O que verificar |
|---|---|---|
| 400 | invalid_body, invalid_uid, invalid_project_id, pagination_invalid_page_number, pagination_invalid_page_limit |
Falta um valor do pedido ou não é aceite, como o page e o limit de uma lista por páginas. |
| 401 | unauthorized_action |
O pedido foi enviado a partir de uma página web de um site que a chave não permite, ou o elemento não está na sua conta nem na dos seus membros. |
| 402 | budget_limit_reached |
Open Guest: o limite do orçamento foi atingido, por isso não há mais projetos de convidados neste período. |
| 403 | invalid_api_key |
Não foi enviada nenhuma chave no cabeçalho Authorization, ou a chave é desconhecida, foi revogada ou ultrapassou as suas 24 horas depois de ter sido substituída. |
| 403 | api_key_suspended |
O acesso à API da sua conta foi suspenso. Contacte o suporte. |
| 403 | subscription_expired, invalid_subscription |
A subscrição não está ativa, ou o seu plano não tem API. |
| 403 | insufficient_scope |
A chave não tem o acesso de que este endpoint precisa. |
| 403 | scope_not_in_plan |
O seu plano não inclui este endpoint, por exemplo os membros no Open Guest. |
| 404 | not_found, project_not_found, user_not_found |
O elemento não existe, ou a pessoa não é membro da sua organização. |
| 409 | enterprise_add_users_limit |
Ao criar um membro: todos os lugares estão ocupados. |
| 429 | too_many_requests |
Mais de 600 tokens numa hora. Aguarde um pouco e tente novamente. |
| 500 | server_error |
Não foi possível concluir o pedido. Verifique os IDs que enviou, tente novamente e contacte o suporte se persistir. |
Experimentar a API na página Developer#
Developer > Experimentar a API envia pedidos reais com a sua chave e mostra exatamente o que é devolvido.
- Escolha Produção ou Testes.
- Escolha um Endpoint, como "Listar todos os projetos" ou "Obter medições".
- Preencha os seus parâmetros. Um projeto ou um produto escolhe-se pelo nome entre os que a chave pode ler; quando é preciso uma pessoa, a sua própria conta é preenchida por si.
- Prima Enviar pedido. O estado e a resposta aparecem por baixo.
Só são oferecidos pedidos de leitura, por isso experimentar não altera nada, e estes pedidos não contam para a sua utilização. Se a sua chave não tiver o acesso de que um endpoint precisa, a página avisa-o de que vai responder 403.
Webhooks#
Um webhook avisa o seu servidor quando algo acontece, tal como os e-mails de notificação o avisam a si. Os webhooks fazem parte dos planos Enterprise e Open Guest.
Configurar um webhook#
Em Developer > Webhooks:
- Escreva o seu URL do endpoint: um endereço
https://na internet. Os endereços em redes privadas são recusados, e isto volta a ser verificado antes de cada entrega. - Marque os Eventos que quer (consulte eventos). Um endpoint novo começa com os eventos que o seu plano envia, e pelo menos um tem de estar marcado.
- Prima Salvar. Na primeira vez, a página mostra o seu Segredo de assinatura por inteiro. Copie-o nesse momento: depois disso só são mostrados os últimos caracteres.
- Prima Enviar evento de teste e escolha um evento.
Um teste envia uma amostra desse evento, com valores inventados e
"test": true nos seus data, para o endpoint guardado, mesmo quando o evento
não está marcado ou o endpoint está desativado. Para parar todas as
entregas, prima Remover: o endpoint e o
seu segredo são eliminados.
Por baixo das definições, a Referência de webhooks tem o que precisa para escrever o lado que recebe: os cabeçalhos e o corpo, código que verifica a assinatura em Node.js, Python e PHP, e dados de exemplo para cada evento.
O que o seu servidor recebe#
Cada evento é um POST para o seu endpoint, com um corpo JSON:
{"id": "evt_3f9a1c2b7d4e5f60718293a4", "type": "project.created", "created": 1790000000000, "data": { ... }}
id é único para cada evento, created é o momento em que aconteceu, em
milissegundos desde 1 de janeiro de 1970 (UTC), e o que data contém depende
do evento. O pedido tem também estes cabeçalhos:
| Cabeçalho | Valor |
|---|---|
X-MMO-Event |
O nome do evento, tal como type no corpo. |
X-MMO-Delivery |
O id do evento. |
X-MMO-Signature |
t=<milliseconds>,v1=<hex>: quando a entrega foi assinada, e a sua assinatura. |
User-Agent |
MeasureMapOnline-Webhooks/1 |
- Responda com um estado 2xx no prazo de 8 segundos, antes de qualquer trabalho demorado. Qualquer outro estado, um redirecionamento ou um tempo esgotado conta como falha.
- Cada evento é enviado uma vez e nunca é repetido. A secção mostra o Último envio e as Falhas consecutivas.
- Depois de 10 falhas seguidas, o endpoint é desativado e o proprietário recebe um e-mail. Corrija o seu servidor e prima Salvar para o voltar a ativar.
- De vez em quando, um evento chega duas vezes ou fora de ordem. Use
idpara ignorar as repetições ecreatedpara pôr os eventos por ordem.
Verificar a assinatura#
Qualquer pessoa que conheça o seu endereço pode enviar-lhe pedidos, por isso verifique cada entrega antes de confiar nela:
- Divida o cabeçalho
X-MMO-Signaturena vírgula, emtev1. - Calcule um HMAC-SHA256 de
t, um ponto final e o corpo do pedido em bruto, com o seu segredo de assinatura como chave, escrito em hexadecimal. - Compare o resultado com
v1usando uma comparação em tempo constante. - Rejeite a entrega se
testiver a mais de 5 minutos da hora atual.testá em milissegundos.
Use o corpo exatamente como chegou: analisar o JSON e voltar a escrevê-lo altera-o, e a assinatura deixa de corresponder.
Rodar segredo substitui o segredo de imediato e mostra o novo por inteiro, uma vez. Atualize o seu servidor assim que o rodar.
Eventos#
| Evento | Enviado quando |
|---|---|
project.created |
É criado um projeto na sua conta. Na aplicação, através da API ou a partir de uma incorporação. |
project.deleted |
Um projeto é eliminado definitivamente (movê-lo para o lixo não conta). |
project.comment.added |
Alguém comenta num projeto — normalmente o seu cliente a responder. |
guest.project.created (Convidado Aberto) |
Um convidado inicia um projeto a partir do seu link ou através da API. Só quando o endereço de e-mail do convidado é conhecido. |
guest.measurement.completed (Convidado Aberto) |
Um convidado termina uma medição e deixa os seus contactos. |
budget.warning_reached (Convidado Aberto) |
A despesa medida ultrapassa o seu limiar de aviso. |
budget.limit_reached (Convidado Aberto) |
A despesa medida atinge o seu limite — novos projetos de convidado são recusados. |
enterprise.user.created (Empresa) |
É adicionado um lugar à sua organização, incluindo por início de sessão único. |
Ainda precisa de ajuda?
Escreva à nossa equipa de suporte e diga-nos o que estava a tentar fazer. As capturas de ecrã ajudam.