adm.hospital Falar com a gente

API pública e webhooks

Integre o adm.hospital ao ERP, ao HIS ou à folha sem projeto: uma chave lê a escala e o fechamento; um webhook assinado avisa quando algo acontece.

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 a qualquer momento. Toda chamada leva a chave no header:

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.

Endpoints

Exemplo de item de /shifts:

{
  "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"
}

Webhooks

Também em Configurações → Integrações, registre a URL do seu lado e receba um POST a cada evento. O segredo do endpoint aparece uma única vez, na criação. Eventos de hoje:

O corpo é enxuto de propósito — ids, datas e valores do evento. O detalhe você busca na API com a sua chave:

{
  "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 POST leva o header X-ADM-Signature-256: o HMAC-SHA256 do corpo cru, com o segredo do endpoint. Rejeite qualquer 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

A entrega é at-least-once e sem fila: esperamos a sua URL responder 200 em até 10 segundos e registramos o resultado (a tela de Integrações mostra o último status de cada endpoint). Se o seu lado estava fora do ar, o evento não é reenviado — por isso o desenho certo é tratar o webhook como aviso e confirmar o estado pela API, que é a fonte.

Boas-vindas

Vai integrar e quer um par técnico do nosso lado? Fale com a gente — a página de segurança responde o questionário do seu TI.

Conhecer o produto