Skip to main content
List endpoints support limit/offset pagination to efficiently handle large datasets.

Parameters

Every list endpoint accepts these two query parameters:
Maximum Limit: The limit parameter is capped at 100. If you request more than 100 items, the API returns 100 items.

How it works

  • Page 1: offset=0, limit=100 → Returns records 1-100
  • Page 2: offset=100, limit=100 → Returns records 101-200
  • Page 3: offset=200, limit=100 → Returns records 201-300

Example

Response format

List endpoints return an array of resources:

Fetching all records

Continue fetching pages until you receive an empty array or fewer records than requested:
Best Practice: When fetching all records, add delays between requests to respect rate limits.

Filtering by updated date

Many list endpoints accept updated_after and updated_before query parameters to return only records whose updated_at timestamp falls in a given window. Both parameters accept an ISO 8601 date-time value and behave identically on v1 and v2. Support is per endpoint rather than universal: invoices, bills, customer-payments, and vendor-payments accept both, while some collections (including companies, accounts, customers, and items) accept neither. Check the endpoint’s parameter list in the API reference before relying on them. Both bounds are inclusive: A record whose updated_at matches either bound exactly appears in the response.

Timestamp precision

DualEntry stores updated_at with microsecond precision, so a bound set to a whole second does not cover the fraction of a second that follows it. An upper bound of updated_before=2026-07-31T23:59:59Z excludes a record updated at 2026-07-31T23:59:59.500000Z, silently dropping activity from the final second of the window. Use the start of the next period as the upper bound rather than the last second of the current one: Because the upper bound is inclusive, a next-midnight bound also returns a record updated at exactly 00:00:00.000000 on August 1. The lower bound behaves the same way: passing updated_after equal to a record’s exact updated_at returns that record again. Treat each bound as the start of the next period, resume from the greatest updated_at you have already processed, and deduplicate by record ID. Fetch one calendar month of changes:

Validation errors

Invalid pagination parameters return a 400 Bad Request error: The date filters reject two further cases with the same status code: Supply an explicit offset on every date filter value. Both 2026-07-01T00:00:00Z and 2026-07-01T00:00:00-04:00 are accepted, and DualEntry normalizes the value to UTC before comparing it. Note: Requesting limit > 100 does not return an error. The limit is silently capped at 100. Example error response:

Next: Learn about Errors →
Last modified on August 27, 2026