VerifikaDocs
Guías

Paginación

Cómo recorrer meses de movimientos sin repetir ni saltarte filas.

Las listas se paginan por cursor, no por número de página:

curl "https://api.verifika.tech/v1/incomes?limit=50" \
  -H "Authorization: Bearer vk_live_..."
{
  "object": "list",
  "data": [ /* … 50 ingresos … */ ],
  "hasMore": true,
  "nextCursor": "cmtkc0rif005ysuw1mbeef235"
}

Para la siguiente página, pasas ese cursor:

curl "https://api.verifika.tech/v1/incomes?limit=50&startingAfter=cmtkc0rif005ysuw1mbeef235" \
  -H "Authorization: Bearer vk_live_..."

Cuando hasMore es false, terminaste.

ParámetroDefaultMáximo
limit50100
startingAfterid de la última fila de la página anterior

Por qué no hay page=2

Porque el libro de un negocio crece mientras lo recorres. Con páginas numeradas, cada venta nueva empuja las filas una posición: la página 2 te devuelve algo que ya viste en la 1, o se salta una fila que nunca vas a ver. Un proceso que sincroniza de noche termina con movimientos duplicados y sin forma de darse cuenta.

El cursor apunta a una fila concreta. Lo que ya pasó, ya pasó.

Recorrer todo

async function* todosLosIngresos(params = {}) {
  let cursor = null;

  do {
    const url = new URL('https://api.verifika.tech/v1/incomes');
    for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);
    url.searchParams.set('limit', '100');
    if (cursor) url.searchParams.set('startingAfter', cursor);

    const res = await fetch(url, {
      headers: { Authorization: `Bearer ${process.env.VERIFIKA_API_KEY}` },
    });
    if (!res.ok) throw new Error(`Verifika ${res.status}`);

    const page = await res.json();
    yield* page.data;
    cursor = page.hasMore ? page.nextCursor : null;
  } while (cursor);
}

for await (const ingreso of todosLosIngresos({ from: '2026-09-01' })) {
  console.log(ingreso.id, ingreso.amount);
}

Sincroniza por fecha, no desde el principio

Para mantener una copia al día, no recorras el histórico completo cada vez: guarda el occurredAt del último movimiento que procesaste y arranca con ?from=. Deja un solape de unas horas — un aviso del banco puede llegar tarde y verificar un pago de ayer.

Filtros

Los mismos que ves en el panel, para que un reporte y tu integración nunca digan cosas distintas del mismo mes:

ParámetroEjemploNota
from / to2026-09-01Una fecha pelada es un día colombiano, no UTC
statusVERIFIEDRepetible: ?status=VERIFIED&status=PENDING
originWHATSAPPWHATSAPP, BANK, API, MANUAL
branchIdcmt7…Repetible
minAmount / maxAmount50000Enteros en pesos
accountLabelNequi *4821Repetible
qJuanBusca en nombre del cliente y referencia
sortrecentrecent, oldest, amount_desc, amount_asc

En esta página