casMailboxPlans
Client Access Plans. Default protocol settings new mailboxes inherit by plan. The casMailboxPlans entity set lives under /exchange/v1.0/casMailboxPlans in the Mailbox settings category.
| Fact | Value |
|---|---|
| Path | /exchange/v1.0/casMailboxPlans |
| Category | Mailbox settings |
| Tier | Tier 9, Hybrid and organization |
| Read role | OrganizationConfig.Read.All (Community) |
| Write role | OrganizationConfig.ReadWrite.All (Enterprise) |
| Backing cmdlets | Get-CASMailboxPlan, Set-CASMailboxPlan |
Routes
Section titled “Routes”| Method | Path | Synopsis | Role | Plan |
|---|---|---|---|---|
| GET | /exchange/v1.0/casMailboxPlans |
List casMailboxPlans entries. | OrganizationConfig.Read |
Community |
| GET | /exchange/v1.0/casMailboxPlans/{key} |
Get a single casMailboxPlans entry by Identity. | OrganizationConfig.Read |
Community |
| PATCH | /exchange/v1.0/casMailboxPlans/{key} |
PATCH /casMailboxPlans/{key} - update the plan’s client-access protocol defaults via Set-CASMailboxPlan. Body keys subset of (e.g. { “popEnabled”: false, “imapEnabled”: false }). Returns 200 + the refreshed plan. ?dryRun=true previews (-WhatIf). | OrganizationConfig.ReadWrite |
Enterprise |
GET /exchange/v1.0/casMailboxPlans
Section titled “GET /exchange/v1.0/casMailboxPlans”List casMailboxPlans entries.
Backing cmdlet: Get-CASMailboxPlan. Role: OrganizationConfig.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
all |
query | bool (switch) | Return all results instead of the EXO default of 1000. Maps -ResultSize Unlimited on Get-CASMailboxPlan; prevents silent truncation in large tenants. |
List CAS mailbox plans
Section titled “List CAS mailbox plans”Lists every CAS (Client Access Services) mailbox plan via Get-CASMailboxPlan. Each plan carries the protocol-access defaults (POP/IMAP/MAPI/EWS/OWA/ActiveSync/ECP) inherited by mailboxes provisioned under the matching mailbox plan. One plan per license SKU, tenant-wide.
GET /exchange/v1.0/casMailboxPlans 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#casMailboxPlans", "value": [ { "Id": "ExchangeOnline-11111111-1111-1111-1111-111111111111", "Name": "ExchangeOnline-11111111-1111-1111-1111-111111111111", "DisplayName": "ExchangeOnline", "Identity": "ExchangeOnline-11111111-1111-1111-1111-111111111111", "Guid": "a1b2c3d4-1111-2222-3333-444444444444", "MailboxPlanIndex": null, "PrimarySmtpAddress": null, "ActiveSyncEnabled": true, "ECPEnabled": true, "EwsEnabled": 1, "ImapEnabled": true, "MAPIEnabled": true, "OWAEnabled": true, "OwaMailboxPolicy": "OwaMailboxPolicy-Default", "PopEnabled": true, "WhenCreatedUTC": "2026-03-30T14:03:03Z", "WhenChangedUTC": "2026-03-30T14:04:28Z" } ]}Notes: Live-captured against EXO and sanitized (plan GUIDs + identifiers replaced). The tenant returned 4 plans; one representative plan shown.
Related: GET /exchange/v1.0/casMailboxPlans/{key}, GET /exchange/v1.0/mailboxPlans
GET /exchange/v1.0/casMailboxPlans/{key}
Section titled “GET /exchange/v1.0/casMailboxPlans/{key}”Get a single casMailboxPlans entry by Identity.
Backing cmdlet: Get-CASMailboxPlan. Role: OrganizationConfig.Read (Community).
Get a CAS mailbox plan by key
Section titled “Get a CAS mailbox plan by key”Fetches a single CAS mailbox plan by its Identity via Get-CASMailboxPlan. A bad key returns 404 (the controller matches the requested key against Id/Identity/Name/Guid rather than blindly returning the first row).
GET /exchange/v1.0/casMailboxPlans/{key} 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#casMailboxPlans/$entity", "Id": "ExchangeOnline-11111111-1111-1111-1111-111111111111", "Name": "ExchangeOnline-11111111-1111-1111-1111-111111111111", "DisplayName": "ExchangeOnline", "Identity": "ExchangeOnline-11111111-1111-1111-1111-111111111111", "Guid": "a1b2c3d4-1111-2222-3333-444444444444", "MailboxPlanIndex": null, "PrimarySmtpAddress": null, "ActiveSyncEnabled": true, "ECPEnabled": true, "EwsEnabled": 1, "ImapEnabled": true, "MAPIEnabled": true, "OWAEnabled": true, "OwaMailboxPolicy": "OwaMailboxPolicy-Default", "PopEnabled": true, "WhenCreatedUTC": "2026-03-30T14:03:03Z", "WhenChangedUTC": "2026-03-30T14:04:28Z"}Notes: Live-captured against EXO and sanitized.
Related: GET /exchange/v1.0/casMailboxPlans, PATCH /exchange/v1.0/casMailboxPlans/{key}
PATCH /exchange/v1.0/casMailboxPlans/{key}
Section titled “PATCH /exchange/v1.0/casMailboxPlans/{key}”PATCH /casMailboxPlans/{key} - update the plan’s client-access protocol defaults via Set-CASMailboxPlan. Body keys subset of (e.g. { “popEnabled”: false, “imapEnabled”: false }). Returns 200 + the refreshed plan. ?dryRun=true previews (-WhatIf).
Backing cmdlet: Set-CASMailboxPlan. Role: OrganizationConfig.ReadWrite (Enterprise).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
activeSyncEnabled |
body | |||
ecpEnabled |
body | |||
ewsEnabled |
body | |||
imapEnabled |
body | |||
mapiEnabled |
body | |||
owaEnabled |
body | |||
owaMailboxPolicy |
body | |||
popEnabled |
body | |||
dryRun |
query | bool (switch) |
Update CAS mailbox plan protocol defaults (tenant capability gate)
Section titled “Update CAS mailbox plan protocol defaults (tenant capability gate)”Updates a plan’s client-access protocol defaults via Set-CASMailboxPlan. Body keys: activeSyncEnabled, ecpEnabled, ewsEnabled, imapEnabled, mapiEnabled, oWAEnabled, owaMailboxPolicy, popEnabled. On success returns 200 + the refreshed plan. NOTE: on some tenants/app-only principals Set-CASMailboxPlan is gated server-side and returns the generic EXO ‘server side error’ (surfaced here as a 500 ExchangeCommandFailed envelope) - the wiring is correct; the cmdlet is simply not permitted for the calling principal on that tenant.
PATCH /exchange/v1.0/casMailboxPlans/{key} HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "popEnabled": false, "imapEnabled": false}HTTP/1.1 500 Internal Server ErrorContent-Type: application/json; charset=utf-8
{ "error": { "code": "ExchangeCommandFailed", "message": "Cmdlet 'Set-CASMailboxPlan' failed: A server side error has occurred because of which the operation could not be completed. Please try again after some time. If the problem still persists, please reach out to MS support.", "target": null, "innerError": { "cmdlet": "Set-CASMailboxPlan" } }}Notes: Live-captured 2026-05-29 (sanitized). Both the real PATCH and the ?dryRun=true (-WhatIf) form return this identical generic EXO error, confirming it is a service-side capability gate on Set-CASMailboxPlan rather than a -WhatIf or code issue.
Related: GET /exchange/v1.0/casMailboxPlans/{key}
?dryRun=true previews of any write stay on Community.

