Skip to content

Pagination

Handling paginated responses across all SDKs.

Overview

List endpoints return paginated results:

json
{
  "data": [...],
  "pagination": {
    "page": 1,
    "perPage": 20,
    "total": 150,
    "totalPages": 8
  }
}

TypeScript/JavaScript

Manual Pagination

typescript
// First page
const page1 = await iof.contracts.list({ limit: 20 });

// Next page
const page2 = await iof.contracts.list({
  limit: 20,
  page: 2,
});

Auto-pagination

typescript
// Iterate all results
for await (const contract of iof.contracts.list({ limit: 100 })) {
  console.log(contract.id);
}

// Collect all results
const allContracts = await iof.contracts.list({ limit: 100 }).toArray();

Python

Manual Pagination

python
# First page
page1 = iof.contracts.list(limit=20)

# Next page
page2 = iof.contracts.list(limit=20, page=2)

Auto-pagination

python
# Iterate all results
for contract in iof.contracts.list(limit=100).auto_paging_iter():
    print(contract.id)

# Collect all results
all_contracts = list(iof.contracts.list(limit=100).auto_paging_iter())

Go

Manual Pagination

go
params := &iof.ContractListParams{
    Limit: iof.Int64(20),
}

iter := client.Contracts.List(params)
for iter.Next() {
    contract := iter.Contract()
    fmt.Println(contract.ID)
}

Cursor-based

go
var cursor *string

for {
    params := &iof.ContractListParams{
        Limit:  iof.Int64(100),
        Cursor: cursor,
    }

    result, err := client.Contracts.List(params)
    if err != nil {
        break
    }

    for _, contract := range result.Data {
        fmt.Println(contract.ID)
    }

    if !result.HasMore {
        break
    }
    cursor = result.NextCursor
}

Java

Manual Pagination

java
ContractListParams params = ContractListParams.builder()
    .limit(20L)
    .build();

ContractCollection page1 = client.contracts().list(params);

// Next page
ContractListParams nextParams = ContractListParams.builder()
    .limit(20L)
    .page(2L)
    .build();

ContractCollection page2 = client.contracts().list(nextParams);

Auto-pagination

java
ContractListParams params = ContractListParams.builder()
    .limit(100L)
    .build();

client.contracts().list(params).autoPagingIterable().forEach(contract -> {
    System.out.println(contract.getId());
});

Pagination Parameters

ParameterDescriptionDefault
limitResults per page20
pagePage number1
cursorCursor for next pagenull

Best Practices

  1. Use reasonable limits - 20-100 items per page
  2. Prefer cursors - For large datasets
  3. Handle empty pages - Check if data exists
  4. Avoid deep pagination - Use filters instead

Next Steps

Licensed under the Apache License 2.0