Pagination
List endpoints return one page of records in data and paging details in page:
"page": {
"has_more": true,
"next_cursor": "EXAMPLE_OPAQUE_CURSOR",
"next_page_url": "https://api.fieldtask.example/public/v1/jobs?page_size=25&cursor=EXAMPLE_OPAQUE_CURSOR"
}
Follow next_page_url
The simplest way to read every page is to request page.next_page_url until it's null, sending the same Authorization header each time. The URL keeps your page size, ordering and filters.
url = f"{API_ORIGIN}/public/v1/customers?page_size=100"
while url:
body = requests.get(url, headers=headers, timeout=30).json()
process(body["data"])
url = body["page"]["next_page_url"]
Page size and ordering
page_sizeis 1–100. The default is 25.orderingiscreated_at(oldest first, the default) or-created_at(newest first). Records created at the same moment are ordered by ID.
Some lists also have filters, documented on each endpoint.
Cursors
If you build URLs yourself, pass page.next_cursor as the cursor parameter.
- Treat cursors as opaque. Don't parse, store long-term or construct them.
- Keep
page_size,orderingand every filter unchanged while following a cursor. A cursor only works with the query, connection and permissions that produced it; otherwise the response is400 invalid_cursor. - Cursors expire within 24 hours.
- To change the query, start again without a cursor.
Lists are live
Pages show current data, not a snapshot. A record created or changed while you page through may appear on a later page or not at all. To keep another system in sync, use the event feed or webhooks rather than repeatedly listing everything.
MCP list tools
MCP list tools take the same page_size, ordering and cursor arguments and return the same page object. FieldTask tells AI clients to follow pages before concluding that a record doesn't exist.