Overview
We are updating the next_page_token value returned by the V2 List Notes for Contact endpoint so that it conforms to our V2 API standard. The token will change from a parseable URL to an opaque encrypted string.
This is a breaking change. If your integration parses, modifies, or constructs the next_page_token value, it will stop working when retrieving any page beyond the first once this change is live. Integrations that already treat the token as an opaque value and pass it back unchanged will continue to work without modification.
Effective date: Friday, August 10th, 2026
Affected endpoint:
GET /crm/rest/v2/contacts/{contact_id}/notes
What is changing
Before (current production behavior)
GET /crm/rest/v2/contacts/{contact_id}/notes returns a V1-style URL:
{
"notes": [ ... ],
"next_page_token": "https://api.infusionsoft.com/crm/rest/v2/contacts/1055/notes?page_size=2&page_token=3"
}
After (new behavior)
The endpoint will return an opaque encrypted token:
{
"notes": [ ... ],
"next_page_token": "d196922b565181604864a5ca99b28ea11e61a8ec44ce9cc1c901cce4ba1a1b0be8da05b7682a87a9bf080dc9898b3633463bddc93f5cc6e71cd5610e1433a9392026aa4f137a3ebea53cbd4f3d0e790d"
}
The token's contents have no meaning to the client. Treat it as a black box.
How to use the new token
To retrieve the next page of results, pass the next_page_token value back to the same endpoint in the page_token query parameter, exactly as received:
GET /crm/rest/v2/contacts/1055/notes?page_size=2&page_token=d196922b565181604864a5ca99b28ea1...
Continue paginating until the response no longer includes a next_page_token field (or the field is empty), which indicates you have reached the end of the result set.
Example: correct pagination loop (pseudo-code)
url = "/crm/rest/v2/contacts/1055/notes"
params = {"page_size": 50}
while True:
response = api.get(url, params=params)
process(response["notes"])
token = response.get("next_page_token")
if not token:
break
params["page_token"] = token
This pattern works with both the old and new token formats, because it never inspects or modifies the token value.
Recommended: implement a fallback during the transition
If your integration currently parses the URL-style token (for example, extracting the page_token query parameter from it), update your code to handle both formats before the change goes live. This protects your production integration from breaking the moment the cutover occurs.
A safe approach:
If
next_page_tokenlooks like a URL, parse out thepage_tokenquery parameter and use that value — this preserves your current behavior.Otherwise, use
next_page_tokendirectly as the value for thepage_tokenparameter on the next request.
Once the change is live and you've confirmed everything works, you can remove the URL-parsing branch.
Example fallback (pseudo-code)
def extract_page_token(next_page_token: str) -> str:
if next_page_token.startswith("http"):
# Old format: extract page_token query param from the URL
return parse_qs(urlparse(next_page_token).query)["page_token"][0]
# New format: opaque token, use as-is
return next_page_token
What will break if I do nothing
Any code that calls
urlparse, regex, or string operations on the URL-style token will produce incorrect results or raise an error.Any code that constructs the next-page request URL from the token's contents will hit a 404 or a malformed-request error.
In all of these cases, retrieving page 1 will still succeed, but page 2 and beyond will fail until your integration is updated.
FAQ
Q: Does this change affect page 1 of results?
No. The first page is requested without a page_token, and that behavior is unchanged. Only page 2 and beyond are affected.
Q: Will the old token format keep working after the change?
No. After Friday, July 3, 2026, the API will only accept the new opaque token format.
Q: How long is a token valid?
Treat tokens as short-lived. We recommend completing a pagination sequence promptly and not persisting tokens across long delays.
Q: Are other V2 endpoints affected?
This article covers only the V2 List Notes for Contact endpoint. Other V2 endpoints already conform to the standard.
Q: How do I know when I've reached the last page?
The response will omit next_page_token (or return it as an empty string) on the final page.
Comments
0 comments