Skip to content

dynamicDistributionGroups

Dynamic Distribution Groups. Distribution groups whose membership is computed live from a query. The dynamicDistributionGroups entity set lives under /exchange/v1.0/dynamicDistributionGroups in the Recipients category.

Fact Value
Path /exchange/v1.0/dynamicDistributionGroups
Category Recipients
Tier Tier 0, Directory
Read role Group.Read.All (Community)
Write role Group.ReadWrite.All (Pro)
Backing cmdlets Get-DynamicDistributionGroup, Get-DynamicDistributionGroupMember, Set-DynamicDistributionGroup, New-DynamicDistributionGroup, Remove-DynamicDistributionGroup
Method Path Synopsis Role Plan
GET /exchange/v1.0/dynamicDistributionGroups List dynamicDistributionGroups entries. Group.Read Community
POST /exchange/v1.0/dynamicDistributionGroups POST /dynamicDistributionGroups - creates a filter-based group. Required: name. Then EITHER includedRecipients (precanned) OR recipientFilter (custom OPATH) - cmdlet enforces mutex. Group.ReadWrite Pro
GET /exchange/v1.0/dynamicDistributionGroups/{key} Get a single dynamicDistributionGroups entry by Identity. Group.Read Community
PATCH /exchange/v1.0/dynamicDistributionGroups/{key} PATCH /dynamicDistributionGroups/{key} - partial update via Set-DynamicDistributionGroup. To change membership pass updated recipientFilter/conditional*. Use ?forceMembershipRefresh=true to recompute immediately. Group.ReadWrite Pro
DELETE /exchange/v1.0/dynamicDistributionGroups/{key} DELETE /dynamicDistributionGroups/{key} - members (recipient objects) unaffected. Group.ReadWrite Pro
GET /exchange/v1.0/dynamicDistributionGroups/{key}/members Get-DynamicDistributionGroupMember - the live-evaluated member list for this filter-based group. Returns polymorphic recipients. Group.Read Community
GET /exchange/v1.0/dynamicDistributionGroups/{key}/owners GET /dynamicDistributionGroups/{key}/owners - owners are the ManagedBy identities on the group; resolve each via Get-Recipient. Mirrors GET /distributionGroups/{key}/owners; no dedicated owner cmdlet exists for dynamic groups, so we read the property off the entity. Group.Read Community

GET /exchange/v1.0/dynamicDistributionGroups

Section titled “GET /exchange/v1.0/dynamicDistributionGroups”

List dynamicDistributionGroups entries.

Backing cmdlet: Get-DynamicDistributionGroup. Role: Group.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-DynamicDistributionGroup; prevents silent truncation in large tenants.
anr query string Ambiguous name resolution (ANR) search string. Maps -Anr on Get-DynamicDistributionGroup; matches against CN, DisplayName, FirstName, LastName, and Alias.
sortBy query string Sort the results by a single property (Name, DisplayName, or Alias), ascending. Maps -SortBy on Get-DynamicDistributionGroup.
managedBy query string Filter the results by the group owner. Maps -ManagedBy on Get-DynamicDistributionGroup; accepts Name, Alias, DN, email address, or GUID.

Stub auto-generated example for the dynamicDistributionGroups collection. Backing cmdlet: Get-DynamicDistributionGroup. Live-verify with ?$top=3&$select=Id,Name and replace the synthetic body before promoting to Tier 1.

