Building custom solutions that extend, automate, and integrate Microsoft 365 apps.
Please note that Q&A forum is a public platform, and moderators will modify the question to hide personal information in the description. Kindly ensure that you hide any personal or organizational information the next time you post an error or other details to protect personal data.
We're not Microsoft support; this is a user-to-user support forum. Moderators have no backend access and cannot directly intervene in Microsoft products. We provide only technical guidance and best-practice recommendations based on reported issues
I completely understand how critical this is, especially since your change-detection heuristic relies on the delta between these two timestamps, and the current behavior is causing a customer-facing indicator to go silent across multiple tenants.
After researching this behavior, there is currently no official public documentation or notice indicating that the update semantics of the lastModifiedDateTime field have changed, or that this behavior is expected. Since the OneNote web and desktop clients display the correct modification states while the API endpoint returns identical timestamps, this appears to be an unexpected metadata discrepancy on the server side.
Since this situation is impacting your production environment, you can implement an alternative validation flow to accurately track page updates without relying on the page-level timestamp.
Instead of polling the content of every single page (which could lead to throttling), you can use a two-tiered validation approach using the parent Section's metadata:
- Monitor the Parent Section: The
lastModifiedDateTimeon the parentonenoteSectionobject usually continues to update normally when any page within that section undergoes modifications. You can periodically check the section metadata:GET /me/onenote/sections/{section-id} - Trigger Selective Content Fetching: When you detect that a section's
lastModifiedDateTimehas advanced, it signals that an update occurred within that container. At this point, retrieve the content of the pages within that specific section:GET /me/onenote/pages/{page-id}/content - Compute and Compare Content Hashes: Compute a cryptographic hash (such as SHA-256) of the incoming
<body>content of the page. Compare this payload hash against a previously stored hash linked to that specificpage-idin your database.
By filtering your checks through the section-level timestamp first, you eliminate unnecessary data processing. You only fetch the full-page content when you confirm a change occurred somewhere in the section, allowing you to accurately detect exactly which page was edited.
However, I highly encourage you to submit your detailed report, especially your excellent "Expected behavior" and "Suggested solutions" sections directly to the official GitHub repository.
Reporting this on GitHub is the most effective way to flag this usability gap to the experts who design the schema and the Teams rendering engine, allowing them to provide further insights or log it as an official feature request.
I hope this helps.
If the answer is helpful, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click ""Comment"".
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.