Pagination
List endpoints page with a page number and a page size, and report the totals in the response.
Two areas paginate. Hotel availability uses Page and PageSize in the request body. Activity lists use page and per_page in the query string and return a meta.pagination block.
Activity lists
Pass page (1-based) and per_page. The response wraps the rows in data and adds meta.pagination.
{
"data": [ ... ],
"meta": {
"pagination": {
"total": 812,
"count": 50,
"per_page": 50,
"current_page": 1,
"total_pages": 17
}
},
"timestamp": "2026-10-15T16:24:49.648+08:00"
}To walk every page, request page 1, then keep going until current_page reaches total_pages.
const sessionId = "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f";
const all = [];
let page = 1, totalPages = 1;
do {
const params = new URLSearchParams({ SessionId: sessionId, page: String(page), per_page: "50" });
const res = await fetch("https://api.hermeseus.com/api/Activity/v2/products?" + params);
const body = await res.json();
all.push(...body.data);
totalPages = body.meta.pagination.total_pages;
page++;
} while (page <= totalPages);import requests
session_id = "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f"
all_rows, page, total_pages = [], 1, 1
while page <= total_pages:
res = requests.get(
"https://api.hermeseus.com/api/Activity/v2/products",
params={"SessionId": session_id, "page": page, "per_page": 50},
)
body = res.json()
all_rows.extend(body["data"])
total_pages = body["meta"]["pagination"]["total_pages"]
page += 1
Skip paging where a bulk endpoint exists.
For the full activity catalogue, call
/Activity/v2/products/all once instead of paging products.
Hotel availability
Send Page (1-based) and PageSize (1 to 200) in the body. The response reports pagination and the total result count under Meta. See the hotel booking API.

