Graph API Move Message API intermittently failing for specific email messages

Sangeetha D 0 Reputation points
2026-09-17T10:53:17.7266667+00:00

Hi Team,

The Move API is successfully moving emails for certain messages; however, few request, the same API call fails or does not move the message to destination folder as expected.

As part of the requirement, we are trying to move the eMail from "Auto" folder to "Manual" folder. we are receiving 201 success from GraphAPI but eMails are not moved to Manual folder.

Please investigate why the Graph API Move Message operation is failing for few messages while succeeding for others. Thanks,

Regards,

Sangeetha

Microsoft Security | Microsoft Graph
0 comments No comments

2 answers

Sort by: Most helpful
  1. Sangeetha D 0 Reputation points
    2026-09-17T12:33:03.9233333+00:00

    We have verified the below points but still issue persists

    1. We have verified the destination folder id which is correct. The request body contains destinationId
    2. Treat the response body as the source of truth after the move. Since the API creates a new copy in the destination folder, any logic that checks the original message ID in the target folder can appear as if the move failed. - No logic to check original message ID, we have verified outlook folders and confirmed
    3. If the app is moving from a custom folder such as Auto to another custom folder such as Manual, use the actual folder ID for Manual - We are using folderId which performing MoveAPI functionality
    4. Ensure the app has Mail.ReadWrite, which is the least-privileged permission listed for this API. - Yes, we could see success case as the few mails are moved to intendent folder
    5. Capture and inspect the returned message object from the 201 Created response for the moved item, then use that new item identity for any follow-up processing. - 201 response considered as success and eMails are moved to destination folder.

    Was this answer helpful?

    0 comments No comments

  2. AI answer

    2026-09-17T10:53:39.8166667+00:00

    A 201 Created response means the move request succeeded and returns the new message resource. The move operation creates a new copy of the message in the destination folder and removes the original message. Because the moved item is a new message resource, the message identifier changes after the move.

    For this scenario, verify these points:

    1. Confirm the destination folder identifier is correct. The request body must include destinationId, which can be the destination folder ID or a well-known folder name.
    2. Treat the response body as the source of truth after the move. Since the API creates a new copy in the destination folder, any logic that checks the original message ID in the target folder can appear as if the move failed.
    3. If the app is moving from a custom folder such as Auto to another custom folder such as Manual, use the actual folder ID for Manual rather than assuming a display name will resolve.
    4. Ensure the app has Mail.ReadWrite, which is the least-privileged permission listed for this API.
    5. Capture and inspect the returned message object from the 201 Created response for the moved item, then use that new item identity for any follow-up processing.

    Supported request pattern:

    POST /me/messages/{id}/move
    Content-Type: application/json
    
    {
      "destinationId": "{manual-folder-id}"
    }
    

    If the app is using PowerShell, the equivalent pattern is:

    $params = @{destinationId = "<manual-folder-id>"}
    Move-MgUserMessage -UserId $userId -MessageId $messageId -BodyParameter $params
    

    Key behavior relevant to the symptom:

    • Success response: 201 Created
    • Result: original message is removed, a new copy is created in the destination folder
    • Implication: checking only the old message ID can make a successful move look like a failure

    AI-generated content may be incorrect. Read our transparency notes for more information.

    Was this answer helpful?

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.