vivaModuleFeaturePolicies
Viva Feature Policies. Enable or disable Viva module features for users and groups. The vivaModuleFeaturePolicies entity set lives under /exchange/v1.0/vivaModuleFeaturePolicies in the Organization category.
| Fact | Value |
|---|---|
| Path | /exchange/v1.0/vivaModuleFeaturePolicies |
| Category | Organization |
| Tier | Tier 9, Hybrid and organization |
| Read role | OrganizationConfig.Read.All (Community) |
| Write role | OrganizationConfig.ReadWrite.All (Enterprise) |
| Backing cmdlets | Get-VivaModuleFeaturePolicy, Add-VivaModuleFeaturePolicy, Update-VivaModuleFeaturePolicy, Remove-VivaModuleFeaturePolicy |
Routes
Section titled “Routes”| Method | Path | Synopsis | Role | Plan |
|---|---|---|---|---|
| GET | /exchange/v1.0/vivaModuleFeaturePolicies |
GET /vivaModuleFeaturePolicies?moduleId=<name>&featureId=<name> - list policies for a feature. Block 5 live-verify 2026-05-28: moduleId is REQUIRED at runtime. | OrganizationConfig.Read |
Community |
| POST | /exchange/v1.0/vivaModuleFeaturePolicies |
POST /vivaModuleFeaturePolicies - create a feature access policy via Add-VivaModuleFeaturePolicy. Required: name + moduleId + featureId + isFeatureEnabled. Scope by Everyone / GroupIds / UserIds. Returns 204 (the cmdlet’s pipeline output is not re-fetchable by a stable key, so we don’t return the entity). | OrganizationConfig.ReadWrite |
Enterprise |
| PATCH | /exchange/v1.0/vivaModuleFeaturePolicies/{key} |
PATCH /vivaModuleFeaturePolicies/{policyId} - update a feature access policy via Update-VivaModuleFeaturePolicy. Required body fields: moduleId + featureId (composite key with URL policyId). Returns 204. | OrganizationConfig.ReadWrite |
Enterprise |
| DELETE | /exchange/v1.0/vivaModuleFeaturePolicies/{key} |
DELETE /vivaModuleFeaturePolicies/{policyId} - remove a policy via Remove-VivaModuleFeaturePolicy. Required query: ?moduleId=&featureId= (composite key with URL policyId). Returns 204. | OrganizationConfig.ReadWrite |
Enterprise |
GET /exchange/v1.0/vivaModuleFeaturePolicies
Section titled “GET /exchange/v1.0/vivaModuleFeaturePolicies”GET /vivaModuleFeaturePolicies?moduleId=<name>&featureId=<name> - list policies for a feature. Block 5 live-verify 2026-05-28: moduleId is REQUIRED at runtime.
Backing cmdlet: Get-VivaModuleFeaturePolicy. Role: OrganizationConfig.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
moduleId |
query | string | REQUIRED: Viva module id. | |
featureId |
query | string | Optional: feature id within the module - narrows the result set. | |
memberIds |
query | string | Optional: comma-separated user/group ids (max 3, ‘*’ wildcard supported) to find which policies apply to them (Get-VivaModuleFeaturePolicy -MemberIds, FeaturePolicyWithMembers parameter set). | |
all |
query | bool (switch) | Return all results instead of the EXO default of 1000. Maps -ResultSize Unlimited on Get-VivaModuleFeaturePolicy; prevents silent truncation. |
POST /exchange/v1.0/vivaModuleFeaturePolicies
Section titled “POST /exchange/v1.0/vivaModuleFeaturePolicies”POST /vivaModuleFeaturePolicies - create a feature access policy via Add-VivaModuleFeaturePolicy. Required: name + moduleId + featureId + isFeatureEnabled. Scope by Everyone / GroupIds / UserIds. Returns 204 (the cmdlet’s pipeline output is not re-fetchable by a stable key, so we don’t return the entity).
Backing cmdlet: Add-VivaModuleFeaturePolicy. Role: OrganizationConfig.ReadWrite (Enterprise).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
featureId |
body | yes | ||
isFeatureEnabled |
body | yes | ||
moduleId |
body | yes | ||
name |
body | yes | ||
everyone |
body | boolean (switch) | ||
groupIds |
body | |||
isUserControlEnabled |
body | |||
isUserOptedInByDefault |
body | |||
userIds |
body | |||
dryRun |
query | bool (switch) |
Disable Viva Reflection for a department
Section titled “Disable Viva Reflection for a department”Create a Viva feature access policy via Add-VivaModuleFeaturePolicy. Note the Viva surface uses Add/Update/Remove verbs (not the standard New/Set/Remove). Required body fields: name + moduleId + featureId + isFeatureEnabled. Scope the policy via the Everyone switch or a group/user list (groupIds + userIds - mutually exclusive with Everyone). The composite key is (moduleId, featureId, policyId); PATCH/DELETE later requires moduleId + featureId alongside the policyId in the URL.
POST /exchange/v1.0/vivaModuleFeaturePolicies HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "name": "Finance-Disable-Reflection", "moduleId": "VivaInsights", "featureId": "Reflection", "isFeatureEnabled": false, "groupIds": [ "finance-team@contoso.com" ], "isUserControlEnabled": false}HTTP/1.1 204 No ContentRelated: GET /exchange/v1.0/vivaModuleFeaturePolicies?moduleId=VivaInsights&featureId=Reflection, PATCH /exchange/v1.0/vivaModuleFeaturePolicies/{policyId}, DELETE /exchange/v1.0/vivaModuleFeaturePolicies/{policyId}?moduleId=&featureId=, GET /exchange/v1.0/vivaModuleFeatures
PATCH /exchange/v1.0/vivaModuleFeaturePolicies/{key}
Section titled “PATCH /exchange/v1.0/vivaModuleFeaturePolicies/{key}”PATCH /vivaModuleFeaturePolicies/{policyId} - update a feature access policy via Update-VivaModuleFeaturePolicy. Required body fields: moduleId + featureId (composite key with URL policyId). Returns 204.
Backing cmdlet: Update-VivaModuleFeaturePolicy. Role: OrganizationConfig.ReadWrite (Enterprise).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
featureId |
body | yes | ||
moduleId |
body | yes | ||
everyone |
body | |||
groupIds |
body | |||
isFeatureEnabled |
body | |||
isUserControlEnabled |
body | |||
isUserOptedInByDefault |
body | |||
name |
body | |||
userIds |
body | |||
dryRun |
query | bool (switch) |
Update a Viva module feature policy
Section titled “Update a Viva module feature policy”Updates an existing per-feature access policy via Update-VivaModuleFeaturePolicy. The URL {key} is the PolicyId; moduleId + featureId in the body form the composite key, and the remaining fields adjust enablement and scope. Returns 204 No Content.
PATCH /exchange/v1.0/vivaModuleFeaturePolicies/{key} HTTP/1.1Authorization: Bearer {token}Content-Type: application/json
{ "moduleId": "VivaInsights", "featureId": "Reflection", "isFeatureEnabled": false, "name": "exonaut-sample-vivaModuleFeaturePolicies"}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/vivaModuleFeaturePolicies
DELETE /exchange/v1.0/vivaModuleFeaturePolicies/{key}
Section titled “DELETE /exchange/v1.0/vivaModuleFeaturePolicies/{key}”DELETE /vivaModuleFeaturePolicies/{policyId} - remove a policy via Remove-VivaModuleFeaturePolicy. Required query: ?moduleId=&featureId= (composite key with URL policyId). Returns 204.
Backing cmdlet: Remove-VivaModuleFeaturePolicy. Role: OrganizationConfig.ReadWrite (Enterprise).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
moduleId |
query | string | Required: Viva module id (composite key part). | |
featureId |
query | string | Required: feature id within the module (composite key part). | |
dryRun |
query | bool (switch) |
Delete a Viva module feature policy
Section titled “Delete a Viva module feature policy”Removes a per-feature access policy via Remove-VivaModuleFeaturePolicy. The URL {key} is the PolicyId; the required moduleId + featureId query params complete the composite key. Returns 204 No Content.
DELETE /exchange/v1.0/vivaModuleFeaturePolicies/{key}?moduleId=VivaInsights&featureId=Reflection 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/vivaModuleFeaturePolicies
?dryRun=true previews of any write stay on Community.