GET /exchange/v1.0/dynamicDistributionGroups?$top=3 HTTP/1.1
Authorization: Bearer {token}
HTTP/1.1 200 OK
{
"@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#dynamicDistributionGroups",
"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/dynamicDistributionGroups/{key}

POST /exchange/v1.0/dynamicDistributionGroups

Section titled “POST /exchange/v1.0/dynamicDistributionGroups”

POST /dynamicDistributionGroups - creates a filter-based group. Required: name. Then EITHER includedRecipients (precanned) OR recipientFilter (custom OPATH) - cmdlet enforces mutex.

Backing cmdlet: New-DynamicDistributionGroup. Role: Group.ReadWrite (Pro).

Parameter In Type Required Description
name body yes
alias body
conditionalCompany body
conditionalCustomAttribute1 body
conditionalCustomAttribute10 body
conditionalCustomAttribute11 body
conditionalCustomAttribute12 body
conditionalCustomAttribute13 body
conditionalCustomAttribute14 body
conditionalCustomAttribute15 body
conditionalCustomAttribute2 body
conditionalCustomAttribute3 body
conditionalCustomAttribute4 body
conditionalCustomAttribute5 body
conditionalCustomAttribute6 body
conditionalCustomAttribute7 body
conditionalCustomAttribute8 body
conditionalCustomAttribute9 body
conditionalDepartment body
conditionalStateOrProvince body
directMembershipOnly body
displayName body
includedRecipients body
moderatedBy body
moderationEnabled body
organizationalUnit body
primarySmtpAddress body
recipientContainer body
recipientFilter body
sendModerationNotifications body
dryRun query bool (switch)

New-DynamicDistributionGroup requires the name field. Omitting it returns a 400 BadRequest from the canonical validation envelope before the cmdlet is invoked.

POST /exchange/v1.0/dynamicDistributionGroups HTTP/1.1
Authorization: Bearer {token}
Content-Type: application/json
{
"includedRecipients": "MailboxUsers",
"conditionalDepartment": "Engineering"
}
HTTP/1.1 400 Bad Request
{
"error": {
"code": "BadRequest",
"message": "The 'name' field is required.",
"target": "name"
},
"correlationId": "0HN3K2A9D7F4B:00000012"
}

Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.

Related: GET /exchange/v1.0/dynamicDistributionGroups

Creates a filter-based distribution group via New-DynamicDistributionGroup. Membership is computed at delivery time from the precanned filter (includedRecipients + conditional fields) or a custom recipientFilter OPATH expression.

POST /exchange/v1.0/dynamicDistributionGroups HTTP/1.1
Authorization: Bearer {token}
Content-Type: application/json
{
"name": "exonaut-sample-dynamicDistributionGroups",
"displayName": "Exonaut Sample Dynamic Group",
"alias": "exonaut-sample-ddg",
"primarySmtpAddress": "[email protected]",
"includedRecipients": "MailboxUsers",
"conditionalDepartment": "Engineering",
"conditionalCompany": "Contoso"
}
HTTP/1.1 201 Created
Location: /exchange/v1.0/dynamicDistributionGroups/exonaut-sample-dynamicDistributionGroups
{
"Id": "exonaut-sample-dynamicDistributionGroups",
"Identity": "exonaut-sample-dynamicDistributionGroups",
"name": "exonaut-sample-dynamicDistributionGroups",
"displayName": "Exonaut Sample Dynamic Group",
"alias": "exonaut-sample-ddg",
"primarySmtpAddress": "[email protected]",
"includedRecipients": "MailboxUsers"
}

Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.

Related: GET /exchange/v1.0/dynamicDistributionGroups

GET /exchange/v1.0/dynamicDistributionGroups/{key}

Section titled “GET /exchange/v1.0/dynamicDistributionGroups/{key}”

Get a single dynamicDistributionGroups entry by Identity.

Backing cmdlet: Get-DynamicDistributionGroup. Role: Group.Read (Community).

Get a single dynamicDistributionGroups entry

Section titled “Get a single dynamicDistributionGroups entry”

Stub auto-generated example for GET /dynamicDistributionGroups/{key}. Backing cmdlet: Get-DynamicDistributionGroup with -Identity {key}. Returns the full entity body; 404 if the identity doesn’t resolve.

GET /exchange/v1.0/dynamicDistributionGroups/{key} HTTP/1.1
Authorization: Bearer {token}
HTTP/1.1 200 OK
{
"@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#dynamicDistributionGroups/$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/dynamicDistributionGroups

PATCH /exchange/v1.0/dynamicDistributionGroups/{key}

Section titled “PATCH /exchange/v1.0/dynamicDistributionGroups/{key}”

PATCH /dynamicDistributionGroups/{key} - partial update via Set-DynamicDistributionGroup. To change membership pass updated recipientFilter/conditional. Use ?forceMembershipRefresh=true to recompute immediately.*

Backing cmdlet: Set-DynamicDistributionGroup. Role: Group.ReadWrite (Pro).

Parameter In Type Required Description
acceptMessagesOnlyFrom body
acceptMessagesOnlyFromDLMembers body
acceptMessagesOnlyFromSendersOrMembers body
alias body
bypassModerationFromSendersOrMembers body
conditionalCompany body
conditionalCustomAttribute1 body
conditionalCustomAttribute10 body
conditionalCustomAttribute11 body
conditionalCustomAttribute12 body
conditionalCustomAttribute13 body
conditionalCustomAttribute14 body
conditionalCustomAttribute15 body
conditionalCustomAttribute2 body
conditionalCustomAttribute3 body
conditionalCustomAttribute4 body
conditionalCustomAttribute5 body
conditionalCustomAttribute6 body
conditionalCustomAttribute7 body
conditionalCustomAttribute8 body
conditionalCustomAttribute9 body
conditionalDepartment body
conditionalStateOrProvince 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
directMembershipOnly body
displayName body
emailAddresses body
extensionCustomAttribute1 body
extensionCustomAttribute2 body
extensionCustomAttribute3 body
extensionCustomAttribute4 body
extensionCustomAttribute5 body
grantSendOnBehalfTo body
hiddenFromAddressListsEnabled body
includedRecipients body
mailTip body
mailTipTranslations body
managedBy body
moderatedBy body
moderationEnabled body
name body
notes body
phoneticDisplayName body
primarySmtpAddress body
recipientContainer body
recipientFilter body
rejectMessagesFrom body
rejectMessagesFromDLMembers body
rejectMessagesFromSendersOrMembers body
reportToManagerEnabled body
reportToOriginatorEnabled body
requireSenderAuthenticationEnabled body
sendModerationNotifications body
sendOofMessageToOriginatorEnabled body
simpleDisplayName body
updateMemberCount body boolean (switch)
windowsEmailAddress body
forceMembershipRefresh query bool (switch)
forceUpgrade query bool (switch)
ignoreDefaultScope query bool (switch)
dryRun query bool (switch)

Partial update via Set-DynamicDistributionGroup. To change membership, pass an updated recipientFilter or conditional* field; add ?forceMembershipRefresh=true to recompute the membership immediately.

PATCH /exchange/v1.0/dynamicDistributionGroups/{key} HTTP/1.1
Authorization: Bearer {token}
Content-Type: application/json
{
"displayName": "Exonaut Sample Dynamic Group (Updated)",
"mailTip": "This group is managed by Exonaut.",
"conditionalDepartment": "Platform Engineering"
}
HTTP/1.1 200 OK
{
"Id": "exonaut-sample-dynamicDistributionGroups",
"Identity": "exonaut-sample-dynamicDistributionGroups",
"name": "exonaut-sample-dynamicDistributionGroups",
"displayName": "Exonaut Sample Dynamic Group (Updated)",
"mailTip": "This group is managed by Exonaut.",
"conditionalDepartment": "Platform Engineering"
}

Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.

Related: GET /exchange/v1.0/dynamicDistributionGroups

DELETE /exchange/v1.0/dynamicDistributionGroups/{key}

Section titled “DELETE /exchange/v1.0/dynamicDistributionGroups/{key}”

DELETE /dynamicDistributionGroups/{key} - members (recipient objects) unaffected.

Backing cmdlet: Remove-DynamicDistributionGroup. Role: Group.ReadWrite (Pro).

Parameter In Type Required Description
ignoreDefaultScope query bool (switch)
dryRun query bool (switch)

Removes the filter-based group via Remove-DynamicDistributionGroup. The recipient objects that match the filter are unaffected - only the group definition is deleted.

DELETE /exchange/v1.0/dynamicDistributionGroups/{key} HTTP/1.1
Authorization: Bearer {token}
Content-Type: application/json
HTTP/1.1 204 No Content

Notes: Doc-derived from Wiki + write-param allowlist; not live-captured. Body fields are Wiki-valid; values are illustrative.

Related: GET /exchange/v1.0/dynamicDistributionGroups

GET /exchange/v1.0/dynamicDistributionGroups/{key}/members

Section titled “GET /exchange/v1.0/dynamicDistributionGroups/{key}/members”

Get-DynamicDistributionGroupMember - the live-evaluated member list for this filter-based group. Returns polymorphic recipients.

Backing cmdlet: Get-DynamicDistributionGroupMember. Role: Group.Read (Community).

Parameter In Type Required Description
resultSize query int Max members to return (Get-DynamicDistributionGroupMember -ResultSize). Cmdlet default is 1000; pass a higher value to retrieve large filter-based groups.
includeSoftDeletedObjects query bool (switch) Include soft-deleted (still recoverable) members in the computed list (Get-DynamicDistributionGroupMember -IncludeSoftDeletedObjects).

List the computed members of a dynamic distribution group

Section titled “List the computed members of a dynamic distribution group”

Sub-resource of the dynamic distribution group at GET /dynamicDistributionGroups/{key} - returns the recipients that currently match the group’s OPATH filter, evaluated live at request time. Membership is filter-driven, so the set can change between calls without any explicit add or remove.

GET /exchange/v1.0/dynamicDistributionGroups/{key}/members HTTP/1.1
Authorization: Bearer {token}
HTTP/1.1 200 OK
{
"@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#recipients",
"value": []
}

Related: GET /exchange/v1.0/dynamicDistributionGroups/{key}, GET /exchange/v1.0/dynamicDistributionGroups

GET /exchange/v1.0/dynamicDistributionGroups/{key}/owners

Section titled “GET /exchange/v1.0/dynamicDistributionGroups/{key}/owners”

GET /dynamicDistributionGroups/{key}/owners - owners are the ManagedBy identities on the group; resolve each via Get-Recipient. Mirrors GET /distributionGroups/{key}/owners; no dedicated owner cmdlet exists for dynamic groups, so we read the property off the entity.

Backing cmdlet: Get-Recipient. Role: Group.Read (Community).

?dryRun=true previews of any write stay on Community.