---
title: "Pagination"
description: "Cursor pagination for Partner API list endpoints."
url: "https://portal.konghotels.cloud/guides/pagination"
image: "https://portal.konghotels.cloud/_og/d/c_Ocean.takumi,title_Pagination,description_Cursor+pagination+for+Partner+API+list+endpoints.,props_eyJ0aGVtZSI6eyJtb2RlIjoibGlnaHQiLCJjb2xvcnMiOnsicHJpbWFyeSI6IiMwRTJBMUYifX19,p_Ii9ndWlkZXMvcGFnaW5hdGlvbiI,s_ECuw4U10ItBidQ3i.png"
---

# Pagination

List endpoints use cursors, so pages stay stable while inventory and bookings change underneath you.

## [Following the cursor](#following-the-cursor)

Follow `links.next`, or pass `meta.next_cursor` as `cursor`, until it is `null`. `per_page` sets the page size.

```bash
curl "https://api.konghotels.cloud/reservations?per_page=2" -H "apikey: $KONG_HOTELS_API_KEY"
# → follow links.next until it is null
```

```js
let url = 'https://api.konghotels.cloud/reservations?per_page=50'
const reservations = []

while (url) {
  const res = await fetch(url, { headers: { apikey: process.env.KONG_HOTELS_API_KEY } })
  const page = await res.json()
  reservations.push(...page.data)
  url = page.links.next
}
```

## [The change feed is different](#the-change-feed-is-different)

`GET /changes` uses its own `since` and `next_cursor` sequence, and you keep calling while `meta.has_more` is `true`. See [Staying in sync](https://portal.konghotels.cloud/guides/staying-in-sync).