A Cfaz envia automaticamente os dados completos do paciente para a URL configurada.
Configuração disponível em:
Configurações → Integração → Webhook
Estrutura do Payload
Exemplo de requisição enviada pelo Cfaz ao webhook do cliente:
{
chave: "rombvxs5c7dsnu5fwrzm",
"data": {
"id": 123,
"nome": "João da Silva",
"data_nascimento": "1985-03-22",
"telefone": "(11) 99999-9999",
"email": "joao@email.com",
"cpf": "123.456.789-00",
"...": "Demais dados completos do paciente"
}
"event": "patient_datum.updated",
"timestamp": "2025-07-18T14:00:00Z",
}Cabeçalhos da Requisição
Cada requisição enviada pelo Cfaz inclui o cabeçalho x-signature-256, que contém um HMAC-SHA256 gerado a partir do corpo da requisição e do Token configurado no webhook.
"x-event-type": "delete", "x-signature-256": sha256=5c9a1e87b5b2c9d6d12abfa7c42b9a23e1fba1e80f29e6f4f417c48e33f96d2d, "authorization": "Bearer rombvxs5c7dsnu5fwrzm"
Validação da Requisição
Para garantir que os dados recebidos realmente vieram do Cfaz, o cliente deve validar a assinatura HMAC.
Exemplo de validaçãoconst { createHmac, timingSafeEqual } = require('crypto')
const express = require("express")
const bodyParser = require("body-parser")
const TOKEN = "SEU_TOKEN_CONFIGURADO_NO_CFAZ"
const app = express()
app.use(bodyParser.json())
function verificarHMAC(chaveSecreta, payload, hmacRecebido) {
if (!hmacRecebido || !payload) return false
const hmacLimpo = hmacRecebido.replace('sha256=', '')
const hmacEsperado = createHmac('sha256', chaveSecreta)
.update(payload, 'utf8')
.digest('hex')
try {
return timingSafeEqual(
Buffer.from(hmacLimpo, 'hex'),
Buffer.from(hmacEsperado, 'hex')
)
} catch {
return false
}
}
app.post("/webhook-test", (req, res) => {
const assinatura = req.headers["x-signature-256"]
const payload = JSON.stringify(req.body)
const valido = verificarHMAC(TOKEN, payload, assinatura)
if (!valido) {
return res.status(401).json({ error: "Assinatura inválida" })
}
console.log("Webhook válido recebido:", req.body)
res.status(200).json({ message: "Dados recebidos com sucesso!" })
})
app.listen(4000, () => {
console.log("Servidor rodando na porta 4000")
})Este artigo foi útil?
Que bom!
Obrigado pelo seu feedback
Desculpe! Não conseguimos ajudar você
Obrigado pelo seu feedback
Feedback enviado
Agradecemos seu esforço e tentaremos corrigir o artigo