All Mavio API list endpoints return paginated results. The API supports two pagination strategies depending on the endpoint: limit/offset (most endpoints) and cursor-based (real-time feeds).

Limit/offset pagination

Most list endpoints accept limit and offset query parameters. This approach is best for browsing through results where you need random page access.
ParameterTypeDefaultDescription
limitinteger20Number of items to return. Must be between 1 and 100.
offsetinteger0Number of items to skip before returning results.
Every paginated response includes a pagination object:
{
  "data": [ ... ],
  "pagination": {
    "total": 142,
    "limit": 20,
    "offset": 0,
    "has_more": true
  }
}
FieldTypeDescription
totalintegerTotal number of items matching your filters.
limitintegerThe limit value used in this request.
offsetintegerThe offset value used in this request.
has_morebooleantrue if there are more results beyond this page.

Paginating through all results

To retrieve all results, increment offset by limit until has_more is false.
import mavio

client = mavio.Client(api_key="mvo_live_abc123")

all_meetings = []
offset = 0
limit = 50

while True:
    response = client.meetings.list(limit=limit, offset=offset)
    all_meetings.extend(response.data)
    if not response.pagination.has_more:
        break
    offset += limit

print(f"Fetched {len(all_meetings)} meetings")

Cursor-based pagination

Some real-time endpoints (such as webhook event logs) use cursor-based pagination for consistent results when new items are being created.
ParameterTypeDescription
limitintegerNumber of items to return (1-100, default 20).
cursorstringOpaque cursor from the previous response. Omit for the first page.
{
  "data": [ ... ],
  "pagination": {
    "next_cursor": "eyJpZCI6ImV2dF8xMjM0NTY3ODkwIn0=",
    "has_more": true
  }
}
Pass next_cursor as the cursor parameter in your next request to fetch the following page.

Best practices

A limit of 20-50 is optimal for most use cases. Requesting 100 items per page increases response time and payload size.
The total field requires a count query on each request. If you only need to check for more results, use has_more instead of comparing offset + limit < total.
With limit/offset pagination, items may shift between pages if new records are created or deleted between requests. For consistency-critical workflows, prefer cursor-based endpoints or filter by a fixed date range.
Paginating through large datasets generates many requests. Add a small delay between pages or use a larger limit to stay within rate limits.