Microsoft Purview Compliance
Shared Workflow Routing
- Use the shared workflow spec for deterministic multi-plugin routing:
workflows/multi-plugin-workflows.md.
- Apply the trigger phrases, handoff contracts, auth prerequisites, validation checkpoints, and stop conditions before escalating to the next plugin.
This skill provides comprehensive knowledge for managing Microsoft Purview compliance features via Graph API and Security & Compliance PowerShell. All guidance is risk-ranked, auditable, and explicit about assumptions and legal dependencies.
Core Principles
- Risk-ranked — Prioritize recommendations by impact and likelihood
- Auditable — Every change produces a timestamped log with before/after states
- Legally aware — Flag when legal counsel should be involved
- Non-destructive — Prefer test mode, dry runs, and gradual rollouts
Integration Context Contract
| Workflow |
tenantId |
subscriptionId |
environmentCloud |
principalType |
scopesOrRoles |
| DLP, retention, eDiscovery, compliance playbooks |
required |
optional (Azure-linked evidence only) |
AzureCloud* |
delegated-user |
Compliance.Read.All, SecurityEvents.Read.All, AuditLog.Read.All |
* Use sovereign cloud values from the canonical contract when applicable.
Fail fast before compliance queries when required context is missing or invalid. Redact tenant/object identifiers in outputs.
Base URLs
Graph API: https://graph.microsoft.com/v1.0
Graph Beta: https://graph.microsoft.com/beta
Compliance PS: Connect-IPPSSession
API Endpoints
eDiscovery (Graph API)
| Method |
Endpoint |
Purpose |
| POST |
/security/cases/ediscoveryCases |
Create eDiscovery case |
| GET |
/security/cases/ediscoveryCases |
List all cases |
| GET |
/security/cases/ediscoveryCases/{id} |
Get case details |
| PATCH |
/security/cases/ediscoveryCases/{id} |
Update case |
| POST |
/security/cases/ediscoveryCases/{id}/close |
Close case |
| POST |
/security/cases/ediscoveryCases/{id}/reopen |
Reopen case |
| POST |
/security/cases/ediscoveryCases/{id}/custodians |
Add custodian |
| GET |
/security/cases/ediscoveryCases/{id}/custodians |
List custodians |
| POST |
/security/cases/ediscoveryCases/{id}/legalHolds |
Create legal hold |
| POST |
/security/cases/ediscoveryCases/{id}/searches |
Create search |
| POST |
/security/cases/ediscoveryCases/{id}/searches/{id}/estimate |
Estimate search results |
| POST |
/security/cases/ediscoveryCases/{id}/reviewSets/{id}/export |
Export review set |
Create eDiscovery case body:
{
"displayName": "HR Investigation 2026-Q1",
"description": "Investigation into data handling compliance",
"externalId": "CASE-2026-0042"
}
Add custodian body:
{
"email": "user@contoso.com",
"applyHoldToSources": true
}
Create legal hold body:
{
"displayName": "Litigation Hold - HR Case",
"description": "Preserve all mailbox and OneDrive content for custodians",
"isEnabled": true,
"contentQuery": "subject:'Project Alpha' OR from:user@contoso.com"
}
Sensitivity Labels (Graph API)
| Method |
Endpoint |
Purpose |
| GET |
/security/informationProtection/sensitivityLabels |
List sensitivity labels |
| GET |
/security/informationProtection/sensitivityLabels/{id} |
Get label details |
Audit Log (Graph API — Beta)
| Method |
Endpoint |
Purpose |
| POST |
/security/auditLog/queries |
Create audit log query |
| GET |
/security/auditLog/queries/{id} |
Get query status |
| GET |
/security/auditLog/queries/{id}/records |
Get query results |
Create audit log query body:
{
"displayName": "DLP policy matches last 7 days",
"filterStartDateTime": "2026-02-22T00:00:00Z",
"filterEndDateTime": "2026-03-01T00:00:00Z",
"operationFilters": [
"DlpRuleMatch",
"DlpRuleUndo",
"DlpInfo"
],
"recordTypeFilters": [
"complianceDLPSharePoint",
"complianceDLPExchange"
]
}
The audit log query is asynchronous. Poll GET /security/auditLog/queries/{id} until status is succeeded, then fetch records.
Audit log query statuses: notStarted, running, succeeded, failed.
DLP Policy Management (PowerShell)
| Cmdlet |
Purpose |
Get-DlpCompliancePolicy |
List DLP policies |
New-DlpCompliancePolicy |
Create DLP policy |
Set-DlpCompliancePolicy |
Update DLP policy |
Remove-DlpCompliancePolicy |
Delete DLP policy |
New-DlpComplianceRule |
Add rules to a policy |
Set-DlpComplianceRule |
Update rule conditions/actions |
Set-DlpCompliancePolicy -Mode Enable |
Promote from test to enforcement |
Get-DlpSensitiveInformationType |
List available sensitive info types |
Get-DlpDetailReport |
Get DLP incident details |
DLP Policy Mode Values
| Mode |
Description |
Enable |
Policy actively enforces rules |
TestWithNotifications |
Matches are detected, tips shown, but not blocked |
TestWithoutNotifications |
Matches detected silently — for initial testing |
Disable |
Policy is off |
DLP Confidence Levels
Use confidence levels to reduce false positives:
- High (85-100%): Strong pattern match — block or notify
- Medium (75-84%): Moderate match — notify only
- Low (65-74%): Possible match — log for review
Retention Labels & Policies (PowerShell)
| Cmdlet |
Purpose |
Get-ComplianceTag |
List retention labels |
New-ComplianceTag |
Create retention label |
Get-RetentionCompliancePolicy |
Check policy status and scope |
New-RetentionCompliancePolicy |
Create retention policy |
New-RetentionComplianceRule |
Publish label via policy |
Retention Actions
| Action |
Description |
Delete |
Delete content after retention period |
Keep |
Keep content indefinitely (no delete) |
KeepAndDelete |
Keep for period, then delete |
Best practices:
- Use adaptive scopes for dynamic user/site targeting
- Preservation lock is irreversible — require explicit confirmation
- Retain always wins over delete when policies conflict
- Auto-apply labels based on sensitive info types or keywords
Sensitivity Labels (PowerShell)
| Cmdlet |
Purpose |
Get-Label |
List sensitivity labels |
New-Label |
Create sensitivity label |
New-LabelPolicy |
Publish labels to users |
Set-Label |
Update label configuration |
Best practices:
- Order labels from least to most restrictive
- Test encryption settings with a small group before broad deployment
- Auto-labeling can take 7+ days to process existing content
- Default labels should be intentional — avoid accidentally broad defaults
Required Permissions
| Operation |
Permission / Role |
| DLP policy management |
Compliance Administrator |
| Retention policy management |
Compliance Administrator or Records Management |
| Sensitivity label management |
Compliance Administrator or Information Protection Admin |
| eDiscovery (standard) |
eDiscovery Manager |
| eDiscovery (premium) |
eDiscovery Administrator |
| Retention labels with record declaration |
Records Management role |
| Audit log queries |
AuditLog.Read.All (Graph) or Audit Logs role |
| Sensitivity label reading (Graph) |
InformationProtectionPolicy.Read |
| eDiscovery case management (Graph) |
eDiscovery.Read.All / eDiscovery.ReadWrite.All |
PowerShell Authentication
# Connect to Security & Compliance PowerShell
pwsh -Command "Import-Module ExchangeOnlineManagement; Connect-IPPSSession -UserPrincipalName 'admin@contoso.com'"
Error Handling
| Status Code |
Meaning |
Common Cause |
| 400 Bad Request |
Malformed query or filter |
Invalid operationFilters, bad date format in audit query |
| 401 Unauthorized |
Authentication failure |
Expired token, missing scope consent |
| 403 Forbidden |
Insufficient permissions |
Missing eDiscovery or compliance role |
| 404 Not Found |
Resource not found |
Wrong case ID, deleted search |
| 409 Conflict |
Operation conflict |
Legal hold prevents deletion; case is closed |
| 429 Too Many Requests |
Throttled |
Implement exponential backoff with Retry-After header |
eDiscovery-Specific Errors
- 409 Legal Hold Conflict: Cannot delete content under legal hold — remove hold first or get legal approval
- 400 Custodian Already Exists: Custodian already added to case — use
GET to verify before POST
- Async Polling: Export and estimate operations are asynchronous — poll until
status is succeeded
Audit Log Query Limits
- Maximum query date range: 180 days
- Results are paginated — follow
@odata.nextLink for additional pages
- Queries expire after 24 hours — download results before expiry
Common Compliance Workflows
Pattern 1: DLP Policy Rollout
Get-DlpSensitiveInformationType — identify target sensitive info types
New-DlpCompliancePolicy -Mode TestWithNotifications — create policy in test mode
New-DlpComplianceRule — add detection rules with confidence levels
- Monitor matches for 2-4 weeks via
Get-DlpDetailReport
Set-DlpCompliancePolicy -Mode Enable — promote to enforcement
- Configure policy tips for end-user awareness
Pattern 2: eDiscovery Investigation
POST /security/cases/ediscoveryCases — create case with external ID
POST .../custodians — add custodians with applyHoldToSources: true
POST .../legalHolds — create targeted legal hold with content query
POST .../searches — create search with date range and keyword filters
POST .../searches/{id}/estimate — estimate result volume before export
POST .../reviewSets/{id}/export — export for legal review
- Document chain-of-custody for all exports
Pattern 3: Retention Policy Lifecycle
New-ComplianceTag — create retention label (e.g., 7-year keep-and-delete)
New-RetentionCompliancePolicy — create policy with adaptive scope
New-RetentionComplianceRule — publish label via policy
- Monitor label application via audit log queries
- Review expiring content before deletion triggers
- Apply preservation lock only after legal review (irreversible)
Pattern 4: Compliance Posture Audit
Get-DlpCompliancePolicy — inventory all DLP policies and their modes
Get-RetentionCompliancePolicy — inventory retention policies and scopes
Get-Label — inventory sensitivity labels and their protection settings
POST /security/auditLog/queries — query for policy match events in last 30 days
- Produce compliance gap report with coverage percentages per workload
- Recommend missing policies based on regulatory framework (GDPR, HIPAA, SOX)
Compliance Playbook Pattern
Every compliance workflow should follow:
- Scope — Define what is being configured and why
- Dry run — Preview changes before applying
- Apply — Execute with test mode where available
- Verify — Confirm deployment and propagation
- Log — Produce timestamped change log with regulatory context
- Sign-off — Request owner acknowledgment
OData Filter Reference (Audit Log)
Common filters for audit log queries:
| Filter |
Example |
| By operation |
"operationFilters": ["DlpRuleMatch"] |
| By record type |
"recordTypeFilters": ["complianceDLPSharePoint"] |
| By user |
"userPrincipalNameFilters": ["user@contoso.com"] |
| By date range |
"filterStartDateTime" / "filterEndDateTime" |
Common Audit Record Types
| Record Type |
Description |
complianceDLPSharePoint |
DLP matches in SharePoint/OneDrive |
complianceDLPExchange |
DLP matches in Exchange |
microsoftTeams |
Teams activity |
sharePointFileOperation |
File operations in SharePoint |
exchangeAdmin |
Exchange admin operations |
azureActiveDirectory |
Entra ID operations |
Minimal References
purview-compliance/commands/setup.md
purview-compliance/commands/dlp-audit.md
purview-compliance/commands/retention-review.md
purview-compliance/commands/sensitivity-check.md
purview-compliance/commands/ediscovery-workflow.md
purview-compliance/README.md
Progressive Disclosure — Reference Files
| Topic |
File |
| DLP policy REST API, rules, SIT conditions, endpoint DLP, Teams DLP, PowerShell cmdlets |
references/dlp-policies.md |
| Sensitivity label REST API, label taxonomy, auto-labeling, encryption settings, container labeling |
references/sensitivity-labels.md |
| Retention policy creation, label publication, event-based retention, disposition review, preservation lock, adaptive scopes |
references/retention-policies.md |
| eDiscovery Standard vs Premium, case/custodian/hold/search/export API, KQL queries, review sets |
references/ediscovery.md |
| Compliance playbook patterns, remediation workflows, audit patterns |
references/playbook-patterns.md |
1---2name: purview-compliance3description: Deep expertise in Microsoft Purview compliance workflows — DLP policies, retention labels, sensitivity labels, eDiscovery, audit log queries, and guided compliance playbooks with risk-ranked recommendations, audit trails, and legal dependency flags.4---56# Microsoft Purview Compliance78## Shared Workflow Routing9- Use the shared workflow spec for deterministic multi-plugin routing: [`workflows/multi-plugin-workflows.md`](../../../workflows/multi-plugin-workflows.md#identitydata-risk-review-entra-id-security--purview-compliance--sharing-auditor).10- Apply the trigger phrases, handoff contracts, auth prerequisites, validation checkpoints, and stop conditions before escalating to the next plugin.111213This skill provides comprehensive knowledge for managing Microsoft Purview compliance features via Graph API and Security & Compliance PowerShell. All guidance is risk-ranked, auditable, and explicit about assumptions and legal dependencies.1415## Core Principles16171. **Risk-ranked** — Prioritize recommendations by impact and likelihood182. **Auditable** — Every change produces a timestamped log with before/after states193. **Legally aware** — Flag when legal counsel should be involved204. **Non-destructive** — Prefer test mode, dry runs, and gradual rollouts2122## Integration Context Contract23- Canonical contract: [`docs/integration-context.md`](../../../docs/integration-context.md)2425| Workflow | tenantId | subscriptionId | environmentCloud | principalType | scopesOrRoles |26|---|---|---|---|---|---|27| DLP, retention, eDiscovery, compliance playbooks | required | optional (Azure-linked evidence only) | `AzureCloud`\* | `delegated-user` | `Compliance.Read.All`, `SecurityEvents.Read.All`, `AuditLog.Read.All` |2829\* Use sovereign cloud values from the canonical contract when applicable.3031Fail fast before compliance queries when required context is missing or invalid. Redact tenant/object identifiers in outputs.3233## Base URLs3435```36Graph API: https://graph.microsoft.com/v1.037Graph Beta: https://graph.microsoft.com/beta38Compliance PS: Connect-IPPSSession39```4041## API Endpoints4243### eDiscovery (Graph API)4445| Method | Endpoint | Purpose |46|--------|----------|---------|47| POST | `/security/cases/ediscoveryCases` | Create eDiscovery case |48| GET | `/security/cases/ediscoveryCases` | List all cases |49| GET | `/security/cases/ediscoveryCases/{id}` | Get case details |50| PATCH | `/security/cases/ediscoveryCases/{id}` | Update case |51| POST | `/security/cases/ediscoveryCases/{id}/close` | Close case |52| POST | `/security/cases/ediscoveryCases/{id}/reopen` | Reopen case |53| POST | `/security/cases/ediscoveryCases/{id}/custodians` | Add custodian |54| GET | `/security/cases/ediscoveryCases/{id}/custodians` | List custodians |55| POST | `/security/cases/ediscoveryCases/{id}/legalHolds` | Create legal hold |56| POST | `/security/cases/ediscoveryCases/{id}/searches` | Create search |57| POST | `/security/cases/ediscoveryCases/{id}/searches/{id}/estimate` | Estimate search results |58| POST | `/security/cases/ediscoveryCases/{id}/reviewSets/{id}/export` | Export review set |5960**Create eDiscovery case body:**61```json62{63 "displayName": "HR Investigation 2026-Q1",64 "description": "Investigation into data handling compliance",65 "externalId": "CASE-2026-0042"66}67```6869**Add custodian body:**70```json71{72 "email": "user@contoso.com",73 "applyHoldToSources": true74}75```7677**Create legal hold body:**78```json79{80 "displayName": "Litigation Hold - HR Case",81 "description": "Preserve all mailbox and OneDrive content for custodians",82 "isEnabled": true,83 "contentQuery": "subject:'Project Alpha' OR from:user@contoso.com"84}85```8687### Sensitivity Labels (Graph API)8889| Method | Endpoint | Purpose |90|--------|----------|---------|91| GET | `/security/informationProtection/sensitivityLabels` | List sensitivity labels |92| GET | `/security/informationProtection/sensitivityLabels/{id}` | Get label details |9394### Audit Log (Graph API — Beta)9596| Method | Endpoint | Purpose |97|--------|----------|---------|98| POST | `/security/auditLog/queries` | Create audit log query |99| GET | `/security/auditLog/queries/{id}` | Get query status |100| GET | `/security/auditLog/queries/{id}/records` | Get query results |101102**Create audit log query body:**103```json104{105 "displayName": "DLP policy matches last 7 days",106 "filterStartDateTime": "2026-02-22T00:00:00Z",107 "filterEndDateTime": "2026-03-01T00:00:00Z",108 "operationFilters": [109 "DlpRuleMatch",110 "DlpRuleUndo",111 "DlpInfo"112 ],113 "recordTypeFilters": [114 "complianceDLPSharePoint",115 "complianceDLPExchange"116 ]117}118```119120The audit log query is asynchronous. Poll `GET /security/auditLog/queries/{id}` until `status` is `succeeded`, then fetch records.121122**Audit log query statuses:** `notStarted`, `running`, `succeeded`, `failed`.123124## DLP Policy Management (PowerShell)125126| Cmdlet | Purpose |127|--------|---------|128| `Get-DlpCompliancePolicy` | List DLP policies |129| `New-DlpCompliancePolicy` | Create DLP policy |130| `Set-DlpCompliancePolicy` | Update DLP policy |131| `Remove-DlpCompliancePolicy` | Delete DLP policy |132| `New-DlpComplianceRule` | Add rules to a policy |133| `Set-DlpComplianceRule` | Update rule conditions/actions |134| `Set-DlpCompliancePolicy -Mode Enable` | Promote from test to enforcement |135| `Get-DlpSensitiveInformationType` | List available sensitive info types |136| `Get-DlpDetailReport` | Get DLP incident details |137138### DLP Policy Mode Values139140| Mode | Description |141|------|-------------|142| `Enable` | Policy actively enforces rules |143| `TestWithNotifications` | Matches are detected, tips shown, but not blocked |144| `TestWithoutNotifications` | Matches detected silently — for initial testing |145| `Disable` | Policy is off |146147### DLP Confidence Levels148149Use confidence levels to reduce false positives:150- **High** (85-100%): Strong pattern match — block or notify151- **Medium** (75-84%): Moderate match — notify only152- **Low** (65-74%): Possible match — log for review153154## Retention Labels & Policies (PowerShell)155156| Cmdlet | Purpose |157|--------|---------|158| `Get-ComplianceTag` | List retention labels |159| `New-ComplianceTag` | Create retention label |160| `Get-RetentionCompliancePolicy` | Check policy status and scope |161| `New-RetentionCompliancePolicy` | Create retention policy |162| `New-RetentionComplianceRule` | Publish label via policy |163164### Retention Actions165166| Action | Description |167|--------|-------------|168| `Delete` | Delete content after retention period |169| `Keep` | Keep content indefinitely (no delete) |170| `KeepAndDelete` | Keep for period, then delete |171172**Best practices:**173- Use adaptive scopes for dynamic user/site targeting174- Preservation lock is irreversible — require explicit confirmation175- Retain always wins over delete when policies conflict176- Auto-apply labels based on sensitive info types or keywords177178## Sensitivity Labels (PowerShell)179180| Cmdlet | Purpose |181|--------|---------|182| `Get-Label` | List sensitivity labels |183| `New-Label` | Create sensitivity label |184| `New-LabelPolicy` | Publish labels to users |185| `Set-Label` | Update label configuration |186187**Best practices:**188- Order labels from least to most restrictive189- Test encryption settings with a small group before broad deployment190- Auto-labeling can take 7+ days to process existing content191- Default labels should be intentional — avoid accidentally broad defaults192193## Required Permissions194195| Operation | Permission / Role |196|-----------|-------------------|197| DLP policy management | Compliance Administrator |198| Retention policy management | Compliance Administrator or Records Management |199| Sensitivity label management | Compliance Administrator or Information Protection Admin |200| eDiscovery (standard) | eDiscovery Manager |201| eDiscovery (premium) | eDiscovery Administrator |202| Retention labels with record declaration | Records Management role |203| Audit log queries | `AuditLog.Read.All` (Graph) or Audit Logs role |204| Sensitivity label reading (Graph) | `InformationProtectionPolicy.Read` |205| eDiscovery case management (Graph) | `eDiscovery.Read.All` / `eDiscovery.ReadWrite.All` |206207### PowerShell Authentication208209```bash210# Connect to Security & Compliance PowerShell211pwsh -Command "Import-Module ExchangeOnlineManagement; Connect-IPPSSession -UserPrincipalName 'admin@contoso.com'"212```213214## Error Handling215216| Status Code | Meaning | Common Cause |217|-------------|---------|--------------|218| 400 Bad Request | Malformed query or filter | Invalid operationFilters, bad date format in audit query |219| 401 Unauthorized | Authentication failure | Expired token, missing scope consent |220| 403 Forbidden | Insufficient permissions | Missing eDiscovery or compliance role |221| 404 Not Found | Resource not found | Wrong case ID, deleted search |222| 409 Conflict | Operation conflict | Legal hold prevents deletion; case is closed |223| 429 Too Many Requests | Throttled | Implement exponential backoff with `Retry-After` header |224225### eDiscovery-Specific Errors226227- **409 Legal Hold Conflict**: Cannot delete content under legal hold — remove hold first or get legal approval228- **400 Custodian Already Exists**: Custodian already added to case — use `GET` to verify before `POST`229- **Async Polling**: Export and estimate operations are asynchronous — poll until `status` is `succeeded`230231### Audit Log Query Limits232233- Maximum query date range: 180 days234- Results are paginated — follow `@odata.nextLink` for additional pages235- Queries expire after 24 hours — download results before expiry236237## Common Compliance Workflows238239### Pattern 1: DLP Policy Rollout2402411. `Get-DlpSensitiveInformationType` — identify target sensitive info types2422. `New-DlpCompliancePolicy -Mode TestWithNotifications` — create policy in test mode2433. `New-DlpComplianceRule` — add detection rules with confidence levels2444. Monitor matches for 2-4 weeks via `Get-DlpDetailReport`2455. `Set-DlpCompliancePolicy -Mode Enable` — promote to enforcement2466. Configure policy tips for end-user awareness247248### Pattern 2: eDiscovery Investigation2492501. `POST /security/cases/ediscoveryCases` — create case with external ID2512. `POST .../custodians` — add custodians with `applyHoldToSources: true`2523. `POST .../legalHolds` — create targeted legal hold with content query2534. `POST .../searches` — create search with date range and keyword filters2545. `POST .../searches/{id}/estimate` — estimate result volume before export2556. `POST .../reviewSets/{id}/export` — export for legal review2567. Document chain-of-custody for all exports257258### Pattern 3: Retention Policy Lifecycle2592601. `New-ComplianceTag` — create retention label (e.g., 7-year keep-and-delete)2612. `New-RetentionCompliancePolicy` — create policy with adaptive scope2623. `New-RetentionComplianceRule` — publish label via policy2634. Monitor label application via audit log queries2645. Review expiring content before deletion triggers2656. Apply preservation lock only after legal review (irreversible)266267### Pattern 4: Compliance Posture Audit2682691. `Get-DlpCompliancePolicy` — inventory all DLP policies and their modes2702. `Get-RetentionCompliancePolicy` — inventory retention policies and scopes2713. `Get-Label` — inventory sensitivity labels and their protection settings2724. `POST /security/auditLog/queries` — query for policy match events in last 30 days2735. Produce compliance gap report with coverage percentages per workload2746. Recommend missing policies based on regulatory framework (GDPR, HIPAA, SOX)275276## Compliance Playbook Pattern277278Every compliance workflow should follow:2792801. **Scope** — Define what is being configured and why2812. **Dry run** — Preview changes before applying2823. **Apply** — Execute with test mode where available2834. **Verify** — Confirm deployment and propagation2845. **Log** — Produce timestamped change log with regulatory context2856. **Sign-off** — Request owner acknowledgment286287## OData Filter Reference (Audit Log)288289Common filters for audit log queries:290291| Filter | Example |292|--------|---------|293| By operation | `"operationFilters": ["DlpRuleMatch"]` |294| By record type | `"recordTypeFilters": ["complianceDLPSharePoint"]` |295| By user | `"userPrincipalNameFilters": ["user@contoso.com"]` |296| By date range | `"filterStartDateTime"` / `"filterEndDateTime"` |297298### Common Audit Record Types299300| Record Type | Description |301|-------------|-------------|302| `complianceDLPSharePoint` | DLP matches in SharePoint/OneDrive |303| `complianceDLPExchange` | DLP matches in Exchange |304| `microsoftTeams` | Teams activity |305| `sharePointFileOperation` | File operations in SharePoint |306| `exchangeAdmin` | Exchange admin operations |307| `azureActiveDirectory` | Entra ID operations |308309## Minimal References310311- `purview-compliance/commands/setup.md`312- `purview-compliance/commands/dlp-audit.md`313- `purview-compliance/commands/retention-review.md`314- `purview-compliance/commands/sensitivity-check.md`315- `purview-compliance/commands/ediscovery-workflow.md`316- `purview-compliance/README.md`317318## Progressive Disclosure — Reference Files319320| Topic | File |321|---|---|322| DLP policy REST API, rules, SIT conditions, endpoint DLP, Teams DLP, PowerShell cmdlets | [`references/dlp-policies.md`](./references/dlp-policies.md) |323| Sensitivity label REST API, label taxonomy, auto-labeling, encryption settings, container labeling | [`references/sensitivity-labels.md`](./references/sensitivity-labels.md) |324| Retention policy creation, label publication, event-based retention, disposition review, preservation lock, adaptive scopes | [`references/retention-policies.md`](./references/retention-policies.md) |325| eDiscovery Standard vs Premium, case/custodian/hold/search/export API, KQL queries, review sets | [`references/ediscovery.md`](./references/ediscovery.md) |326| Compliance playbook patterns, remediation workflows, audit patterns | [`references/playbook-patterns.md`](./references/playbook-patterns.md) |