Skip to main content
Appenda
Sign inDownload

Page through long lists.

List operations return their items a page at a time. You ask for the next page with the cursor the last one gave you.

Ask for a page

Query parameterMeaning
limitItems per page, 1 to 100. Defaults to 50. A value outside that range is refused with 422.
cursorThe meta.next_cursor from the previous page. Leave it out for the first page.
curl "https://api.appenda.app/v1/tables?limit=100" \
  -H "Authorization: Bearer $APPENDA_API_KEY"

Read the page

{
  "data": [{ "id": "tbl_67ad65ba34a7bbfc643711b8531cba3f", "name": "Series B SaaS accounts" }],
  "meta": {
    "next_cursor": "eyJpZCI6InRibF84ZjJjMWEifQ",
    "has_more": true
  }
}
FieldMeaning
dataThe items on this page.
meta.has_moretrue when there is another page.
meta.next_cursorPass it as cursor to get the next page. It is null on the last page.

Get every page

  1. Call the list without cursor.
  2. While meta.has_more is true, call it again with cursor set to meta.next_cursor.
  3. Stop when meta.next_cursor is null.

A page of records can hold fewer than limit items even when meta.has_more is true, because it stops near 4 MiB. A short page does not mean the list has ended, so go by meta.has_more, never by the number of items.

A cursor is opaque: do not build or change one. It works only with the operation and filters that produced it. Pages follow a stable order, but edits made while you page can move an item from one page to another.

A cursor has no expiry time, but do not store it for later. If one is ever refused with 422, start again from the first page.

Keep your filter and sort unchanged between pages. Date filters compare YYYY-MM-DD calendar days or relative dates in your workspace's time zone (UTC if unset). See Conventions.

FAQs

Why do I see the same item on two pages?
Someone changed the list while you were paging. Pages keep a stable order, but an edit can move an item across a page boundary. Match items by id.
Can I reuse a cursor with a different filter?
No. A cursor belongs to the operation and filters that produced it. Start again without a cursor when you change the filter.
Does every list page the same way?
Almost. Lists answer data and meta with next_cursor and has_more, and each operation documents its sort order. Three answer in one go instead: List roles returns every role in data.roles, Get credit usage returns the whole date range (its meta always says has_more false), and Aggregate returns one result, not a list.