Blog Post

Exchange Team Blog
2 MIN READ

Message Trace Support Using Graph API is now in Public Preview

The_Exchange_Team's avatar
The_Exchange_Team
Platinum Contributor
Jan 22, 2026

EDIT 1/23/2026: We added the Onboarding section to the article.

We are excited to announce that Message Trace support using Graph API is now in Public Preview. In response to feedback from our community, we are making enhancements to improve the overall Message Trace experience. We plan to start GA roll-out by January-end and complete within the first week of February. With this RESTful web API, you can trace your email messages throughout your Exchange Online organization. The new Message Trace support using Graph API will replace the existing Message Trace support using Reporting Webservice API.

Please see our Graph API documentation for more details: exchangeMessageTrace resource type - Microsoft Graph beta | Microsoft Learn.

Onboarding

Due to the service principal-less authentication mitigation effort, you will need to provision Service Principal of our first-party appid: 8bd644d1-64a1-4d4b-ae52-2e0cbf64e373. To ensure requests are not blocked, please follow these guideline to provision: Create an enterprise application from a multitenant application - Microsoft Entra ID | Microsoft Learn. Once you have created a new service principal, it may take several hours for the provisioning to complete. During this time, you could receive 401 unauthorized errors. Please allow a few hours for the provisioning to complete and saturate.

See related post: Retirement of service principal-less authentication - Microsoft identity platform | Microsoft Learn

Migration guidance and deprecation timeline

If you currently use Message Trace using the Reporting Webservice, please migrate to use Message Trace using the Graph API before April 6, 2026.

Message Trace and Message Trace Detail support using the Reporting Webservice will begin deprecating on April 6, 2026.

Please note that all new organizations onboarding to Exchange Online already do not have access to Message Trace support using Reporting Webservice by default due to the migration effort.

Throttling

To reduce the risk of misuse and abuse of Exchange Online resources, ensure services availability for all users, and provide a predictable experience for our customers, we will implement a rate-based throttling limit based on the number of requests in a time period. All calls to message trace or message trace detail share the same quota. For a tenant, a maximum of 100 query message trace requests will be accepted within a 5-minute running window. Throttling is not applied if the request rate is lower than 100 requests in the past 5 minutes. If your tenant has automation set up to query more frequently than the throttling threshold, please update your automation to fit below the throttling limit.

Please note that query request and result size are not the same. A single query request can return up to a maximum of 5,000 results. This means that the maximum number of results you can pull in a 5-minute running window is 500,000 results. If you distribute the queries, you can retrieve up to a maximum of 144 million results daily. This throttling limit is to ensure fairness and service availability for all tenants.

Cmdlet

Tenant level limit

Get-MessageTraceV2  

100 requests per 5 min  

Get-MessageTraceDetailV2  

100 requests per 5 min  

Exchange Online Messaging Team

Updated Jan 23, 2026
Version 2.0

13 Comments

  • Kashi's avatar
    Kashi
    Occasional Reader

    New PowerShell commandlet can filter messages using StartDate and EndDate, but this new Graph API doesn't has this filter function. If it has, can you kindly give an example on how to do it?

    • You can use $fitler for that:

       

      GET https://graph.microsoft.com/beta/admin/exchange/tracing/messageTraces?$filter=receivedDateTime ge 2026-01-01T12:41:40.711Z and receivedDateTime le 2026-01-02T12:41:40.711Z

      • Kashi's avatar
        Kashi
        Occasional Reader

        Thanks for the reply. I tried but it causes an internal server error

  • Will this change how we run Get-MessageTraceV2 or Get-MessageTraceDetailV2 when connected through Exchange Online shell?

    Will this change the Message Trace UI?

     

  • OK, so after playing with this a bit, it's simply a wrapper for Get-MessageTraceV2/Get-MessageTraceDetailV2. Which is all fine and dandy, but is there any particular reason to have https://tdp-webapp-nam00.azurewebsites.net/admin/messageTraces exposed publicly?

     

  • I like the further integration of data in to graph.microsoft.com. And i know it is early and things are still unter development. If this should replace the old Reporting WebService so soon, then you should definitely enhance the documentation at https://learn.microsoft.com/en-us/graph/api/resources/exchangemessagetrace to answer common questions like:
    - Add some samples how to filter the tracking data based on Recipient, Subject, Start/End-time. We know about opath-filters but it would make it easiert
    - Will there be a concept with Sessionstate, USN  or similar?  We have customers, who grab the data from messagetracking regulary and store and parse them local. Maybe Change tracking Use delta query to track changes in Microsoft Graph data - Microsoft Graph | Microsoft Learn  (i have just seen the discontinued message on Microsoft Exchange Online Message Trace | Elastic integrations)
    - Will there be a subscription or WebHook option, so exchange will post every TraceID to a self hostet Webservice, so we can collect all data (similar to the Teams Call Data records Receive change notifications through webhooks - Microsoft Graph | Microsoft Learn

  • MikeCrowley's avatar
    MikeCrowley
    Iron Contributor

    Glad to have more ways to get to message tracking logs. I agree with Vasil in that we could use a little more on this topic, and also an explanation of Exchange Online's direction with APIs. It was just over two months ago that you released the new Admin API, and now we're seeing Message Tracking that isn't using it.

  • GrzeWier's avatar
    GrzeWier
    Copper Contributor

    What happens when quota is exceeded and I make a new requests ?

    Will service delay the response until throttling is gone or will the command fail ?

    • ericacho's avatar
      ericacho
      Icon for Microsoft rankMicrosoft

      Hi GrzeWier​ - If the quota is exceeded, the command will fail. The error message will show that the queries have surpassed the limit. 

  • There's not much substance in this post. Can you please expand a bit, make it clearer what the expected experience should be? I.e. is this going to replace the cmdlets, or is intended only as a replacement for the web service (bulk data retrieval). There is no payload or $filter support, so it seems to be the latter, but a clarification might be nice.

    Also, are there additional steps required to provision this or is the rollout incomplete, or did you miss the memo on service principal-less auth:

            "message": "Service principal-less Authentication failed: the service principal for App ID 8bd644d1-64a1-4d4b-ae52-2e0cbf64e373 was not found. Please create a service principal for this app in your tenant. Provisioning may take several hours to complete. For details, see: https://learn.microsoft.com/entra/identity-platform/retire-service-principal-less-authentication?branch=main#create-a-service-principal",

    • ericacho's avatar
      ericacho
      Icon for Microsoft rankMicrosoft

      Hi VasilMichev​ , Thanks for your feedback. Message Trace support on Graph API will be replacing Message Trace support on Reporting Webservice which customers are using for bulk data retrieval. This will not replace the Message Trace V2 cmdlets. We've added more context for the service principal-less authentication error in the blog under Onboarding for the meantime and we will be sharing a detailed onboarding document soon. 

    • Nino_Bilic's avatar
      Nino_Bilic
      Icon for Microsoft rankMicrosoft

      Indeed, we are aware of this (service principal requirement), and the team is working on it.