Os sistemas da sua empresa leem e alteram contatos, conversas, pedidos, agendamentos, o catálogo e a base de conhecimento pela API, e recebem os eventos da organização por webhooks. As chaves e os webhooks são criados em Integrações, no painel da organização.
Autenticação
Envie a chave de API no cabeçalho Authorization de cada requisição. A organização é a da chave, e a chave age em nome do membro que a criou enquanto ele fizer parte da organização. Chaves expiradas ou revogadas são recusadas.
Authorization: Bearer vumi_live_…
Todas as rotas ficam em /api/business/v1.
Permissões
Cada operação exige uma permissão da chave; sem ela, a resposta é 403 com o código API_KEY_SCOPE_MISSING.
Permissão
O que permite
contacts:read
Ler contatos, com seus campos e etiquetas
contacts:write
Criar e alterar contatos, suas etiquetas e campos, e apagar os dados de um contato
conversations:read
Ler conversas e suas mensagens
conversations:write
Assumir, devolver ao robô, encerrar e mudar o setor de conversas
messages:send
Enviar textos, mídias e modelos aos contatos
orders:read
Ler pedidos
orders:write
Criar pedidos e mudar seu status
payments:read
Ler cobranças
bookings:read
Ler agendamentos
bookings:write
Criar e cancelar agendamentos
catalog:write
Cadastrar produtos e variações por SKU e ajustar o estoque
coupons:read
Consultar cupons de desconto
coupons:write
Cadastrar e alterar cupons de desconto
knowledge:write
Cadastrar perguntas frequentes e textos na base de conhecimento
webhooks:manage
Gerenciar os webhooks da organização
Paginação
As listas aceitam limit (quantos itens por página) e cursor (onde continuar) e respondem com os itens em data, o cursor da próxima página em nextCursor (null na última) e o total filtrado em total.
Toda escrita aceita o cabeçalho Idempotency-Key. Repetir a mesma requisição com a mesma chave em até um dia devolve a primeira resposta, sem repetir a operação; a mesma chave com outra requisição é recusada.
Cada chave tem um limite de requisições por minuto, que depende do plano. Acima dele, a resposta é 429 com o cabeçalho Retry-After, em segundos.
Erros
Os erros respondem com um código estável, nunca com um texto para exibir; message é só uma descrição técnica e metadata traz os valores de cada código. Os principais:
X-Webhook-ID: o ID do evento, igual em todas as tentativas e reenvios, para descartar repetições;
X-Webhook-Timestamp: o horário da tentativa em segundos Unix, para recusar entregas antigas;
X-Signature-256: sha256= seguido do HMAC-SHA256 em hexadecimal, com o segredo do webhook, de ${timestamp}.${body} sobre os bytes exatos recebidos.
Verifique a assinatura antes de usar o evento: calcule-a com o segredo do webhook (whsec_…) sobre os bytes exatos do corpo, antes de interpretar o JSON, compare em tempo constante e recuse horários com mais de cinco minutos de diferença. Em Node.js:
Responda com qualquer status 2xx. Outras respostas e falhas de conexão são repetidas com intervalos crescentes por 24 horas; um webhook que falha todas as entregas por um dia é desativado, e os proprietários e administradores são avisados.
Eventos
Evento
Quando é enviado
message.received
Uma mensagem de um cliente chegou
message.sent
Uma mensagem foi enviada a um cliente
message.status_changed
Uma mensagem enviada foi entregue, lida ou falhou
conversation.handed_off
Uma conversa foi passada para a equipe
conversation.closed
Uma conversa foi encerrada
conversation.classified
Uma conversa encerrada foi classificada
contact.created
Um contato foi criado
contact.updated
Um contato foi alterado
lead.captured
O robô registrou um lead
lead.stage_changed
Um contato mudou de etapa no funil
flow.completed
Um cliente preencheu um formulário do WhatsApp
order.created
Um pedido foi criado
order.status_changed
O status de um pedido mudou
payment.confirmed
Um pagamento foi confirmado
quote.accepted
Um orçamento foi aceito
document.generated
Um documento foi gerado
booking.created
Um agendamento foi criado
booking.canceled
Um agendamento foi cancelado
booking.rescheduled
Um agendamento foi remarcado
Referência
Todas as operações, com a permissão que cada uma exige. O documento OpenAPI completo, com os campos de cada requisição e resposta, pode ser importado em ferramentas como Postman ou Insomnia.