Segurança
Onde guardar a chave, como rotacionar e o que a Amivu garante.
Uma chave de API alcança a superfície inteira de uma organização — contatos, conversas e a capacidade de enviar mensagem em nome dela. Estas são as práticas que importam.
A chave
- Uma por integração. Revogar uma não afeta as outras, e é o que permite desligar um fornecedor sem parar o resto.
- Só os escopos necessários. Um agente que responde precisa de
conversations:reademessages:write— e não decontacts:write. - Nunca no navegador. Nem em aplicativo de celular. Não há ofuscação que resolva; quem abre o inspetor lê o valor.
- Nunca no repositório. Variável de ambiente ou cofre de segredos. Se entrou num commit, considere-a vazada mesmo depois de removida — o histórico fica.
- Teste com chave de teste. É a diferença entre um erro num sandbox e uma mensagem no WhatsApp de um cliente.
O endpoint de webhook
- Confira a assinatura sempre. Sem isso, qualquer pessoa que descubra o seu endereço injeta eventos falsos. Como conferir.
- Confira o timestamp junto. Um verificador que ignora o
taceita uma entrega capturada ontem. - HTTPS, sempre. A assinatura prova origem e integridade; ela não esconde o conteúdo. Endereço
http://é recusado no cadastro. - Não confie no corpo antes de conferir. A ordem é: assinatura, depois análise.
O que a Amivu garante
- Isolamento entre organizações no banco. Não é filtro de consulta: é política de linha, com uma credencial de banco que não pode ignorá-la. Uma chave de uma conta não alcança outra nem conhecendo o identificador.
- Segredos não recuperáveis. A chave de API é guardada como resumo criptográfico; nem nós conseguimos lê-la de volta.
- Segredo de webhook cifrado em repouso. Ele precisa ser recuperável — é o que você usa para conferir — e por isso é cifrado, não hasheado.
- Registro sem corpo. O registro de chamadas guarda método, rota, status, duração e chave, por 7 dias. Nunca corpo de requisição ou de resposta — eles carregam mensagem de cliente e telefone, e um registro é o lugar mais copiado de um sistema.
- Nada de credencial de provedor na resposta. Token da Meta, cookie de sessão pareada e segredo de aplicativo não atravessam a API pública.
O tenant vem da credencial, nunca do corpo
Não existe campo
organization_id em requisição nenhuma. A organização é derivada da chave — e é isso que impede a classe inteira de ataque em que alguém pede dado de outra conta.Se algo vazar
- Revogue a chave no painel. Vale na requisição seguinte.
- Crie a substituta e atualize a integração.
- Olhe o registro de chamadas filtrando por aquela chave. Ele mostra o que foi feito, quando e de qual endereço.
- Rotacione o segredo do webhook se ele estava no mesmo lugar.
Encontrou uma falha na própria API? Escreva para seguranca@amivu.com.br antes de divulgar.
Escrevemos sobre operação de atendimento, canais e IA no blog da Amivu.