An API that connects multiple Microsoft services, enabling data access and automation across platforms
This is expected behavior for the Microsoft 365 group conversation APIs being used.
The GET /groups/{groupId}/threads/{threadId}/posts operation returns the posts that currently belong to that thread, but the underlying group mailbox can change how messages are grouped into conversations/threads as users reply (especially via Outlook using Reply/Reply All). As a result, some replies that appear visually as part of the same conversation in the mailbox UI may not be exposed as multiple posts in the same thread via the Graph list posts API, even though individual posts remain addressable by their post_id.
Key points from the APIs involved:
-
GET /groups/{groupId}/threads/{threadId}/postslists posts for the specified thread and supports$selectand$expand, but does not guarantee that every message a user sees in the mailbox UI as part of that conversation will be returned as a separate post in that thread. -
GET /groups/{groupId}/threads/{threadId}/posts/{postId}can still retrieve a specific post by ID, which matches the observation that the older post is still accessible when thepost_idis known.
For a backup scenario where complete history is required, the practical workarounds are:
- Persist each
post_idas posts are first discovered (for example, by periodically listing posts or threads) and later rehydrate missing items withGET /groups/{groupId}/threads/{threadId}/posts/{postId}. - When creating conversations or threads programmatically (using
POST /groups/{id}/conversationsorPOST /groups/{id}/threads), keep track of the returned conversation and thread IDs and then uselist postsimmediately after creation to capture all posts at that point in time. - For subsequent replies added via Graph, use
conversationThread: replyorpost: replyso that all posts created by the backup process itself are reliably discoverable through the same APIs.
There is no documented server-side option in these APIs to force all mailbox messages that appear in the UI to be surfaced as distinct posts in list posts. Designing the backup flow around stored post_id values and Graph-created conversations/threads is the supported way to ensure complete retrieval.
References: