publicFolders
Public Folders. Public folders with create, edit, and mail-enable actions. The publicFolders entity set lives under /exchange/v1.0/publicFolders in the Public folders category.
| Fact | Value |
|---|---|
| Path | /exchange/v1.0/publicFolders |
| Category | Public folders |
| Tier | Tier 7, Public folders |
| Read role | PublicFolder.Read.All (Community) |
| Write role | PublicFolder.ReadWrite.All (Pro) |
| Backing cmdlets | Get-PublicFolder, Set-PublicFolder, New-PublicFolder, Remove-PublicFolder, Enable-MailPublicFolder, Disable-MailPublicFolder |
Routes
Section titled “Routes”| Method | Path | Synopsis | Role | Plan |
|---|---|---|---|---|
| GET | /exchange/v1.0/publicFolders |
List publicFolders entries. | PublicFolder.Read |
Community |
| POST | /exchange/v1.0/publicFolders |
Create a new publicFolders entry. Body keys map 1:1 to the cmdlet’s parameter names (camelCased). Returns 201 + Location + the freshly-fetched entity. Use ?dryRun=true to map to -WhatIf without applying. | PublicFolder.ReadWrite |
Pro |
| GET | /exchange/v1.0/publicFolders/{key} |
Get a single publicFolders entry by Identity. | PublicFolder.Read |
Community |
| PATCH | /exchange/v1.0/publicFolders/{key} |
PATCH /publicFolders/{key} - Set-PublicFolder. Renames are supported via name in the body; does rename-aware re-fetch (post-slice-18 fix). | PublicFolder.ReadWrite |
Pro |
| DELETE | /exchange/v1.0/publicFolders/{key} |
Remove the publicFolders at /publicFolders/{key}. Returns 204 with no body. | PublicFolder.ReadWrite |
Pro |
| GET | /exchange/v1.0/publicFolders/{key}/clientPermissions |
GET /publicFolders/{key}/clientPermissions - Get-PublicFolderClientPermission. Returns the full ACE list; each row has Identity, User, AccessRights. | PublicFolder.Read |
Community |
| POST | /exchange/v1.0/publicFolders/{key}/clientPermissions |
POST /publicFolders/{key}/clientPermissions - adds a client ACE via Add-PublicFolderClientPermission. Returns 201 Created + Location on the composite ID “{folderIdentity}|{user}|{accessRights}” (same shape GET /clientPermissions emits). | PublicFolder.ReadWrite |
Pro |
| DELETE | /exchange/v1.0/publicFolders/{key}/clientPermissions/{permissionId} |
DELETE /publicFolders/{key}/clientPermissions/{permissionId} - removes a client ACE by composite ID (“{folderIdentity}|{user}|{accessRights}”). URL {key} is authoritative for the folder identity; the prefix in the composite ID is informational. | PublicFolder.ReadWrite |
Pro |
| POST | /exchange/v1.0/publicFolders/{key}/disableMail |
POST /publicFolders/{key}/disableMail - bound action, Disable-MailPublicFolder. Strips the mail-enabled state; the folder hierarchy stays. | PublicFolder.ReadWrite |
Pro |
| POST | /exchange/v1.0/publicFolders/{key}/enableMail |
POST /publicFolders/{key}/enableMail - bound action, Enable-MailPublicFolder. Caller can pre-hide the folder from address lists via ?hiddenFromAddressListsEnabled=true. | PublicFolder.ReadWrite |
Pro |
| GET | /exchange/v1.0/publicFolders/{key}/statistics |
GET /publicFolders/{key}/statistics - Get-PublicFolderStatistics. Per-folder size + item count + last-access. Empty when folder is unmapped. | PublicFolder.Read |
Community |
GET /exchange/v1.0/publicFolders
Section titled “GET /exchange/v1.0/publicFolders”List publicFolders entries.
Backing cmdlet: Get-PublicFolder. Role: PublicFolder.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
identity |
query | string | ||
recurse |
query | bool (switch) | ||
getChildren |
query | bool (switch) | ||
lostAndFound |
query | bool (switch) | ||
mailbox |
query | string | ||
residentFolders |
query | bool (switch) | ||
resultSize |
query | int |
List publicFolders
Section titled “List publicFolders”Stub auto-generated example for the publicFolders collection. Backing cmdlet: Get-PublicFolder. Live-verify with ?$top=3&$select=Id,Name and replace the synthetic body before promoting to Tier 1.
GET /exchange/v1.0/publicFolders?$top=3 HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#publicFolders", "value": []}Notes: Illustrative example derived from the cmdlet documentation, not a live capture: field names are real, values are placeholders.
Related: GET /exchange/v1.0/publicFolders/{key}
POST /exchange/v1.0/publicFolders
Section titled “POST /exchange/v1.0/publicFolders”Create a new publicFolders entry. Body keys map 1:1 to the cmdlet’s parameter names (camelCased). Returns 201 + Location + the freshly-fetched entity. Use ?dryRun=true to map to -WhatIf without applying.
Backing cmdlet: New-PublicFolder. Role: PublicFolder.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
name |
body | yes | ||
eformsLocaleId |
body | |||
mailbox |
body | |||
path |
body | |||
dryRun |
query | bool (switch) |
Create a public folder with the required name missing
Section titled “Create a public folder with the required name missing”New-PublicFolder requires the folder Name. Omitting it returns a 400 BadRequest before the cmdlet is invoked.
POST /exchange/v1.0/publicFolders HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "path": "\\Engineering"}HTTP/1.1 400 Bad Request
{ "error": { "code": "BadRequest", "message": "The 'name' field is required.", "target": "name" }, "correlationId": "0HN3K7QF8M2P1:00000007"}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/publicFolders
Create a public folder
Section titled “Create a public folder”Creates a new public folder in the hierarchy via New-PublicFolder. The folder Name is required; Path places it under an existing parent folder.
POST /exchange/v1.0/publicFolders HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "name": "exonaut-sample-publicFolders", "path": "\\Engineering", "mailbox": "PFMailbox-Contoso"}HTTP/1.1 201 CreatedLocation: /exchange/v1.0/publicFolders/exonaut-sample-publicFolders
{ "Identity": "\\Engineering\\exonaut-sample-publicFolders", "Name": "exonaut-sample-publicFolders", "Path": "\\Engineering", "MailEnabled": false}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/publicFolders
GET /exchange/v1.0/publicFolders/{key}
Section titled “GET /exchange/v1.0/publicFolders/{key}”Get a single publicFolders entry by Identity.
Backing cmdlet: Get-PublicFolder. Role: PublicFolder.Read (Community).
Get a single publicFolders entry
Section titled “Get a single publicFolders entry”Stub auto-generated example for GET /publicFolders/{key}. Backing cmdlet: Get-PublicFolder with -Identity {key}. Returns the full entity body; 404 if the identity doesn’t resolve.
GET /exchange/v1.0/publicFolders/{key} HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#publicFolders/$entity"}Notes: Illustrative example derived from the cmdlet documentation, not a live capture: field names are real, values are placeholders.
Related: GET /exchange/v1.0/publicFolders
PATCH /exchange/v1.0/publicFolders/{key}
Section titled “PATCH /exchange/v1.0/publicFolders/{key}”PATCH /publicFolders/{key} - Set-PublicFolder. Renames are supported via name in the body; does rename-aware re-fetch (post-slice-18 fix).
Backing cmdlet: Set-PublicFolder. Role: PublicFolder.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
ageLimit |
body | |||
eformsLocaleId |
body | |||
hiddenFromAddressListsEnabled |
body | |||
issueWarningQuota |
body | |||
mailEnabled |
body | |||
mailRecipientGuid |
body | |||
maxItemSize |
body | |||
name |
body | |||
path |
body | |||
perUserReadStateEnabled |
body | |||
prohibitPostQuota |
body | |||
retainDeletedItemsFor |
body | |||
force |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
Update a public folder
Section titled “Update a public folder”Updates an existing public folder via Set-PublicFolder. Body fields map to the cmdlet’s writable parameters; renames are supported via name with rename-aware re-fetch.
PATCH /exchange/v1.0/publicFolders/{key} HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "hiddenFromAddressListsEnabled": true, "maxItemSize": "10 MB", "perUserReadStateEnabled": true}HTTP/1.1 200 OK
{ "Identity": "\\Engineering\\exonaut-sample-publicFolders", "Name": "exonaut-sample-publicFolders", "HiddenFromAddressListsEnabled": true, "MaxItemSize": "10 MB (10,485,760 bytes)", "PerUserReadStateEnabled": 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/publicFolders
DELETE /exchange/v1.0/publicFolders/{key}
Section titled “DELETE /exchange/v1.0/publicFolders/{key}”Remove the publicFolders at /publicFolders/{key}. Returns 204 with no body.
Backing cmdlet: Remove-PublicFolder. Role: PublicFolder.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
recurse |
query | bool (switch) | ||
mailbox |
query | string | Optional: scope the removal to a specific public folder mailbox server-side (Remove-PublicFolder -Mailbox). Any value uniquely identifying the PF mailbox (Name/Alias/UPN/GUID). | |
dryRun |
query | bool (switch) |
Delete a public folder
Section titled “Delete a public folder”Removes a public folder via Remove-PublicFolder. Use ?recurse=true to delete a folder together with its child folders. Returns 204 with no body.
DELETE /exchange/v1.0/publicFolders/{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/publicFolders
GET /exchange/v1.0/publicFolders/{key}/clientPermissions
Section titled “GET /exchange/v1.0/publicFolders/{key}/clientPermissions”GET /publicFolders/{key}/clientPermissions - Get-PublicFolderClientPermission. Returns the full ACE list; each row has Identity, User, AccessRights.
Backing cmdlet: Get-PublicFolderClientPermission. Role: PublicFolder.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
user |
query | string | Optional: filter the ACE list to a single trustee server-side (Get-PublicFolderClientPermission -User). UPN (user@contoso.com) or Domain\SamAccountName. | |
mailbox |
query | string | Optional: read permissions from a specific public folder mailbox instead of the primary one (Get-PublicFolderClientPermission -Mailbox). Any value uniquely identifying the PF mailbox (Name/Alias/UPN/GUID). |
POST /exchange/v1.0/publicFolders/{key}/clientPermissions
Section titled “POST /exchange/v1.0/publicFolders/{key}/clientPermissions”POST /publicFolders/{key}/clientPermissions - adds a client ACE via Add-PublicFolderClientPermission. Returns 201 Created + Location on the composite ID “{folderIdentity}|{user}|{accessRights}” (same shape GET /clientPermissions emits).
Backing cmdlet: Add-PublicFolderClientPermission. Role: PublicFolder.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
user |
body | string | yes | |
accessRights |
body | array | yes | |
dryRun |
query | bool (switch) |
Add a client permission to a public folder
Section titled “Add a client permission to a public folder”Sub-resource of the public folder at GET /publicFolders/{key} - adds a client ACE via Add-PublicFolderClientPermission. Requires user and accessRights. Returns 201 + Location on the composite ID ‘{folderIdentity}|{user}|{accessRights}’.
POST /exchange/v1.0/publicFolders/{key}/clientPermissions HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "user": "user@contoso.com", "accessRights": [ "Editor" ]}HTTP/1.1 201 CreatedLocation: /exchange/v1.0/publicFolders/%5CEngineering%5Cexonaut-sample-publicFolders/clientPermissions/%5CEngineering%5Cexonaut-sample-publicFolders%7Cuser%40contoso.com%7CEditor
{ "id": "\\Engineering\\exonaut-sample-publicFolders|user@contoso.com|Editor", "identity": "\\Engineering\\exonaut-sample-publicFolders", "user": "user@contoso.com", "accessRights": [ "Editor" ]}Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.
Related: GET /exchange/v1.0/publicFolders, GET /exchange/v1.0/publicFolders/{key}/clientPermissions, DELETE /exchange/v1.0/publicFolders/{key}/clientPermissions/{permissionId}
DELETE /exchange/v1.0/publicFolders/{key}/clientPermissions/{permissionId}
Section titled “DELETE /exchange/v1.0/publicFolders/{key}/clientPermissions/{permissionId}”DELETE /publicFolders/{key}/clientPermissions/{permissionId} - removes a client ACE by composite ID (“{folderIdentity}|{user}|{accessRights}”). URL {key} is authoritative for the folder identity; the prefix in the composite ID is informational.
Backing cmdlet: Remove-PublicFolderClientPermission. Role: PublicFolder.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
dryRun |
query | bool (switch) |
Remove a client permission from a public folder
Section titled “Remove a client permission from a public folder”Sub-resource of GET /publicFolders/{key}/clientPermissions. Sub-resource of the public folder at GET /publicFolders/{key} - removes a client ACE by composite ID ‘{folderIdentity}|{user}|{accessRights}’ via Remove-PublicFolderClientPermission. Returns 204 with no body.
DELETE /exchange/v1.0/publicFolders/{key}/clientPermissions/{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/publicFolders, GET /exchange/v1.0/publicFolders/{key}/clientPermissions, POST /exchange/v1.0/publicFolders/{key}/clientPermissions
POST /exchange/v1.0/publicFolders/{key}/disableMail
Section titled “POST /exchange/v1.0/publicFolders/{key}/disableMail”POST /publicFolders/{key}/disableMail - bound action, Disable-MailPublicFolder. Strips the mail-enabled state; the folder hierarchy stays.
Backing cmdlet: Disable-MailPublicFolder. Role: PublicFolder.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
dryRun |
query | bool (switch) |
Mail-disable a public folder
Section titled “Mail-disable a public folder”Sub-resource of the public folder at GET /publicFolders/{key} - strips the mail-enabled state via Disable-MailPublicFolder. The folder hierarchy stays intact. Returns 204.
POST /exchange/v1.0/publicFolders/{key}/disableMail 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/publicFolders
POST /exchange/v1.0/publicFolders/{key}/enableMail
Section titled “POST /exchange/v1.0/publicFolders/{key}/enableMail”POST /publicFolders/{key}/enableMail - bound action, Enable-MailPublicFolder. Caller can pre-hide the folder from address lists via ?hiddenFromAddressListsEnabled=true.
Backing cmdlet: Enable-MailPublicFolder. Role: PublicFolder.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
hiddenFromAddressListsEnabled |
query | bool (switch) | ||
dryRun |
query | bool (switch) |
Mail-enable a public folder
Section titled “Mail-enable a public folder”Sub-resource of the public folder at GET /publicFolders/{key} - mail-enables the folder via Enable-MailPublicFolder. Optionally hide it from address lists with ?hiddenFromAddressListsEnabled=true. Returns 204.
POST /exchange/v1.0/publicFolders/{key}/enableMail?hiddenFromAddressListsEnabled=true 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/publicFolders
GET /exchange/v1.0/publicFolders/{key}/statistics
Section titled “GET /exchange/v1.0/publicFolders/{key}/statistics”GET /publicFolders/{key}/statistics - Get-PublicFolderStatistics. Per-folder size + item count + last-access. Empty when folder is unmapped.
Backing cmdlet: Get-PublicFolderStatistics. Role: PublicFolder.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
mailbox |
query | string | Optional: scope the lookup to a specific hierarchy public folder mailbox server-side (Get-PublicFolderStatistics -Mailbox). Any value uniquely identifying the PF mailbox (Name/Alias/UPN/GUID). |
?dryRun=true previews of any write stay on Community.

