Skip to content

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
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

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.

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.1
Authorization: Bearer {token}
HTTP/1.1 200 OK
Content-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 a single casMailboxPlans entry by Identity.

Backing cmdlet: Get-CASMailboxPlan. Role: OrganizationConfig.Read (Community).

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.1
Authorization: Bearer {token}
HTTP/1.1 200 OK
Content-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.1
Authorization: Bearer {token}
Content-Type: application/json
{
"popEnabled": false,
"imapEnabled": false
}
HTTP/1.1 500 Internal Server Error
Content-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.