recurso.acao — o nome não muda. Quando o conteúdo
de um evento mudar de forma incompatível, ele vira um tipo novo ou ganha uma
version nova; o que já existe continua chegando igual.
A mesma lista está em
GET /api/webhooks/event-types, com os campos de cada
tipo. Se você gera código a partir do contrato, leia de lá — a página e a rota
saem da mesma fonte.Como ler a coluna de estado
Ronda
patrol.completed
Uma varredura de ronda terminou e a folha está completa.
Emitido hoje · versão do conteúdo: 1
Dispara no fim da VARREDURA, não no fim da corrida da agenda: a corrida encerra por relógio e pode fechar com verificação ainda pendente. O evento aponta a varredura; a folha inteira sai da API de relatórios de ronda, com a sua chave.
patrol.digest_ready
O resumo do dia agrupando as varreduras foi montado.
Reservado — ainda sem emissor · versão do conteúdo: 1
IA e verificação
verification.completed
A verificação por IA terminou, com veredito qualquer.
Emitido hoje · versão do conteúdo: 1
Sai SEMPRE que a verificação termina, inclusive quando ela não viu nada (
label = none). É este o tipo que responde “a ronda rodou”.verification.person_detected
Uma pessoa foi detectada na cena.
Emitido hoje · versão do conteúdo: 1
O evento não carrega imagem. Busque o quadro pela API com a sua chave.
verification.vehicle_detected
Um veículo foi detectado na cena.
Emitido hoje · versão do conteúdo: 1
O evento não carrega imagem nem placa.
verification.obstruction_suspected
A cena parece obstruída (lente tapada, mira mexida).
Reservado — ainda sem emissor · versão do conteúdo: 1
Equipamento
device.offline
A câmera parou de responder.
Emitido hoje · versão do conteúdo: 1
A sonda é TCP na porta de vídeo e cobre câmera com endereço próprio. Câmera de nuvem P2P não tem endereço fixo e fica de fora — ausente é honesto, ‘offline’ seria mentira.
device.online
A câmera voltou a responder.
Emitido hoje · versão do conteúdo: 1
device.no_frame
A câmera responde no endereço, mas não entrega quadro.
Reservado — ainda sem emissor · versão do conteúdo: 1
Este é o evento que fecha o laço de manutenção: recebido, o seu sistema abre a ordem de serviço sozinho.
device.recorder_offline
O gravador (appliance ou DVR) parou de reportar.
Reservado — ainda sem emissor · versão do conteúdo: 1
device.recorder_online
O gravador voltou a reportar.
Reservado — ainda sem emissor · versão do conteúdo: 1
device.retention_below_contract
A retenção de gravação caiu abaixo do contratado.
Reservado — ainda sem emissor · versão do conteúdo: 1
Alarme
alarm.received
Um alarme entrou pelo canal de eventos.
Emitido hoje · versão do conteúdo: 1
Sai só na PRIMEIRA vez. Retransmissão do mesmo disparo é dedupada antes de virar evento — se ela também emitisse, o seu sistema abriria duas ocorrências para o mesmo alarme.
alarm.verified
A IA CONFIRMOU o alarme — viu alguma coisa na cena.
Emitido hoje · versão do conteúdo: 1
Só quando a IA confirma. A verificação que terminou sem ver nada sai como verification.completed e NÃO como este tipo — assine os dois se precisa saber que a varredura rodou.
Entrega de relatório
report.delivered
O relatório saiu para a lista de destinatários.
Emitido hoje · versão do conteúdo: 1
‘Entregue’ aqui é ‘o transporte aceitou’. Não é prova de que a pessoa recebeu — para isso existe report.opened.
report.opened
Alguém abriu o relatório pelo link assinado.
Emitido hoje · versão do conteúdo: 1
Sai UMA vez por relatório, na primeira abertura — recarregar a página não gera outro. É prova PARCIAL de entrega: a ausência do evento não prova que não chegou, porque quem lê o e-mail e não clica no link não gera evento nenhum. Não monte SLA de entrega em cima da ausência dele.
Serviço
webhook.test
Evento de teste, disparado por você no console.
Emitido hoje · versão do conteúdo: 1
Vai só para o endpoint em que você pediu, e nunca para os outros. É o único tipo que não descreve um fato do vídeo.
O que nenhum evento carrega
Nenhum tipo desta lista traz imagem, rosto, placa, nome, e-mail ou telefone. O evento aponta para o recurso (device_id, alarm_id, um link assinado com
prazo) e você busca o conteúdo pela API, com a sua chave — assim o acesso fica
registrado do seu lado e do nosso, e o corpo do webhook não vira um depósito de
dado pessoal no seu servidor de recepção.