{"id":2079,"date":"2025-12-17T09:17:24","date_gmt":"2025-12-17T10:17:24","guid":{"rendered":"http:\/\/gogetmuscle.com\/?p=2079"},"modified":"2025-12-17T17:44:25","modified_gmt":"2025-12-17T17:44:25","slug":"events-api-v3-multiple-documentation-inaccuracies-and-broken-pagination","status":"publish","type":"post","link":"http:\/\/gogetmuscle.com\/index.php\/2025\/12\/17\/events-api-v3-multiple-documentation-inaccuracies-and-broken-pagination\/","title":{"rendered":"Events API v3 – Multiple Documentation Inaccuracies and Broken Pagination"},"content":{"rendered":"

Hi HubSpot team,<\/P>

I’ve been integrating with the Events API v3 (\/events\/v3\/events\/) and ran into several issues that either aren’t documented or are documented incorrectly. Sharing them here for visibility.<\/P>

\u00a0<\/P>

1. Pagination is broken<\/H2>

Pagination doesn’t work correctly. The API returns a valid paging.next.after token, but subsequent pages return almost nothing.<\/P>

Without eventType filter:<\/STRONG>
– Page 1: 100 results, valid after token
– Page 2: 1 result, no more paging
– Total via pagination: 101<\/P>

With eventType filter:<\/STRONG>
– Page 1: 100 results, valid after token
– Page 2: 0 results, no more paging
– Total via pagination: 100<\/P>

However, setting limit=2147483647\u00a0(max signed\u00a0<\/SPAN>32-bit int<\/SPAN>) returns 160+ results in a single response. The data exists, pagination just doesn’t traverse it.<\/P>

\u00a0<\/P>

2. limit parameter doesn’t work as documented<\/H2>

The docs say:<\/P>

limit (integer) – The maximum number of results to display per page<\/STRONG>.<\/BLOCKQUOTE>

This implies pagination, but setting a large limit value returns everything in one request. The parameter controls total results, not page size.<\/P>

This is actually the only working approach given bug #1, but the documentation is misleading.<\/P>

\u00a0<\/P>

3. sort parameter format is wrong in docs<\/H2>

Documentation states:<\/P>

sort (string[]) – Sort direction based on the timestamp of the event instance, ASCENDING or DESCENDING<\/STRONG>.<\/BLOCKQUOTE>

Actual behavior: passing sort=ASCENDING or sort=DESCENDING returns:<\/P>{“status”:”error”,”message”:”Only a single sort field ‘occurredAt’ is supported”}

The correct format is sort=occurredAt (ascending) or sort=-occurredAt (descending). Standard REST convention with minus prefix for descending, but not what’s documented.<\/P>

\u00a0<\/P>

4. id parameter has undocumented requirements<\/H2>

Documentation states you can filter by event instance ID:<\/P>

id (string[]) – ID of an event instance. IDs are 1:1 with event instances.<\/BLOCKQUOTE>

When I try this:<\/P>{
\n “status”: “error”,
\n “message”: “Queries using idempotency IDs require the event type 4-96000 be opted into the idempotency index. Idempotency index docs: https:\/\/product.hubteam.com\/docs\/hubspot-framework\/unified-events\/events\/indexes\/idempotency.html”
\n}

The linked URL is internal (product.hubteam.com), not accessible to developers. There’s no public documentation on the “idempotency index” or how to opt event types into it. Standard events like e_visited_page don’t support this filter at all.<\/P>

\u00a0<\/P>

Environment:<\/STRONG>
– API: Events v3 (\/events\/v3\/events\/)
– Account: Enterprise tier
– Auth: Private app with static token<\/P>

\u00a0<\/P>

Would appreciate clarification on these behaviors and updates to the documentation. Happy to provide more details or test fixes.<\/P>

Thanks!<\/P><\/p>\n","protected":false},"excerpt":{"rendered":"

Hi HubSpot team,I’ve been integrating with the Events API v3 (\/events\/v3\/events\/) and ran into several issues that either aren’t documented or are documented incorrectly. Sharing them here for visibility.\u00a01. Pagination is brokenPagination doesn’t work correctly. The API returns a valid paging.next.after token, but subsequent pages return almost nothing.Without eventType filter:– Page 1: 100 results, valid […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14],"tags":[],"_links":{"self":[{"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/posts\/2079"}],"collection":[{"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/comments?post=2079"}],"version-history":[{"count":1,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/posts\/2079\/revisions"}],"predecessor-version":[{"id":2080,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/posts\/2079\/revisions\/2080"}],"wp:attachment":[{"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/media?parent=2079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/categories?post=2079"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/tags?post=2079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}