Paginate Reconciliation Results

Handle cursor-based pagination on all reconciliation endpoints.

# First page
curl "https://api.catalystpay.com/api/v1/reconciliation/transactions/?start_date=2025-01-01&page_size=100" \
  -H "Authorization: Bearer rk_your_api_key"

# Next page (use the full "next" URL from the response)
curl "https://api.catalystpay.com/api/v1/reconciliation/transactions/?cursor=cD0yMDI1LTAzLTMx&start_date=2025-01-01&page_size=100" \
  -H "Authorization: Bearer rk_your_api_key"
import requests

headers = {"Authorization": "Bearer rk_your_api_key"}
url = "https://api.catalystpay.com/api/v1/reconciliation/transactions/"
params = {"start_date": "2025-01-01", "end_date": "2025-03-31", "page_size": 1000}

all_results = []
while url:
    response = requests.get(url, headers=headers, params=params)
    data = response.json()
    all_results.extend(data["results"])
    url = data.get("next")
    params = None  # next URL includes all params

print(f"Fetched {len(all_results)} transactions")
const headers = { 'Authorization': 'Bearer rk_your_api_key' };
let url = 'https://api.catalystpay.com/api/v1/reconciliation/transactions/?start_date=2025-01-01&end_date=2025-03-31&page_size=1000';

const allResults = [];
while (url) {
  const response = await fetch(url, { headers });
  const data = await response.json();
  allResults.push(...data.results);
  url = data.next; // Full URL or null
}

console.log(`Fetched ${allResults.length} transactions`);

Response structure:

{
  "next": "https://api.catalystpay.com/api/v1/reconciliation/transactions/?cursor=cD0yMDI1LTAz&start_date=2025-01-01",
  "previous": null,
  "results": [ ... ]
}

The next field is a full URL with the cursor and original query params baked in -- just follow it directly. Set page_size from 1 to 1000 (default 100) to control batch size. The same pattern works for /chargebacks/ and /subscriptions/.