How to paginate Hikvision api results?
00:35 16 Apr 2026

I'm integrating with Hikvision access control via:

/AccessControl/AcsEvent?format=json

using AcsEventCond.

I need to fetch events incrementally across multiple requests.

My current approach uses serial bounds:

{
  "beginSerialNo": lastSerial,
  "endSerialNo": lastSerial + 29,
  "maxResults": 30,
  "major": 0,
  "minor": 0
}

Then I collect returned serialNo values and assume they are sequential, so I detect gaps like this:

$expected = range($startSerial, $maxRetrieved);
$missing = array_diff($expected, $retrieved);

But in practice the API returns non-continuous serials, for example:

1001, 1002, 1004, 1005

So my actual problem is:

What is the correct way to continue pagination / incremental retrieval when returned serialNo values are not continuous?

More specifically:

  • Should the next request start from max(returned serialNo) + 1?

  • Or should I avoid serial-based continuation entirely and use searchResultPosition or time-based queries instead?

what continuation logic is correct in client code when IDs are sparse?

hikvision