Measure MapAjuda
Abrir o Measure Map

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.

A secção API REST da página Developer

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}/mmp devolve o mesmo ficheiro .mmp que 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/token com 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/new ocupa um lugar, tal como um convite, e dá-lhe a função predefinida da sua organização.
  • Um token de POST /auth/{uid}/login abre 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.

  1. Escolha Produção ou Testes.
  2. Escolha um Endpoint, como "Listar todos os projetos" ou "Obter medições".
  3. 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.
  4. 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.

Experimentar a API com um pedido enviado e a sua resposta JSON

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Webhooks com um endpoint e os eventos que recebe

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 id para ignorar as repetições e created para 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:

  1. Divida o cabeçalho X-MMO-Signature na vírgula, em t e v1.
  2. 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.
  3. Compare o resultado com v1 usando uma comparação em tempo constante.
  4. Rejeite a entrega se t estiver a mais de 5 minutos da hora atual. t está 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.

Enviar e-mail ao suporte