Newsletter

Paginação de API no n8n: buscando todos os registros sem perder nenhum

Os dois modos de paginação do HTTP Request com as expressões exatas, por que $pageCount começa em zero e como não criar um laço infinito.

Paginação de API no n8n: buscando todos os registros sem perder nenhum

Quase toda API devolve resultados em páginas, e um fluxo que ignora isso traz só os primeiros registros — sem erro nenhum, o que é pior. O n8n resolve isso dentro do próprio node HTTP Request: em Add Option → Pagination você escolhe entre seguir a URL que a resposta indica ou incrementar um número de página a cada volta. São duas configurações curtas, e este texto mostra as duas com a expressão exata.

Adicione ao Google Notícias

Antes de configurar: três perguntas

APIs implementam paginação de formas diferentes, e a documentação da API é quem responde. Antes de mexer no node, descubra:

  • A API fornece a URL da próxima página na resposta? Se sim, o primeiro modo é o mais simples.

  • Existem limites de tamanho ou de número de página? Muitas travam em 100 registros por vez.

  • Qual é a estrutura da resposta? Você vai precisar apontar o caminho exato do campo.

Modo 1: a resposta traz a próxima URL

É o formato mais confortável. A API devolve, junto com os dados, o endereço da página seguinte.

A configuração:

  1. Defina o modo de paginação como Response Contains Next URL.

  2. No campo da próxima URL, use uma expressão apontando para o campo que traz esse endereço.

A expressão exata depende do nome que a API usa. Se o campo se chama next-page e vem no corpo da resposta:

{{ $response.body["next-page"] }}

A variável $response dá acesso à resposta da requisição anterior — é isso que permite encadear.

Repare no uso de colchetes com aspas: o nome tem hífen, e a notação de ponto não funciona nesse caso. Se o campo da sua API tiver nome simples, {{ $response.body.next }} resolve.

Modo 2: incrementar o número da página

Quando a API não devolve a próxima URL mas aceita um parâmetro de página, o caminho é outro:

  1. Defina o modo como Update a Parameter in Each Request.

  2. Defina o tipo como Query.

  3. Informe o nome do parâmetro — normalmente page, mas confira na documentação.

  4. Ative expressão no campo de valor e escreva:

{{ $pageCount + 1 }}

Por que o + 1? Porque $pageCount conta quantas páginas o node já buscou e começa em zero, enquanto a maioria das APIs numera a partir de um. Com o incremento, a primeira volta busca a página 1, a segunda busca a 2, e assim por diante.

Ilustração de um contador avançando ao longo de uma trilha

Onde parar

Essa é a parte que exige atenção, porque um fluxo que não sabe parar vira um problema.

Nos dois modos existe uma condição de parada. No primeiro, ela é natural: quando a resposta não traz mais a próxima URL, acabou. No segundo, você precisa dizer quando parar — normalmente quando a resposta vier vazia ou quando o número de páginas atingir um teto.

Sempre defina um teto máximo de páginas, mesmo quando tiver certeza da condição de parada. Um erro na condição, somado a uma API que devolve a mesma página para sempre, produz um laço infinito que consome execuções e pode fazer o serviço bloquear o seu acesso. Um teto de segurança custa nada.

O efeito sobre o resto do fluxo

Duas consequências práticas que pegam desprevenido:

O volume muda de ordem de grandeza. Um fluxo que trazia 100 registros passa a trazer 4.000. Se o node seguinte envia mensagem, você acabou de multiplicar por quarenta o que ele faz. Confira a contagem de itens antes de ativar.

O tempo cresce. Cada página é uma requisição. Quarenta páginas com meio segundo cada são vinte segundos só de busca. Em fluxo com limite de tempo, isso importa.

Quando não paginar

Vale considerar a alternativa: em vez de trazer tudo e filtrar depois, filtre na origem. Se a API aceita parâmetros de busca — por data, por status —, pedir só o que interessa costuma ser mais rápido, mais barato e menos sujeito a limite de uso do que paginar o acervo inteiro.

A regra prática: pagine quando precisar mesmo de todos os registros; filtre quando precisar de um subconjunto.

Duas configurações resolvem quase tudo: seguir a URL da resposta com $response, ou incrementar a página com {{ $pageCount + 1 }}. E sempre um teto de páginas por segurança.

Perguntas frequentes

Como configurar paginação no n8n?

No node HTTP Request, em Add Option, escolhendo Pagination. A partir daí existem dois modos: seguir a URL da próxima página que vem na resposta, ou atualizar um parâmetro de página a cada requisição.

O que é $pageCount no n8n?

É a variável que indica quantas páginas o node HTTP Request já buscou. Ela começa em zero, e como a maioria das APIs numera a partir de um, a expressão usada é {{ $pageCount + 1 }} — assim a primeira volta pede a página 1.

Como pegar a próxima página quando a API devolve a URL?

Definindo o modo de paginação como "Response Contains Next URL" e apontando, por expressão, o campo da resposta que traz esse endereço — por exemplo {{ $response.body["next-page"] }}, ajustando o nome do campo conforme a API.

Por que meu fluxo só traz os primeiros registros?

Porque a paginação não está configurada e a API devolveu apenas a primeira página. Não há mensagem de erro nesse caso: o fluxo funciona normalmente com dados incompletos, o que torna o problema difícil de perceber.

Como evitar um laço infinito na paginação?

Definindo sempre um número máximo de páginas, além da condição de parada. Se a condição falhar e a API continuar devolvendo conteúdo, o teto interrompe o processo antes que ele consuma execuções e provoque bloqueio por excesso de requisições.

Este tutorial faz parte do guia Curso de n8n do zero ao avançado: o guia completo em português. Veja também: Node, trigger e workflow: o vocabulário do n8n em 10 minutos · A estrutura de dados do n8n: por que tudo é um array com json · Item linking no n8n: como ele decide qual item vai pra saída · Execuções passo a passo: como achar onde o fluxo do n8n quebrou · A Canvas UI do n8n 2.0: o que mudou e como se orientar · n8n Cloud ou self-hosted: a decisão que define seu custo e sua liberdade