messageTrace
Message Trace. Search recent message delivery events with per-message detail. The messageTrace entity set lives under /exchange/v1.0/messageTrace in the Reports & insights category.
| Fact | Value |
|---|---|
| Path | /exchange/v1.0/messageTrace |
| Category | Reports & insights |
| Tier | Tier 8, Reports |
| Read role | Reports.Read.All (Community) |
| Write role | none (read-only) |
| Backing cmdlets | Get-MessageTraceV2, Get-MessageTraceDetailV2, Get-MessageTrace, Get-MessageTraceDetail |
Routes
Section titled “Routes”| Method | Path | Synopsis | Role | Plan |
|---|---|---|---|---|
| GET | /exchange/v1.0/messageTrace |
List messageTrace entries. | Reports.Read |
Community |
| GET | /exchange/v1.0/messageTrace/{messageTraceId:guid}/detail |
Per-hop detail for a specific message trace. Requires both messageTraceId (path) and recipientAddress (query). | Reports.Read |
Community |
GET /exchange/v1.0/messageTrace
Section titled “GET /exchange/v1.0/messageTrace”List messageTrace entries.
Backing cmdlet: Get-MessageTraceV2. Role: Reports.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
startDate |
query | datetime | ISO 8601 datetime, e.g. 2026-05-12T00:00:00Z. If omitted, defaults to 10 days ago (the max single-call window for Get-MessageTraceV2). | |
endDate |
query | datetime | ISO 8601 datetime, e.g. 2026-05-21T23:59:59Z. If omitted, defaults to now (UTC). | |
senderAddress |
query | string | SMTP address of the sender, e.g. alice@contoso.com | |
recipientAddress |
query | string | SMTP address of the recipient | |
messageId |
query | string | RFC 5322 Message-ID header (with or without angle brackets) | |
messageTraceId |
query | guid | EXO message-trace Guid; drill-down with /{messageTraceId}/detail | |
subject |
query | string | Free-text subject substring | |
subjectFilterType |
query | string | How the ‘subject’ value is matched. One of: Contains | StartsWith | EndsWith (default Contains). StartsWith/EndsWith are recommended over the default Contains. | |
status |
query | string | One of: Delivered | Failed | Pending | Quarantined | FilteredAsSpam | Expanded | GettingStatus | |
fromIP |
query | string | Sending IP address | |
toIP |
query | string | Receiving IP address | |
startingRecipientAddress |
query | string | Recipient address to start the next page from; used with endDate to fetch subsequent partial results without duplication. Maps -StartingRecipientAddress on Get-MessageTraceV2. | |
resultSize |
query | int | Cap on rows returned; default 1000, max 5000 |
List messageTrace
Section titled “List messageTrace”Stub auto-generated example for the messageTrace collection. Backing cmdlet: Get-MessageTrace. Live-verify with ?$top=3&$select=Id,Name and replace the synthetic body before promoting to Tier 1.
GET /exchange/v1.0/messageTrace?$top=3 HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#messageTrace", "value": []}Notes: Illustrative example derived from the cmdlet documentation, not a live capture: field names are real, values are placeholders.
Related: GET /exchange/v1.0/messageTrace/{key}
GET /exchange/v1.0/messageTrace/{messageTraceId:guid}/detail
Section titled “GET /exchange/v1.0/messageTrace/{messageTraceId:guid}/detail”Per-hop detail for a specific message trace. Requires both messageTraceId (path) and recipientAddress (query).
Backing cmdlet: Get-MessageTraceDetailV2. Role: Reports.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
recipientAddress |
query | string | SMTP address - REQUIRED by Get-MessageTraceDetailV2; the per-recipient slice you want | |
startDate |
query | datetime | ISO 8601 datetime; narrows the per-hop event window | |
endDate |
query | datetime | ISO 8601 datetime | |
messageId |
query | string | RFC 5322 Message-ID | |
senderAddress |
query | string | SMTP address of the sender | |
action |
query | string | Filter to a specific transport action | |
event |
query | string | Filter to a specific transport event |

