Webhooks

A CATDI pode notificar sistemas externos automaticamente quando eventos significativos ocorrem na plataforma.

Envelope do payload

{
  "id": "9c3b6f2e-....-....-....-............",
  "type": "enrollment.created",
  "version": 1,
  "occurred_at": "2026-07-26T10:15:00+00:00",
  "payload": { "...": "dados específicos do evento" }
}

id é estável em todas as tentativas de reenvio do mesmo evento — use-o para deduplicar. O payload é gerado uma única vez e nunca regenerado entre tentativas, pelo que uma assinatura calculada uma vez é válida para todas as tentativas dessa entrega.

Verificação de assinatura

X-CATDI-SignatureHMAC-SHA256 (hex) do corpo do pedido, usando o segredo do seu endpoint
X-CATDI-EventO tipo do evento
X-CATDI-VersionA versão do envelope
X-CATDI-Event-IdO identificador do evento

Calcule hash_hmac('sha256', $corpo, $segredo) e compare-o (em tempo constante) com X-CATDI-Signature — sobre os bytes exatos do corpo do pedido, não uma cópia reserializada.

Reenvio

Uma entrega que não recebe uma resposta 2xx é reenviada automaticamente — 5 tentativas no total, com atraso crescente (10s, 60s, 5m, 15m, 1h). Após todas as tentativas se esgotarem, a entrega fica permanentemente marcada como falhada e não é reenviada novamente.

Eventos Disponíveis
Nova matrícula Um estudante é matriculado numa turma. enrollment.created
Matrícula concluída Uma matrícula é marcada como concluída ou desistência. enrollment.completed
Matrícula promovida da lista de espera Uma matrícula em lista de espera é promovida a confirmada. enrollment.promoted
Certificado emitido Um certificado de conclusão é emitido. certificate.issued
Curso publicado Um curso transita de não publicado para publicado. course.published
Curso arquivado Um curso transita para o estado arquivado. course.archived
Inscrições da turma abertas Uma turma transita para o estado de inscrições abertas. course_intake.registration_opened
Turma concluída Uma turma transita para o estado concluída. course_intake.completed
Turma cancelada Uma turma transita para o estado cancelada. course_intake.cancelled
Importação de candidaturas concluída Uma importação de candidaturas em lote (CSV) termina. course_application.imported
Exportação concluída Uma exportação em segundo plano (estudantes, matrículas ou candidaturas) termina. export.completed
Trabalho falhou Um trabalho em segundo plano (importação ou exportação) falha. job.failed
Alerta operacional enviado Um alerta operacional (agendamento falhado, fila estagnada, inatividade do agendador) é enviado aos administradores. alert.sent