KennelBooker collection endpoints return a predictable page envelope so integrations can process large result sets safely.
Send request.page and request.pageSize in the query string. Page numbers are one-based, so the first page is 1.
request.page
request.pageSize
1
curl --request GET \ --url "https://api.kennelbooker.com/api/v1/bookings?request.page=1&request.pageSize=5" \ --header "X-Api-Key: kb_live_your_api_key" \ --header "Accept: application/json"
integer
25
page
pageSize
5
totalRecords
151
totalPages
31
items
array
[...]
The metadata describes the complete matching result set while items contains only the current page.
{ "page": 1, "pageSize": 5, "totalRecords": 151, "totalPages": 31, "items": [ { "bookingId": 229, "bookingType": "boarding", "reference": "KB000229", "status": "new", "customerId": 165, "customerName": "Example Customer", "petNames": "Milo", "numberOfPets": 1, "serviceId": 1, "checkInDate": "2026-05-07T00:00:00Z", "checkOutDate": "2026-05-08T00:00:00Z", "bookingPaid": false, "hasPayment": false } ] }
Read totalPages from each response and stop after processing that page. Do not calculate the final page solely from the number of items returned.
int page = 1; const int pageSize = 5; PagedResponse<BookingSummary> result; do { string url = String.Format( "https://api.kennelbooker.com/api/v1/bookings?request.page={0}&request.pageSize={1}", page, pageSize); HttpResponseMessage response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); string json = await response.Content.ReadAsStringAsync(); result = JsonConvert.DeserializeObject<PagedResponse<BookingSummary>>(json); foreach (BookingSummary booking in result.Items) { ProcessBooking(booking); } page++; } while (page <= result.TotalPages);
let page = 1; const pageSize = 5; let totalPages; do { const url = new URL( "https://api.kennelbooker.com/api/v1/bookings" ); url.searchParams.set("request.page", page); url.searchParams.set("request.pageSize", pageSize); const response = await fetch(url, { headers: { "X-Api-Key": process.env.KENNELBOOKER_API_KEY, "Accept": "application/json" } }); if (!response.ok) { throw new Error(`Request failed: ${response.status}`); } const result = await response.json(); totalPages = result.totalPages; for (const booking of result.items) { await processBooking(booking); } page++; } while (page <= totalPages);
Page numbers are one-based. Treat values below one as invalid.
Records can change while paging. Use the metadata returned by the API instead of caching page counts indefinitely.