A URL do endpoint precisa ser HTTPS pública.
http://, localhost e endereços de rede privada são rejeitados no momento em que você salva o endpoint (e checados de novo a cada entrega) — não é possível registrar um endpoint apontando para a sua máquina local ou para uma rede interna.O envelope
Todo evento chega no corpo da requisiçãoPOST nesse formato:
Tipos de evento
Um endpoint só recebe os eventos aos quais está inscrito.
Os eventos não distinguem a origem da mudança: uma escrita feita pela API com o escopo
appointments:write gera o mesmo evento que uma edição no aplicativo — inclusive para o endpoint do sistema que fez a escrita. Se o seu sistema escreve e também recebe webhooks, espere o eco das próprias escritas e trate-o de forma idempotente pelo id do agendamento em data.
Entrega pelo menos uma vez (at-least-once)
A entrega é pelo menos uma vez: o mesmo evento pode chegar mais de uma vez ao seu endpoint — por exemplo, se sua resposta demorar demais e a tentativa for considerada falha antes de você terminar de processá-la. Oid do envelope é estável entre essas reentregas.
Responda rápido, processe depois
Responda2xx em até 10 segundos. Se o processamento do evento (gravar no seu banco, disparar outras integrações) demorar mais que isso, enfileire o trabalho e responda 2xx imediatamente após validar a assinatura — processe de forma assíncrona depois.
Política de reentrega
Se seu endpoint não responder2xx, o ByDoctor tenta novamente seguindo esta escala:
1 min → 5 min → 30 min → 2 h → 6 h
Cada “falha” nessa contagem é uma entrega que já esgotou as 6 tentativas da escala acima (cerca de 8h36 de tentativas) — não uma única resposta ruim. Após 20 falhas consecutivas (ou seja, ~20 entregas seguidas totalmente esgotadas — uma indisponibilidade sustentada do seu receptor, não um erro pontual), o endpoint é desativado automaticamente e os administradores da clínica são notificados por e-mail. Um endpoint desativado não recebe novos eventos até ser reativado manualmente em Minha Clínica → API e Webhooks.
Evento de teste (ping)
Ao cadastrar ou editar um endpoint, use o botão de teste na interface do ByDoctor para disparar um eventoping — ele segue o mesmo envelope e a mesma assinatura de um evento real, mas com type: "ping" e um data fixo, não o formato de um agendamento:
data vazio como sinal de que é um ping — não é assim que ele se distingue; verifique o campo type do envelope. O ping é útil para validar que seu endpoint está no ar e verificando assinaturas corretamente antes de assinar eventos de produção.
Próximo passo
Verificação de assinatura
Valide que cada evento realmente veio do ByDoctor antes de confiar nele.