Câmeras
Gerencie câmeras conectadas à plataforma.
Scopes: cameras:read (listar, snapshot) · cameras:write (criar, atualizar, excluir)
Listar câmeras
GET /api/cameras
curl "https://api.placaflow.com.br/api/cameras" \
-H "Authorization: Bearer pk_a1b2c3d4..."
Resposta 200:
{
"cameras": [
{
"id": "7012e192-5005-43b6-978c-7e304b3676a6",
"name": "Entrada principal",
"location": "Portão A",
"enabled": true,
"rtspUrl": "rtsp://user:pass@host:5541/stream",
"rtspTransport": "tcp",
"minConfidence": 0.7,
"motionDetectionEnabled": true,
"motionDetectorType": "framediff",
"createdAt": "2026-03-20T10:00:00.000Z",
"updatedAt": "2026-03-20T10:00:00.000Z"
}
]
}
Criar câmera
POST /api/cameras
Content-Type: application/json
A câmera é registrada no agente de processamento automaticamente. Se o agente estiver indisponível, a criação falha (nada é salvo).
Campos:
| Campo | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
name | string | sim | — | Nome da câmera |
location | string | não | "" | Localização |
rtspUrl | string | não | "" | URL do stream RTSP |
rtspTransport | "tcp" | "udp" | não | "tcp" | Transporte RTSP |
enabled | boolean | não | true | Câmera ativa |
minConfidence | number | não | 0.5 | Confiança mínima (0-1) |
motionDetectionEnabled | boolean | não | true | Detecção de movimento |
motionDetectorType | "framediff" | "mog2" | não | "framediff" | Algoritmo |
motionThresholdPercent | number | não | 0.01 | Threshold de movimento |
motionFramesRequired | number | não | 1 | Frames mínimos |
roi | object | não | null | Região de interesse |
decodeMode | "auto" | "gpu" | "cpu" | não | "auto" | Modo de decodificação |
frameIntervalMs | number | não | 200 | Intervalo entre frames (ms) |
frameSkip | number | não | 0 | Frames ignorados |
crop | boolean | não | true | Recortar placa |
cropResolution | string | não | "640x360" | Resolução do recorte |
processingMode | "blocking" | "queue" | "disk" | não | "disk" | Modo de processamento |
queueSize | number | não | 100 | Tamanho da fila |
jpegQuality | number | não | 100 | Qualidade JPEG (1-100) |
Exemplo:
curl -X POST "https://api.placaflow.com.br/api/cameras" \
-H "Authorization: Bearer pk_a1b2c3d4..." \
-H "Content-Type: application/json" \
-d '{"name": "Entrada", "rtspUrl": "rtsp://admin:pass@192.168.1.200:554/stream"}'
Resposta 201: retorna { "camera": {...} }
Atualizar câmera
PUT /api/cameras/:id
Content-Type: application/json
Envie apenas os campos que deseja alterar. A atualização é propagada ao agente de processamento.
curl -X PUT "https://api.placaflow.com.br/api/cameras/7012e192-..." \
-H "Authorization: Bearer pk_a1b2c3d4..." \
-H "Content-Type: application/json" \
-d '{"minConfidence": 0.8}'
Excluir câmera
DELETE /api/cameras/:id
Remove a câmera do agente de processamento e ajusta a assinatura no Stripe (crédito proporcional).
curl -X DELETE "https://api.placaflow.com.br/api/cameras/7012e192-..." \
-H "Authorization: Bearer pk_a1b2c3d4..."
Snapshot
GET /api/cameras/:id/snapshot
Retorna o último frame capturado pela câmera em JPEG.
curl "https://api.placaflow.com.br/api/cameras/7012e192-.../snapshot" \
-H "Authorization: Bearer pk_a1b2c3d4..." \
--output snapshot.jpg
Headers de resposta:
Content-Type: image/jpegX-Frame-Width: largura em pixels (quando disponível)X-Frame-Height: altura em pixels (quando disponível)
Erros
| Código | Descrição |
|---|---|
| 400 | Nome obrigatório ausente |
| 401 | Não autenticado |
| 404 | Câmera não encontrada |
| 409 | Câmera duplicada no agente |
| 502 | Agente de processamento indisponível |