Paginação e filtragem

Percorra os endpoints de listagem da Tokeflow com page/limit, leia o bloco meta.pagination, itere com segurança e restrinja os resultados com filtros de data, status e entidade.

Todo endpoint de listagem da Tokeflow retorna resultados em páginas. Você solicita uma página; a Tokeflow retorna essa fatia mais um bloco meta.pagination que descreve onde você está no conjunto completo de resultados. As mesmas convenções se aplicam em todos os lugares — transações, pedidos, clientes, produtos, assinaturas e muito mais — então, uma vez que você as aprenda para um recurso, você as conhece para todos.

Esta página cobre duas coisas:

  • Paginação — page / limit, o bloco meta.pagination e um loop que percorre todas as páginas.
  • Filtragem — intervalos de datas, filtros de status com múltiplos valores e filtros de entidade/moeda que restringem uma lista antes de você paginá-la.

A Tokeflow é a camada de orquestração. Os endpoints de listagem consultam os registros padronizados que a Tokeflow mantém entre seus provedores conectados; os próprios provedores realizam o processamento e a liquidação subjacentes.


Paginação

Parâmetros de query

Dois parâmetros de query controlam a paginação. Ambos são opcionais.

FieldTypeRequiredDescription
pageintegerNãoNúmero da página, indexado a partir de 1. Padrão 1. Mínimo 1.
limitintegerNãoItens por página. Padrão 20. Mínimo 1, máximo 100.

Solicitar page=1&limit=20 retorna os primeiros 20 itens. Solicitar page=2&limit=20 retorna os itens 21–40, e assim por diante. Valores fora do intervalo permitido retornam 400 validation_error.

Escolha o maior limit que sua carga de trabalho consiga processar confortavelmente (até 100) para reduzir o número de idas e voltas ao iterar um conjunto grande de resultados.

O bloco meta.pagination

Respostas paginadas envolvem o array no envelope de sucesso padrão. O array fica em data; os detalhes de paginação ficam em meta.pagination.

FieldTypeDescription
pageintegerA página em que você está atualmente.
limitintegerItens por página aplicados a esta resposta.
totalintegerNúmero total de itens que correspondem à requisição (em todas as páginas, após os filtros).
total_pagesintegerNúmero total de páginas: ceil(total / limit).
has_nextbooleantrue se existe uma página após esta.
has_prevbooleantrue se existe uma página antes desta.

total e total_pages refletem o conjunto de resultados filtrado. Aplicar um filtro (veja abaixo) altera ambos — eles contam as correspondências, não todos os registros do recurso.

Iterando por todas as páginas

Para processar um conjunto inteiro de resultados, solicite a página 1 e continue avançando enquanto has_next for true. Pare quando ele se tornar false.

O helper em Node abaixo percorre todas as páginas de um endpoint de listagem e emite cada item. Ele usa o limit máximo para minimizar as requisições e se apoia em has_next em vez de calcular offsets manualmente.

/**
 * Async generator that yields every item across all pages of a Tokeflow list endpoint.
 * `path` is a resource path, e.g. "/api/v1/customers".
 * `params` are extra filters, e.g. { currency: "BRL" }.
 */
async function* paginate(path, params = {}, { limit = 100 } = {}) {
  let page = 1;

  for (;;) {
    const url = new URL(`https://api.tokeflow.com${path}`);
    url.searchParams.set("page", String(page));
    url.searchParams.set("limit", String(limit));
    for (const [key, value] of Object.entries(params)) {
      url.searchParams.set(key, value);
    }

    const res = await fetch(url, {
      headers: {
        Authorization: `Bearer ${process.env.TOKEFLOW_SECRET_KEY}`,
        Accept: "application/json",
      },
    });
    const body = await res.json();

    for (const item of body.data) {
      yield item;
    }

    if (!body.meta.pagination.has_next) break;
    page += 1;
  }
}

// Usage — collect every BRL customer.
const customers = [];
for await (const customer of paginate("/api/v1/customers", { currency: "BRL" })) {
  customers.push(customer);
}

Novos registros podem ser criados enquanto você pagina. Se itens forem adicionados entre requisições, uma varredura de longa duração pode ver um item se deslocar entre os limites de página ou perder/repetir um. Para reconciliação exata, prefira uma janela de filtro estável (por exemplo, um intervalo fechado date_from/date_to) para que o conjunto de resultados não mude no meio da varredura.

Mantenha a chave secreta (sk_*) apenas no lado do servidor. Loops de paginação pertencem ao seu backend — nunca incorpore uma chave secreta em código de navegador ou mobile. Veja Autenticação.


Filtragem

