POST /api/alertas
Cria um novo alerta para ser notificado quando placas específicas (ou quaisquer placas) são detectadas pelas câmeras.
Autenticação
Scope necessário: alerts:write
Inclua o header Authorization: Bearer <api-key> ou use cookie de sessão.
Requisição
POST /api/alertas
Content-Type: application/json
Headers
| Header | Obrigatório | Descrição |
|---|
Authorization | sim | Bearer pk_... (API key) ou cookie de sessão |
Content-Type | sim | application/json |
Body
| Campo | Tipo | Obrigatório | Padrão | Descrição |
|---|
name | string | sim | — | Nome do alerta |
description | string | não | "" | Descrição do alerta |
enabled | boolean | não | true | Alerta ativo |
plateMatchMode | "any" | "specific" | "allowlist" | não | "specific" | Modo de correspondência |
plates | string[] | não | [] | Lista de placas para correspondência |
cameraScope | "all" | "specific" | não | "all" | Escopo de câmeras monitoradas |
cameraIds | string[] | não | [] | UUIDs das câmeras (quando cameraScope é "specific") |
scheduleEnabled | boolean | não | false | Ativar restrição de horário |
schedule.startTime | string | não | "00:00" | Horário de início (HH:mm) |
schedule.endTime | string | não | "23:59" | Horário de fim (HH:mm) |
schedule.daysOfWeek | string[] | não | [] | Dias: mon, tue, wed, thu, fri, sat, sun. Vazio = todos |
minConfidence | number | não | 0.5 | Confiança mínima para disparar (0-1) |
cooldownMinutes | number | não | 5 | Minutos entre disparos consecutivos |
notifications | array | não | [] | Canais de notificação |
Modos de correspondência (plateMatchMode)
| Modo | Comportamento | Quando usar |
|---|
any | Dispara para qualquer placa detectada | Monitoramento noturno, detecção de intrusão |
specific | Dispara apenas para placas na lista plates[] | Alerta de VIP, veículo procurado |
allowlist | Dispara para placas NÃO presentes na lista plates[] | Detecção de estranhos, controle de acesso |
Exemplo
curl -X POST "https://api.placaflow.com.br/api/alertas" \
-H "Authorization: Bearer pk_a1b2c3d4e5f6g7h8i9j0..." \
-H "Content-Type: application/json" \
-d '{
"name": "Intruso noturno",
"description": "Alerta para placas desconhecidas à noite",
"plateMatchMode": "allowlist",
"plates": ["ABC1D23", "XYZ9K87", "DEF4G56"],
"cameraScope": "all",
"scheduleEnabled": true,
"schedule": {
"startTime": "22:00",
"endTime": "06:00",
"daysOfWeek": ["mon", "tue", "wed", "thu", "fri"]
},
"minConfidence": 0.8,
"cooldownMinutes": 5,
"notifications": [
{ "type": "email", "addresses": ["seguranca@empresa.com"] },
{ "type": "webhook", "url": "https://api.example.com/hook" }
]
}'
Resposta 201
{
"alert": {
"id": "a1b2c3d4-5678-9abc-def0-123456789abc",
"userId": "c3a1e902-4f5b-4b8a-9c6d-1a2b3c4d5e6f",
"createdAt": "2026-03-22T16:00:00.000Z",
"updatedAt": "2026-03-22T16:00:00.000Z",
"name": "Intruso noturno",
"description": "Alerta para placas desconhecidas à noite",
"enabled": true,
"plateMatchMode": "allowlist",
"plates": ["ABC1D23", "XYZ9K87", "DEF4G56"],
"cameraScope": "all",
"cameraIds": [],
"scheduleEnabled": true,
"schedule": {
"startTime": "22:00",
"endTime": "06:00",
"daysOfWeek": ["mon", "tue", "wed", "thu", "fri"]
},
"minConfidence": 0.8,
"cooldownMinutes": 5,
"notifications": [
{ "type": "email", "addresses": ["seguranca@empresa.com"] },
{ "type": "webhook", "url": "https://api.example.com/hook" }
],
"lastTriggeredAt": null,
"triggerCount": 0
}
}
Campos da resposta
| Campo | Tipo | Descrição |
|---|
id | string | UUID único do alerta |
userId | string | UUID do proprietário |
createdAt | string | Data de criação ISO 8601 |
updatedAt | string | Data da última atualização ISO 8601 |
name | string | Nome do alerta |
description | string | Descrição |
enabled | boolean | Alerta ativo |
plateMatchMode | string | Modo de correspondência |
plates | string[] | Lista de placas |
cameraScope | string | Escopo de câmeras |
cameraIds | string[] | UUIDs das câmeras |
scheduleEnabled | boolean | Restrição de horário ativa |
schedule | object | Configuração de horário {startTime, endTime, daysOfWeek[]} |
minConfidence | number | Confiança mínima (0-1) |
cooldownMinutes | number | Minutos entre disparos |
notifications | array | Canais de notificação |
lastTriggeredAt | string? | Sempre null na criação |
triggerCount | number | Sempre 0 na criação |
Erros
| Código | Descrição |
|---|
| 400 | Campo name obrigatório ausente ou dados inválidos |
| 401 | Não autenticado ou API key inválida |
| 403 | API key não possui scope alerts:write |