Gateway lists come in one of two shapes:

ShapeFieldsParametersWhere
Pagecount, results, next, previouspage, page_sizeCredit and subsidy queues, monetary allowance, PQRS, health (appointments, invoices, billing objections, schedule), administrative, webhook deliveries, loans
OffsetPageresults, limit, offset, has_more, next_offsetlimit, offsetWallet movements and bill payments

In every SDK a page is iterable over its results and keeps the original body in raw. What differs is how you request the next ones.

SDKPageOffsetPageAuto-pagination
PythonPage (count, results, next)OffsetPage (has_more, next_offset)Your own loop with page= / offset=
JavaScript / TSPageOffsetPagefor await (const x of page), page.iterPages(), page.getNextPage()
PHPPage (hasNext())OffsetPage (hasMore, nextOffset)do … while loop
.NETPageOffsetPage…AutoPagingAsync() → IAsyncEnumerable<JsonObject>
Go*Page (HasNext())*OffsetPage (HasMore, NextOffset)NewPageIterator / NewOffsetIterator (and it.All() with Go 1.23+)

Iterating a list by page #

Example: every open, overdue PQRS at Caja Horizonte, 50 at a time.

page_no = 1
while True:
    page = client.pqrs.list(status="opened", overdue=True, page=page_no, page_size=50)
    for pqrs in page:
        escalate(pqrs)
    if not page.next:
        break
    page_no += 1

Iterating a list with limit/offset #

Example: all of a Nova user’s wallet movements for October.

offset = 0
while True:
    page = client.wallet.transactions.list("1032456789", start_date="2026-10-01",
                                           end_date="2026-10-31", limit=100, offset=offset)
    for movement in page:
        export(movement)
    if not page.has_more or page.next_offset is None:
        break
    offset = page.next_offset

Caveats #

  • Page limits. page_size ranges from 1 to 100 (25 by default in most lists); limit from 1 to 100 (50 by default for movements). Asking for more doesn’t raise an error: it’s capped.
  • Auto-pagination follows next. The JS, .NET and Go iterators (and hasNext() in PHP) keep going while the response includes next. Some lists don’t include it (for example, the webhook delivery history returns count, page and page_size), and in that case auto-pagination stops at the first page. For those lists, advance yourself by comparing what you’ve received with count (example in webhook retries).
  • Lists that don’t paginate. Some operations return everything in a single page (for example, an affiliate’s credits and the administrative lists with no page parameter): there, hasNextPage()/HasNext() is false.
  • Data that changes while you iterate. If records are created during iteration, a page can repeat or skip items. For complete exports, filter by a closed date range and deduplicate by id.