Pagination and filtering¶
URL shape¶
All resource endpoints are org-scoped: /api/v1/orgs/{org_id}/{resource}.
The connections endpoint is the exception — it lists ALL of your app's
connections across orgs at /api/v1/connections. See the
connections guide for that endpoint.
Accounts and tax rates are also exceptions: those two endpoints return the
entire active list in one response and accept no limit/offset at all —
there's no per-org volume of either that makes pagination worth the extra
round trips. Every other org-scoped list endpoint (bills, invoices, credit
notes, contacts) uses the same limit/offset shape:
GET /api/v1/orgs/{org_id}/bills?limit=50&offset=100
{
"items": [ /* … */ ],
"count": 342,
"limit": 50,
"offset": 100
}
limitandoffsetare both non-negative integers; an invalid or negative value isinvalid_pagination_params(400).limitis silently clamped to each endpoint's max, not rejected — see the per-resource default/max table in Hard limits.countis the total number of matching rows, not the number returned initems— use it to know when you've reached the end (offset + len(items) >= count).- There is no opaque cursor:
offsetis a plain integer you compute yourself. Offset pagination is not stable under concurrent writes: the underlying query is re-run on every page, ordered by a mutable column (updated_atfor bills, invoices and credit notes;display_namefor contacts), so a row changed between two page requests can move in the sort order and rows can be skipped or returned twice. Prefermodified_since(below) for a stable incremental sync instead of paging through everything on every run.
Incremental sync with modified_since¶
Most read endpoints accept:
GET /api/v1/orgs/{org_id}/bills?modified_since=2026-09-01T00:00:00Z
An invalid (non-ISO-8601) value is invalid_modified_since (400). Combine
with limit/offset as normal — modified_since narrows the result set,
it doesn't change the pagination shape.
Per-resource filters¶
Beyond limit/offset/modified_since, individual resources accept their
own query filters (status, contact, date range, …) — see each operation's
parameters in the API reference rather than a
second copy of the list here.