Skip to main content
A API pública do muveya é uma interface REST sob /v1 para integrações no lado do servidor: um ERP ou sistema de compras, uma ferramenta de BI, uma planilha automatizada, um painel interno. Ela se autentica com uma chave de API que pertence a uma única clínica odontológica e lê os mesmos dados com que sua equipe trabalha no console. A API é somente leitura, com uma exceção: POST /v1/analytics/exports, que pede ao muveya para gerar um arquivo CSV do resumo gerencial. Nada do que você chama em /v1 cria, altera ou exclui um pedido, uma caixa, um movimento de estoque, um membro ou um insumo do catálogo.

URL base

Todos os caminhos públicos começam com /v1, então sua primeira chamada é https://api.muveya.com/v1/me.

Autenticação em uma linha

A chave é enviada como token bearer em cada requisição. O servidor a vincula a uma clínica odontológica: nenhum caminho, parâmetro ou cabeçalho indica uma clínica odontológica, então uma chave só consegue ler a sua. Veja Autenticação para saber como obter uma chave e protegê-la.

Termos do console e termos da API

O console e a API descrevem as mesmas coisas com palavras diferentes. Tenha as duas em mente ao relacionar os dados da API com o que as pessoas veem na tela.

O que /v1 cobre

Cada escopo é explicado em Escopos. A requisição e a resposta de cada operação estão documentadas no grupo Endpoints desta aba.

O que /v1 não faz

  • Não cria nem altera nada na sua operação: pedidos, aprovações, separação, despacho, entrega, recebimento, recebimentos de estoque, consumo, transferências, correções, contagens, alterações de catálogo e mudanças na equipe são feitos no console, e algumas tarefas de estoque pelo WhatsApp.
  • Não cria nem revoga chaves de API. Veja Autenticação.
  • Não envia eventos para os seus sistemas. Ainda não há webhooks; veja Webhooks para saber como consultar periodicamente.
  • Nunca retorna totais de pedidos nem referências de pacientes (veja Dados omitidos).

Convenções

JSON em tudo. As respostas de sucesso são application/json. Os erros são documentos application/problem+json com um code estável (veja Erros). Os nomes dos campos são em inglês, no formato camelCase, e os valores de enumerações são palavras em inglês em minúsculas, como pending_approval; as chaves de métricas são em maiúsculas, como LOW_STOCK. Nenhum deles muda com o idioma. Ids opacos. Todo id é uma string. Compare ids como texto e nunca os interprete nem os construa. Um id que pertence a outra clínica odontológica se comporta exatamente como um id inexistente: a resposta é 404. Ausente, não null. Um campo opcional sem valor, ou que sua chave não pode ver, fica fora da resposta. Ele não é enviado como null nem como 0. As exceções são três campos de análise: value (de uma métrica ou de um número do resumo) e averageHours (de uma etapa do tempo de ciclo) são null quando não houve amostra para medir, e maxAgeHours é null na faixa aberta do acúmulo de aprovações. Datas em UTC. Datas e horários são strings ISO 8601 em UTC com o sufixo Z, por exemplo 2026-09-15T13:45:00.000Z. Os relatórios de análise informam "timezone": "UTC". As janelas de tempo que você envia (from, to) também são ISO 8601. Dinheiro em unidades menores. Um valor monetário é um inteiro na unidade menor da sua moeda (centavos para USD) e sempre vem com currency, um código ISO 4217: "cost": 1250, "currency": "USD" significa 12,50 USD. Dinheiro aparece apenas nos campos de custo do catálogo e no unitCost das linhas de pedido, e só para uma chave com catalog.cost:read. Quantidades na unidade de medida do insumo. Quantidades como onHand, requestedQty ou quantityDelta são inteiros contados na unitOfMeasure do insumo (unit, box, milliliter etc.). A API nunca soma quantidades de insumos ou unidades de medida diferentes. Idioma. Envie Accept-Language com en, es ou pt (o inglês é o padrão). Ele muda apenas o texto destinado a pessoas: o title e o detail de um erro, a label de cada número do resumo gerencial e os rótulos dentro de uma exportação CSV. Chaves, códigos, valores de enumerações, números e ids são iguais em todos os idiomas. Ids de requisição. Toda resposta traz o cabeçalho x-request-id. Se você enviar seu próprio X-Request-Id com um UUID, o muveya o reutiliza; caso contrário, gera um. Os corpos de erro o repetem como requestId. Registre-o no seu sistema e inclua-o quando escrever para team@muveya.com. Listas. Toda lista responde { "data": [...], "hasMore": false }, mais nextCursor quando há outra página. Veja Paginação. Limites de uso. Cada chave tem seu próprio orçamento de requisições e cada resposta o informa em cabeçalhos. Veja Limites de uso. Estabilidade. Dentro de /v1, as mudanças são aditivas. Veja Versionamento e estabilidade e as novidades.

Dados omitidos

O servidor remove os dados que sua chave não pode ver antes de montar a resposta. Os campos ficam ausentes, nunca mascarados. Uma chave de API não é um membro da equipe e não é limitada pelo acesso a unidades: ela lê todas as unidades e depósitos da sua clínica odontológica dentro dos seus escopos. Dê a cada chave apenas os escopos de que a integração precisa.

Como esta referência está organizada

  • Visão geral (estas páginas): autenticação, guia rápido, escopos, paginação, limites de uso, erros, versionamento, exportações e webhooks.
  • Endpoints: uma página por operação, gerada a partir do contrato OpenAPI do muveya, no seu idioma. Cada página mostra os parâmetros, o esquema de resposta, os erros possíveis e exemplos de requisição em cURL, JavaScript e Python. O construtor de requisições dessas páginas apenas prepara uma requisição para você copiar: ele nunca a envia e nunca guarda sua chave.
O servidor MCP em https://api.muveya.com/mcp usa login e autorização com OAuth, para assistentes de IA. Veja Servidor MCP.

Autenticação

Obtenha uma chave, envie-a e mantenha-a no seu servidor.

Guia rápido

Suas primeiras chamadas com cURL, JavaScript e Python.

Escopos

O que cada escopo permite ler.

Erros

O documento de problema e todos os códigos de erro.