recognition.created
Disparado sempre que uma câmera detecta e reconhece uma placa veicular.
Quando dispara
- Uma câmera ativa processa um frame contendo uma placa legível
- A confiança do reconhecimento é igual ou superior à confiança mínima configurada na câmera
- O reconhecimento é salvo no banco de dados
Este é o evento mais frequente — dispara para cada placa detectada por cada câmera.
Payload
{
"event": "recognition.created",
"timestamp": "2026-03-22T14:30:00.000Z",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"plate": "ABC1D23",
"confidence": 0.96,
"cameraId": "7012e192-5005-43b6-978c-7e304b3676a6",
"cameraName": "Entrada principal",
"timestamp": "2026-03-22T14:30:00.000Z",
"photoUrl": "frames/7012e192/2026-03-22/photo.jpg",
"cropUrl": "frames/7012e192/2026-03-22/crop.jpg",
"plateCoordinates": {
"x": 622,
"y": 301,
"width": 429,
"height": 80
}
}
}
Campos
| Campo | Tipo | Descrição |
|---|---|---|
data.id | string | ID único do reconhecimento |
data.plate | string | Texto da placa (sempre uppercase) |
data.confidence | number | Confiança entre 0 e 1 |
data.cameraId | string | UUID da câmera |
data.cameraName | string | Nome da câmera no dashboard |
data.timestamp | string | ISO 8601 com timezone |
data.photoUrl | string? | Chave S3 do frame completo |
data.cropUrl | string? | Chave S3 do recorte da placa |
data.plateCoordinates | object? | Bounding box: x, y, width, height em pixels |
Dica
Os campos photoUrl e cropUrl são chaves S3 internas — não são URLs públicas. Para acessar as imagens, use a API GET /api/recognitions/:id que retorna URLs presignadas.
Exemplo de uso
Registro de entrada em estacionamento
app.post('/webhook', (req, res) => {
const { plate, cameraName, timestamp } = req.body.data;
if (cameraName === 'Entrada') {
db.registerEntry(plate, timestamp);
}
if (cameraName === 'Saída') {
const entry = db.getEntry(plate);
const minutes = calculateMinutes(entry.timestamp, timestamp);
processExit(plate, minutes);
}
res.json({ ok: true });
});
Filtrar por confiança
app.post('/webhook', (req, res) => {
const { plate, confidence } = req.body.data;
// Ignorar reconhecimentos com baixa confiança
if (confidence < 0.85) {
return res.json({ action: 'ignored' });
}
processPlate(plate);
res.json({ ok: true });
});
Volume esperado
Este evento pode gerar alto volume dependendo do tráfego de veículos. Para uma câmera em estacionamento movimentado, espere 50-200 eventos por hora.
Atenção
Se você só precisa ser notificado para placas específicas ou em horários determinados, use alertas em vez de processar todos os recognition.created. O evento alert.triggered já faz essa filtragem.