> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plane.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Pagination

All endpoints that list objects provide support for cursor-based pagination.
For instance, you can [list workers](/reference/workers/list), [list charges](/reference/charges/list) or [list payments](/reference/payments/list).

Most list endpoints return items in reverse chronological order—the most
recently created object appears first, and the oldest appears last. Endpoint
reference pages call out documented exceptions such as stable lexicographic
order.

## Parameters

<ParamField query="limit" type="number" default="10">
  A limit on the number of objects to be returned, between 1 and 100.
</ParamField>

<ParamField query="cursor" type="string">
  A cursor for pagination. Pass the `cursor` value from a previous response to fetch the next page.
  Unlike `starting_after` and `ending_before` which accept object IDs, `cursor` should only be used
  with the cursor value returned by the list endpoint. Treat this value as opaque: do not decode,
  parse, inspect, or construct cursors yourself.
</ParamField>

<ParamField query="starting_after" type="string">
  An object ID that defines your place in the list. For instance, if you make a list request
  and receive 100 objects ending with `item_12n4`, your subsequent call can include
  `starting_after=item_12n4` to fetch the next page.
</ParamField>

<ParamField query="ending_before" type="string">
  An object ID for backward pagination. For instance, if you make a list request and receive
  100 objects starting with `item_2d54`, your subsequent call can include `ending_before=item_2d54`
  to fetch the previous page.
</ParamField>

<Warning>
  Only one of `cursor`, `starting_after`, or `ending_before` may be provided per request.
  Providing more than one will result in an error.
</Warning>

## Returns

Newer platform list endpoints return the standard list envelope:

```json theme={null}
{
  "object": "list",
  "data": [],
  "has_more": false
}
```

When `has_more` is `true`, use the last returned object's `id` as
`starting_after` to fetch the next page, or use the first returned object's
`id` as `ending_before` to page backward. These endpoints do not return a
top-level `cursor`; the `cursor` request parameter is reserved for endpoints
that explicitly return opaque cursor tokens.

Some list endpoints return a top-level `cursor` while more results exist.
These endpoints call out the `cursor` parameter in their reference pages:

<ResponseField name="cursor" type="string">
  A cursor for fetching the next page of results. This field is **only present when there are more results** to fetch.
  If the `cursor` field is absent from the response, you have reached the end of the list. Cursor
  values are opaque and may use different internal encodings across list endpoints.
</ResponseField>
