Skip to content

Pagination

List endpoints are paginated. Control paging with query parameters:

Parameter Default Description
per_page 15 Items per page
page 1 Page number

Some lists accept filters — for example invoices: ?status=sent&date_from=2026-01-01&date_to=2026-03-31.

Response envelope (core endpoints)

Core /api/v1/* lists (invoices, customers, quotes, expenses, contacts, payments, organizations, …) return a links + meta envelope, with the rows nested under data.data:

{
  "success": true,
  "message": null,
  "data": {
    "data": [ { "id": 1, "...": "..." } ],
    "links": {
      "first": "https://.../api/v1/invoices?page=1",
      "last": "https://.../api/v1/invoices?page=5",
      "prev": null,
      "next": "https://.../api/v1/invoices?page=2"
    },
    "meta": {
      "current_page": 1,
      "from": 1,
      "last_page": 5,
      "per_page": 15,
      "to": 15,
      "total": 73
    }
  }
}

Use meta.total / meta.last_page for counts and links.next (or page=N) to iterate.

Response envelope (flat variant)

A few endpoint families (/api/v1/recurring/invoices, /api/v1/webhooks) return the paginator fields directly inside data instead:

{
  "success": true,
  "data": {
    "current_page": 1,
    "data": [ { "id": 1, "...": "..." } ],
    "next_page_url": "https://.../api/v1/webhooks?page=2",
    "per_page": 15,
    "total": 73
  }
}

The OpenAPI specification documents the exact envelope for every endpoint (PaginationMeta/PaginationLinks vs LengthAwarePaginator schemas), so generated clients pick the right shape automatically.

We use cookies and privacy-respecting analytics

We use essential cookies for authentication and privacy-respecting analytics (self-hosted, respects Do Not Track). No advertising or third-party tracking. Learn more in our Privacy Policy