Hermeseus

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.