Autenticação
A direção do hospital gera a chave em Configurações → Integrações, dentro do produto. A chave aparece uma única vez (guardamos só o hash) e pode ser revogada quando quiser. Toda chamada leva a chave no cabeçalho:
curl -H "X-API-Key: admk_..."
"https://admhospital.com.br/public/v1/shifts?from=2026-09-01&to=2026-09-30"
A API é somente leitura e cada chave enxerga um hospital. Sem chave válida, tudo responde 401.
Endereços da API
GET /public/v1/shifts?from=AAAA-MM-DD&to=AAAA-MM-DD: a escala do período, com horário, setor, situação, profissional (nome e registro no conselho), valor, situação do pagamento e ponto. As datas seguem o fuso do hospital.GET /public/v1/closing/AAAA-MM: o fechamento do mês, com a mesma conta da tela de fechamento: totais por profissional (plantões, horas, valor), furos e pontos pendentes de revisão.GET /public/v1/sectors: os setores do hospital, para casar com o cadastro do seu lado.
Exemplo de item de /shifts (dados de exemplo):
{
"id": "5f0c…",
"starts_at": "2026-09-12T22:00:00Z",
"ends_at": "2026-09-13T10:00:00Z",
"status": "completed",
"sector": "UTI Adulto",
"professional": {
"id": "a3b1…",
"name": "Ana Souza",
"registration_number": "123456",
"registration_uf": "SP"
},
"value": "1800.00",
"payment_status": "pending",
"checkin_at": "2026-09-12T21:52:11Z",
"checkout_at": "2026-09-13T10:04:37Z"
}
Avisos automáticos (webhooks)
Também em Configurações → Integrações, registre o endereço do seu lado e receba um aviso (POST) a cada evento. O segredo do endereço aparece uma única vez, na criação. Eventos de hoje:
shift.filled: um plantão foi preenchido (aceite do profissional ou escala da coordenação);shift.completed: um plantão foi concluído (ponto fechado);closing.ready: o fechamento do mês anterior ficou pronto, com os totais;ping: o teste do botão “Testar” da tela.
{
"event": "shift.completed",
"hospital_id": "7c9e…",
"occurred_at": "2026-09-13T10:04:38Z",
"data": { "shift_id": "5f0c…", "starts_at": "…", "ends_at": "…", "value": "1800.00" }
}
Assinatura
Todo aviso leva o cabeçalho X-ADM-Signature-256: o HMAC-SHA256 do corpo, com o segredo do endereço. Rejeite a entrega cuja assinatura não bata:
import hashlib, hmac
def assinatura_confere(segredo: str, corpo: bytes, header: str) -> bool:
esperado = "sha256=" + hmac.new(
segredo.encode(), corpo, hashlib.sha256
).hexdigest()
return hmac.compare_digest(esperado, header)
Garantias de entrega
Esperamos o seu endereço responder 200 em até 10 segundos e registramos o resultado (a tela de Integrações mostra o último status). Se o seu lado estava fora do ar, o aviso não é reenviado. Por isso, trate o webhook como aviso e confirme o estado pela API, que é a fonte.
Precisa de um par técnico?
Fale com a gente pelo WhatsApp. O questionário de segurança do seu TI tem as respostas na página de segurança.
