A armadilha: qual identificador é a sua chave
GET /api/devices devolve dois identificadores por câmera, e eles servem para
coisas diferentes:
Consequência direta no seu banco:
device_uuid como chave primária e guarde device_id como o rótulo que a
sua equipe reconhece. Todas as rotas aceitam os dois.
A hierarquia: conta, cliente, local, câmera
GET /api/devices devolve tudo isso resolvido em cada linha. Não há segunda
chamada para descobrir de quem é a câmera:
A sincronização
Na primeira vez, leia tudo. Depois, peça só o que mudou.updated_since aceita ISO 8601 com fuso (2026-09-04T03:00:00Z). O corte é
>=: mandar de volta o instante que você recebeu não perde a câmera gravada no
mesmo microssegundo — ela só chega duas vezes, e o upsert absorve.
Recortar por cliente
Se você quer só as câmeras de um condomínio:Dois eixos de saúde, e eles discordam
Os três valores, e a diferença entre os dois últimos importa:
yes— chegou quadro dentro da janela. Prova positiva de imagem.no— já chegou quadro desta câmera antes, e não dentro da janela. Prova de que parou. É esta a sua lista de ocorrências.unknown— nunca chegou quadro. Ausência de prova, não prova de ausência: normalmente cadastro recém-feito. Não abra ocorrência.
O envelope diz a validade da medição — leia antes de concluir
transmitting é uma medição com prazo, e a resposta declara o prazo dela. Fora
da validade, todas as câmeras saem como unknown, inclusive as que têm
quadro recente. É por desenho: afirmar yes só para as câmeras que alguém abriu
seria uma amostra apresentada como se fosse a frota inteira.