Pular para o conteúdo principal
Docs vNextAPI
Versão: Next

Webhooks

Webhooks permitem integrar a SauBit com prontuários (HIS/EMR) e automações internas do hospital.

Quando configurado, a SauBit envia eventos via POST para um endpoint do hospital (ex: https://hospital.exemplo.com/webhooks/events).

Como configurar

O cadastro do webhook é feito no Admin (organização):

  • URL do destino
  • Eventos desejados (ou todos)
  • Secret (gerado e exibido uma única vez)

Headers enviados

  • X-SauBit-Event: tipo do evento
  • X-SauBit-Timestamp: epoch seconds
  • X-SauBit-Signature: assinatura HMAC

Assinatura (HMAC)

O corpo é assinado com:

HMAC_SHA256(secret, "{timestamp}.{raw_body}")

Formato do header:

X-SauBit-Signature: sha256=<hex>

Eventos

analysis.completed

Disparado quando uma análise termina (check ou recheck).

Payload:

{
"event": "analysis.completed",
"data": {
"analysis_id": "uuid",
"endpoint": "/interactions/check",
"cached": false,
"recheck_of": "uuid-opcional"
}
}

chat.message

Disparado quando o hospital envia uma mensagem no chat.

Payload:

{
"event": "chat.message",
"data": {
"session_id": "abc123",
"analysis_id": "uuid-opcional"
}
}

Exemplo de verificação (Node.js)

import crypto from "crypto";

export function verifySauBitWebhook(req, secret) {
const timestamp = req.headers["x-saubit-timestamp"];
const signature = req.headers["x-saubit-signature"];
const rawBody = req.rawBody; // corpo bruto (bytes/string)
const msg = `${timestamp}.${rawBody}`;
const digest = crypto.createHmac("sha256", secret).update(msg).digest("hex");
const expected = `sha256=${digest}`;
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}

Exemplo de verificação (Python)

import hmac
import hashlib

def verify_saubit(signature: str, timestamp: str, raw_body: bytes, secret: str) -> bool:
msg = timestamp.encode() + b"." + raw_body
digest = hmac.new(secret.encode(), msg, hashlib.sha256).hexdigest()
expected = f"sha256={digest}"
return hmac.compare_digest(signature, expected)