Cada webhook tem o headerDocumentation Index
Fetch the complete documentation index at: https://docs.mivicall.com/llms.txt
Use this file to discover all available pages before exploring further.
X-Mivicall-Signature no formato:
té o timestamp Unix em segundos (quando enviámos)v1é o HMAC-SHA256 hex de{t}.{rawBody}usando o webhook secret
Algoritmo
Construir payload
payload = {timestamp}.{rawBody} (note o ponto separador, e usar raw bytes do body, não JSON re-stringified).Implementações
Erros comuns
Receber 'invalid signature' mesmo com código aparentemente correcto
Receber 'invalid signature' mesmo com código aparentemente correcto
Quase sempre é por re-stringification do JSON. Se o vosso framework parseia o body antes da verificação, o re-stringify pode reordenar chaves ou mudar whitespace. Solução: usar raw body bytes, sem parsing intermédio. Express:
express.raw(). FastAPI: await request.body(). Spring: @RequestBody String.Tempo dessincronizado entre servidores
Tempo dessincronizado entre servidores
O verify rejeita se diff > 5 min. Causa #1 é clock skew. Verifiquem com
ntpdate ou systemd-timesyncd. Se o vosso servidor está sempre 10 min adiantado, todos os webhooks vão falhar.Secret errado ou rotado
Secret errado ou rotado
Quando a clínica rotaciona o webhook secret no dashboard, têm 24h para actualizar — durante esse período aceitamos signatures de ambas as keys.