Filtros são parâmetros de query adicionais que restringem uma lista antes de a paginação ser aplicada. Combine quantos o endpoint suportar; eles são combinados com AND. Os filtros disponíveis variam por recurso — verifique cada referência de endpoint para o conjunto exato — mas as convenções são consistentes.

Filtros por intervalo de datas

A maioria dos endpoints de listagem suporta uma janela de criação por meio de date_from e date_to. Ambos aceitam timestamps ISO 8601 em UTC. Qualquer um pode ser fornecido isoladamente.

FieldTypeDescription
date_fromstring (ISO 8601)Inclui itens criados neste instante ou depois dele.
date_tostring (ISO 8601)Inclui itens criados neste instante ou antes dele.
?date_from=2026-01-01T00:00:00Z&date_to=2026-01-31T23:59:59Z

Filtros de múltiplos valores (status)

Filtros de status aceitam múltiplos valores. Você pode passá-los de duas formas equivalentes:

  • Repetir o parâmetro: ?status=authorized&status=refunded
  • Separar os valores por vírgula: ?status=authorized,refunded

Ambos produzem o mesmo resultado — qualquer item cujo status corresponda a qualquer um dos valores listados. Use os valores de enum exatos para o recurso (por exemplo, status de transação como authorized, refunded, partially_refunded; veja a referência de endpoint para o enum de cada recurso).

Filtros de entidade e moeda

Os endpoints de listagem expõem filtros que limitam os resultados a uma entidade ou atributo relacionado. O conjunto exato depende do recurso. Exemplos comuns:

FilterApplies to (examples)Description
currencytransactions, ordersCódigo de moeda ISO 4217, por exemplo BRL.
customer_idordersItens pertencentes a um cliente específico (cust_…).
customer_referencetransactionsItens que correspondem à sua referência externa de cliente.
emailcustomersClientes com um e-mail correspondente.
order_typeordersUm dos valores de enum de order.type, por exemplo checkout.
external_order_idordersSeu identificador externo de pedido.

Chaves de Organization devem adicionar o parâmetro de query merchant_id para limitar recursos em nível de merchant a um único Merchant. Chaves de Merchant inferem o merchant automaticamente e o omitem. Veja Autenticação.


Exemplo: uma requisição filtrada e paginada

Liste a primeira página de transações que estejam authorized ou refunded, em BRL, criadas durante janeiro de 2026. (Auth: chave de Organization com merchant_id, ou chave de Merchant.)

curl -G https://api.tokeflow.com/api/v1/transactions \
  -H "Authorization: Bearer sk_live_mer_xxx" \
  -H "Accept: application/json" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20" \
  --data-urlencode "status=authorized,refunded" \
  --data-urlencode "currency=BRL" \
  --data-urlencode "date_from=2026-01-01T00:00:00Z" \
  --data-urlencode "date_to=2026-01-31T23:59:59Z"

Resposta (200 OK):

{
  "success": true,
  "data": [
    {
      "id": "tx_9a8b7c6d",
      "status": "authorized",
      "amount": 15000,
      "currency": "BRL",
      "payment_method": "credit_card",
      "charge_type": "payment",
      "customer_id": "cust_7h2k9",
      "created_at": "2026-01-15T12:30:00.000Z"
    },
    {
      "id": "tx_5f4e3d2c",
      "status": "refunded",
      "amount": 9900,
      "currency": "BRL",
      "payment_method": "pix",
      "charge_type": "payment",
      "customer_id": "cust_3p9q1",
      "created_at": "2026-01-09T08:12:00.000Z"
    }
  ],
  "meta": {
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 42,
      "total_pages": 3,
      "has_next": true,
      "has_prev": false
    }
  },
  "request_id": "req_8f3c2a91",
  "timestamp": "2026-01-15T12:30:00.000Z"
}

Como has_next é true, solicite page=2 com os mesmos filtros para continuar, e prossiga até que has_next seja false.


Erros

SituationHTTPType
limit acima de 100, page abaixo de 1, ou não inteiro400validation_error
date_from / date_to inválido (não ISO 8601)400validation_error
Valor de status desconhecido para o recurso400validation_error
Chave de Organization omite o merchant_id obrigatório403authorization_error

Exemplo (400 validation_error):

{
  "error": {
    "type": "validation_error",
    "code": "INVALID_VALUE",
    "message": "limit must not be greater than 100",
    "details": { "field": "limit", "max": 100 },
    "request_id": "req_1b2c3d4e",
    "timestamp": "2026-01-15T12:30:00.000Z"
  }
}

Veja Erros para a referência completa dos tipos de erro.


Leitura relacionada

Nesta página