Groups list posts graph API does not return all posts in a thread

Administrator 0 Reputation points
2025-12-11T05:29:45.76+00:00

I'm trying to use the groups APIs to fetch all conversations threads and posts for a particular group in outlook. For that, I first fetched the group id, conversation id, and thread id. However, when listing posts, I'm seeing that while the contect correctly appears in the 'preview' field of the api, making a list posts calls returns a 404 and in some cases it does not return all posts visible in the ui (eg 5/6 posts). This happens consistently for the affected threads, and this was tried a few days after the posts were created. All necessary permissions have been granted and the api has been tested using both graph explorer and a python script. The api is being called in the format: GET https://graph.microsoft.com/v1.0/groups/{group_id}/conversations/{conversation_id}/threads/{thread_id}/posts
I have the following 2 questions:

  1. Does the api call need to be modified in some way?
  2. Can 1 conversation have multiple threads or is it a 1:1 mapping in outlook? If it is a 1:1 mapping can we directly call list threads and skip conversations?

Thanks

Exchange Online
Exchange Online
A cloud-based service included in Microsoft 365, delivering scalable messaging and collaboration features with simplified management and automatic updates.
0 comments No comments
{count} votes

2 answers

Sort by: Most helpful
  1. Steven-N 15,160 Reputation points Microsoft External Staff Moderator
    2025-12-11T08:42:56.5066667+00:00

    Hi Administrator

    Thank you for reaching out to Microsoft Q&A forum

    Based on my research, the 404 error occurs because the Graph API endpoint you’re using is correct, but the mismatch happens when conversations and threads aren’t always 1:1 in Outlook Groups. A conversation can contain multiple threads if participants change, so calling posts for only one thread may return fewer posts than what you see in the UI. The preview field shows the latest post in the conversation, even if that post belongs to a different thread.

    That said, in order to avoid 404 errors and missing posts, you can use the thread-only endpoint (/groups/{group_id}/threads/{thread_id}/posts) and, if multiple threads exist, fetch posts from each thread to capture the full conversation.

    Additionally, in a single Outlook conversation view, you might see messages that were actually split into multiple threads behind the scenes. For instance, if a conversation initially had everyone included (Thread A), and later someone replied only to a subset (Thread B), Outlook will display all messages in one conversation stream (since the subject didn’t change). However, Graph API will have two thread IDs, one for each subset of participants, both under the same conversation ID. Each thread’s posts list will only contain the messages for that thread’s participants.

    Example: You see 6 posts in an Outlook group conversation. If 5 were part of the original thread and 1 was a side email that excluded a recipient, Graph might return 5 posts when querying Thread A, and the other 1 post is in Thread B. The conversation’s preview could show text from that latest post (in Thread B), but if you only pulled Thread A’s posts, you’d miss it --> leading to the scenario you observed.

    Regarding your first question: Does the api call need to be modified in some way?

    No, the endpoint format you’re using is correct. The issue is not with the syntax but with how identifiers are referenced. A 404 typically means the thread ID doesn’t match the conversation ID in the path, or the resource doesn’t exist under that hierarchy. To simplify and avoid mismatches, you can skip the conversation ID and use the thread-only endpoint:

    GET /groups/{group_id}/threads/{thread_id}/posts

    This is fully supported and often recommended for clarity.

    Regarding your second question: Can 1 conversation have multiple threads or is it a 1:1 mapping in outlook? If it is a 1:1 mapping, can we directly call list threads and skip conversations?

    Yes, but it’s not always 1:1. A conversation can contain multiple threads if participants change (e.g., someone replies to a subset of recipients). Outlook shows them as one conversation, but Graph splits them into separate threads under the same conversation ID.

    • If your conversation truly has one thread, you can safely skip the conversation layer and work directly with threads.
    • If multiple threads exist, you’ll need to fetch posts from each thread to get the full picture.

    Link references:

    https://v4.hkg1.meaqua.org/en-us/graph/api/conversationthread-list-posts?view=graph-rest-1.0&tabs=http

    https://v4.hkg1.meaqua.org/en-us/graph/api/resources/conversationthread?view=graph-rest-1.0

    https://stackoverflow.com/questions/35405567/whats-the-difference-between-conversationthread-and-conversation

    Note: Microsoft is providing this information as a convenience to you. These sites are not controlled by Microsoft, and Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. Please ensure that you fully understand the risks before using any suggestions from the above link.

    Hope my answer will help you, for any further concern, kindly let me know in the comment section.


    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.

    You found this answer helpful.

  2. Q&A Assist
    2025-12-11T05:29:59.22+00:00
    AI generated content. This question contains an answer created with AI from Q&A Assist. Learn more

    When using the Microsoft Graph API to fetch posts from a group conversation, encountering a 404 error may indicate that the specific post you are trying to access does not exist or is not available due to permission issues or incorrect identifiers. Here are some points to consider:

    1. Flaky Behavior or Call Modification: It could be a temporary issue with the API or the identifiers being used. Ensure that the group_id, conversation_id, and thread_id are correct and that the post you are trying to access is indeed part of the thread. If you are consistently getting a 404 for certain posts, it may be worth checking if those posts have been deleted or if there are any restrictions on visibility.
    2. Conversation and Threads Mapping: In Outlook, a conversation typically corresponds to a single thread. Therefore, you can generally assume a 1:1 mapping between conversations and threads. This means that if you have the conversation ID, you can directly call to list threads without needing to go through the conversation layer. However, it’s always good to verify the structure of the specific API responses you are working with, as there may be nuances depending on the specific implementation.

    If you continue to experience issues, consider reaching out to Microsoft support or checking the API documentation for any updates or changes that might affect your calls.


    References:

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.