mailboxes
Mailboxes. User, shared, room, and equipment mailboxes plus their settings. The mailboxes entity set lives under /exchange/v1.0/mailboxes in the Recipients category.
Routes
Section titled “Routes”| Method | Path | Synopsis | Role | Plan |
|---|---|---|---|---|
| GET | /exchange/v1.0/mailboxes |
List mailboxes entries. | Mailbox.Read |
Community |
| POST | /exchange/v1.0/mailboxes |
POST /mailboxes - provisions a new mailbox via New-Mailbox. Body shape depends on the mailbox type: Regular: { “name”, “userPrincipalName”, “password” }Resource: add “room”: true | “equipment”: true | “shared”: true | “discovery”: true (password not required for Room/Equipment/Shared). Returns 201 + Location header + the newly-created mailbox. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key} |
Get a single mailboxes entry by Identity. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key} |
PATCH /mailboxes/{key} - partial mailbox configuration update via Set-Mailbox. Body keys subset of . High-frequency L1/L2 use cases (forwarding, quotas, custom attributes, holds, archive, audit, address policies) all bind through this single endpoint. Returns 200 + the updated entity. | Mailbox.ReadWrite |
Pro |
| DELETE | /exchange/v1.0/mailboxes/{key} |
DELETE /mailboxes/{key} - removes a mailbox via Remove-Mailbox. Destructive: by default mailboxes go through soft-delete (recoverable for ~30 days). Pass ?permanentlyDelete=true to purge immediately; ?ignoreLegalHold=true to override hold protection; ?dryRun=true for -WhatIf. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration |
Get-MailboxAutoReplyConfiguration - out-of-office / vacation responder. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration |
PATCH /mailboxes/{key}/autoReplyConfiguration → Set-MailboxAutoReplyConfiguration. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/calendarConfiguration |
Get-MailboxCalendarConfiguration - calendar display + workdays + reminders. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/calendarConfiguration |
PATCH /mailboxes/{key}/calendarConfiguration → Set-MailboxCalendarConfiguration. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/calendarFolders |
Get-MailboxCalendarFolder - calendar folder publish/sharing settings. Defaults to the primary Calendar folder. | Mailbox.Read |
Community |
| GET | /exchange/v1.0/mailboxes/{key}/calendarProcessing |
Get-CalendarProcessing - room/equipment booking + delegate behavior. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/calendarProcessing |
PATCH /mailboxes/{key}/calendarProcessing → Set-CalendarProcessing. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/casMailbox |
Sub-resource of the mailboxes at GET /mailboxes/{key} - Client Access (POP/IMAP/MAPI/OWA) configuration. Backed by Get-CASMailbox. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/casMailbox |
PATCH /mailboxes/{key}/casMailbox → Set-CASMailbox (client-access protocol toggles). | Mailbox.ReadWrite |
Pro |
| POST | /exchange/v1.0/mailboxes/{key}/disableArchive |
POST /mailboxes/{key}/disableArchive - disables the archive mailbox via Disable-Mailbox -Archive. Use ?permanentlyDisable=true to skip the soft-delete recovery window; ?ignoreLegalHold=true for hold override; ?dryRun=true for -WhatIf. | Mailbox.ReadWrite |
Pro |
| POST | /exchange/v1.0/mailboxes/{key}/enableArchive |
POST /mailboxes/{key}/enableArchive - enables the archive mailbox for an existing mailbox via Enable-Mailbox -Archive. Optional body fields: { archiveDomain, displayName }. Returns 204. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/folderPermissions |
Sub-resource of the mailboxes at GET /mailboxes/{key} - list per-folder client ACLs. Backed by Get-MailboxFolderPermission. | MailboxPermission.Read |
Community |
| POST | /exchange/v1.0/mailboxes/{key}/folderPermissions |
POST /mailboxes/{key}/folderPermissions - add a per-folder ACL (Add-MailboxFolderPermission). Body: { folder, user, accessRights[] }. Returns 201 + Location. | MailboxPermission.ReadWrite |
Pro |
| PATCH | /exchange/v1.0/mailboxes/{key}/folderPermissions/{permissionId} |
PATCH /mailboxes/{key}/folderPermissions/{permissionId} - change an existing folder ACL’s rights (Set-MailboxFolderPermission). F38 (audit 2026-06-01): keyed by permissionId (“<folder>|<user>”, same key as DELETE) so the target is identified by the URL, not the body. Body: { accessRights[], sendNotificationToUser?, sharingPermissionFlags? }. Returns 204. | MailboxPermission.ReadWrite |
Pro |
| DELETE | /exchange/v1.0/mailboxes/{key}/folderPermissions/{permissionId} |
DELETE /mailboxes/{key}/folderPermissions/{permissionId} - remove a folder ACL (Remove-MailboxFolderPermission). permissionId is “<folder>|<user>”. Returns 204. | MailboxPermission.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/folderStatistics |
GET /mailboxes/{key}/folderStatistics?folderPath=Calendar - per-folder size and item count. folderPath is optional; if omitted, the cmdlet returns stats for every folder in the mailbox. Backed by Get-MailboxFolderStatistics. | Mailbox.Stats.Read |
Community |
| GET | /exchange/v1.0/mailboxes/{key}/folders |
Get-MailboxFolder - folder tree (Inbox, Sent Items, custom folders). | Mailbox.Read |
Community |
| GET | /exchange/v1.0/mailboxes/{key}/inboxRules |
Sub-resource of the mailboxes at GET /mailboxes/{key} - list InboxRule entries (Outlook/OWA Rules). | Mailbox.Read |
Community |
| POST | /exchange/v1.0/mailboxes/{key}/inboxRules |
POST /mailboxes/{key}/inboxRules - creates a per-mailbox rule via New-InboxRule. Cmdlet returns the rule with an auto-assigned numeric Identity; the Location header points at the created rule. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId} |
Sub-resource of the mailboxes at GET /mailboxes/{key} - single InboxRule by composite ruleId. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId} |
PATCH /mailboxes/{key}/inboxRules/{ruleId} - partial update via Set-InboxRule. Enable/disable toggle goes through the bound actions below, not PATCH. | Mailbox.ReadWrite |
Pro |
| DELETE | /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId} |
Sub-resource of the mailboxes at GET /mailboxes/{key} - remove a single InboxRule by composite ruleId. | Mailbox.ReadWrite |
Pro |
| POST | /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/disable |
POST /mailboxes/{key}/inboxRules/{ruleId}/disable - bound action via Disable-InboxRule. | Mailbox.ReadWrite |
Pro |
| POST | /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/enable |
POST /mailboxes/{key}/inboxRules/{ruleId}/enable - bound action via Enable-InboxRule. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/irmAccess |
Get-MailboxIRMAccess - delegates blocked from reading IRM-protected messages. | MailboxPermission.Read |
Community |
| PUT | /exchange/v1.0/mailboxes/{key}/irmAccess/{user} |
PUT /mailboxes/{key}/irmAccess/{user} - set a specific user’s IRM access level on this mailbox via Set-MailboxIRMAccess. Body { “accessLevel”: “Block” | “Allow” }. Returns 204. | Mailbox.ReadWrite |
Pro |
| DELETE | /exchange/v1.0/mailboxes/{key}/irmAccess/{user} |
DELETE /mailboxes/{key}/irmAccess/{user} - clear a user’s per-mailbox IRM access override via Remove-MailboxIRMAccess (-Identity {key} -User {user}). Returns 204. Audit 2026-05-29 parity wiring (reuses Mailbox.ReadWrite.All; Get/Set already shipped). | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/junkEmailConfiguration |
Get-MailboxJunkEmailConfiguration - safe / blocked sender lists. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/junkEmailConfiguration |
PATCH /mailboxes/{key}/junkEmailConfiguration → Set-MailboxJunkEmailConfiguration. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/location |
Get-MailboxLocation - geo / database location of the mailbox (multi-geo tenants). | Mailbox.Read |
Community |
| GET | /exchange/v1.0/mailboxes/{key}/messageConfiguration |
Get-MailboxMessageConfiguration - OWA reading-pane, signature, sort order… | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/messageConfiguration |
PATCH /mailboxes/{key}/messageConfiguration → Set-MailboxMessageConfiguration. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/permissions |
Sub-resource of the mailboxes at GET /mailboxes/{key} - list mailbox ACEs (FullAccess + folder ACLs). Backed by Get-MailboxPermission. | MailboxPermission.Read |
Community |
| POST | /exchange/v1.0/mailboxes/{key}/permissions |
POST /mailboxes/{key}/permissions - adds a mailbox ACE via Add-MailboxPermission (AccessRights parameter set). Audit 2026-05-22 H: entity-style URL (not /$ref), so per Architecture §2 Q3 returns 201 Created + Location pointing at the composite ID, not 204 like the link-style writes do. | MailboxPermission.ReadWrite |
Pro |
| POST | /exchange/v1.0/mailboxes/{key}/permissions/clearAutoMapping |
POST /mailboxes/{key}/permissions/clearAutoMapping - clears Outlook auto-mapping for the mailbox at GET /mailboxes/{key} (Remove-MailboxPermission -ClearAutoMapping). This is a MAILBOX-level operation (its parameter set takes only -Identity + the switch, no -User/-AccessRights), so it gets its own route rather than the composite-ID DELETE /permissions/{permissionId}. Returns 204. | MailboxPermission.ReadWrite |
Pro |
| POST | /exchange/v1.0/mailboxes/{key}/permissions/resetDefault |
POST /mailboxes/{key}/permissions/resetDefault - resets the mailbox’s “Default” permission entry to its out-of-box value for the mailbox at GET /mailboxes/{key} (Remove-MailboxPermission -ResetDefault). Mailbox-level (no -User/-AccessRights), so a dedicated route. Returns 204. | MailboxPermission.ReadWrite |
Pro |
| DELETE | /exchange/v1.0/mailboxes/{key}/permissions/{permissionId} |
DELETE /mailboxes/{key}/permissions/{permissionId} - removes a mailbox ACE by its composite ID (the same ID surfaced by GET /mailboxes/{key}/permissions: “{Identity}|{User}|{AccessRights}” e.g. [email protected]|[email protected]|FullAccess). The URL’s {key} is authoritative for the mailbox identity; the Identity prefix in the composite ID is ignored. Remaining cmdlet switches (Deny, GroupMailbox, IgnoreDefaultScope, BypassMasterAccountSid, SoftDeletedMailbox, InheritanceType) are query params. -ClearAutoMapping / -ResetDefault are slice 1b own-action endpoints. | MailboxPermission.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/recipientPermissions |
Sub-resource of the mailboxes at GET /mailboxes/{key} - list SendAs permissions. Backed by Get-RecipientPermission. Distinct ACL family from /permissions. | MailboxPermission.Read |
Community |
| POST | /exchange/v1.0/mailboxes/{key}/recipientPermissions |
POST /mailboxes/{key}/recipientPermissions - grants SendAs via Add-RecipientPermission. The cmdlet’s only valid AccessRights value is SendAs, hard-coded here per MS Learn docs. Audit 2026-05-22 H: entity-style URL returns 201 + Location. | Recipient.ReadWrite |
Pro |
| DELETE | /exchange/v1.0/mailboxes/{key}/recipientPermissions/{permissionId} |
DELETE /mailboxes/{key}/recipientPermissions/{permissionId} - revokes SendAs by composite ID (same shape as GET /mailboxes/{key}/recipientPermissions: “{Identity}|{Trustee}|{AccessRights}”). AccessRights is always SendAs per MS docs; we extract Trustee from the composite ID. | Recipient.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/regionalConfiguration |
Get-MailboxRegionalConfiguration - timezone, language, date/time formats. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/regionalConfiguration |
PATCH /mailboxes/{key}/regionalConfiguration → Set-MailboxRegionalConfiguration. | Mailbox.ReadWrite |
Pro |
| POST | /exchange/v1.0/mailboxes/{key}/restore |
POST /mailboxes/{key}/restore - recover a soft-deleted mailbox (within the 30-day window) via Undo-SoftDeletedMailbox. {key} is the soft-deleted mailbox identity (GUID / SMTP) - list candidates with GET /mailboxes?softDeletedMailbox=true. Optional body { “displayName”: “…”, “name”: “…” } renames on recovery. 204 on success; ?dryRun=true previews (-WhatIf). | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/spellingConfiguration |
Get-MailboxSpellingConfiguration - OWA spelling preferences. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/spellingConfiguration |
PATCH /mailboxes/{key}/spellingConfiguration → Set-MailboxSpellingConfiguration. | Mailbox.ReadWrite |
Pro |
| POST | /exchange/v1.0/mailboxes/{key}/startManagedFolderAssistant |
POST /mailboxes/{key}/startManagedFolderAssistant - manually trigger the Managed Folder Assistant (MRM / retention-tag processing) for this mailbox via Start-ManagedFolderAssistant. 204 on success; ?dryRun=true previews (-WhatIf) without running. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/statistics |
GET /mailboxes/{key}/statistics - mailbox-level size and item counts. Backed by Get-MailboxStatistics. Declared in EDM as the bound function ExchangeApi.getStatistics(); this Graph-style path is the friendlier surface for SPA clients. | Mailbox.Stats.Read |
Community |
| GET | /exchange/v1.0/mailboxes/{key}/sweepRules |
Sub-resource of the mailboxes at GET /mailboxes/{key} - list SweepRule entries (OWA Sweep). | Mailbox.Read |
Community |
| POST | /exchange/v1.0/mailboxes/{key}/sweepRules |
POST /mailboxes/{key}/sweepRules - creates a per-mailbox sweep rule via New-SweepRule. provider is required (OWA uses Exchange16). | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId} |
Sub-resource of the mailboxes at GET /mailboxes/{key} - single SweepRule by composite ruleId. | Mailbox.Read |
Community |
| PATCH | /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId} |
Sub-resource of the mailboxes at GET /mailboxes/{key} - partial update of a SweepRule. | Mailbox.ReadWrite |
Pro |
| DELETE | /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId} |
Sub-resource of the mailboxes at GET /mailboxes/{key} - remove a single SweepRule by composite ruleId. | Mailbox.ReadWrite |
Pro |
| GET | /exchange/v1.0/mailboxes/{key}/user |
Sub-resource of the mailboxes at GET /mailboxes/{key} - the Exchange User attached to this mailbox. | User.Read |
Community |
GET /exchange/v1.0/mailboxes
Section titled “GET /exchange/v1.0/mailboxes”List mailboxes entries.
Backing cmdlet: Get-Mailbox. Role: Mailbox.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
softDeletedMailbox |
query | bool (switch) | Return ONLY soft-deleted (still-recoverable) mailboxes instead of live ones. EXO-only, maps Get-Mailbox -SoftDeletedMailbox. These are the candidates for POST /mailboxes/{key}/restore (Undo-SoftDeletedMailbox). Note: soft-deleted user mailboxes appear with GUID-style Names; restore by the original UPN/SMTP. | |
includeInactiveMailbox |
query | bool (switch) | Also include inactive mailboxes (mailboxes placed on Litigation/In-Place Hold before soft-deletion, whose contents are preserved) alongside live mailboxes. EXO-only, maps Get-Mailbox -IncludeInactiveMailbox. | |
all |
query | bool (switch) | Return all results instead of the EXO default of 1000. Maps -ResultSize Unlimited on Get-Mailbox; prevents silent truncation in large tenants. | |
inactiveMailboxOnly |
query | bool (switch) | Return ONLY inactive mailboxes (placed on Litigation/In-Place Hold before soft-deletion) instead of live ones. EXO-only, maps Get-Mailbox -InactiveMailboxOnly. To include both active and inactive use ?includeInactiveMailbox=true instead. | |
anr |
query | string | Ambiguous Name Resolution: partial-string search over CommonName/DisplayName/FirstName/LastName/Alias. Maps -Anr on Get-Mailbox. | |
archive |
query | bool (switch) | Return only mailboxes that have an archive enabled. Maps -Archive on Get-Mailbox. | |
recipientTypeDetails |
query | string | Filter by mailbox subtype (comma-separated): UserMailbox, SharedMailbox, RoomMailbox, EquipmentMailbox, DiscoveryMailbox, GroupMailbox, … Maps -RecipientTypeDetails on Get-Mailbox. | |
groupMailbox |
query | bool (switch) | Return only Microsoft 365 Group mailboxes. Maps -GroupMailbox on Get-Mailbox. | |
migration |
query | bool (switch) | Return only migration mailboxes used by mailbox-move jobs. Maps -Migration on Get-Mailbox. | |
publicFolder |
query | bool (switch) | Return only public folder mailboxes. Maps -PublicFolder on Get-Mailbox. | |
mailboxPlan |
query | string | Filter by the mailbox plan that provisioned the mailbox. Maps -MailboxPlan on Get-Mailbox. |
List mailboxes (top 2 with $select)
Section titled “List mailboxes (top 2 with $select)”Returns mailboxes in the tenant. Use $top to cap row count, $select to project only the fields you need (the full Mailbox shape is ~250 props - heavy if you didn’t ask for it). Server enforces PageSize=100; the @odata.nextLink in the response paginates further if there are more rows.
GET /exchange/v1.0/mailboxes?$top=2&$select=Id,UserPrincipalName,DisplayName,Alias,PrimarySmtpAddress,RecipientTypeDetails,WhenCreated HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#mailboxes(Id,UserPrincipalName,DisplayName,Alias,PrimarySmtpAddress,RecipientTypeDetails,WhenCreated)", "value": [ { "@odata.type": "#ExchangeApi.SharedMailbox", "Id": "_TestUser", "DisplayName": "_TestUser", "Alias": "testmailbox", "RecipientTypeDetails": "SharedMailbox", "WhenCreated": "2026-03-31T17:57:27+03:00", }, { "@odata.type": "#ExchangeApi.SharedMailbox", "Id": "[Forward]", "DisplayName": "[Forward]", "Alias": "fwdcontoso", "RecipientTypeDetails": "SharedMailbox", "WhenCreated": "2026-03-30T17:53:14+03:00", } ]}Notes: Server caps PageSize at 100 even if $top is larger. For full enumeration use repeated calls following @odata.nextLink.
Related: GET /exchange/v1.0/mailboxes/{key}, GET /exchange/v1.0/mailboxes/{key}/permissions, GET /exchange/v1.0/mailboxes/{key}/statistics, PATCH /exchange/v1.0/mailboxes/{key}, DELETE /exchange/v1.0/mailboxes/{key}
List soft-deleted (recoverable) mailboxes
Section titled “List soft-deleted (recoverable) mailboxes”Returns ONLY soft-deleted (still-recoverable) mailboxes via Get-Mailbox -SoftDeletedMailbox (?softDeletedMailbox=true). These are the candidates for recovery with POST /mailboxes/{key}/restore. OData $top / $select / $filter compose with the switch. Restore by the mailbox’s original Guid / UserPrincipalName / PrimarySmtpAddress (not by the portal’s ‘ExRemoved-’ display address). Companion switch: ?includeInactiveMailbox=true adds on-hold-then-deleted mailboxes to the LIVE set.
GET /exchange/v1.0/mailboxes?softDeletedMailbox=true&$top=5&$select=DisplayName,UserPrincipalName,RecipientTypeDetails,Guid,WhenSoftDeleted HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OKContent-Type: application/json; charset=utf-8
{ "@odata.context": "https://api.contoso.com/exchange/v1.0/$metadata#mailboxes(DisplayName,UserPrincipalName,RecipientTypeDetails,Guid,WhenSoftDeleted)", "value": [ { "@odata.type": "#ExchangeApi.SharedMailbox", "Guid": "7b80f57a-a603-4a15-b2ed-40134f806fa4", "DisplayName": "exonaut-archive-shared", "RecipientTypeDetails": "SharedMailbox", "WhenSoftDeleted": "2026-05-29T21:01:35+03:00" }, { "Guid": "38aeb170-52b1-4f0b-a2b7-3981c9b7df1b", "DisplayName": "exonaut-leaver-user", "RecipientTypeDetails": "UserMailbox", "WhenSoftDeleted": "2026-05-29T20:42:10+03:00" } ]}Notes: Live-captured 2026-05-29 and sanitized (domain -> contoso.com). Verified the switch genuinely filters: live mailboxes returned 48, ?softDeletedMailbox=true returned 39 (a distinct set). Both a SharedMailbox and a UserMailbox were restored end-to-end via POST /mailboxes/{guid|upn}/restore (204) - shared mailboxes ARE Undo-SoftDeletedMailbox-recoverable.
Related: POST /exchange/v1.0/mailboxes/{key}/restore, GET /exchange/v1.0/recipients
POST /exchange/v1.0/mailboxes
Section titled “POST /exchange/v1.0/mailboxes”POST /mailboxes - provisions a new mailbox via New-Mailbox. Body shape depends on the mailbox type: Regular: { “name”, “userPrincipalName”, “password” }Resource: add “room”: true | “equipment”: true | “shared”: true | “discovery”: true (password not required for Room/Equipment/Shared). Returns 201 + Location header + the newly-created mailbox.
Backing cmdlet: New-Mailbox. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
name |
body | yes | ||
activeSyncMailboxPolicy |
body | |||
addressBookPolicy |
body | |||
alias |
body | |||
archive |
body | boolean (switch) | ||
discovery |
body | boolean (switch) | ||
displayName |
body | |||
enableRoomMailboxAccount |
body | |||
equipment |
body | boolean (switch) | ||
firstName |
body | |||
immutableId |
body | |||
initials |
body | |||
lastName |
body | |||
mailboxPlan |
body | |||
mailboxRegion |
body | |||
microsoftOnlineServicesID |
body | |||
moderatedBy |
body | |||
moderationEnabled |
body | |||
organizationalUnit |
body | |||
password |
body | |||
primarySmtpAddress |
body | |||
remotePowerShellEnabled |
body | |||
resetPasswordOnNextLogon |
body | |||
retentionPolicy |
body | |||
roleAssignmentPolicy |
body | |||
room |
body | boolean (switch) | ||
roomMailboxPassword |
body | |||
samAccountName |
body | |||
sendModerationNotifications |
body | |||
shared |
body | boolean (switch) | ||
sharingPolicy |
body | |||
throttlingPolicy |
body | |||
userPrincipalName |
body | |||
dryRun |
query | bool (switch) |
Create a mailbox without the required name
Section titled “Create a mailbox without the required name”New-Mailbox requires a name. Omitting it returns the canonical 400 BadRequest envelope.
POST /exchange/v1.0/mailboxes HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "password": "S@mpleP4ssw0rd!"}HTTP/1.1 400 Bad Request
{ "error": { "code": "BadRequest", "message": "The required field 'name' is missing.", "target": "name" }, "correlationId": "0HN7Q4ABCDEF0:00000001"}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes
Create a user mailbox
Section titled “Create a user mailbox”Provisions a new user mailbox via New-Mailbox. Name is required; userPrincipalName + password select the regular User parameter set.
POST /exchange/v1.0/mailboxes HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "name": "exonaut-sample-mailboxes", "displayName": "Exonaut Sample Mailbox", "alias": "exonaut-sample-mailboxes", "password": "S@mpleP4ssw0rd!"}HTTP/1.1 201 CreatedLocation: /exchange/v1.0/mailboxes/exonaut-sample-mailboxes
{ "Id": "exonaut-sample-mailboxes", "Identity": "exonaut-sample-mailboxes", "Name": "exonaut-sample-mailboxes", "DisplayName": "Exonaut Sample Mailbox", "RecipientTypeDetails": "UserMailbox"}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes
GET /exchange/v1.0/mailboxes/{key}
Section titled “GET /exchange/v1.0/mailboxes/{key}”Get a single mailboxes entry by Identity.
Backing cmdlet: Get-Mailbox. Role: Mailbox.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
softDeletedMailbox |
query | bool (switch) | Look up a soft-deleted (still-recoverable) mailbox by its identity instead of a live one. EXO-only, maps Get-Mailbox -SoftDeletedMailbox. |
Get a single mailbox by Identity
Section titled “Get a single mailbox by Identity”Returns one mailbox by Identity - UPN, alias, primary SMTP, Id, or ExchangeGuid all work as keys. URL-encode the value if it contains @ or other special characters.
GET /exchange/v1.0/mailboxes/{key}?$select=Id,UserPrincipalName,DisplayName,Alias,PrimarySmtpAddress,RecipientTypeDetails,WhenCreated,ArchiveStatus,LitigationHoldEnabled,HiddenFromAddressListsEnabled HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#mailboxes(Id,UserPrincipalName,DisplayName,Alias,PrimarySmtpAddress,RecipientTypeDetails,WhenCreated,ArchiveStatus,LitigationHoldEnabled,HiddenFromAddressListsEnabled)/$entity", "Id": "a003556f-d8a0-4b72-b8fb-24813d53195a", "DisplayName": "John Woods", "Alias": "john.woods", "RecipientTypeDetails": "UserMailbox", "HiddenFromAddressListsEnabled": false, "WhenCreated": "2026-03-30T17:05:44+03:00", "ArchiveStatus": "None", "LitigationHoldEnabled": false}Related: GET /exchange/v1.0/mailboxes, GET /exchange/v1.0/mailboxes/{key}/permissions, GET /exchange/v1.0/mailboxes/{key}/statistics, PATCH /exchange/v1.0/mailboxes/{key}
Mailbox not found
Section titled “Mailbox not found”When the URL key resolves to no mailbox (typo, deleted user, wrong tenant), returns 404 with the canonical envelope. correlationId in the response links to the server log if you need to debug.
GET /exchange/v1.0/mailboxes/{key} HTTP/1.1Authorization: Bearer {token}HTTP/1.1 404 Not Found
{ "error": { "code": "NotFound", "message": "Exchange object 'nope-not-a-mailbox' could not be found.", "target": "identity", "innerError": { "cmdlet": "Get-Mailbox" } }, "correlationId": "0HNLOH7JVNS5S:00000001"}Related: GET /exchange/v1.0/mailboxes
PATCH /exchange/v1.0/mailboxes/{key}
Section titled “PATCH /exchange/v1.0/mailboxes/{key}”PATCH /mailboxes/{key} - partial mailbox configuration update via Set-Mailbox. Body keys subset of . High-frequency L1/L2 use cases (forwarding, quotas, custom attributes, holds, archive, audit, address policies) all bind through this single endpoint. Returns 200 + the updated entity.
Backing cmdlet: Set-Mailbox. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
acceptMessagesOnlyFrom |
body | |||
acceptMessagesOnlyFromDLMembers |
body | |||
acceptMessagesOnlyFromSendersOrMembers |
body | |||
accountDisabled |
body | |||
addressBookPolicy |
body | |||
alias |
body | |||
applyMandatoryProperties |
body | boolean (switch) | ||
archiveDomain |
body | |||
archiveName |
body | |||
archiveQuota |
body | |||
archiveStatus |
body | |||
archiveWarningQuota |
body | |||
auditAdmin |
body | |||
auditDelegate |
body | |||
auditEnabled |
body | |||
auditLogAgeLimit |
body | |||
auditOwner |
body | |||
autoArchivingEnabled |
body | |||
bypassModerationFromSendersOrMembers |
body | |||
calendarLoggingQuota |
body | |||
calendarRepairDisabled |
body | |||
calendarVersionStoreDisabled |
body | |||
clearThrottlingPolicyAssignment |
body | boolean (switch) | ||
createDTMFMap |
body | |||
customAttribute1 |
body | |||
customAttribute10 |
body | |||
customAttribute11 |
body | |||
customAttribute12 |
body | |||
customAttribute13 |
body | |||
customAttribute14 |
body | |||
customAttribute15 |
body | |||
customAttribute2 |
body | |||
customAttribute3 |
body | |||
customAttribute4 |
body | |||
customAttribute5 |
body | |||
customAttribute6 |
body | |||
customAttribute7 |
body | |||
customAttribute8 |
body | |||
customAttribute9 |
body | |||
dataEncryptionPolicy |
body | |||
defaultAuditSet |
body | |||
defaultPublicFolderMailbox |
body | |||
deliverToMailboxAndForward |
body | |||
displayName |
body | |||
downgradeHighPriorityMessagesEnabled |
body | |||
dumpsterMessagesPerFolderCountReceiveQuota |
body | |||
dumpsterMessagesPerFolderCountWarningQuota |
body | |||
elcProcessingDisabled |
body | |||
emailAddressDisplayNames |
body | |||
emailAddresses |
body | |||
emailAddressPolicyEnabled |
body | |||
enableRoomMailboxAccount |
body | |||
endDateForRetentionHold |
body | |||
enforcedTimestamps |
body | |||
excludeFromAllHolds |
body | boolean (switch) | ||
excludeFromAllOrgHolds |
body | boolean (switch) | ||
excludeFromOrgHolds |
body | |||
extendedPropertiesCountQuota |
body | |||
extensionCustomAttribute1 |
body | |||
extensionCustomAttribute2 |
body | |||
extensionCustomAttribute3 |
body | |||
extensionCustomAttribute4 |
body | |||
extensionCustomAttribute5 |
body | |||
externalOofOptions |
body | |||
folderHierarchyChildrenCountReceiveQuota |
body | |||
folderHierarchyChildrenCountWarningQuota |
body | |||
folderHierarchyDepthReceiveQuota |
body | |||
folderHierarchyDepthWarningQuota |
body | |||
foldersCountReceiveQuota |
body | |||
foldersCountWarningQuota |
body | |||
forwardingAddress |
body | |||
forwardingSmtpAddress |
body | |||
grantSendOnBehalfTo |
body | |||
hiddenFromAddressListsEnabled |
body | |||
imListMigrationCompleted |
body | |||
immutableId |
body | |||
isExcludedFromServingHierarchy |
body | |||
issueWarningQuota |
body | |||
journalArchiveAddress |
body | |||
languages |
body | |||
litigationHoldDate |
body | |||
litigationHoldDuration |
body | |||
litigationHoldEnabled |
body | |||
litigationHoldOwner |
body | |||
mailboxMessagesPerFolderCountReceiveQuota |
body | |||
mailboxMessagesPerFolderCountWarningQuota |
body | |||
mailboxRegion |
body | |||
mailTip |
body | |||
mailTipTranslations |
body | |||
maxBlockedSenders |
body | |||
maxReceiveSize |
body | |||
maxSafeSenders |
body | |||
maxSendSize |
body | |||
messageCopyForSendOnBehalfEnabled |
body | |||
messageCopyForSentAsEnabled |
body | |||
messageCopyForSMTPClientSubmissionEnabled |
body | |||
messageRecallProcessingEnabled |
body | |||
messageTracking |
body | |||
messageTrackingReadStatusEnabled |
body | |||
moderatedBy |
body | |||
moderationEnabled |
body | |||
name |
body | |||
office |
body | |||
primarySmtpAddress |
body | |||
prohibitSendQuota |
body | |||
prohibitSendReceiveQuota |
body | |||
provideConsent |
body | boolean (switch) | ||
provisionedForOfficeGraph |
body | boolean (switch) | ||
recalculateInactiveMailbox |
body | boolean (switch) | ||
recipientLimits |
body | |||
recoverableItemsQuota |
body | |||
recoverableItemsWarningQuota |
body | |||
rejectMessagesFrom |
body | |||
rejectMessagesFromDLMembers |
body | |||
rejectMessagesFromSendersOrMembers |
body | |||
removeComplianceTagHoldApplied |
body | boolean (switch) | ||
removeDelayHoldApplied |
body | boolean (switch) | ||
removeDelayReleaseHoldApplied |
body | boolean (switch) | ||
removeDisabledArchive |
body | boolean (switch) | ||
removeOrphanedHolds |
body | boolean (switch) | ||
requireSenderAuthenticationEnabled |
body | |||
resetPasswordOnNextLogon |
body | |||
resourceCapacity |
body | |||
resourceCustom |
body | |||
retainDeletedItemsFor |
body | |||
retainDeletedItemsUntilBackup |
body | |||
retentionComment |
body | |||
retentionHoldEnabled |
body | |||
retentionPolicy |
body | |||
retentionUrl |
body | |||
roleAssignmentPolicy |
body | |||
rulesQuota |
body | |||
samAccountName |
body | |||
schedulerAssistant |
body | |||
sendModerationNotifications |
body | |||
sharingPolicy |
body | |||
simpleDisplayName |
body | |||
singleItemRecoveryEnabled |
body | |||
startDateForRetentionHold |
body | |||
stsRefreshTokensValidFrom |
body | |||
throttlingPolicy |
body | |||
type |
body | |||
umDtmfMap |
body | |||
uniqueRecipientsCountLimitLevel |
body | |||
useDatabaseQuotaDefaults |
body | |||
useDatabaseRetentionDefaults |
body | |||
userCertificate |
body | |||
userPrincipalName |
body | |||
userSMimeCertificate |
body | |||
windowsEmailAddress |
body | |||
ignoreDefaultScope |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
Update mailbox configuration
Section titled “Update mailbox configuration”Partial mailbox update via Set-Mailbox. Body keys are a subset of the Set-Mailbox writable allowlist (forwarding, quotas, holds, etc.). Returns 200 + the updated mailbox.
PATCH /exchange/v1.0/mailboxes/{key} HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "displayName": "Exonaut Sample Mailbox (Renamed)", "issueWarningQuota": "9.5 GB (10,200,547,328 bytes)", "litigationHoldEnabled": true}HTTP/1.1 200 OK
{ "Id": "exonaut-sample-mailboxes", "Identity": "exonaut-sample-mailboxes", "DisplayName": "Exonaut Sample Mailbox (Renamed)", "IssueWarningQuota": "9.5 GB (10,200,547,328 bytes)", "LitigationHoldEnabled": true}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes
DELETE /exchange/v1.0/mailboxes/{key}
Section titled “DELETE /exchange/v1.0/mailboxes/{key}”DELETE /mailboxes/{key} - removes a mailbox via Remove-Mailbox. Destructive: by default mailboxes go through soft-delete (recoverable for ~30 days). Pass ?permanentlyDelete=true to purge immediately; ?ignoreLegalHold=true to override hold protection; ?dryRun=true for -WhatIf.
Backing cmdlet: Remove-Mailbox. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
permanentlyDelete |
query | bool (switch) | ||
ignoreLegalHold |
query | bool (switch) | ||
ignoreDefaultScope |
query | bool (switch) | ||
migration |
query | bool (switch) | ||
publicFolder |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
Delete a mailbox
Section titled “Delete a mailbox”Removes a mailbox via Remove-Mailbox. Soft-deletes by default (recoverable ~30 days); ?permanentlyDelete=true purges immediately. Returns 204.
DELETE /exchange/v1.0/mailboxes/{key} HTTP/1.1Authorization: Bearer {token}Content-Type: application/jsonHTTP/1.1 204 No ContentNotes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes
GET /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration
Section titled “GET /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration”Get-MailboxAutoReplyConfiguration - out-of-office / vacation responder.
Backing cmdlet: Get-MailboxAutoReplyConfiguration. Role: Mailbox.Read (Community).
Get a mailbox’s automatic reply configuration
Section titled “Get a mailbox’s automatic reply configuration”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the out-of-office (vacation responder) settings, including the auto-reply state, scheduled window, and internal/external messages.
GET /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "autoReplyState": "Disabled", "state": null, "startTime": "2026-05-29T18:00:00+03:00", "endTime": "2026-05-30T18:00:00+03:00", "internalMessage": "", "externalMessage": "", "externalAudience": "All", "createOOFEvent": false, "autoDeclineFutureRequestsWhenOOF": false, "declineAllEventsForScheduledOOF": false, "declineEventsForScheduledOOF": false, "declineMeetingMessage": "", "oofEventSubject": "", "eventsToDeleteIDs": null}Related: GET /exchange/v1.0/mailboxes/{key}, PATCH /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration
PATCH /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration”PATCH /mailboxes/{key}/autoReplyConfiguration → Set-MailboxAutoReplyConfiguration.
Backing cmdlet: Set-MailboxAutoReplyConfiguration. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
autoDeclineFutureRequestsWhenOOF |
body | |||
autoReplyState |
body | |||
createOOFEvent |
body | |||
declineAllEventsForScheduledOOF |
body | |||
declineEventsForScheduledOOF |
body | |||
declineMeetingMessage |
body | |||
endTime |
body | |||
eventsToDeleteIDs |
body | |||
externalAudience |
body | |||
externalMessage |
body | |||
internalMessage |
body | |||
oofEventSubject |
body | |||
startTime |
body | |||
dryRun |
query | bool (switch) |
Set the out-of-office auto-reply
Section titled “Set the out-of-office auto-reply”Sub-resource of the mailbox at GET /mailboxes/{key}/autoReplyConfiguration - partial update via Set-MailboxAutoReplyConfiguration. Returns 200 + the updated configuration.
PATCH /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "autoReplyState": "Enabled", "externalAudience": "All",}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes", "AutoReplyState": "Enabled", "ExternalAudience": "All",}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/autoReplyConfiguration, GET /exchange/v1.0/mailboxes
GET /exchange/v1.0/mailboxes/{key}/calendarConfiguration
Section titled “GET /exchange/v1.0/mailboxes/{key}/calendarConfiguration”Get-MailboxCalendarConfiguration - calendar display + workdays + reminders.
Backing cmdlet: Get-MailboxCalendarConfiguration. Role: Mailbox.Read (Community).
Get a mailbox’s calendar configuration
Section titled “Get a mailbox’s calendar configuration”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the calendar display preferences, working hours, reminder settings, and events-from-email options for a single mailbox.
GET /exchange/v1.0/mailboxes/{key}/calendarConfiguration HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "identity": "shared-projects", "principal": "LegacyDn: /o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=b95cae9b8f1d4b0eae92f8afad103fc9-shared-projects, RecipientType: UserMailbox, RecipientTypeDetails: SharedMailbox, Selected Mailbox: Display Name: shared-projects, Mailbox Guid: 7c1f2e3a-44d5-4f06-9b21-0a8e5c6d7e91, Mailbox Database Guid: 9b2bf06b-6c7c-4221-adb7-eecf47f237f3, Location: ServerFqdn: AM6PR02MB4360.eurprd02.prod.outlook.com, ServerVersion: 1943371847, DatabaseName: EURPR02DG084-db095, HomePublicFolderDatabaseGuid: 00000000-0000-0000-0000-000000000000", "workDays": "Weekdays", "workingHoursStartTime": "08:00:00", "workingHoursEndTime": "17:00:00", "workingHoursTimeZone": "GTB Standard Time", "weekStartDay": "Sunday", "firstWeekOfYear": "FirstDay", "inferredTimeZone": null, "showWeekNumbers": false, "timeIncrement": null, "remindersEnabled": true, "reminderSoundEnabled": true, "defaultReminderTime": null, "useBrightCalendarColorThemeInOwa": false, "defaultMeetingDuration": 30, "defaultMinutesToReduceLongEventsBy": 10, "defaultMinutesToReduceShortEventsBy": 5, "autoDeclineWhenBusy": false, "deleteMeetingRequestOnRespond": true, "preserveDeclinedMeetings": false, "shortenEventScopeDefault": "None", "conversationalSchedulingEnabled": true, "locationDetailsInFreeBusy": "Desk", "addOnlineMeetingToAllEvents": false, "onlineMeetingsByDefaultEnabled": false, "isDefaultMeetingProviderSetByUser": false, "defaultOnlineMeetingProvider": "TeamsForBusiness", "allowedOnlineMeetingProviders": "TeamsForBusiness BlueJeans GoToMeeting Webex Zoom GoogleMeet JioMeet RingCentral AmazonChimePublic AmazonChimePrivate AlibabaDingTalk FacebookWorkplace AppleFacetime ClaroVideoconferencia ZoomCustom", "agendaPaneEnabled": true, "agendaMailEnabled": false, "agendaMailIntroductionEnabled": true, "dailyAgendaMailSchedule": "Default", "skipAgendaMailOnFreeDays": true, "eventsFromEmailEnabled": true, "eventsFromEmailDelegateChecked": false, "eventsFromEmailShadowMailboxChecked": false, "createEventsFromEmailAsPrivate": true, "reportEventsCreatedFromEmailEnabled": true, "diningEventsFromEmailEnabled": true, "entertainmentEventsFromEmailEnabled": true, "flightEventsFromEmailEnabled": true, "hotelEventsFromEmailEnabled": true, "invoiceEventsFromEmailEnabled": true, "packageDeliveryEventsFromEmailEnabled": false, "packageDeliveryEventsFromEmailSystemDefault": "False", "rentalCarEventsFromEmailEnabled": true, "serviceAppointmentEventsFromEmailEnabled": true, "isCalendarSectionEnabled": true, "isCalendarFolderPropertiesSectionEnabled": true, "isMailboxSectionEnabled": true, "isWorkingHoursSectionEnabled": true, "localEventsEnabled": false, "localEventsLocation": null, "weatherEnabled": false, "weatherLocationBookmark": "0", "weatherLocations": null, "weatherUnit": "Default", "calendarFeedsPreferredLanguage": null, "calendarFeedsPreferredRegion": null, "calendarFeedsRootPageId": null, "workspaceUserEnabled": false, "schema": "Microsoft.Exchange.Data.Storage.Management.MailboxCalendarConfigurationSchema"}Related: GET /exchange/v1.0/mailboxes/{key}, PATCH /exchange/v1.0/mailboxes/{key}/calendarConfiguration
PATCH /exchange/v1.0/mailboxes/{key}/calendarConfiguration
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/calendarConfiguration”PATCH /mailboxes/{key}/calendarConfiguration → Set-MailboxCalendarConfiguration.
Backing cmdlet: Set-MailboxCalendarConfiguration. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
agendaMailEnabled |
body | |||
agendaMailIntroductionEnabled |
body | |||
agendaPaneEnabled |
body | |||
autoDeclineWhenBusy |
body | |||
calendarFeedsPreferredLanguage |
body | |||
calendarFeedsPreferredRegion |
body | |||
calendarFeedsRootPageId |
body | |||
conversationalSchedulingEnabled |
body | |||
createEventsFromEmailAsPrivate |
body | |||
dailyAgendaMailSchedule |
body | |||
defaultMeetingDuration |
body | |||
defaultMinutesToReduceLongEventsBy |
body | |||
defaultMinutesToReduceShortEventsBy |
body | |||
defaultOnlineMeetingProvider |
body | |||
defaultReminderTime |
body | |||
deleteMeetingRequestOnRespond |
body | |||
diningEventsFromEmailEnabled |
body | |||
entertainmentEventsFromEmailEnabled |
body | |||
eventsFromEmailEnabled |
body | |||
firstWeekOfYear |
body | |||
flightEventsFromEmailEnabled |
body | |||
hotelEventsFromEmailEnabled |
body | |||
invoiceEventsFromEmailEnabled |
body | |||
locationDetailsInFreeBusy |
body | |||
mailboxLocation |
body | |||
onlineMeetingsByDefaultEnabled |
body | |||
packageDeliveryEventsFromEmailEnabled |
body | |||
preserveDeclinedMeetings |
body | |||
remindersEnabled |
body | |||
reminderSoundEnabled |
body | |||
rentalCarEventsFromEmailEnabled |
body | |||
serviceAppointmentEventsFromEmailEnabled |
body | |||
shortenEventScopeDefault |
body | |||
showWeekNumbers |
body | |||
skipAgendaMailOnFreeDays |
body | |||
timeIncrement |
body | |||
useBrightCalendarColorThemeInOwa |
body | |||
weatherEnabled |
body | |||
weatherLocationBookmark |
body | |||
weatherLocations |
body | |||
weatherUnit |
body | |||
weekStartDay |
body | |||
workDays |
body | |||
workingHoursEndTime |
body | |||
workingHoursStartTime |
body | |||
workingHoursTimeZone |
body | |||
workspaceUserEnabled |
body | |||
dryRun |
query | bool (switch) |
Update calendar display settings
Section titled “Update calendar display settings”Sub-resource of the mailbox at GET /mailboxes/{key}/calendarConfiguration - partial update via Set-MailboxCalendarConfiguration. Returns 200 + the updated configuration.
PATCH /exchange/v1.0/mailboxes/{key}/calendarConfiguration HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "workDays": "Weekdays", "workingHoursStartTime": "08:00:00", "workingHoursEndTime": "17:00:00", "weekStartDay": "Monday"}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes", "WorkDays": "Weekdays", "WorkingHoursStartTime": "08:00:00", "WorkingHoursEndTime": "17:00:00", "WeekStartDay": "Monday"}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/calendarConfiguration, GET /exchange/v1.0/mailboxes
GET /exchange/v1.0/mailboxes/{key}/calendarFolders
Section titled “GET /exchange/v1.0/mailboxes/{key}/calendarFolders”Get-MailboxCalendarFolder - calendar folder publish/sharing settings. Defaults to the primary Calendar folder.
Backing cmdlet: Get-MailboxCalendarFolder. Role: Mailbox.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
folder |
query | string |
Get a mailbox calendar folder’s publish and sharing settings
Section titled “Get a mailbox calendar folder’s publish and sharing settings”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the calendar publishing and sharing configuration for a mailbox’s calendar folder. Defaults to the primary Calendar folder; pass ?folder= to target another calendar folder.
GET /exchange/v1.0/mailboxes/{key}/calendarFolders HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "identity": "john.woods:\\Calendar", "mailboxFolderId": "john.woods:\\Calendar", "publishEnabled": false, "publishedCalendarUrl": null, "publishedCalendarUrlRaw": null, "publishedICalUrl": null, "publishedICalUrlRaw": null, "searchableUrlEnabled": false, "detailLevel": "AvailabilityOnly", "publishDateRangeFrom": "ThreeMonths", "publishDateRangeTo": "ThreeMonths", "defaultOnlineMeetingProvider": "TeamsForBusiness", "allowedOnlineMeetingProviders": "TeamsForBusiness BlueJeans GoToMeeting Webex Zoom GoogleMeet JioMeet RingCentral AmazonChimePublic AmazonChimePrivate AlibabaDingTalk FacebookWorkplace AppleFacetime ClaroVideoconferencia ZoomCustom", "calendarSharingPermissionLevel": "Null", "calendarSharingOwnerSmtpAddress": "", "calendarSharingFolderFlags": "None", "sharingLevelOfDetails": "None", "sharingPermissionFlags": "None", "sharingOwnerRemoteFolderId": "AAA=", "creationTime": "2026-03-16T15:47:55", "lastAttemptedSyncTime": "0001-01-02T00:00:00", "lastSuccessfulSyncTime": "0001-01-02T00:00:00", "sharedCalendarSyncStartDate": "0001-01-02T00:00:00", "syncState": null, "syncStatesTelemetry": null, "delegateInformation": "Delegate Information was not calculated.", "inconsistentDelegateEvents": null, "extendedFolderFlags": null, "extendedFolderFlags2": null}Related: GET /exchange/v1.0/mailboxes/{key}, GET /exchange/v1.0/mailboxes/{key}/calendarConfiguration, GET /exchange/v1.0/mailboxes/{key}/calendarProcessing
GET /exchange/v1.0/mailboxes/{key}/calendarProcessing
Section titled “GET /exchange/v1.0/mailboxes/{key}/calendarProcessing”Get-CalendarProcessing - room/equipment booking + delegate behavior.
Backing cmdlet: Get-CalendarProcessing. Role: Mailbox.Read (Community).
Get a mailbox’s calendar processing settings
Section titled “Get a mailbox’s calendar processing settings”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the room/equipment booking policy and delegate behavior for the mailbox, including auto-acceptance, booking window, and conflict rules.
GET /exchange/v1.0/mailboxes/{key}/calendarProcessing HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#mailboxes('ConfRoom-Aurora')/CalendarProcessing", "AutomateProcessing": "AutoUpdate", "BookingType": "Standard", "AllowConflicts": false, "AllowRecurringMeetings": true, "AddNewRequestsTentatively": true, "ProcessExternalMeetingMessages": false, "RemoveOldMeetingMessages": true, "RemoveForwardedMeetingNotifications": false, "RemoveCanceledMeetings": false, "RemovePrivateProperty": true, "ForwardRequestsToDelegates": true, "DeleteAttachments": true, "DeleteComments": true, "DeleteNonCalendarItems": true, "DeleteSubject": true, "AddOrganizerToSubject": true, "TentativePendingApproval": true, "EnableResponseDetails": true, "OrganizerInfo": true, "BookingWindowInDays": 180, "MaximumDurationInMinutes": 1440, "MinimumDurationInMinutes": 0, "MaximumConflictInstances": 0, "ConflictPercentageAllowed": 0, "PostReservationMaxClaimTimeInMinutes": 10, "EnforceCapacity": false, "EnforceSchedulingHorizon": true, "EnableAutoRelease": false, "ScheduleOnlyDuringWorkHours": false, "AllRequestOutOfPolicy": false, "AllRequestInPolicy": false, "AllBookInPolicy": true, "BookInPolicy": [], "RequestInPolicy": [], "RequestOutOfPolicy": [], "ResourceDelegates": [], "AddAdditionalResponse": false, "AdditionalResponse": null}Related: GET /exchange/v1.0/mailboxes/{key}
PATCH /exchange/v1.0/mailboxes/{key}/calendarProcessing
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/calendarProcessing”PATCH /mailboxes/{key}/calendarProcessing → Set-CalendarProcessing.
Backing cmdlet: Set-CalendarProcessing. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
addAdditionalResponse |
body | |||
additionalResponse |
body | |||
addNewRequestsTentatively |
body | |||
addOrganizerToSubject |
body | |||
allBookInPolicy |
body | |||
allowConflicts |
body | |||
allowRecurringMeetings |
body | |||
allRequestInPolicy |
body | |||
allRequestOutOfPolicy |
body | |||
automateProcessing |
body | |||
bookingType |
body | |||
bookingWindowInDays |
body | |||
bookInPolicy |
body | |||
conflictPercentageAllowed |
body | |||
deleteAttachments |
body | |||
deleteComments |
body | |||
deleteNonCalendarItems |
body | |||
deleteSubject |
body | |||
enableAutoRelease |
body | |||
enableResponseDetails |
body | |||
enforceCapacity |
body | |||
enforceSchedulingHorizon |
body | |||
forwardRequestsToDelegates |
body | |||
maximumConflictInstances |
body | |||
maximumDurationInMinutes |
body | |||
minimumDurationInMinutes |
body | |||
organizerInfo |
body | |||
postReservationMaxClaimTimeInMinutes |
body | |||
processExternalMeetingMessages |
body | |||
removeCanceledMeetings |
body | |||
removeForwardedMeetingNotifications |
body | |||
removeOldMeetingMessages |
body | |||
removePrivateProperty |
body | |||
requestInPolicy |
body | |||
requestOutOfPolicy |
body | |||
resourceDelegates |
body | |||
scheduleOnlyDuringWorkHours |
body | |||
tentativePendingApproval |
body | |||
dryRun |
query | bool (switch) |
Configure resource booking behavior
Section titled “Configure resource booking behavior”Sub-resource of the mailbox at GET /mailboxes/{key}/calendarProcessing - partial update via Set-CalendarProcessing. Returns 200 + the updated configuration.
PATCH /exchange/v1.0/mailboxes/{key}/calendarProcessing HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "automateProcessing": "AutoAccept", "allowConflicts": false, "bookingWindowInDays": 180, "maximumDurationInMinutes": 480}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes", "AutomateProcessing": "AutoAccept", "AllowConflicts": false, "BookingWindowInDays": 180, "MaximumDurationInMinutes": 480}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/calendarProcessing, GET /exchange/v1.0/mailboxes
GET /exchange/v1.0/mailboxes/{key}/casMailbox
Section titled “GET /exchange/v1.0/mailboxes/{key}/casMailbox”Sub-resource of the mailboxes at GET /mailboxes/{key} - Client Access (POP/IMAP/MAPI/OWA) configuration. Backed by Get-CASMailbox.
Backing cmdlet: Get-CASMailbox. Role: Mailbox.Read (Community).
Get a mailbox’s client access (CAS) configuration
Section titled “Get a mailbox’s client access (CAS) configuration”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the Client Access settings (POP, IMAP, MAPI, OWA, ActiveSync, EWS) for a single mailbox. Backed by Get-CASMailbox.
GET /exchange/v1.0/mailboxes/{key}/casMailbox HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#ExchangeApi.CASMailbox", "Id": "john.woods", "Name": "john.woods", "DisplayName": "John Woods", "Identity": "john.woods", "DistinguishedName": "CN=john.woods,OU=contoso.onmicrosoft.com,OU=Microsoft Exchange Hosted Organizations,DC=EURPR01A017,DC=PROD,DC=OUTLOOK,DC=COM", "SamAccountName": "$B6VJH0-DDO3526KIOHC", "Guid": "c80fb3b2-8bd1-4d1f-bab5-e06d74c3377a", "ExchangeObjectId": "79b9957f-760f-4c95-a732-917c14b4a9fd", "EmailAddresses": [ ], "HasActiveSyncDevicePartnership": false, "ActiveSyncEnabled": true, "ActiveSyncSuppressReadReceipt": false, "ActiveSyncDebugLogging": "False", "ActiveSyncMailboxPolicy": "Default", "ActiveSyncMailboxPolicyIsDefaulted": "True", "ActiveSyncAllowedDeviceIDs": [], "ActiveSyncBlockedDeviceIDs": [], "OWAEnabled": true, "OWAforDevicesEnabled": true, "OwaMailboxPolicy": "OwaMailboxPolicy-Default", "ECPEnabled": true, "ShowGalAsDefaultView": true, "IsOptimizedForAccessibility": false, "MAPIEnabled": true, "MapiHttpEnabled": false, "MAPIBlockOutlookNonCachedMode": false, "MAPIBlockOutlookExternalConnectivity": false, "MAPIBlockOutlookRpcHttp": false, "MAPIBlockOutlookVersions": [], "MacOutlookEnabled": true, "OutlookMobileEnabled": true, "UniversalOutlookEnabled": true, "OneWinNativeOutlookEnabled": false, "EwsEnabled": true, "EwsAllowEntourage": false, "EwsAllowMacOutlook": false, "EwsAllowOutlook": false, "EwsApplicationAccessPolicy": null, "EwsAllowList": [], "EwsBlockList": [], "ImapEnabled": true, "ImapEnableExactRFC822Size": false, "ImapForceICalForCalendarRetrievalOption": false, "ImapMessagesRetrievalMimeFormat": "BestBodyFormat", "ImapSuppressReadReceipt": false, "ImapUseProtocolDefaults": true, "PopEnabled": true, "PopEnableExactRFC822Size": false, "PopForceICalForCalendarRetrievalOption": true, "PopMessagesRetrievalMimeFormat": "BestBodyFormat", "PopSuppressReadReceipt": false, "PopUseProtocolDefaults": true, "SmtpClientAuthenticationDisabled": null, "PublicFolderClientAccess": false, "ExchangeVersion": "0.20 (15.0.0.0)", "OrganizationId": "EURPR01A017.PROD.OUTLOOK.COM/Microsoft Exchange Hosted Organizations/contoso.onmicrosoft.com - EURPR01A017.PROD.OUTLOOK.COM/ConfigurationUnits/contoso.onmicrosoft.com/Configuration", "ObjectCategory": "EURPR01A017.PROD.OUTLOOK.COM/Configuration/Schema/Person", "ObjectClass": [ "top", "person", "organizationalPerson", "user" ], "OriginatingServer": "VI1PR01A17DC001.EURPR01A017.PROD.OUTLOOK.COM", "ObjectState": "Changed", "IsValid": true, "WhenCreated": "2026-03-31T17:57:27+03:00", "WhenChanged": "2026-05-22T00:31:32+03:00", "WhenCreatedUTC": "2026-03-31T14:57:27Z", "WhenChangedUTC": "2026-05-21T21:31:32Z", "ExternalDirectoryObjectId": "d30c0254-af7e-4c04-a884-4265976e20b0", "ExternalImapSettings": null, "ExternalPopSettings": null, "ExternalSmtpSettings": null, "InternalImapSettings": null, "InternalPopSettings": null, "InternalSmtpSettings": null, "LegacyExchangeDN": "/o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=b95cae9b8f1d4b0eae92f8afad103fc9-john.woods", "LinkedMasterAccount": "NT AUTHORITY\\SELF", "OrganizationalUnitRoot": "contoso.onmicrosoft.com", "PopMessageDeleteEnabled": true, "ServerLegacyDN": "/o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=VI1PR02MB4655", "ServerName": "vi1pr02mb4655"}Related: GET /exchange/v1.0/mailboxes/{key}
PATCH /exchange/v1.0/mailboxes/{key}/casMailbox
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/casMailbox”PATCH /mailboxes/{key}/casMailbox → Set-CASMailbox (client-access protocol toggles).
Backing cmdlet: Set-CASMailbox. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
activeSyncAllowedDeviceIDs |
body | |||
activeSyncBlockedDeviceIDs |
body | |||
activeSyncDebugLogging |
body | |||
activeSyncEnabled |
body | |||
activeSyncMailboxPolicy |
body | |||
activeSyncSuppressReadReceipt |
body | |||
displayName |
body | |||
ecpEnabled |
body | |||
emailAddresses |
body | |||
ewsAllowEntourage |
body | |||
ewsAllowList |
body | |||
ewsAllowMacOutlook |
body | |||
ewsAllowOutlook |
body | |||
ewsApplicationAccessPolicy |
body | |||
ewsBlockList |
body | |||
ewsEnabled |
body | |||
hasActiveSyncDevicePartnership |
body | |||
imapEnabled |
body | |||
imapEnableExactRFC822Size |
body | |||
imapForceICalForCalendarRetrievalOption |
body | |||
imapMessagesRetrievalMimeFormat |
body | |||
imapSuppressReadReceipt |
body | |||
imapUseProtocolDefaults |
body | |||
isOptimizedForAccessibility |
body | |||
macOutlookEnabled |
body | |||
mapiBlockOutlookExternalConnectivity |
body | |||
mapiBlockOutlookNonCachedMode |
body | |||
mapiBlockOutlookRpcHttp |
body | |||
mapiBlockOutlookVersions |
body | |||
mapiEnabled |
body | |||
mapiHttpEnabled |
body | |||
name |
body | |||
oneWinNativeOutlookEnabled |
body | |||
outlookMobileEnabled |
body | |||
owaEnabled |
body | |||
owAforDevicesEnabled |
body | |||
owaMailboxPolicy |
body | |||
popEnabled |
body | |||
popEnableExactRFC822Size |
body | |||
popForceICalForCalendarRetrievalOption |
body | |||
popMessagesRetrievalMimeFormat |
body | |||
popSuppressReadReceipt |
body | |||
popUseProtocolDefaults |
body | |||
primarySmtpAddress |
body | |||
publicFolderClientAccess |
body | |||
resetAutoBlockedDevices |
body | boolean (switch) | ||
samAccountName |
body | |||
showGalAsDefaultView |
body | |||
smtpClientAuthenticationDisabled |
body | |||
universalOutlookEnabled |
body | |||
dryRun |
query | bool (switch) |
Toggle client-access protocols
Section titled “Toggle client-access protocols”Sub-resource of the mailbox at GET /mailboxes/{key}/casMailbox - partial update via Set-CASMailbox. Returns 200 + the updated configuration.
PATCH /exchange/v1.0/mailboxes/{key}/casMailbox HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "imapEnabled": false, "popEnabled": false, "owaEnabled": true}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes", "ImapEnabled": false, "PopEnabled": false, "OWAEnabled": true}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/casMailbox, GET /exchange/v1.0/mailboxes
POST /exchange/v1.0/mailboxes/{key}/disableArchive
Section titled “POST /exchange/v1.0/mailboxes/{key}/disableArchive”POST /mailboxes/{key}/disableArchive - disables the archive mailbox via Disable-Mailbox -Archive. Use ?permanentlyDisable=true to skip the soft-delete recovery window; ?ignoreLegalHold=true for hold override; ?dryRun=true for -WhatIf.
Backing cmdlet: Disable-Mailbox. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
permanentlyDisable |
query | bool (switch) | ||
ignoreLegalHold |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
Disable the archive mailbox
Section titled “Disable the archive mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - bound action that disables the archive mailbox via Disable-Mailbox -Archive. Use ?permanentlyDisable=true to skip the soft-delete window. Returns 204.
POST /exchange/v1.0/mailboxes/{key}/disableArchive HTTP/1.1Authorization: Bearer {token}Content-Type: application/jsonHTTP/1.1 204 No ContentNotes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}, POST /exchange/v1.0/mailboxes/{key}/enableArchive
POST /exchange/v1.0/mailboxes/{key}/enableArchive
Section titled “POST /exchange/v1.0/mailboxes/{key}/enableArchive”POST /mailboxes/{key}/enableArchive - enables the archive mailbox for an existing mailbox via Enable-Mailbox -Archive. Optional body fields: { archiveDomain, displayName }. Returns 204.
Backing cmdlet: Enable-Mailbox. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
archiveDomain |
body | |||
archiveName |
body | |||
autoExpandingArchive |
body | |||
displayName |
body | |||
roleAssignmentPolicy |
body | |||
dryRun |
query | bool (switch) |
Enable the archive mailbox
Section titled “Enable the archive mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - bound action that enables the archive mailbox via Enable-Mailbox -Archive. Optional body { archiveDomain, displayName }. Returns 204.
POST /exchange/v1.0/mailboxes/{key}/enableArchive HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "displayName": "Exonaut Sample Archive"}HTTP/1.1 204 No ContentNotes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}, POST /exchange/v1.0/mailboxes/{key}/disableArchive
GET /exchange/v1.0/mailboxes/{key}/folderPermissions
Section titled “GET /exchange/v1.0/mailboxes/{key}/folderPermissions”Sub-resource of the mailboxes at GET /mailboxes/{key} - list per-folder client ACLs. Backed by Get-MailboxFolderPermission.
Backing cmdlet: Get-MailboxFolderPermission. Role: MailboxPermission.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
groupMailbox |
query | bool (switch) | Read folder permissions from a Microsoft 365 Group mailbox. Maps -GroupMailbox on Get-MailboxFolderPermission. |
POST /exchange/v1.0/mailboxes/{key}/folderPermissions
Section titled “POST /exchange/v1.0/mailboxes/{key}/folderPermissions”POST /mailboxes/{key}/folderPermissions - add a per-folder ACL (Add-MailboxFolderPermission). Body: { folder, user, accessRights[] }. Returns 201 + Location.
Backing cmdlet: Add-MailboxFolderPermission. Role: MailboxPermission.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
folder |
body | string | yes | |
user |
body | string | yes | |
accessRights |
body | array | yes | |
sendNotificationToUser |
body | boolean | ||
sharingPermissionFlags |
body | string | ||
dryRun |
query | bool (switch) |
Add a mailbox folder permission
Section titled “Add a mailbox folder permission”Sub-resource of the mailbox at GET /mailboxes/{key} - grant a trustee an ACL on a mailbox folder via Add-MailboxFolderPermission. Body: { folder, user, accessRights[] }. Returns 201 + Location.
POST /exchange/v1.0/mailboxes/{key}/folderPermissions HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "folder": "Calendar", "accessRights": [ "Reviewer" ]}HTTP/1.1 201 CreatedLocation: /exchange/v1.0/mailboxes/{key}/folderPermissions/Calendar%7Cjohn.woods%40contoso.com
{ "folder": "Calendar", "accessRights": [ "Reviewer" ]}Related: GET /exchange/v1.0/mailboxes/{key}/folderPermissions, DELETE /exchange/v1.0/mailboxes/{key}/folderPermissions/{permissionId}
PATCH /exchange/v1.0/mailboxes/{key}/folderPermissions/{permissionId}
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/folderPermissions/{permissionId}”PATCH /mailboxes/{key}/folderPermissions/{permissionId} - change an existing folder ACL’s rights (Set-MailboxFolderPermission). F38 (audit 2026-06-01): keyed by permissionId (“<folder>|<user>”, same key as DELETE) so the target is identified by the URL, not the body. Body: { accessRights[], sendNotificationToUser?, sharingPermissionFlags? }. Returns 204.
Backing cmdlet: Set-MailboxFolderPermission. Role: MailboxPermission.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accessRights |
body | array | yes | |
sendNotificationToUser |
body | boolean | ||
sharingPermissionFlags |
body | string | ||
dryRun |
query | bool (switch) |
DELETE /exchange/v1.0/mailboxes/{key}/folderPermissions/{permissionId}
Section titled “DELETE /exchange/v1.0/mailboxes/{key}/folderPermissions/{permissionId}”DELETE /mailboxes/{key}/folderPermissions/{permissionId} - remove a folder ACL (Remove-MailboxFolderPermission). permissionId is “<folder>|<user>”. Returns 204.
Backing cmdlet: Remove-MailboxFolderPermission. Role: MailboxPermission.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
sendNotificationToUser |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
Remove a mailbox folder permission
Section titled “Remove a mailbox folder permission”Sub-resource of the mailbox at GET /mailboxes/{key}/folderPermissions - remove a folder ACL via Remove-MailboxFolderPermission. permissionId is “<folder>|<user>”. Returns 204.
DELETE /exchange/v1.0/mailboxes/{key}/folderPermissions/{permissionId} HTTP/1.1Authorization: Bearer {token}HTTP/1.1 204 No ContentRelated: POST /exchange/v1.0/mailboxes/{key}/folderPermissions
GET /exchange/v1.0/mailboxes/{key}/folderStatistics
Section titled “GET /exchange/v1.0/mailboxes/{key}/folderStatistics”GET /mailboxes/{key}/folderStatistics?folderPath=Calendar - per-folder size and item count. folderPath is optional; if omitted, the cmdlet returns stats for every folder in the mailbox. Backed by Get-MailboxFolderStatistics.
Backing cmdlet: Get-MailboxFolderStatistics. Role: Mailbox.Stats.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
folderScope |
query | string | Folder scope filter: All | Archive | Calendar | Contacts | DeletedItems | Inbox | SentItems | … (maps to -FolderScope). | |
all |
query | bool (switch) | Return all results instead of the EXO default of 1000. Maps -ResultSize Unlimited on Get-MailboxFolderStatistics; prevents silent truncation in mailboxes with many folders. | |
archive |
query | bool (switch) | Return folder statistics for the archive mailbox associated with this mailbox instead of the primary. Maps -Archive on Get-MailboxFolderStatistics. | |
includeAnalysis |
query | bool (switch) | Scan all items within each folder and return size-distribution analysis. Slow - for troubleshooting only. Maps -IncludeAnalysis on Get-MailboxFolderStatistics. |
List folder statistics for a mailbox
Section titled “List folder statistics for a mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - returns per-folder size, item counts, and folder metadata for every folder in the mailbox. Backed by Get-MailboxFolderStatistics.
GET /exchange/v1.0/mailboxes/{key}/folderStatistics HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
[ { "name": "Top of Information Store", "identity": "john.woods\\Top of Information Store", "folderPath": "/Top of Information Store", "folderType": "Root", "containerClass": "", "creatorIdentity": null, "folderId": "LgAAAAD8QHtNihymSbuNIA5yapQyAQBNMh5xahpIRLWOSP5s7vWhAAAAAAEIAAAB", "contentFolder": "True", "itemsInFolder": 0, "itemsInFolderAndSubfolders": 123, "deletedItemsInFolder": 0, "subfolderCount": 0, "folderSize": "0 B (0 bytes)", "folderAndSubfolderSize": "2.13 MB (2,233,298 bytes)", "attachmentTableTotalSize": null, "attachmentTableAvailableSize": null, "oldestItemReceivedDate": null, "newestItemReceivedDate": null, "topSubject": "", "topSubjectCount": 0, "topSubjectSize": "0 B (0 bytes)", "topSubjectClass": "", "topSubjectFrom": "", "topSubjectReceivedTime": null, "topSubjectPath": "", "archivePolicy": null, "associatedIPMFolderPath": null, "auditAuxMailboxGuid": "", "auditFolderStubSize": "", "compliancePolicy": null, "contentMailboxGuid": "a1b2c3d4-1111-2222-3333-444455556666", "conversationNamespace": null, "creationTime": "2026-03-16T15:47:55.8267112+00:00", "date": "2026-03-16T15:47:55.8267112+00:00", "deletePolicy": null, "deletedItemsInFolderAndSubfolders": 0, "diagnosticInfo": null, "diagnostics": null, "elcRecrawlState": "", "elcRecrawlStateReadMode": "", "elcTeamsScanCompleted": null, "flags": "", "hiddenItemsInFolder": 0, "isFailedMovedFolder": null, "lastModifiedTime": "2026-03-16T17:55:41.0566087+00:00", "lastMovedTimeStamp": null, "lastScannedDocumentId": null, "lowLatencyContainerQuota": "Unlimited", "managedFolder": null, "movable": false, "newestDeletedItemLastModifiedDate": null, "newestDeletedItemReceivedDate": null, "newestItemLastModifiedDate": null, "oldestDeletedItemLastModifiedDate": null, "oldestDeletedItemReceivedDate": null, "oldestItemLastModifiedDate": null, "parentFolderId": "LgAAAAD8QHtNihymSbuNIA5yapQyAQBNMh5xahpIRLWOSP5s7vWhAAAAAAEBAAAB", "rawContentMailboxGuid": "a1b2c3d4-1111-2222-3333-444455556666", "recoverableItemsFolder": false, "retentionFlags": "", "searchFolder": false, "searchFolderState": "", "searchFolders": null, "storageQuota": "Unlimited", "storageWarningQuota": "Unlimited", "targetQuota": "User", "topClientInfoCountForSubject": 0, "topClientInfoForSubject": "", "visibleItemsInFolder": 0, "whenLabeled": "0001-01-01T00:00:00+00:00" }, { "name": "Archive", "identity": "john.woods\\Archive", "folderPath": "/Archive", "folderType": "Archive", "containerClass": "IPF.Note", "creatorIdentity": null, "folderId": "LgAAAAD8QHtNihymSbuNIA5yapQyAQBNMh5xahpIRLWOSP5s7vWhAAAAAAE1AAAB", "contentFolder": "True", "itemsInFolder": 0, "itemsInFolderAndSubfolders": 0, "deletedItemsInFolder": 0, "subfolderCount": 0, "folderSize": "0 B (0 bytes)", "folderAndSubfolderSize": "0 B (0 bytes)", "attachmentTableTotalSize": null, "attachmentTableAvailableSize": null, "oldestItemReceivedDate": null, "newestItemReceivedDate": null, "topSubject": "", "topSubjectCount": 0, "topSubjectSize": "0 B (0 bytes)", "topSubjectClass": "", "topSubjectFrom": "", "topSubjectReceivedTime": null, "topSubjectPath": "", "archivePolicy": null, "associatedIPMFolderPath": null, "auditAuxMailboxGuid": "", "auditFolderStubSize": "", "compliancePolicy": null, "contentMailboxGuid": "a1b2c3d4-1111-2222-3333-444455556666", "conversationNamespace": "1", "creationTime": "2026-03-16T15:48:48.6726461+00:00", "date": "2026-03-16T15:48:48.6726461+00:00", "deletePolicy": null, "deletedItemsInFolderAndSubfolders": 0, "diagnosticInfo": null, "diagnostics": null, "elcRecrawlState": "", "elcRecrawlStateReadMode": "", "elcTeamsScanCompleted": null, "flags": "", "hiddenItemsInFolder": 0, "isFailedMovedFolder": null, "lastModifiedTime": "2026-03-16T17:55:41.0648788+00:00", "lastMovedTimeStamp": null, "lastScannedDocumentId": null, "lowLatencyContainerQuota": "Unlimited", "managedFolder": null, "movable": false, "newestDeletedItemLastModifiedDate": null, "newestDeletedItemReceivedDate": null, "newestItemLastModifiedDate": null, "oldestDeletedItemLastModifiedDate": null, "oldestDeletedItemReceivedDate": null, "oldestItemLastModifiedDate": null, "parentFolderId": "LgAAAAD8QHtNihymSbuNIA5yapQyAQBNMh5xahpIRLWOSP5s7vWhAAAAAAEIAAAB", "rawContentMailboxGuid": "a1b2c3d4-1111-2222-3333-444455556666", "recoverableItemsFolder": false, "retentionFlags": "NeedsRescan", "searchFolder": false, "searchFolderState": "", "searchFolders": null, "storageQuota": "Unlimited", "storageWarningQuota": "Unlimited", "targetQuota": "User", "topClientInfoCountForSubject": 0, "topClientInfoForSubject": "", "visibleItemsInFolder": 0, "whenLabeled": "0001-01-01T00:00:00+00:00" }, { "name": "Calendar", "identity": "john.woods\\Calendar", "folderPath": "/Calendar", "folderType": "Calendar", "containerClass": "IPF.Appointment", "creatorIdentity": null, "folderId": "LgAAAAD8QHtNihymSbuNIA5yapQyAQBNMh5xahpIRLWOSP5s7vWhAAAAAAENAAAC", "contentFolder": "True", "itemsInFolder": 3, "itemsInFolderAndSubfolders": 103, "deletedItemsInFolder": 0, "subfolderCount": 0, "folderSize": "6.855 KB (7,020 bytes)", "folderAndSubfolderSize": "600.3 KB (614,715 bytes)", "attachmentTableTotalSize": null, "attachmentTableAvailableSize": null, "oldestItemReceivedDate": null, "newestItemReceivedDate": null, "topSubject": "", "topSubjectCount": 0, "topSubjectSize": "0 B (0 bytes)", "topSubjectClass": "", "topSubjectFrom": "", "topSubjectReceivedTime": null, "topSubjectPath": "", "archivePolicy": null, "associatedIPMFolderPath": null, "auditAuxMailboxGuid": "", "auditFolderStubSize": "", "compliancePolicy": null, "contentMailboxGuid": "a1b2c3d4-1111-2222-3333-444455556666", "conversationNamespace": "1", "creationTime": "2026-03-16T15:47:55.8312109+00:00", "date": "2026-03-16T15:47:55.8312109+00:00", "deletePolicy": null, "deletedItemsInFolderAndSubfolders": 0, "diagnosticInfo": null, "diagnostics": null, "elcRecrawlState": "", "elcRecrawlStateReadMode": "", "elcTeamsScanCompleted": null, "flags": "LargeOnPageThreshold", "hiddenItemsInFolder": 3, "isFailedMovedFolder": null, "lastModifiedTime": "2026-05-13T06:19:33.2275094+00:00", "lastMovedTimeStamp": null, "lastScannedDocumentId": null, "lowLatencyContainerQuota": "3 MB (3,145,728 bytes)", "managedFolder": null, "movable": false, "newestDeletedItemLastModifiedDate": null, "newestDeletedItemReceivedDate": null, "newestItemLastModifiedDate": null, "oldestDeletedItemLastModifiedDate": null, "oldestDeletedItemReceivedDate": null, "oldestItemLastModifiedDate": null, "parentFolderId": "LgAAAAD8QHtNihymSbuNIA5yapQyAQBNMh5xahpIRLWOSP5s7vWhAAAAAAEIAAAB", "rawContentMailboxGuid": "a1b2c3d4-1111-2222-3333-444455556666", "recoverableItemsFolder": false, "retentionFlags": "NeedsRescan", "searchFolder": false, "searchFolderState": "", "searchFolders": null, "storageQuota": "Unlimited", "storageWarningQuota": "Unlimited", "targetQuota": "User", "topClientInfoCountForSubject": 0, "topClientInfoForSubject": "", "visibleItemsInFolder": 0, "whenLabeled": "0001-01-01T00:00:00+00:00" }]Related: GET /exchange/v1.0/mailboxes/{key}, GET /exchange/v1.0/mailboxes/{key}/folders, GET /exchange/v1.0/mailboxes/{key}/folderPermissions
GET /exchange/v1.0/mailboxes/{key}/folders
Section titled “GET /exchange/v1.0/mailboxes/{key}/folders”Get-MailboxFolder - folder tree (Inbox, Sent Items, custom folders).
Backing cmdlet: Get-MailboxFolder. Role: Mailbox.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
getChildren |
query | bool (switch) | Return the immediate children of the specified folder. Defaults to true. Maps -GetChildren on Get-MailboxFolder. | |
mailFolderOnly |
query | bool (switch) | Return only mail folders (exclude calendar, contacts, tasks, etc.). Maps -MailFolderOnly on Get-MailboxFolder. | |
recurse |
query | bool (switch) | Recurse the entire folder hierarchy beneath the specified folder. Maps -Recurse on Get-MailboxFolder. | |
all |
query | bool (switch) | Return all folders instead of the EXO default cap of 1000 (a large/archive mailbox can exceed it). Maps -ResultSize Unlimited on Get-MailboxFolder; especially relevant with ?recurse=true. |
GET /exchange/v1.0/mailboxes/{key}/inboxRules
Section titled “GET /exchange/v1.0/mailboxes/{key}/inboxRules”Sub-resource of the mailboxes at GET /mailboxes/{key} - list InboxRule entries (Outlook/OWA Rules).
Backing cmdlet: Get-InboxRule. Role: Mailbox.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
includeHidden |
query | bool (switch) | Include hidden inbox rules (created by client programs/services) in the results. Maps -IncludeHidden on Get-InboxRule. |
List inbox rules for a mailbox
Section titled “List inbox rules for a mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - lists the Outlook/OWA inbox rules (Get-InboxRule) configured on the mailbox. Returns an empty collection when no rules are defined.
GET /exchange/v1.0/mailboxes/{key}/inboxRules HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#Collection(ExchangeApi.InboxRule)", "value": []}Related: GET /exchange/v1.0/mailboxes/{key}, GET /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}, GET /exchange/v1.0/mailboxes/{key}/sweepRules
POST /exchange/v1.0/mailboxes/{key}/inboxRules
Section titled “POST /exchange/v1.0/mailboxes/{key}/inboxRules”POST /mailboxes/{key}/inboxRules - creates a per-mailbox rule via New-InboxRule. Cmdlet returns the rule with an auto-assigned numeric Identity; the Location header points at the created rule.
Backing cmdlet: New-InboxRule. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
name |
body | yes | ||
applyCategory |
body | |||
applySystemCategory |
body | |||
bodyContainsWords |
body | |||
copyToFolder |
body | |||
deleteMessage |
body | |||
deleteSystemCategory |
body | |||
exceptIfBodyContainsWords |
body | |||
exceptIfFlaggedForAction |
body | |||
exceptIfFrom |
body | |||
exceptIfFromAddressContainsWords |
body | |||
exceptIfFromSubscription |
body | |||
exceptIfHasAttachment |
body | |||
exceptIfHasClassification |
body | |||
exceptIfHeaderContainsWords |
body | |||
exceptIfMessageTypeMatches |
body | |||
exceptIfMyNameInCcBox |
body | |||
exceptIfMyNameInToBox |
body | |||
exceptIfMyNameInToOrCcBox |
body | |||
exceptIfMyNameNotInToBox |
body | |||
exceptIfReceivedAfterDate |
body | |||
exceptIfReceivedBeforeDate |
body | |||
exceptIfRecipientAddressContainsWords |
body | |||
exceptIfSentOnlyToMe |
body | |||
exceptIfSentTo |
body | |||
exceptIfSubjectContainsWords |
body | |||
exceptIfSubjectOrBodyContainsWords |
body | |||
exceptIfWithImportance |
body | |||
exceptIfWithinSizeRangeMaximum |
body | |||
exceptIfWithinSizeRangeMinimum |
body | |||
exceptIfWithSensitivity |
body | |||
flaggedForAction |
body | |||
forwardAsAttachmentTo |
body | |||
forwardTo |
body | |||
from |
body | |||
fromAddressContainsWords |
body | |||
fromSubscription |
body | |||
hasAttachment |
body | |||
hasClassification |
body | |||
headerContainsWords |
body | |||
markAsRead |
body | |||
markImportance |
body | |||
messageTypeMatches |
body | |||
moveToFolder |
body | |||
myNameInCcBox |
body | |||
myNameInToBox |
body | |||
myNameInToOrCcBox |
body | |||
myNameNotInToBox |
body | |||
pinMessage |
body | |||
priority |
body | |||
receivedAfterDate |
body | |||
receivedBeforeDate |
body | |||
recipientAddressContainsWords |
body | |||
redirectTo |
body | |||
sendTextMessageNotificationTo |
body | |||
sentOnlyToMe |
body | |||
sentTo |
body | |||
softDeleteMessage |
body | |||
stopProcessingRules |
body | |||
subjectContainsWords |
body | |||
subjectOrBodyContainsWords |
body | |||
withImportance |
body | |||
withinSizeRangeMaximum |
body | |||
withinSizeRangeMinimum |
body | |||
withSensitivity |
body | |||
dryRun |
query | bool (switch) |
Create an inbox rule without the required name
Section titled “Create an inbox rule without the required name”Sub-resource of the mailbox at GET /mailboxes/{key}/inboxRules - New-InboxRule requires a name. Omitting it returns the canonical 400 envelope.
POST /exchange/v1.0/mailboxes/{key}/inboxRules HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "from": [ ], "moveToFolder": "Newsletters"}HTTP/1.1 400 Bad Request
{ "error": { "code": "BadRequest", "message": "The required field 'name' is missing.", "target": "name" }, "correlationId": "0HN7Q4ABCDEF0:00000002"}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/inboxRules
Create an inbox rule
Section titled “Create an inbox rule”Sub-resource of the mailbox at GET /mailboxes/{key}/inboxRules - creates a per-mailbox rule via New-InboxRule. Name is required; the cmdlet auto-assigns a composite Identity. Returns 201 + Location.
POST /exchange/v1.0/mailboxes/{key}/inboxRules HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "name": "exonaut-sample-mailboxes-rule", "from": [ ], "moveToFolder": "Newsletters", "markAsRead": true}HTTP/1.1 201 CreatedLocation: /exchange/v1.0/mailboxes/exonaut-sample-mailboxes/inboxRules/exonaut-sample-mailboxes%5C1
{ "Identity": "exonaut-sample-mailboxes\\1", "Name": "exonaut-sample-mailboxes-rule", "Priority": 1, "Enabled": true, "From": [ ], "MoveToFolder": "Newsletters", "MarkAsRead": true}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/inboxRules, GET /exchange/v1.0/mailboxes
GET /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}
Section titled “GET /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}”Sub-resource of the mailboxes at GET /mailboxes/{key} - single InboxRule by composite ruleId.
Backing cmdlet: Get-InboxRule. Role: Mailbox.Read (Community).
PATCH /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}”PATCH /mailboxes/{key}/inboxRules/{ruleId} - partial update via Set-InboxRule. Enable/disable toggle goes through the bound actions below, not PATCH.
Backing cmdlet: Set-InboxRule. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
applyCategory |
body | |||
applySystemCategory |
body | |||
bodyContainsWords |
body | |||
copyToFolder |
body | |||
deleteMessage |
body | |||
deleteSystemCategory |
body | |||
exceptIfBodyContainsWords |
body | |||
exceptIfFlaggedForAction |
body | |||
exceptIfFrom |
body | |||
exceptIfFromAddressContainsWords |
body | |||
exceptIfHasAttachment |
body | |||
exceptIfHasClassification |
body | |||
exceptIfHeaderContainsWords |
body | |||
exceptIfMessageTypeMatches |
body | |||
exceptIfMyNameInCcBox |
body | |||
exceptIfMyNameInToBox |
body | |||
exceptIfMyNameInToOrCcBox |
body | |||
exceptIfMyNameNotInToBox |
body | |||
exceptIfReceivedAfterDate |
body | |||
exceptIfReceivedBeforeDate |
body | |||
exceptIfRecipientAddressContainsWords |
body | |||
exceptIfSentOnlyToMe |
body | |||
exceptIfSentTo |
body | |||
exceptIfSubjectContainsWords |
body | |||
exceptIfSubjectOrBodyContainsWords |
body | |||
exceptIfWithImportance |
body | |||
exceptIfWithinSizeRangeMaximum |
body | |||
exceptIfWithinSizeRangeMinimum |
body | |||
exceptIfWithSensitivity |
body | |||
flaggedForAction |
body | |||
forwardAsAttachmentTo |
body | |||
forwardTo |
body | |||
from |
body | |||
fromAddressContainsWords |
body | |||
hasAttachment |
body | |||
hasClassification |
body | |||
headerContainsWords |
body | |||
markAsRead |
body | |||
markImportance |
body | |||
messageTypeMatches |
body | |||
moveToFolder |
body | |||
myNameInCcBox |
body | |||
myNameInToBox |
body | |||
myNameInToOrCcBox |
body | |||
myNameNotInToBox |
body | |||
name |
body | |||
pinMessage |
body | |||
priority |
body | |||
receivedAfterDate |
body | |||
receivedBeforeDate |
body | |||
recipientAddressContainsWords |
body | |||
redirectTo |
body | |||
sendTextMessageNotificationTo |
body | |||
sentOnlyToMe |
body | |||
sentTo |
body | |||
softDeleteMessage |
body | |||
stopProcessingRules |
body | |||
subjectContainsWords |
body | |||
subjectOrBodyContainsWords |
body | |||
withImportance |
body | |||
withinSizeRangeMaximum |
body | |||
withinSizeRangeMinimum |
body | |||
withSensitivity |
body | |||
dryRun |
query | bool (switch) |
Update an inbox rule
Section titled “Update an inbox rule”Sub-resource of the mailbox at GET /mailboxes/{key}/inboxRules/{ruleId} - partial update via Set-InboxRule. Enable/disable goes through the bound actions, not PATCH. Returns 200 + the updated rule.
PATCH /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId} HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "priority": 2, "markAsRead": true, "stopProcessingRules": true}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes\\1", "Name": "exonaut-sample-mailboxes-rule", "Priority": 2, "MarkAsRead": true, "StopProcessingRules": true}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}, GET /exchange/v1.0/mailboxes/{key}/inboxRules
DELETE /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}
Section titled “DELETE /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}”Sub-resource of the mailboxes at GET /mailboxes/{key} - remove a single InboxRule by composite ruleId.
Backing cmdlet: Remove-InboxRule. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
force |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
Delete an inbox rule
Section titled “Delete an inbox rule”Sub-resource of the mailbox at GET /mailboxes/{key}/inboxRules/{ruleId} - removes a single inbox rule via Remove-InboxRule. Returns 204.
DELETE /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId} HTTP/1.1Authorization: Bearer {token}Content-Type: application/jsonHTTP/1.1 204 No ContentNotes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/inboxRules
POST /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/disable
Section titled “POST /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/disable”POST /mailboxes/{key}/inboxRules/{ruleId}/disable - bound action via Disable-InboxRule.
Backing cmdlet: Disable-InboxRule. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
dryRun |
query | bool (switch) |
Disable an inbox rule
Section titled “Disable an inbox rule”Sub-resource of the mailbox at GET /mailboxes/{key}/inboxRules/{ruleId} - bound action that disables a rule via Disable-InboxRule. Returns 204.
POST /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/disable HTTP/1.1Authorization: Bearer {token}Content-Type: application/jsonHTTP/1.1 204 No ContentNotes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}, POST /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/enable
POST /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/enable
Section titled “POST /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/enable”POST /mailboxes/{key}/inboxRules/{ruleId}/enable - bound action via Enable-InboxRule.
Backing cmdlet: Enable-InboxRule. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
dryRun |
query | bool (switch) |
Enable an inbox rule
Section titled “Enable an inbox rule”Sub-resource of the mailbox at GET /mailboxes/{key}/inboxRules/{ruleId} - bound action that enables a rule via Enable-InboxRule. Returns 204.
POST /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/enable HTTP/1.1Authorization: Bearer {token}Content-Type: application/jsonHTTP/1.1 204 No ContentNotes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}, POST /exchange/v1.0/mailboxes/{key}/inboxRules/{ruleId}/disable
GET /exchange/v1.0/mailboxes/{key}/irmAccess
Section titled “GET /exchange/v1.0/mailboxes/{key}/irmAccess”Get-MailboxIRMAccess - delegates blocked from reading IRM-protected messages.
Backing cmdlet: Get-MailboxIRMAccess. Role: MailboxPermission.Read (Community).
List a mailbox’s IRM access entries
Section titled “List a mailbox’s IRM access entries”Sub-resource of the mailbox at GET /mailboxes/{key} - lists the delegates that are blocked from reading IRM-protected (rights-managed) messages in this mailbox. An empty array means no delegates are blocked.
GET /exchange/v1.0/mailboxes/{key}/irmAccess HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
[]Related: GET /exchange/v1.0/mailboxes/{key}, PUT /exchange/v1.0/mailboxes/{key}/irmAccess/{user}
PUT /exchange/v1.0/mailboxes/{key}/irmAccess/{user}
Section titled “PUT /exchange/v1.0/mailboxes/{key}/irmAccess/{user}”PUT /mailboxes/{key}/irmAccess/{user} - set a specific user’s IRM access level on this mailbox via Set-MailboxIRMAccess. Body { “accessLevel”: “Block” | “Allow” }. Returns 204.
Backing cmdlet: Set-MailboxIRMAccess. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accessLevel |
body | yes |
Set a user’s IRM access level
Section titled “Set a user’s IRM access level”Sub-resource of the mailbox at GET /mailboxes/{key}/irmAccess - sets a specific user’s IRM access on this mailbox via Set-MailboxIRMAccess. accessLevel is required (Block | Allow). Returns 204.
PUT /exchange/v1.0/mailboxes/{key}/irmAccess/{user} HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "accessLevel": "Block"}HTTP/1.1 204 No ContentNotes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/irmAccess, GET /exchange/v1.0/mailboxes
DELETE /exchange/v1.0/mailboxes/{key}/irmAccess/{user}
Section titled “DELETE /exchange/v1.0/mailboxes/{key}/irmAccess/{user}”DELETE /mailboxes/{key}/irmAccess/{user} - clear a user’s per-mailbox IRM access override via Remove-MailboxIRMAccess (-Identity {key} -User {user}). Returns 204. Audit 2026-05-29 parity wiring (reuses Mailbox.ReadWrite.All; Get/Set already shipped).
Backing cmdlet: Remove-MailboxIRMAccess. Role: Mailbox.ReadWrite (Pro).
GET /exchange/v1.0/mailboxes/{key}/junkEmailConfiguration
Section titled “GET /exchange/v1.0/mailboxes/{key}/junkEmailConfiguration”Get-MailboxJunkEmailConfiguration - safe / blocked sender lists.
Backing cmdlet: Get-MailboxJunkEmailConfiguration. Role: Mailbox.Read (Community).
Get a mailbox junk email configuration
Section titled “Get a mailbox junk email configuration”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the junk email (safe/blocked sender) configuration for the mailbox, including the trusted and blocked senders and domains lists.
GET /exchange/v1.0/mailboxes/{key}/junkEmailConfiguration HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "enabled": true, "trustedListsOnly": false, "contactsTrusted": false, "trustedSendersAndDomains": [], "blockedSendersAndDomains": []}Related: GET /exchange/v1.0/mailboxes/{key}
PATCH /exchange/v1.0/mailboxes/{key}/junkEmailConfiguration
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/junkEmailConfiguration”PATCH /mailboxes/{key}/junkEmailConfiguration → Set-MailboxJunkEmailConfiguration.
Backing cmdlet: Set-MailboxJunkEmailConfiguration. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
blockedSendersAndDomains |
body | |||
contactsTrusted |
body | |||
enabled |
body | |||
failOnError |
body | |||
senderScreeningEnabled |
body | |||
trustedListsOnly |
body | |||
trustedRecipientsAndDomains |
body | |||
trustedSendersAndDomains |
body | |||
dryRun |
query | bool (switch) |
Update junk-email lists
Section titled “Update junk-email lists”Sub-resource of the mailbox at GET /mailboxes/{key}/junkEmailConfiguration - partial update via Set-MailboxJunkEmailConfiguration. Returns 200 + the updated configuration.
PATCH /exchange/v1.0/mailboxes/{key}/junkEmailConfiguration HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "enabled": true, "trustedSendersAndDomains": [ "contoso.com", ], "blockedSendersAndDomains": [ ]}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes", "Enabled": true, "TrustedSendersAndDomains": [ "contoso.com", ], "BlockedSendersAndDomains": [ ]}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/junkEmailConfiguration, GET /exchange/v1.0/mailboxes
GET /exchange/v1.0/mailboxes/{key}/location
Section titled “GET /exchange/v1.0/mailboxes/{key}/location”Get-MailboxLocation - geo / database location of the mailbox (multi-geo tenants).
Backing cmdlet: Get-MailboxLocation. Role: Mailbox.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
mailboxLocationType |
query | string | Filter by mailbox location type (e.g. Primary, MainArchive, AuxArchive, MoveDestination, …). Maps -MailboxLocationType on Get-MailboxLocation. | |
includePreviousPrimary |
query | bool (switch) | Include the previous primary mailbox location(s) in the results. Maps -IncludePreviousPrimary on Get-MailboxLocation. |
Get the geo and database location of a mailbox
Section titled “Get the geo and database location of a mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the mailbox’s geo/database location details, useful for diagnosing placement in multi-geo tenants.
GET /exchange/v1.0/mailboxes/{key}/location HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
[ { "id": "00000000-0000-0000-0000-000000000000\\b496f793-0cfa-4e78-a703-df5ee6a51051", "identity": "00000000-0000-0000-0000-000000000000\\b496f793-0cfa-4e78-a703-df5ee6a51051", "mailboxGuid": "b496f793-0cfa-4e78-a703-df5ee6a51051", "databaseGuid": "9b2bf06b-6c7c-4221-adb7-eecf47f237f3", "tenantGuid": "00000000-0000-0000-0000-000000000000", "mailboxLocationType": "Primary", "databaseLocation": "eurprd02.prod.outlook.com/9b2bf06b-6c7c-4221-adb7-eecf47f237f3", "contentSource": "Unspecified", "mailboxMoveBatchName": "", "mailboxMoveFlags": "None", "mailboxMoveStatus": "None", "migrationDryRun": false, "primaryMailboxSource": "None", "rawExternalEmailAddress": null, "isMigratedConsumerMailbox": false, "isPremiumConsumerMailbox": false, "optInUser": false, "safeLinksEnabled": true, "mailboxProvisioningConstraint": null, "shardAddress": null }]Related: GET /exchange/v1.0/mailboxes/{key}
GET /exchange/v1.0/mailboxes/{key}/messageConfiguration
Section titled “GET /exchange/v1.0/mailboxes/{key}/messageConfiguration”Get-MailboxMessageConfiguration - OWA reading-pane, signature, sort order…
Backing cmdlet: Get-MailboxMessageConfiguration. Role: Mailbox.Read (Community).
Get a mailbox’s message configuration
Section titled “Get a mailbox’s message configuration”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the Outlook on the web message settings (reading pane, signature, conversation sort order, default font, read-receipt behavior) for a single mailbox.
GET /exchange/v1.0/mailboxes/{key}/messageConfiguration HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "identity": "john.woods", "mailboxOwnerId": "john.woods", "isReplyAllTheDefaultResponse": true, "emptyDeletedItemsOnLogoff": false, "alwaysShowBcc": false, "alwaysShowFrom": false, "autoAddSignature": false, "autoAddSignatureOnMobile": true, "autoAddSignatureOnReply": false, "signatureText": "", "signatureHtml": "", "signatureTextOnMobile": "", "sendAddressDefault": "", "conversationSortOrder": "ChronologicalNewestOnTop", "defaultFontSize": 3, "defaultFontName": "Calibri", "defaultFontColor": "#000000", "showReadingPaneOnFirstLoad": false, "checkForForgottenAttachments": true, "afterMoveOrDeleteBehavior": "OpenNextItem", "readReceiptResponse": "DoNotAutomaticallySend"}Related: GET /exchange/v1.0/mailboxes/{key}
PATCH /exchange/v1.0/mailboxes/{key}/messageConfiguration
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/messageConfiguration”PATCH /mailboxes/{key}/messageConfiguration → Set-MailboxMessageConfiguration.
Backing cmdlet: Set-MailboxMessageConfiguration. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
afterMoveOrDeleteBehavior |
body | |||
alwaysShowBcc |
body | |||
alwaysShowFrom |
body | |||
autoAddSignature |
body | |||
autoAddSignatureOnMobile |
body | |||
autoAddSignatureOnReply |
body | |||
checkForForgottenAttachments |
body | |||
checkForReportJunkDialog |
body | |||
conversationSortOrder |
body | |||
defaultFontColor |
body | |||
defaultFontFlags |
body | |||
defaultFontName |
body | |||
defaultFontSize |
body | |||
defaultFormat |
body | |||
defaultSignature |
body | |||
defaultSignatureOnReply |
body | |||
deleteSignatureName |
body | |||
displayDensityMode |
body | |||
echoGroupMessageBackToSubscribedSender |
body | |||
emailComposeMode |
body | |||
emptyDeletedItemsOnLogoff |
body | |||
favoritesBitFlags |
body | |||
globalReadingPanePosition |
body | |||
hideDeletedItems |
body | |||
isDarkModeTheme |
body | |||
isFavoritesFolderTreeCollapsed |
body | |||
isFocusedInboxEnabled |
body | |||
isMailRootFolderTreeCollapsed |
body | |||
isReplyAllTheDefaultResponse |
body | |||
linkPreviewEnabled |
body | |||
mailFolderPaneExpanded |
body | |||
mailSendUndoInterval |
body | |||
manuallyPickCertificate |
body | |||
navigationBarWidth |
body | |||
navigationPaneViewOption |
body | |||
newItemNotification |
body | |||
preferAccessibleContent |
body | |||
previewMarkAsReadBehavior |
body | |||
previewMarkAsReadDelaytime |
body | |||
readReceiptResponse |
body | |||
reportJunkSelected |
body | |||
sendAddressDefault |
body | |||
showConversationAsTree |
body | |||
showInlinePreviews |
body | |||
showNotificationBar |
body | |||
showPreviewTextInListView |
body | |||
showReadingPaneOnFirstLoad |
body | |||
showSenderOnTopInListView |
body | |||
showUpNext |
body | |||
signatureHtml |
body | |||
signatureHtmlBody |
body | |||
signatureName |
body | |||
signatureText |
body | |||
signatureTextOnMobile |
body | |||
signingCertificateId |
body | |||
signingCertificateSubject |
body | |||
smimeEncrypt |
body | |||
smimeSign |
body | |||
useDefaultSignatureOnMobile |
body | |||
webSuggestedRepliesEnabledForUser |
body | |||
dryRun |
query | bool (switch) |
Update OWA message preferences
Section titled “Update OWA message preferences”Sub-resource of the mailbox at GET /mailboxes/{key}/messageConfiguration - partial update via Set-MailboxMessageConfiguration. Returns 200 + the updated configuration.
PATCH /exchange/v1.0/mailboxes/{key}/messageConfiguration HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "autoAddSignature": true, "signatureText": "Best regards,\nExonaut Sample", "isFocusedInboxEnabled": true}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes", "AutoAddSignature": true, "SignatureText": "Best regards,\nExonaut Sample", "IsFocusedInboxEnabled": true}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/messageConfiguration, GET /exchange/v1.0/mailboxes
GET /exchange/v1.0/mailboxes/{key}/permissions
Section titled “GET /exchange/v1.0/mailboxes/{key}/permissions”Sub-resource of the mailboxes at GET /mailboxes/{key} - list mailbox ACEs (FullAccess + folder ACLs). Backed by Get-MailboxPermission.
Backing cmdlet: Get-MailboxPermission. Role: MailboxPermission.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
user |
query | string | Filter the returned ACEs to a single trustee (the principal granted access). Maps -User on Get-MailboxPermission. | |
softDeletedMailbox |
query | bool (switch) | Read permissions from a soft-deleted (still-recoverable) mailbox instead of a live one. EXO-only, maps Get-MailboxPermission -SoftDeletedMailbox. | |
includeUnresolvedPermissions |
query | bool (switch) | Include ACEs held by accounts that can no longer be resolved (orphaned SIDs). Maps -IncludeUnresolvedPermissions on Get-MailboxPermission. | |
includeSoftDeletedUserPermissions |
query | bool (switch) | Include permissions held by soft-deleted user accounts. Maps -IncludeSoftDeletedUserPermissions on Get-MailboxPermission. | |
groupMailbox |
query | bool (switch) | Read permissions from a Microsoft 365 Group mailbox. Maps -GroupMailbox on Get-MailboxPermission. | |
owner |
query | bool (switch) | Return the owner of the mailbox instead of the delegated ACEs. Maps -Owner on Get-MailboxPermission. |
List mailbox ACEs (FullAccess + folder ACLs)
Section titled “List mailbox ACEs (FullAccess + folder ACLs)”Sub-resource of the mailbox at GET /mailboxes/{key}. Returns every Access Control Entry on the mailbox - FullAccess, ChangePermission, ReadPermission, etc. Includes the implicit owner ACE (NT AUTHORITY\SELF) + any explicit grants. Backed by Get-MailboxPermission.
GET /exchange/v1.0/mailboxes/{key}/permissions HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#Collection(ExchangeApi.MailboxPermission)", "value": [ { "Id": "a003556f-d8a0-4b72-b8fb-24813d53195a|NT AUTHORITY\\SELF|FullAccess,ReadPermission", "Identity": "a003556f-d8a0-4b72-b8fb-24813d53195a", "User": "NT AUTHORITY\\SELF", "PrincipalUpn": "NT AUTHORITY\\SELF", "AccessRights": [ "FullAccess", "ReadPermission" ], "Permission": [], "IsInherited": false, "Deny": false, "InheritanceType": "All", "IsOwner": false, "UserSid": "S-1-5-10", "UserWithDisplayName": [] }, { "Identity": "a003556f-d8a0-4b72-b8fb-24813d53195a", "AccessRights": [ "FullAccess" ], "Permission": [], "IsInherited": false, "Deny": false, "InheritanceType": "All", "IsOwner": false, "UserSid": "S-1-5-21-701439281-3420630407-1831248095-22021279", "UserWithDisplayName": [] }, { "Identity": "a003556f-d8a0-4b72-b8fb-24813d53195a", "AccessRights": [ "FullAccess" ], "Permission": [], "IsInherited": false, "Deny": false, "InheritanceType": "All", "IsOwner": false, "UserSid": "S-1-5-21-701439281-3420630407-1831248095-30293553", "UserWithDisplayName": [] } ]}Notes: SendAs is a SEPARATE ACL set - see /mailboxes/{key}/recipientPermissions. Folder-level ACLs live under /mailboxes/{key}/folderPermissions.
Related: GET /exchange/v1.0/mailboxes/{key}, POST /exchange/v1.0/mailboxes/{key}/permissions, DELETE /exchange/v1.0/mailboxes/{key}/permissions/{permissionId}, GET /exchange/v1.0/mailboxes/{key}/recipientPermissions
POST /exchange/v1.0/mailboxes/{key}/permissions
Section titled “POST /exchange/v1.0/mailboxes/{key}/permissions”POST /mailboxes/{key}/permissions - adds a mailbox ACE via Add-MailboxPermission (AccessRights parameter set). Audit 2026-05-22 H: entity-style URL (not /$ref), so per Architecture §2 Q3 returns 201 Created + Location pointing at the composite ID, not 204 like the link-style writes do.
Backing cmdlet: Add-MailboxPermission. Role: MailboxPermission.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
user |
body | string | yes | |
accessRights |
body | array | yes | |
autoMapping |
body | boolean | ||
deny |
body | boolean | ||
groupMailbox |
body | boolean | ||
ignoreDefaultScope |
body | boolean | ||
inheritanceType |
body | string | ||
dryRun |
query | bool (switch) |
Grant a permission on the mailbox at GET /mailboxes/{key}
Section titled “Grant a permission on the mailbox at GET /mailboxes/{key}”Add an ACE to the mailbox at GET /mailboxes/{key} via Add-MailboxPermission. Returns 201 with Location pointing at the composite-id route {mailbox}|{user}|{accessRights} (same shape GET /mailboxes/{key}/permissions emits). Valid accessRights: ChangeOwner, ChangePermission, DeleteItem, ExternalAccount, FullAccess, ReadPermission.
POST /exchange/v1.0/mailboxes/{key}/permissions HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "accessRights": [ "ReadPermission" ]}HTTP/1.1 201 CreatedLocation: /exchange/v1.0/mailboxes/[email protected]/permissions/[email protected]%[email protected]%7CReadPermission
{ "accessRights": [ "ReadPermission" ]}Notes: FullAccess auto-maps to Outlook by default; pass autoMapping: false in the body to suppress. SendAs is a SEPARATE ACL set (see /mailboxes/{key}/recipientPermissions).
Related: GET /exchange/v1.0/mailboxes/{key}, GET /exchange/v1.0/mailboxes/{key}/permissions, DELETE /exchange/v1.0/mailboxes/{key}/permissions/{permissionId}, POST /exchange/v1.0/mailboxes/{key}/recipientPermissions
POST /exchange/v1.0/mailboxes/{key}/permissions/clearAutoMapping
Section titled “POST /exchange/v1.0/mailboxes/{key}/permissions/clearAutoMapping”POST /mailboxes/{key}/permissions/clearAutoMapping - clears Outlook auto-mapping for the mailbox at GET /mailboxes/{key} (Remove-MailboxPermission -ClearAutoMapping). This is a MAILBOX-level operation (its parameter set takes only -Identity + the switch, no -User/-AccessRights), so it gets its own route rather than the composite-ID DELETE /permissions/{permissionId}. Returns 204.
Backing cmdlet: Remove-MailboxPermission. Role: MailboxPermission.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
bypassMasterAccountSid |
query | bool (switch) | ||
ignoreDefaultScope |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
POST /exchange/v1.0/mailboxes/{key}/permissions/resetDefault
Section titled “POST /exchange/v1.0/mailboxes/{key}/permissions/resetDefault”POST /mailboxes/{key}/permissions/resetDefault - resets the mailbox’s “Default” permission entry to its out-of-box value for the mailbox at GET /mailboxes/{key} (Remove-MailboxPermission -ResetDefault). Mailbox-level (no -User/-AccessRights), so a dedicated route. Returns 204.
Backing cmdlet: Remove-MailboxPermission. Role: MailboxPermission.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
ignoreDefaultScope |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
DELETE /exchange/v1.0/mailboxes/{key}/permissions/{permissionId}
Section titled “DELETE /exchange/v1.0/mailboxes/{key}/permissions/{permissionId}”DELETE /mailboxes/{key}/permissions/{permissionId} - removes a mailbox ACE by its composite ID (the same ID surfaced by GET /mailboxes/{key}/permissions: “{Identity}|{User}|{AccessRights}” e.g. [email protected]|[email protected]|FullAccess). The URL’s {key} is authoritative for the mailbox identity; the Identity prefix in the composite ID is ignored. Remaining cmdlet switches (Deny, GroupMailbox, IgnoreDefaultScope, BypassMasterAccountSid, SoftDeletedMailbox, InheritanceType) are query params. -ClearAutoMapping / -ResetDefault are slice 1b own-action endpoints.
Backing cmdlet: Remove-MailboxPermission. Role: MailboxPermission.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inheritanceType |
query | string | ||
deny |
query | bool (switch) | ||
groupMailbox |
query | bool (switch) | ||
ignoreDefaultScope |
query | bool (switch) | ||
bypassMasterAccountSid |
query | bool (switch) | ||
softDeletedMailbox |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
Remove a permission from the mailbox at GET /mailboxes/{key}
Section titled “Remove a permission from the mailbox at GET /mailboxes/{key}”Revokes an ACE by its composite ID - the same ID surfaced by GET /mailboxes/{key}/permissions (shape: {mailboxIdentity}|{user}|{accessRights}). The URL {key} is authoritative for the mailbox identity; the Identity prefix inside the composite ID is informational. Returns 204.
DELETE /exchange/v1.0/mailboxes/{key}/permissions/{permissionId} HTTP/1.1Authorization: Bearer {token}HTTP/1.1 204 No ContentNotes: URL-encode the composite ID - the | separators must be escaped (%7C). The SPA Copy-as-curl button handles this automatically.
Related: GET /exchange/v1.0/mailboxes/{key}/permissions, POST /exchange/v1.0/mailboxes/{key}/permissions
GET /exchange/v1.0/mailboxes/{key}/recipientPermissions
Section titled “GET /exchange/v1.0/mailboxes/{key}/recipientPermissions”Sub-resource of the mailboxes at GET /mailboxes/{key} - list SendAs permissions. Backed by Get-RecipientPermission. Distinct ACL family from /permissions.
Backing cmdlet: Get-RecipientPermission. Role: MailboxPermission.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
trustee |
query | string | Filter the returned SendAs grants to a single trustee (the principal granted SendAs). Maps -Trustee on Get-RecipientPermission. |
List SendAs permissions on a mailbox
Section titled “List SendAs permissions on a mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - lists the SendAs (recipient) permissions granted on the mailbox. This is a distinct ACL family from /mailboxes/{key}/permissions and is backed by Get-RecipientPermission.
GET /exchange/v1.0/mailboxes/{key}/recipientPermissions HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#Collection(ExchangeApi.RecipientPermission)", "value": [ { "Trustee": "NT AUTHORITY\\SELF", "TrusteeUpn": "NT AUTHORITY\\SELF", "AccessControlType": "Allow", "AccessRights": [ "SendAs" ], "IsInherited": false, "InheritanceType": "None", "PrimarySmtpAddress": null, "TrusteeSidString": "S-1-5-10", "TrusteeWithPrimarySmtpAddress": null } ]}Related: GET /exchange/v1.0/mailboxes/{key}, GET /exchange/v1.0/mailboxes/{key}/permissions, POST /exchange/v1.0/mailboxes/{key}/recipientPermissions
POST /exchange/v1.0/mailboxes/{key}/recipientPermissions
Section titled “POST /exchange/v1.0/mailboxes/{key}/recipientPermissions”POST /mailboxes/{key}/recipientPermissions - grants SendAs via Add-RecipientPermission. The cmdlet’s only valid AccessRights value is SendAs, hard-coded here per MS Learn docs. Audit 2026-05-22 H: entity-style URL returns 201 + Location.
Backing cmdlet: Add-RecipientPermission. Role: Recipient.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
trustee |
body | string | yes | |
dryRun |
query | bool (switch) |
Grant SendAs without the required trustee
Section titled “Grant SendAs without the required trustee”Sub-resource of the mailbox at GET /mailboxes/{key}/recipientPermissions - Add-RecipientPermission requires a trustee. Omitting it returns the canonical 400 envelope.
POST /exchange/v1.0/mailboxes/{key}/recipientPermissions HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{}HTTP/1.1 400 Bad Request
{ "error": { "code": "BadRequest", "message": "The required field 'trustee' is missing.", "target": "trustee" }, "correlationId": "0HN7Q4ABCDEF0:00000004"}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/recipientPermissions
Grant SendAs permission
Section titled “Grant SendAs permission”Sub-resource of the mailbox at GET /mailboxes/{key}/recipientPermissions - grants SendAs via Add-RecipientPermission. trustee is required; AccessRights is always SendAs. Returns 201 + Location.
POST /exchange/v1.0/mailboxes/{key}/recipientPermissions HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{}HTTP/1.1 201 CreatedLocation: /exchange/v1.0/mailboxes/exonaut-sample-mailboxes/recipientPermissions/exonaut-sample-mailboxes%7Cdelegate%40contoso.com%7CSendAs
{ "identity": "exonaut-sample-mailboxes", "accessRights": [ "SendAs" ]}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/recipientPermissions, GET /exchange/v1.0/mailboxes
DELETE /exchange/v1.0/mailboxes/{key}/recipientPermissions/{permissionId}
Section titled “DELETE /exchange/v1.0/mailboxes/{key}/recipientPermissions/{permissionId}”DELETE /mailboxes/{key}/recipientPermissions/{permissionId} - revokes SendAs by composite ID (same shape as GET /mailboxes/{key}/recipientPermissions: “{Identity}|{Trustee}|{AccessRights}”). AccessRights is always SendAs per MS docs; we extract Trustee from the composite ID.
Backing cmdlet: Remove-RecipientPermission. Role: Recipient.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
deny |
query | bool (switch) | ||
multiTrustees |
query | string | ||
skipDomainValidationForMailContact |
query | bool (switch) | ||
skipDomainValidationForMailUser |
query | bool (switch) | ||
skipDomainValidationForSharedMailbox |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
Revoke SendAs permission
Section titled “Revoke SendAs permission”Sub-resource of the mailbox at GET /mailboxes/{key}/recipientPermissions - revokes SendAs by composite ID ‘{Identity}|{Trustee}|SendAs’ via Remove-RecipientPermission. Returns 204.
DELETE /exchange/v1.0/mailboxes/{key}/recipientPermissions/{permissionId} HTTP/1.1Authorization: Bearer {token}Content-Type: application/jsonHTTP/1.1 204 No ContentNotes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/recipientPermissions
GET /exchange/v1.0/mailboxes/{key}/regionalConfiguration
Section titled “GET /exchange/v1.0/mailboxes/{key}/regionalConfiguration”Get-MailboxRegionalConfiguration - timezone, language, date/time formats.
Backing cmdlet: Get-MailboxRegionalConfiguration. Role: Mailbox.Read (Community).
Get mailbox regional configuration
Section titled “Get mailbox regional configuration”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the mailbox’s regional settings: language, time zone, and date/time formats.
GET /exchange/v1.0/mailboxes/{key}/regionalConfiguration HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "identity": "john.woods", "mailboxOwnerId": null, "language": "en-US", "timeZone": "GTB Standard Time", "dateFormat": "M/d/yyyy", "timeFormat": "h:mm tt", "defaultFolderNameMatchingUserLanguage": false}Related: GET /exchange/v1.0/mailboxes/{key}
PATCH /exchange/v1.0/mailboxes/{key}/regionalConfiguration
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/regionalConfiguration”PATCH /mailboxes/{key}/regionalConfiguration → Set-MailboxRegionalConfiguration.
Backing cmdlet: Set-MailboxRegionalConfiguration. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
archive |
body | boolean (switch) | ||
dateFormat |
body | |||
language |
body | |||
localizeDefaultFolderName |
body | boolean (switch) | ||
timeFormat |
body | |||
timeZone |
body | |||
useCustomRouting |
body | boolean (switch) | ||
dryRun |
query | bool (switch) |
Set language and timezone
Section titled “Set language and timezone”Sub-resource of the mailbox at GET /mailboxes/{key}/regionalConfiguration - partial update via Set-MailboxRegionalConfiguration. Returns 200 + the updated configuration.
PATCH /exchange/v1.0/mailboxes/{key}/regionalConfiguration HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "language": "en-US", "timeZone": "Pacific Standard Time", "dateFormat": "M/d/yyyy"}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes", "Language": "en-US", "TimeZone": "Pacific Standard Time", "DateFormat": "M/d/yyyy"}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/regionalConfiguration, GET /exchange/v1.0/mailboxes
POST /exchange/v1.0/mailboxes/{key}/restore
Section titled “POST /exchange/v1.0/mailboxes/{key}/restore”POST /mailboxes/{key}/restore - recover a soft-deleted mailbox (within the 30-day window) via Undo-SoftDeletedMailbox. {key} is the soft-deleted mailbox identity (GUID / SMTP) - list candidates with GET /mailboxes?softDeletedMailbox=true. Optional body { “displayName”: “…”, “name”: “…” } renames on recovery. 204 on success; ?dryRun=true previews (-WhatIf).
The account-recreation parameter set (-Password / -WindowsLiveID) and -PublicFolder are intentionally not exposed (see ).
Backing cmdlet: Undo-SoftDeletedMailbox. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
displayName |
body | |||
name |
body | |||
dryRun |
query | bool (switch) |
Restore a soft-deleted mailbox
Section titled “Restore a soft-deleted mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - bound action that recovers a soft-deleted mailbox (within the 30-day window) via Undo-SoftDeletedMailbox. {key} is the soft-deleted mailbox identity (GUID/SMTP); list candidates with GET /mailboxes?softDeletedMailbox=true. Optional body { displayName, name } renames on recovery. Returns 204. Pass ?dryRun=true to preview (-WhatIf). The account-recreation parameter set (-Password / -WindowsLiveID) and -PublicFolder are intentionally not exposed.
POST /exchange/v1.0/mailboxes/{key}/restore HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "displayName": "Exonaut Recovered Mailbox"}HTTP/1.1 204 No ContentNotes: Live-verified full sacrificial cycles 2026-05-29 for BOTH a regular UserMailbox and a SharedMailbox: create (201) -> Remove-Mailbox (204, soft-delete) -> POST …/restore returned 204 (Undo-SoftDeletedMailbox) -> back live -> cleaned up. Restore by the mailbox’s original Guid / UserPrincipalName / PrimarySmtpAddress - NOT by the portal’s ‘ExRemoved-…@’ display address (Undo-SoftDeletedMailbox rejects that form with ‘doesn’t exist’). List the candidates first via GET /mailboxes?softDeletedMailbox=true. Body fields are Wiki-valid; displayName value is illustrative.
Related: GET /exchange/v1.0/mailboxes, DELETE /exchange/v1.0/mailboxes/{key}
GET /exchange/v1.0/mailboxes/{key}/spellingConfiguration
Section titled “GET /exchange/v1.0/mailboxes/{key}/spellingConfiguration”Get-MailboxSpellingConfiguration - OWA spelling preferences.
Backing cmdlet: Get-MailboxSpellingConfiguration. Role: Mailbox.Read (Community).
Get a mailbox’s OWA spelling preferences
Section titled “Get a mailbox’s OWA spelling preferences”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the Outlook on the web spell-check preferences for the mailbox, including the dictionary language and check-before-send setting.
GET /exchange/v1.0/mailboxes/{key}/spellingConfiguration HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "identity": "john.woods", "mailboxOwnerId": null, "checkBeforeSend": false, "dictionaryLanguage": "EnglishUnitedStates", "ignoreMixedDigits": false, "ignoreUppercase": false}Related: GET /exchange/v1.0/mailboxes/{key}
PATCH /exchange/v1.0/mailboxes/{key}/spellingConfiguration
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/spellingConfiguration”PATCH /mailboxes/{key}/spellingConfiguration → Set-MailboxSpellingConfiguration.
Backing cmdlet: Set-MailboxSpellingConfiguration. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
checkBeforeSend |
body | |||
dictionaryLanguage |
body | |||
ignoreMixedDigits |
body | |||
ignoreUppercase |
body | |||
dryRun |
query | bool (switch) |
Update OWA spelling preferences
Section titled “Update OWA spelling preferences”Sub-resource of the mailbox at GET /mailboxes/{key}/spellingConfiguration - partial update via Set-MailboxSpellingConfiguration. Returns 200 + the updated configuration.
PATCH /exchange/v1.0/mailboxes/{key}/spellingConfiguration HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "checkBeforeSend": true, "dictionaryLanguage": "EnglishUnitedStates", "ignoreUppercase": true}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes", "CheckBeforeSend": true, "DictionaryLanguage": "EnglishUnitedStates", "IgnoreUppercase": true}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/spellingConfiguration, GET /exchange/v1.0/mailboxes
POST /exchange/v1.0/mailboxes/{key}/startManagedFolderAssistant
Section titled “POST /exchange/v1.0/mailboxes/{key}/startManagedFolderAssistant”POST /mailboxes/{key}/startManagedFolderAssistant - manually trigger the Managed Folder Assistant (MRM / retention-tag processing) for this mailbox via Start-ManagedFolderAssistant. 204 on success; ?dryRun=true previews (-WhatIf) without running.
Only the base (Identity / default parameter set) trigger is exposed. -FullCrawl and the assistant-specific switches (-HoldCleanup, -AdaptiveScope, -ComplianceJob, …) are intentionally NOT surfaced: -FullCrawl is absent from the default Identity set and lives only in the 7 assistant-specific sets, each gated by a unique discriminator switch - so sending -Identity -FullCrawl without a discriminator is an unresolvable parameter set (“Parameter set cannot be resolved…”). The discriminators each change the operation’s semantics (hold cleanup, adaptive scope, compliance job, …) and are not a faithful “full re-scan”, so the switch is dropped rather than paired with a semantic-changing discriminator. (Adversarial review finding, 2026-05-29.)
Backing cmdlet: Start-ManagedFolderAssistant. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
dryRun |
query | bool (switch) |
Trigger the Managed Folder Assistant for a mailbox
Section titled “Trigger the Managed Folder Assistant for a mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - bound action that manually runs the Managed Folder Assistant (MRM / retention-tag processing) for the mailbox via Start-ManagedFolderAssistant (base Identity form). Returns 204. Pass ?dryRun=true to preview (-WhatIf).
POST /exchange/v1.0/mailboxes/{key}/startManagedFolderAssistant HTTP/1.1Authorization: Bearer {token}HTTP/1.1 204 No ContentNotes: Live dry-run verified 2026-05-29: POST …/startManagedFolderAssistant?dryRun=true returned 200 with whatIfOutput [‘What if: Starting Managed Folder Assistant.’]. The real (non-dryRun) call returns 204.
Related: GET /exchange/v1.0/mailboxes/{key}
GET /exchange/v1.0/mailboxes/{key}/statistics
Section titled “GET /exchange/v1.0/mailboxes/{key}/statistics”GET /mailboxes/{key}/statistics - mailbox-level size and item counts. Backed by Get-MailboxStatistics. Declared in EDM as the bound function ExchangeApi.getStatistics(); this Graph-style path is the friendlier surface for SPA clients.
Backing cmdlet: Get-MailboxStatistics. Role: Mailbox.Stats.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
archive |
query | bool (switch) | Return statistics for the archive mailbox associated with this mailbox instead of the primary. Maps -Archive on Get-MailboxStatistics. | |
includeSoftDeletedRecipients |
query | bool (switch) | Include soft-deleted (still-recoverable) mailboxes in the results. EXO-only, maps Get-MailboxStatistics -IncludeSoftDeletedRecipients. | |
includeMoveHistory |
query | bool (switch) | Include the history of any completed move request (status, target database, bad items, durations, failure codes). Maps -IncludeMoveHistory on Get-MailboxStatistics. |
Mailbox size + item count statistics
Section titled “Mailbox size + item count statistics”Sub-resource of the mailbox at GET /mailboxes/{key}. Returns aggregate storage statistics - total item count, deleted-item count, total size in human-readable form, last logon time. Backed by Get-MailboxStatistics. Computed on-demand by EXO; can take 1-3s for large mailboxes.
GET /exchange/v1.0/mailboxes/{key}/statistics HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "displayName": "John Woods", "mailboxGuid": "a07b03d2-3759-4d44-ab31-f42b82a8f22d", "identity": "a07b03d2-3759-4d44-ab31-f42b82a8f22d", "ownerADGuid": "88239689-1aac-40b1-9a94-5b144bbc3dc7", "externalDirectoryOrganizationId": "00000000-0000-0000-0000-000000000000", "dataEncryptionPolicyId": "b01a6b9a-4d66-44cd-8bed-5c410755fe09", "legacyDN": "/o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=f59ccb47889e464b89a302bf55708d82-a003556f-d8", "database": "EURPR02DG600-db513", "databaseName": "EURPR02DG600-db513", "serverName": "VI0PR02MB10511", "totalItemSize": "180.6 MB (189,404,336 bytes)", "totalDeletedItemSize": "1.425 MB (1,493,841 bytes)", "itemCount": 1246, "deletedItemCount": 21, "associatedItemCount": 88, "systemMessageCount": 9843, "systemMessageSize": "69.91 MB (73,308,124 bytes)", "backupMessageCount": 0, "backupMessageSize": "0 B (0 bytes)", "databaseIssueWarningQuota": "1.899 GB (2,039,480,320 bytes)", "databaseProhibitSendQuota": "2 GB (2,147,483,648 bytes)", "databaseProhibitSendReceiveQuota": "2.3 GB (2,469,396,480 bytes)", "systemMessageSizeWarningQuota": "69 GB (74,088,185,856 bytes)", "systemMessageSizeShutoffQuota": "70 GB (75,161,927,680 bytes)", "backupMessageSizeWarningQuota": "69 GB (74,088,185,856 bytes)", "backupMessageSizeShutoffQuota": "70 GB (75,161,927,680 bytes)", "mailboxMessagesPerFolderCountWarningQuota": 900000, "mailboxMessagesPerFolderCountReceiveQuota": 1000000, "dumpsterMessagesPerFolderCountWarningQuota": 2750000, "dumpsterMessagesPerFolderCountReceiveQuota": 3000000, "folderHierarchyChildrenCountWarningQuota": 9000, "folderHierarchyChildrenCountReceiveQuota": 10000, "folderHierarchyDepthWarningQuota": 250, "folderHierarchyDepthReceiveQuota": 300, "foldersCountWarningQuota": 200000, "foldersCountReceiveQuota": 250000, "namedPropertiesCountQuota": 16384, "lastLogonTime": "2026-05-23T06:28:01.020544+03:00", "lastLogoffTime": "2026-05-23T06:29:01.0447448+03:00", "lastInteractionTime": "2026-05-21T22:45:53.4787157+03:00", "lastUserActionTime": "2026-05-21T15:45:42.8510826+03:00", "lastTableSizeStatisticsUpdate": "2026-05-23T08:13:28.6178664+03:00", "lastLoggedOnUserAccount": null, "lastUserAccessTime": null, "bigFunnelIsEnabled": true, "bigFunnelSemanticSearchEnabled": true, "bigFunnelMessageCount": 1634, "bigFunnelIndexedCount": 1629, "bigFunnelPartiallyIndexedCount": 5, "bigFunnelNotIndexedCount": 0, "bigFunnelCorruptedCount": 0, "bigFunnelStaleCount": 0, "bigFunnelIndexedSize": "200.3 MB (210,044,183 bytes)", "bigFunnelNotIndexedSize": "0 B (0 bytes)", "semanticSearchNeedsToEnable": true, "semanticSearchEnableTime": "2026-04-09T02:38:53.4153116+03:00", "tenantCopilotLicenseStatus": 1, "storageLimitStatus": null, "mailboxType": "Private", "mailboxTypeDetail": "UserMailbox", "isEncrypted": true, "isArchiveMailbox": false, "isQuarantined": false, "isDatabaseCopyActive": true, "isValid": true, "disconnectReason": null, "disconnectDate": null, "quarantineClients": "", "moveHistory": null, "isMoveDestination": false, "isAbandonedMoveDestination": false, "needsToMove": "None", "delayedDeletionFirstEntryTime": "2026-04-25T07:15:34.9338015+03:00", "delayedDeletionMessageCount": 2607}Related: GET /exchange/v1.0/mailboxes/{key}, GET /exchange/v1.0/mailboxes/{key}/folderStatistics
GET /exchange/v1.0/mailboxes/{key}/sweepRules
Section titled “GET /exchange/v1.0/mailboxes/{key}/sweepRules”Sub-resource of the mailboxes at GET /mailboxes/{key} - list SweepRule entries (OWA Sweep).
Backing cmdlet: Get-SweepRule. Role: Mailbox.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
provider |
query | string | Filter by the storage provider that created the sweep rules (e.g. Exchange16 for OWA). Maps -Provider on Get-SweepRule. |
List sweep rules on a mailbox
Section titled “List sweep rules on a mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - lists the OWA Sweep rules configured on the mailbox. Returns an empty array when no sweep rules exist.
GET /exchange/v1.0/mailboxes/{key}/sweepRules HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
[]Related: GET /exchange/v1.0/mailboxes/{key}, GET /exchange/v1.0/mailboxes/{key}/inboxRules, POST /exchange/v1.0/mailboxes/{key}/sweepRules
POST /exchange/v1.0/mailboxes/{key}/sweepRules
Section titled “POST /exchange/v1.0/mailboxes/{key}/sweepRules”POST /mailboxes/{key}/sweepRules - creates a per-mailbox sweep rule via New-SweepRule. provider is required (OWA uses Exchange16).
Backing cmdlet: New-SweepRule. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
name |
body | yes | ||
provider |
body | yes | ||
destinationFolder |
body | |||
enabled |
body | |||
exceptIfFlagged |
body | |||
exceptIfPinned |
body | |||
keepForDays |
body | |||
keepLatest |
body | |||
sender |
body | |||
sourceFolder |
body | |||
systemCategory |
body | |||
dryRun |
query | bool (switch) |
Create a sweep rule without the required provider
Section titled “Create a sweep rule without the required provider”Sub-resource of the mailbox at GET /mailboxes/{key}/sweepRules - New-SweepRule requires both name and provider. Omitting provider returns the canonical 400 envelope.
POST /exchange/v1.0/mailboxes/{key}/sweepRules HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "name": "exonaut-sample-mailboxes-sweep", "keepForDays": 10}HTTP/1.1 400 Bad Request
{ "error": { "code": "BadRequest", "message": "The required field 'provider' is missing.", "target": "provider" }, "correlationId": "0HN7Q4ABCDEF0:00000003"}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/sweepRules
Create a sweep rule
Section titled “Create a sweep rule”Sub-resource of the mailbox at GET /mailboxes/{key}/sweepRules - creates a per-mailbox sweep rule via New-SweepRule. name + provider are required (OWA uses Exchange16). Returns 201 + Location.
POST /exchange/v1.0/mailboxes/{key}/sweepRules HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "name": "exonaut-sample-mailboxes-sweep", "provider": "Exchange16", "sourceFolder": "Inbox", "keepForDays": 10}HTTP/1.1 201 CreatedLocation: /exchange/v1.0/mailboxes/exonaut-sample-mailboxes/sweepRules/exonaut-sample-mailboxes%5C1
{ "Identity": "exonaut-sample-mailboxes\\1", "Name": "exonaut-sample-mailboxes-sweep", "Provider": "Exchange16", "SourceFolder": "Inbox", "KeepForDays": 10, "Enabled": true}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/sweepRules, GET /exchange/v1.0/mailboxes
GET /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId}
Section titled “GET /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId}”Sub-resource of the mailboxes at GET /mailboxes/{key} - single SweepRule by composite ruleId.
Backing cmdlet: Get-SweepRule. Role: Mailbox.Read (Community).
PATCH /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId}
Section titled “PATCH /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId}”Sub-resource of the mailboxes at GET /mailboxes/{key} - partial update of a SweepRule.
Backing cmdlet: Set-SweepRule. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
destinationFolder |
body | |||
enabled |
body | |||
exceptIfFlagged |
body | |||
exceptIfPinned |
body | |||
keepForDays |
body | |||
keepLatest |
body | |||
name |
body | |||
provider |
body | |||
sender |
body | |||
sourceFolder |
body | |||
systemCategory |
body | |||
dryRun |
query | bool (switch) |
Update a sweep rule
Section titled “Update a sweep rule”Sub-resource of the mailbox at GET /mailboxes/{key}/sweepRules/{ruleId} - partial update via Set-SweepRule. Returns 200 + the updated rule.
PATCH /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId} HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "keepForDays": 30, "enabled": true}HTTP/1.1 200 OK
{ "Identity": "exonaut-sample-mailboxes\\1", "Name": "exonaut-sample-mailboxes-sweep", "KeepForDays": 30, "Enabled": true}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId}, GET /exchange/v1.0/mailboxes/{key}/sweepRules
DELETE /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId}
Section titled “DELETE /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId}”Sub-resource of the mailboxes at GET /mailboxes/{key} - remove a single SweepRule by composite ruleId.
Backing cmdlet: Remove-SweepRule. Role: Mailbox.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
dryRun |
query | bool (switch) |
Delete a sweep rule
Section titled “Delete a sweep rule”Sub-resource of the mailbox at GET /mailboxes/{key}/sweepRules/{ruleId} - removes a single sweep rule via Remove-SweepRule. Returns 204.
DELETE /exchange/v1.0/mailboxes/{key}/sweepRules/{ruleId} HTTP/1.1Authorization: Bearer {token}Content-Type: application/jsonHTTP/1.1 204 No ContentNotes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/mailboxes/{key}/sweepRules
GET /exchange/v1.0/mailboxes/{key}/user
Section titled “GET /exchange/v1.0/mailboxes/{key}/user”Sub-resource of the mailboxes at GET /mailboxes/{key} - the Exchange User attached to this mailbox.
Backing cmdlet: Get-User. Role: User.Read (Community).
Get the Exchange user attached to a mailbox
Section titled “Get the Exchange user attached to a mailbox”Sub-resource of the mailbox at GET /mailboxes/{key} - returns the underlying Exchange User object (directory attributes, account state, and recipient typing) backing the mailbox identified by {key}.
GET /exchange/v1.0/mailboxes/{key}/user HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#users/$entity", "Id": "john.woods", "Name": "John Woods", "DisplayName": "John Woods", "SimpleDisplayName": "", "PhoneticDisplayName": "", "FirstName": "", "LastName": "", "Initials": "", "MailNickname": null, "SamAccountName": "$B6VJH0-DDO3526KIOHC", "Guid": "c80fb3b2-8bd1-4d1f-bab5-e06d74c3377a", "ExternalDirectoryObjectId": "d30c0254-af7e-4c04-a884-4265976e20b0", "DistinguishedName": "CN=John Woods,OU=contoso.onmicrosoft.com,OU=Microsoft Exchange Hosted Organizations,DC=EURPR01A017,DC=PROD,DC=OUTLOOK,DC=COM", "Identity": "john.woods", "ImmutableId": null, "AccountDisabled": true, "RemotePowerShellEnabled": true, "IsResource": false, "IsShared": false, "IsSecurityPrincipal": true, "IsLinked": false, "IsSoftDeletedByDisable": false, "IsSoftDeletedByRemove": false, "IsInactiveMailbox": false, "Title": "", "Department": "", "Company": "", "Office": "", "Manager": null, "AssistantName": "", "Phone": "", "MobilePhone": "", "HomePhone": "", "Fax": "", "Pager": "", "OtherTelephone": null, "OtherFax": null, "OtherHomePhone": null, "TelephoneAssistant": "", "WebPage": "", "Notes": "", "StreetAddress": "", "City": "", "StateOrProvince": "", "PostalCode": "", "PostOfficeBox": null, "CountryOrRegion": null, "GeoCoordinates": null, "RecipientType": "UserMailbox", "RecipientTypeDetails": "SharedMailbox", "OrganizationalUnit": "eurpr01a017.prod.outlook.com/Microsoft Exchange Hosted Organizations/contoso.onmicrosoft.com", "AuthenticationPolicy": null, "AuthenticationFlowPolicy": null, "UserAccountControl": "AccountDisabled, NormalAccount", "SeniorityIndex": null, "VIP": false, "WhenCreated": "2026-03-31T17:57:27+03:00", "WhenChanged": "2026-05-22T00:31:32+03:00", "WhenCreatedUTC": "2026-03-31T14:57:27Z", "WhenChangedUTC": "2026-05-21T21:31:32Z", "StsRefreshTokensValidFrom": "2026-03-16T17:46:02+02:00", "AdministrativeUnits": [], "AgentIdentityBlueprintId": "", "AllowUMCallsFromNonUsers": "SearchEnabled", "ArchiveRelease": "None", "BlockedSendersHash": null, "BulkMailEnabled": false, "CanHaveCloudCache": false, "CertificateSubject": [], "CloudCacheAccountType": "None", "CloudCacheProvider": 0, "CloudCacheRemoteEmailAddress": "", "CloudCacheScope": 0, "CloudCacheUserName": null, "ConsumerNetID": null, "CreationType": "None", "DefaultMailboxWorkloadsMask": null, "DesiredMailboxWorkloads": null, "DesiredMailboxWorkloadsGracePeriod": null, "DesiredMailboxWorkloadsModified": null, "DirectReports": [], "DirectReportsWithDisplayName": [], "EXOModuleEnabled": true, "EnforcedTimestamps": "", "ExchangeObjectId": "79b9957f-760f-4c95-a732-917c14b4a9fd", "GrantSendOnBehalfTo": [], "InPlaceHoldsRaw": [], "InformationBarrierSegments": [], "IsAgenticUser": false, "IsCloudCache": false, "IsCloudCacheBlocked": false, "IsCloudCacheProvisioningComplete": false, "IsDirSynced": false, "Languages": [ "en-US" ], "LegacyExchangeDN": "/o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=b95cae9b8f1d4b0eae92f8afad103fc9-john.woods", "LegalAgeGroup": null, "LinkedMasterAccount": "NT AUTHORITY\\SELF", "M365BackupState": "None", "MailboxLocations": [ "1;b496f793-0cfa-4e78-a703-df5ee6a51051;Primary;eurprd02.prod.outlook.com;9b2bf06b-6c7c-4221-adb7-eecf47f237f3" ], "MailboxProvisioningConstraint": null, "MailboxProvisioningPreferences": [], "MailboxRegion": null, "MailboxRegionLastUpdateTime": null, "MailboxRegionSuffix": "None", "MailboxRelease": "None", "MailboxWorkloads": "Mail, Calendar, Contacts, Substrate", "ManagerWithDisplayName": [], "NetID": "10032005B18E4C45", "OrganizationId": "EURPR01A017.PROD.OUTLOOK.COM/Microsoft Exchange Hosted Organizations/contoso.onmicrosoft.com - EURPR01A017.PROD.OUTLOOK.COM/ConfigurationUnits/contoso.onmicrosoft.com/Configuration", "OrganizationalUnitRoot": "contoso.onmicrosoft.com", "PersistedCapabilities": [ "BPOS_S_Standard" ], "PitrCopyIntervalInSeconds": 0, "PitrEnabled": false, "PitrOffboardedTimestamp": null, "PitrPaused": false, "PitrPausedTimestamp": null, "PitrState": "None", "PreviousRecipientTypeDetails": "None", "ResetPasswordOnNextLogon": false, "RoamingOptIn": false, "SKUAssigned": false, "SafeRecipientsHash": null, "SafeSendersHash": null, "SharingAnonymousIdentities": "", "Sid": "S-1-5-21-701439281-3420630407-1831248095-40828748", "UMCallingLineIds": [], "UMDialPlan": null, "UMDtmfMap": [], "UpgradeDetails": null, "UpgradeMessage": null, "UpgradeRequest": "None", "UpgradeStage": null, "UpgradeStageTimeStamp": null, "UpgradeStatus": "None", "UserIdentityParent": "", "UserPersona": "InternalMember", "UserType": "Member", "VoiceMailSettings": [], "WhenIBSegmentChanged": null, "WhenSoftDeleted": null,}Related: GET /exchange/v1.0/mailboxes/{key}, GET /exchange/v1.0/users/{key}
?dryRun=true previews of any write stay on Community.

