Many Reporting API endpoints can return large result sets. To help you work efficiently and avoid timeouts or memory issues, the API uses pagination. This means results are returned in chunks ("pages"), and you can request the next page using a link provided in the response.
Different endpoints use different pagination approaches. The sections below explain how they work and what to expect when integrating with them.
How Pagination Works
Server-Driven Paging
Some endpoints automatically apply paging on the server. These endpoints have a default page size which is also the maximum page size. Refer table below for exact details. If more data is available, the response includes an @odata.nextLink property. You can call the URL in nextLink to retrieve the next page.
What you need to do: Follow the @odata.nextLink until it is no longer present. It's still possible to use client-driven paging on these endpoints if desired (see below).
Client-Driven Paging (Manual)
All endpoints support client-driven paging. This is done using the OData $top and $skip query parameters. The $top value controls how many items are on each page (the page size) and $skip controls how many items to skip.
Endpoints
The table below outlines which endpoints use which paging style, including any applicable default page size.
| Route | Server-Driven Paging | Client-Driven Paging | Default Page Size |
|---|---|---|---|
| v0.1/attendees | Yes | Yes | 25,000 |
| v0.1/bookings | No | Yes | - |
| v0.1/bookingZoneLinks | No | Yes | - |
| v0.1/bookingZones | No | Yes | - |
| v0.1/bulletins | No | Yes | - |
| v0.1/diaryEntries | No | Yes | - |
| v0.1/diaryentrymetrics | Yes | Yes | 10,000 |
| v0.1/employerDiaryEntries | Yes | Yes | 250,000 |
| v0.1/ employerProfiles | Yes | Yes | 1000 |
| v0.1/employerStatus | Yes | Yes | 5000 |
| v0.1/equipmentInductions | Yes | Yes | 25,000 |
| v0.1/functionEmployers | Yes | Yes | 10,000 |
| v0.1/functions | No | Yes | - |
| v0.1/historicAggregates | Yes | Yes | 25,000 |
| v0.1/incidents | Yes | Yes | 100 |
| v0.1/injuries | Yes | Yes | 1000 |
| v0.1/inspections | Yes | Yes | 5000 |
| v0.1/issues | Yes | Yes | 5000 |
| v0.1/locationMappings | Yes | Yes | 10,000 |
| v0.1/locations | Yes | Yes | 25,000 |
| v0.1/meetings | Yes | Yes | 25,000 |
| v0.1/observations | Yes | Yes | 100,000 |
| v0.1/permitWorkers | Yes | Yes | 25,000 |
| v0.1/permitZoneLinks | Yes | Yes | 25,000 |
| v0.1/permitZones | Yes | Yes | 25,000 |
| v0.1/permits | Yes | Yes | 25,000 |
| v0.1/projectWorkerFlagging | No | Yes | - |
| v0.1/projectusers | Yes | Yes | 50,000 |
| v0.1/projectworkers | Yes | Yes | 50,000 |
| v0.1/projects | No | Yes | - |
| v0.1/ptpAttendees | No | Yes | - |
| v0.1/ptpAttendeesLocation | No | Yes | - |
| v0.1/ptpControls | No | Yes | - |
| v0.1/ptpEquipment | No | Yes | - |
| v0.1/ptpHazards | No | Yes | - |
| v0.1/ptpLocationHierarchies | No | Yes | - |
| v0.1/ptpObservations | No | Yes | - |
| v0.1/ptpPermits | No | Yes | - |
| v0.1/ptps | Yes | Yes | 10,000 |
| v0.1/ptpSWMS | No | Yes | - |
| v0.1/ptpTasks | No | Yes | - |
| v0.1/reportableQuestions | Yes | Yes | 50,000 |
| v0.1/ safetyManagementPlanChecklists | No | Yes | - |
| v0.1/safetymanagementplans | Yes | Yes | 1,000 |
| v0.1/sds | No | Yes | - |
| v0.1/sdsAttachments | No | Yes | - |
| v0.1/sdsHazardClassifications | No | Yes | - |
| v0.1/sdsHazardPictograms | No | Yes | - |
| v0.1/siteSignIns | Yes | Yes | 50,000 |
| v0.1/swms | No | Yes | - |
| v0.1/users | Yes | No | 50,000 |
| v0.1/workerHoursWorked | Yes | Yes | 100,000 |
| v0.1/workerLocations | Yes | Yes | 25,000 |
| v0.1/workerProfileFlagging | No | Yes | - |
| v0.1/workerProfileReportableAnswers | Yes | Yes | 50,000 |
| v0.1/workerProfiles | Yes | Yes | 50,000 |
| v0.1/workerReportableAnswers | Yes | Yes | 50,000 |
| v0.1/ workers | Yes | Yes | 25,000 |
FAQ - Parallel Requests
Q: Can I request data from multiple different endpoints in parallel?
A: Yes, you can request data from multiple endpoints in parallel.
Q: Can I request multiple pages from the same endpoint in parallel?
A: No this is not permitted, to protect the service and other customers from misuse. This will result in you being rate limited - you will receive a 429 error code. You must iterate over pages for a given endpoint sequentially.