Paginação e filtros
A LightHouse API pagina listas via parâmetros de query (PageIndex/PageSize) — não existe um schema de request nomeado para paginação (o corpo, quando a operação usa GET, não é enviado; os filtros e a paginação vão todos na query string).
Não existe um schema FiltroOcorrenciaWithPagination na spec publicada — os filtros de ocorrências (GET /v3/ocorrencias e equivalentes) são parâmetros de query individuais, entre eles PageIndex e PageSize. Este guia documenta o mecanismo real.
Parâmetros de paginação
Presentes nas listagens principais (GET /v1|v2|v3/ocorrencias, GET /v1/atividades, etc.):
| Parâmetro | Obrigatório | Faixa | Descrição |
|---|---|---|---|
PageIndex | Sim | inteiro, começa em 1 | Índice da página. Testado: PageIndex=0 não retorna erro — retorna uma lista vazia silenciosamente (ver troubleshooting abaixo). |
PageSize | Sim | 1 a 100 | Quantidade de itens por página. |
A resposta é um array simples dos itens da página (OcorrenciasListV3, AtividadesAgendadasList etc.) — não vem envelopada com totalCount/totalPages/hasNextPage. Para saber o total, use o endpoint de contagem correspondente (GET /v3/ocorrencias/count, GET /v1/ocorrencias/count) antes de paginar.
Exemplo: buscar ocorrências, página a página
EmpresaId vai no header HTTP, não na query — ver a tabela canônica de contexto de empresa (esses dois endpoints usam o padrão "header obrigatório").
# 1. Descubra o total antes de paginar
curl "https://lighthousev2.lkp.app.br/v3/ocorrencias/count" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "EmpresaId: 123"
# -> 247
# 2. Peça páginas de 100 em 100 (o máximo permitido por PageSize), começando em PageIndex=1
curl "https://lighthousev2.lkp.app.br/v3/ocorrencias?PageIndex=1&PageSize=100" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "EmpresaId: 123"
Combine PageIndex/PageSize com os demais filtros do endpoint (DataInicio, DataTermino, ExecutorId, EmitenteId etc. — ver Glossário de IDs e enums) para reduzir o volume antes de paginar, em vez de baixar tudo e filtrar no cliente. Para filtrar por status (ex.: ocorrências abertas), use StatusIds — ver Glossário → status de ocorrência (v3).
Como iterar sem loop infinito
Como a resposta não informa se há mais páginas, o critério de parada é o tamanho da página retornada:
- Peça a contagem total (
GET .../count) e calculetotalPaginas = ceil(total / PageSize)— use isso como limite superior do loop, nunca umwhile (true). - A cada chamada, se o array retornado vier vazio ou com menos itens que
PageSize, é a última página — pare, mesmo que o cálculo do passo 1 sugerisse mais uma volta. - Sempre imponha também um limite absoluto de iterações no código do agente (ex.: nunca mais que
totalPaginas, com uma margem pequena) — mesmo com os dois critérios acima, um agente autônomo não deve depender só da condição de parada da API para não rodar indefinidamente.
pagina = 1
total = GET /v3/ocorrencias/count?...
maxPaginas = ceil(total / pageSize)
enquanto pagina <= maxPaginas:
itens = GET /v3/ocorrencias?PageIndex=pagina&PageSize=pageSize&...
processar(itens)
se tamanho(itens) < pageSize:
parar # ultima pagina
pagina += 1
Recebendo [] ou 0 inesperado?
A API não retorna erro nesses dois casos — ela responde uma lista vazia (ou contagem 0) silenciosamente, como se a consulta fosse válida e não tivesse resultado. Antes de concluir que não há dados, confira:
- Header
EmpresaIdausente nos endpoints que o exigem (ver tabela canônica de contexto de empresa) — sem ele, alguns endpoints retornam vazio em vez de erro de autorização. PageIndex=0— a paginação começa em1;PageIndex=0retorna[]mesmo havendo registros.
Boas práticas
- Prefira
PageSize=100(o máximo) para reduzir o número de chamadas, salvo se a integração precisar de respostas menores por chamada. - Use os endpoints de contagem (
/count) para dashboards que só precisam do número total — não pagine uma listagem inteira só para contar itens. - Combine filtros de negócio (período, unidade, status) com a paginação — isso reduz o número de páginas necessárias, não só o tamanho de cada uma.
- Ver Rate limiting — cada página é uma requisição; um loop de paginação mal dimensionado pode consumir uma fatia relevante do limite de 1200 req/h.