Pagination

All list endpoints use cursor-based pagination for efficient, consistent paging through results.

How it works

Instead of offset-based pagination, the API uses a starting_after cursor parameter. Pass the ID of the last item from the previous page to fetch the next page.

Parameters

Parameter Type Description
limit integer Max items per page (1-500, default 100)
starting_after string ID of the last item from the previous page

Response format

All paginated endpoints return the standard list envelope:

{
  "object": "list",
  "data": [
    {"job_id": 42, "status": "completed", ...},
    {"job_id": 41, "status": "completed", ...}
  ],
  "has_more": true
}

When has_more is true, pass the last item's ID as starting_after to get the next page.

Example: paging through results

# Manual pagination
page = client.list_research(limit=10)
for job in page["data"]:
    print(job["job_id"])

if page["has_more"]:
    next_page = client.list_research(limit=10, starting_after=str(page["data"][-1]["job_id"]))

# Or use the automatic iterator
for job in client.iter_research(limit=10):
    print(job["job_id"])

Paginated endpoints

Endpoint Cursor ID field
GET /v1/researchjob_id
GET /v1/research/bulkbulk_job_id
GET /v1/listslist_id
GET /v1/lists/{id}id (account)
GET /v1/watchlistid