ESC
Type to search...

eDiscovery.ReadWrite.All

Export JSON
Export CSV
Copy URL
Print
ApplicationDelegated Read/Write All Resources

Allows the app to read and write eDiscovery objects such as cases, custodians, review sets and other related objects without a signed-in user.

Delegated Access App-Only Access

Permission Details

Application Permission

Read and write all eDiscovery objects

Allows the app to read and write eDiscovery objects such as cases, custodians, review sets and other related objects without a signed-in user.

Delegated Permission Admin consent required

Read and write all eDiscovery objects

Allows the app to read and write eDiscovery objects such as cases, custodians, review sets and other related objects on behalf of the signed-in user.

Relationships

Relationship Type Description
cases case collection The collection of eDiscovery cases.
custodians custodian collection The collection of custodians associated with this case.
reviewSets reviewSet collection The collection of review sets in this case.
searches ediscoverySearch collection The collection of searches in this case.
sourceCollections sourceCollection collection The collection of source collections in this case.
tags tag collection The collection of tags in this case.

Graph Methods

Delegated access App-only access
Methods
GET /security/cases/ediscoveryCases
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/caseMembers
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/siteSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/unifiedGroupSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/userSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoverycustodianId}/lastIndexOperation
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/siteSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/userSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoveryNoncustodialDataSourceId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialSources/{ediscoveryNoncustodialDataSourceId}/lastIndexOperation
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/operations
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/operations/{caseOperationId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/files/{ediscoveryFileId}/tags/{ediscoveryReviewTagId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/files/{ediscoveryFileId}/tags/{ediscoveryReviewTagId}/childTags/{ediscoveryReviewTagId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/files/{ediscoveryFileId}/tags/{ediscoveryReviewTagId}/parent
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{queryId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{reviewSetId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/additionalSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/custodianSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/lastEstimateStatisticsOperation
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/noncustodialSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/settings
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags/{ediscoveryReviewTagId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags/asHierarchy
POST /security/cases/ediscoveryCases
POST /security/cases/ediscoveryCases('{ediscoveryCaseId}')/searches('{ediscoverySearchId}')/exportReport
POST /security/cases/ediscoveryCases('{ediscoveryCaseId}')/searches('{ediscoverySearchId}')/exportResult
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/caseMembers
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/close
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/siteSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/unifiedGroupSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/userSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/activate
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{eDiscoveryCustodianId}/applyHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/release
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{eDiscoveryCustodianId}/removeHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/updateIndex
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/applyHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/removeHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/retryPolicy
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/siteSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/userSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoverynoncustodialDatasourceId}/applyHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoveryNoncustodialDataSourceId}/release
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoverynoncustodialDatasourceId}/removeHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoveryNoncustodialDataSourceId}/updateIndex
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/applyHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/removeHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reopen
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets
POST /security/cases/ediscoveryCases/{eDiscoveryCaseId}/reviewSets/{eDiscoveryReviewSetId}/addToReviewSet
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/export
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{queryId}/applyTags
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{queryId}/export
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/additionalSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/custodianSources/$ref
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/estimateStatistics
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/exportReport
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/exportResult
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/noncustodialSources/$ref
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/purgeData
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/settings/resetToDefault
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{queryId}
PATCH /security/cases/ediscoveryCases/{ediscoverycaseId}/reviewSets/{reviewSetId}
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/settings
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags/{ediscoveryReviewTagId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/caseMembers/{eDiscoveryCaseMemberId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/siteSources/{siteSourceId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/unifiedGroupSources/{unifiedGroupSourceId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/userSources/{userSourceId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/siteSources/{siteSourceId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/userSources/{userSourceId}
DELETE /security/cases/ediscoveryCases/{eDiscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{eDiscoveryReviewSetQueryId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/custodianSources/{id}/$ref
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/noncustodialSources/{id}/$ref
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags/{tagId}
Methods
GET /compliance/ediscovery/cases
GET /compliance/ediscovery/cases/{caesId}/custodians/{custodianId}
GET /compliance/ediscovery/cases/{caseId}/custodians
GET /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/siteSources
GET /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/siteSources/{siteSourceId}
GET /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/unifiedGroupSources
GET /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/unifiedGroupSources/{unifiedGroupSourceId}
GET /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/userSources
GET /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/userSources/{userSourceId}
GET /compliance/ediscovery/cases/{caseId}/legalHolds
GET /compliance/ediscovery/cases/{caseId}/legalHolds/{legalholdId}
GET /compliance/ediscovery/cases/{caseId}/legalHolds/{legalholdId}/siteSources
GET /compliance/ediscovery/cases/{caseId}/legalHolds/{legalholdId}/userSources
GET /compliance/ediscovery/cases/{caseId}/noncustodialDataSources
GET /compliance/ediscovery/cases/{caseId}/noncustodialDataSources/{noncustodialDataSourceId}
GET /compliance/ediscovery/cases/{caseId}/noncustodialDataSources/{noncustodialDataSourceId}/dataSource
GET /compliance/ediscovery/cases/{caseId}/operations
GET /compliance/ediscovery/cases/{caseId}/operations/{operationId}/microsoft.graph.ediscovery.caseExportOperation/getDownloadUrl
GET /compliance/ediscovery/cases/{caseId}/reviewSets
GET /compliance/ediscovery/cases/{caseId}/settings
GET /compliance/ediscovery/cases/{caseId}/sourceCollections
GET /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}
GET /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/additionalSources
GET /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/addToReviewSetOperation
GET /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/custodianSources
GET /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/lastEstimateStatisticsOperation
GET /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/noncustodialSources
GET /compliance/ediscovery/cases/{caseId}/tags
GET /compliance/ediscovery/cases/{caseId}/tags/{tagId}
GET /compliance/ediscovery/cases/{caseId}/tags/{tagId}/childTags
GET /compliance/ediscovery/cases/{caseId}/tags/asHierarchy
GET /compliance/ediscovery/cases/{id}
GET /compliance/ediscovery/cases/{id}/reviewSets/{id}
GET /compliance/ediscovery/cases/{id}/reviewSets/{id}/queries
GET /compliance/ediscovery/cases/{id}/reviewSets/{id}/queries/{id}
GET /security/cases/ediscoveryCases
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/siteSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/unifiedGroupSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/userSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoverycustodianId}/lastIndexOperation
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/siteSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/userSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoveryNoncustodialDataSourceId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialSources/{ediscoveryNoncustodialDataSourceId}/lastIndexOperation
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/operations
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/operations/{caseOperationId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/operations/{eDiscoveryCaseOperationId}/microsoft.graph.security.ediscoveryExportOperation/getDownloadUrl
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/files
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/files/{ediscoveryFileId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/files/{ediscoveryFileId}/tags/{ediscoveryReviewTagId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/files/{ediscoveryFileId}/tags/{ediscoveryReviewTagId}/childTags/{ediscoveryReviewTagId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/files/{ediscoveryFileId}/tags/{ediscoveryReviewTagId}/parent
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{queryId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{queryId}/run
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{reviewSetId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/additionalSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/custodianSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/lastEstimateStatisticsOperation
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/noncustodialSources
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/settings
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags/{ediscoveryReviewTagId}
GET /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags/asHierarchy
GET security/cases/ediscoveryCases/{ediscoveryCaseId}/caseMembers
POST /compliance/ediscovery/cases
POST /compliance/ediscovery/cases/{CaseId}/close
POST /compliance/ediscovery/cases/{caseId}/custodians
POST /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/activate
POST /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/release
POST /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/siteSources
POST /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/userSources
POST /compliance/ediscovery/cases/{caseId}/legalHolds
POST /compliance/ediscovery/cases/{caseId}/legalHolds/{legalholdId}/siteSources
POST /compliance/ediscovery/cases/{caseId}/legalHolds/{legalholdId}/userSources
POST /compliance/ediscovery/cases/{caseId}/noncustodialDataSources
POST /compliance/ediscovery/cases/{caseId}/noncustodialDataSources/{noncustodialDataSourceId}/release
POST /compliance/ediscovery/cases/{caseId}/reopen
POST /compliance/ediscovery/cases/{caseId}/reviewSets/{reviewsetId}/addToReviewSet
POST /compliance/ediscovery/cases/{caseId}/reviewsets/{reviewsetId}/export
POST /compliance/ediscovery/cases/{caseId}/reviewSets/{reviewSetId}/queries/{reviewSetQueryId}/applyTags
POST /compliance/ediscovery/cases/{caseId}/settings/resetToDefault
POST /compliance/ediscovery/cases/{caseId}/sourceCollections
POST /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/additionalSources
POST /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/custodianSources/$ref
POST /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/estimateStatistics
POST /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/noncustodialSources/$ref
POST /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}/purgeData
POST /compliance/ediscovery/cases/{caseId}/tags
POST /compliance/ediscovery/cases/{id}/custodians/{id}/unifiedGroupSources
POST /compliance/ediscovery/cases/{id}/reviewSets
POST /compliance/ediscovery/cases/{id}/reviewSets/{id}/queries
POST /security/cases/ediscoveryCases
POST /security/cases/ediscoveryCases('{ediscoveryCaseId}')/searches('{ediscoverySearchId}')/exportReport
POST /security/cases/ediscoveryCases('{ediscoveryCaseId}')/searches('{ediscoverySearchId}')/exportResult
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/close
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/siteSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/unifiedGroupSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{custodianId}/userSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/activate
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{eDiscoveryCustodianId}/applyHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/release
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{eDiscoveryCustodianId}/removeHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/updateIndex
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/applyHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/removeHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/updateIndex
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/retryPolicy
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/siteSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/userSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoverynoncustodialDatasourceId}/applyHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoveryNoncustodialDataSourceId}/release
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoverynoncustodialDatasourceId}/removeHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/{ediscoveryNoncustodialDataSourceId}/updateIndex
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/applyHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/noncustodialDataSources/removeHold
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reopen
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets
POST /security/cases/ediscoveryCases/{eDiscoveryCaseId}/reviewSets/{eDiscoveryReviewSetId}/addToReviewSet
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/export
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{queryId}/applyTags
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{queryId}/export
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/additionalSources
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/custodianSources/$ref
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/estimateStatistics
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/exportReport
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/exportResult
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/noncustodialSources/$ref
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/purgeData
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/settings/resetToDefault
POST /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags
POST security/cases/ediscoveryCases/{ediscoveryCaseId}/caseMembers
PATCH /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}
PATCH /compliance/ediscovery/cases/{caseId}/legalHolds/{legalholdId}
PATCH /compliance/ediscovery/cases/{caseId}/settings
PATCH /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}
PATCH /compliance/ediscovery/cases/{caseId}/tags/{tagId}
PATCH /compliance/ediscovery/cases/{id}
PATCH /compliance/ediscovery/cases/{id}/reviewSets/{id}/queries/{id}
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{queryId}
PATCH /security/cases/ediscoveryCases/{ediscoverycaseId}/reviewSets/{reviewSetId}
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/settings
PATCH /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags/{ediscoveryReviewTagId}
DELETE /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/siteSources/{siteSourceId}
DELETE /compliance/ediscovery/cases/{caseId}/custodians/{custodianId}/userSources/{userSourceId}
DELETE /compliance/ediscovery/cases/{caseId}/legalHolds/{legalHoldId}
DELETE /compliance/ediscovery/cases/{caseId}/sourceCollections/{sourceCollectionId}
DELETE /compliance/ediscovery/cases/{caseId}/tags/{tagId}?forcedelete=true
DELETE /compliance/ediscovery/cases/{id}
DELETE /compliance/ediscovery/cases/{id}/custodians/{id}/unifiedGroupSources/{id}
DELETE /compliance/ediscovery/cases/{id}/reviewSets/{id}/queries/{id}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/siteSources/{siteSourceId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/unifiedGroupSources/{unifiedGroupSourceId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/custodians/{ediscoveryCustodianId}/userSources/{userSourceId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/siteSources/{siteSourceId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/legalHolds/{ediscoveryHoldPolicyId}/userSources/{userSourceId}
DELETE /security/cases/ediscoveryCases/{eDiscoveryCaseId}/reviewSets/{ediscoveryReviewSetId}/queries/{eDiscoveryReviewSetQueryId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/custodianSources/{id}/$ref
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/searches/{ediscoverySearchId}/noncustodialSources/{id}/$ref
DELETE /security/cases/ediscoveryCases/{ediscoveryCaseId}/tags/{tagId}
DELETE security/cases/ediscoveryCases/{ediscoveryCaseId}/caseMembers/{eDiscoveryCaseMemberId}
Commands
Add-MgSecurityCaseEdiscoveryCaseCustodianHold
Add-MgSecurityCaseEdiscoveryCaseNoncustodialDataSourceHold
Add-MgSecurityCaseEdiscoveryCaseReviewSetQueryTag
Add-MgSecurityCaseEdiscoveryCaseReviewSetToReviewSet
Clear-MgSecurityCaseEdiscoveryCaseSearchData
Close-MgSecurityCaseEdiscoveryCase
Export-MgSecurityCaseEdiscoveryCaseReviewSet
Export-MgSecurityCaseEdiscoveryCaseReviewSetQuery
Export-MgSecurityCaseEdiscoveryCaseSearchReport
Export-MgSecurityCaseEdiscoveryCaseSearchResult
Get-MgBetaSecurityCaseEdiscoveryCaseLegalHold
Get-MgSecurityCaseEdiscoveryCase
Get-MgSecurityCaseEdiscoveryCaseCustodian
Get-MgSecurityCaseEdiscoveryCaseCustodianLastIndexOperation
Get-MgSecurityCaseEdiscoveryCaseCustodianSiteSource
Get-MgSecurityCaseEdiscoveryCaseCustodianUnifiedGroupSource
Get-MgSecurityCaseEdiscoveryCaseCustodianUserSource
Get-MgSecurityCaseEdiscoveryCaseNoncustodialDataSource
Get-MgSecurityCaseEdiscoveryCaseOperation
Get-MgSecurityCaseEdiscoveryCaseReviewSet
Get-MgSecurityCaseEdiscoveryCaseReviewSetQuery
Get-MgSecurityCaseEdiscoveryCaseSearch
Get-MgSecurityCaseEdiscoveryCaseSearchAdditionalSource
Get-MgSecurityCaseEdiscoveryCaseSearchCustodianSource
Get-MgSecurityCaseEdiscoveryCaseSearchLastEstimateStatisticsOperation
Get-MgSecurityCaseEdiscoveryCaseSearchNoncustodialSource
Get-MgSecurityCaseEdiscoveryCaseSetting
Get-MgSecurityCaseEdiscoveryCaseTag
Get-MgSecurityCaseEdiscoveryCaseTagChildTag
Initialize-MgSecurityCaseEdiscoveryCaseCustodian
Invoke-MgEstimateSecurityCaseEdiscoveryCaseSearchStatistics
Invoke-MgReopenSecurityCaseEdiscoveryCase
New-MgBetaSecurityCaseEdiscoveryCaseLegalHold
New-MgBetaSecurityCaseEdiscoveryCaseLegalHoldSiteSource
New-MgBetaSecurityCaseEdiscoveryCaseLegalHoldUserSource
New-MgSecurityCaseEdiscoveryCase
New-MgSecurityCaseEdiscoveryCaseCustodian
New-MgSecurityCaseEdiscoveryCaseCustodianSiteSource
New-MgSecurityCaseEdiscoveryCaseCustodianUnifiedGroupSource
New-MgSecurityCaseEdiscoveryCaseCustodianUserSource
New-MgSecurityCaseEdiscoveryCaseNoncustodialDataSource
New-MgSecurityCaseEdiscoveryCaseReviewSet
New-MgSecurityCaseEdiscoveryCaseReviewSetQuery
New-MgSecurityCaseEdiscoveryCaseSearch
New-MgSecurityCaseEdiscoveryCaseSearchAdditionalSource
New-MgSecurityCaseEdiscoveryCaseTag
Publish-MgSecurityCaseEdiscoveryCaseCustodian
Publish-MgSecurityCaseEdiscoveryCaseNoncustodialDataSource
Remove-MgBetaSecurityCaseEdiscoveryCaseLegalHold
Remove-MgSecurityCaseEdiscoveryCase
Remove-MgSecurityCaseEdiscoveryCaseCustodianHold
Remove-MgSecurityCaseEdiscoveryCaseCustodianSiteSource
Remove-MgSecurityCaseEdiscoveryCaseCustodianUnifiedGroupSource
Remove-MgSecurityCaseEdiscoveryCaseCustodianUserSource
Remove-MgSecurityCaseEdiscoveryCaseNoncustodialDataSourceHold
Remove-MgSecurityCaseEdiscoveryCaseReviewSetQuery
Remove-MgSecurityCaseEdiscoveryCaseSearch
Remove-MgSecurityCaseEdiscoveryCaseTag
Reset-MgSecurityCaseEdiscoveryCaseSettingToDefault
Update-MgSecurityCaseEdiscoveryCase
Update-MgSecurityCaseEdiscoveryCaseCustodianIndex
Update-MgSecurityCaseEdiscoveryCaseNoncustodialDataSourceIndex
Update-MgSecurityCaseEdiscoveryCaseReviewSet
Update-MgSecurityCaseEdiscoveryCaseReviewSetQuery
Update-MgSecurityCaseEdiscoveryCaseSearch
Update-MgSecurityCaseEdiscoveryCaseSetting
Update-MgSecurityCaseEdiscoveryCaseTag
Commands
Add-MgBetaComplianceEdiscoveryCaseReviewSetQueryTag
Add-MgBetaComplianceEdiscoveryCaseReviewSetToReviewSet
Add-MgBetaSecurityCaseEdiscoveryCaseCustodianHold
Add-MgBetaSecurityCaseEdiscoveryCaseNoncustodialDataSourceHold
Add-MgBetaSecurityCaseEdiscoveryCaseReviewSetQueryTag
Add-MgBetaSecurityCaseEdiscoveryCaseReviewSetToReviewSet
Clear-MgBetaComplianceEdiscoveryCaseSourceCollectionData
Clear-MgBetaSecurityCaseEdiscoveryCaseSearchData
Close-MgBetaComplianceEdiscoveryCase
Close-MgBetaSecurityCaseEdiscoveryCase
Export-MgBetaComplianceEdiscoveryCaseReviewSet
Export-MgBetaSecurityCaseEdiscoveryCaseReviewSet
Export-MgBetaSecurityCaseEdiscoveryCaseReviewSetQuery
Export-MgBetaSecurityCaseEdiscoveryCaseSearchReport
Export-MgBetaSecurityCaseEdiscoveryCaseSearchResult
Get-MgBetaComplianceEdiscoveryCase
Get-MgBetaComplianceEdiscoveryCaseCustodian
Get-MgBetaComplianceEdiscoveryCaseCustodianSiteSource
Get-MgBetaComplianceEdiscoveryCaseCustodianUnifiedGroupSource
Get-MgBetaComplianceEdiscoveryCaseCustodianUserSource
Get-MgBetaComplianceEdiscoveryCaseLegalHold
Get-MgBetaComplianceEdiscoveryCaseLegalHoldSiteSource
Get-MgBetaComplianceEdiscoveryCaseLegalHoldUserSource
Get-MgBetaComplianceEdiscoveryCaseNoncustodialDataSource
Get-MgBetaComplianceEdiscoveryCaseNoncustodialDataSourceDataSource
Get-MgBetaComplianceEdiscoveryCaseOperation
Get-MgBetaComplianceEdiscoveryCaseReviewSet
Get-MgBetaComplianceEdiscoveryCaseReviewSetQuery
Get-MgBetaComplianceEdiscoveryCaseSetting
Get-MgBetaComplianceEdiscoveryCaseSourceCollection
Get-MgBetaComplianceEdiscoveryCaseSourceCollectionAdditionalSource
Get-MgBetaComplianceEdiscoveryCaseSourceCollectionAddToReviewSetOperation
Get-MgBetaComplianceEdiscoveryCaseSourceCollectionCustodianSource
Get-MgBetaComplianceEdiscoveryCaseSourceCollectionLastEstimateStatisticsOperation
Get-MgBetaComplianceEdiscoveryCaseSourceCollectionNoncustodialSource
Get-MgBetaComplianceEdiscoveryCaseTag
Get-MgBetaComplianceEdiscoveryCaseTagChildTag
Get-MgBetaSecurityCaseEdiscoveryCase
Get-MgBetaSecurityCaseEdiscoveryCaseCustodian
Get-MgBetaSecurityCaseEdiscoveryCaseCustodianLastIndexOperation
Get-MgBetaSecurityCaseEdiscoveryCaseCustodianSiteSource
Get-MgBetaSecurityCaseEdiscoveryCaseCustodianUnifiedGroupSource
Get-MgBetaSecurityCaseEdiscoveryCaseCustodianUserSource
Get-MgBetaSecurityCaseEdiscoveryCaseLegalHold
Get-MgBetaSecurityCaseEdiscoveryCaseLegalHoldSiteSource
Get-MgBetaSecurityCaseEdiscoveryCaseLegalHoldUserSource
Get-MgBetaSecurityCaseEdiscoveryCaseMember
Get-MgBetaSecurityCaseEdiscoveryCaseNoncustodialDataSource
Get-MgBetaSecurityCaseEdiscoveryCaseOperation
Get-MgBetaSecurityCaseEdiscoveryCaseReviewSet
Get-MgBetaSecurityCaseEdiscoveryCaseReviewSetFile
Get-MgBetaSecurityCaseEdiscoveryCaseReviewSetQuery
Get-MgBetaSecurityCaseEdiscoveryCaseSearch
Get-MgBetaSecurityCaseEdiscoveryCaseSearchAdditionalSource
Get-MgBetaSecurityCaseEdiscoveryCaseSearchCustodianSource
Get-MgBetaSecurityCaseEdiscoveryCaseSearchLastEstimateStatisticsOperation
Get-MgBetaSecurityCaseEdiscoveryCaseSearchNoncustodialSource
Get-MgBetaSecurityCaseEdiscoveryCaseSetting
Get-MgBetaSecurityCaseEdiscoveryCaseTag
Get-MgBetaSecurityCaseEdiscoveryCaseTagChildTag
Initialize-MgBetaComplianceEdiscoveryCaseCustodian
Initialize-MgBetaSecurityCaseEdiscoveryCaseCustodian
Invoke-MgBetaAsComplianceEdiscoveryCaseTagHierarchy
Invoke-MgBetaEstimateComplianceEdiscoveryCaseSourceCollectionStatistics
Invoke-MgBetaEstimateSecurityCaseEdiscoveryCaseSearchStatistics
Invoke-MgBetaReopenComplianceEdiscoveryCase
Invoke-MgBetaReopenSecurityCaseEdiscoveryCase
New-MgBetaComplianceEdiscoveryCase
New-MgBetaComplianceEdiscoveryCaseCustodian
New-MgBetaComplianceEdiscoveryCaseCustodianSiteSource
New-MgBetaComplianceEdiscoveryCaseCustodianUnifiedGroupSource
New-MgBetaComplianceEdiscoveryCaseCustodianUserSource
New-MgBetaComplianceEdiscoveryCaseLegalHold
New-MgBetaComplianceEdiscoveryCaseLegalHoldSiteSource
New-MgBetaComplianceEdiscoveryCaseLegalHoldUserSource
New-MgBetaComplianceEdiscoveryCaseNoncustodialDataSource
New-MgBetaComplianceEdiscoveryCaseReviewSet
New-MgBetaComplianceEdiscoveryCaseReviewSetQuery
New-MgBetaComplianceEdiscoveryCaseSourceCollection
New-MgBetaComplianceEdiscoveryCaseSourceCollectionAdditionalSource
New-MgBetaComplianceEdiscoveryCaseTag
New-MgBetaSecurityCaseEdiscoveryCase
New-MgBetaSecurityCaseEdiscoveryCaseCustodian
New-MgBetaSecurityCaseEdiscoveryCaseCustodianSiteSource
New-MgBetaSecurityCaseEdiscoveryCaseCustodianUnifiedGroupSource
New-MgBetaSecurityCaseEdiscoveryCaseCustodianUserSource
New-MgBetaSecurityCaseEdiscoveryCaseLegalHold
New-MgBetaSecurityCaseEdiscoveryCaseLegalHoldSiteSource
New-MgBetaSecurityCaseEdiscoveryCaseLegalHoldUserSource
New-MgBetaSecurityCaseEdiscoveryCaseMember
New-MgBetaSecurityCaseEdiscoveryCaseNoncustodialDataSource
New-MgBetaSecurityCaseEdiscoveryCaseReviewSet
New-MgBetaSecurityCaseEdiscoveryCaseReviewSetQuery
New-MgBetaSecurityCaseEdiscoveryCaseSearch
New-MgBetaSecurityCaseEdiscoveryCaseSearchAdditionalSource
New-MgBetaSecurityCaseEdiscoveryCaseTag
Publish-MgBetaComplianceEdiscoveryCaseCustodian
Publish-MgBetaComplianceEdiscoveryCaseNoncustodialDataSource
Publish-MgBetaSecurityCaseEdiscoveryCaseCustodian
Publish-MgBetaSecurityCaseEdiscoveryCaseNoncustodialDataSource
Remove-MgBetaComplianceEdiscoveryCase
Remove-MgBetaComplianceEdiscoveryCaseCustodianSiteSource
Remove-MgBetaComplianceEdiscoveryCaseCustodianUnifiedGroupSource
Remove-MgBetaComplianceEdiscoveryCaseCustodianUserSource
Remove-MgBetaComplianceEdiscoveryCaseLegalHold
Remove-MgBetaComplianceEdiscoveryCaseReviewSetQuery
Remove-MgBetaComplianceEdiscoveryCaseSourceCollection
Remove-MgBetaComplianceEdiscoveryCaseTag
Remove-MgBetaSecurityCaseEdiscoveryCase
Remove-MgBetaSecurityCaseEdiscoveryCaseCustodianHold
Remove-MgBetaSecurityCaseEdiscoveryCaseCustodianSiteSource
Remove-MgBetaSecurityCaseEdiscoveryCaseCustodianUnifiedGroupSource
Remove-MgBetaSecurityCaseEdiscoveryCaseCustodianUserSource
Remove-MgBetaSecurityCaseEdiscoveryCaseLegalHold
Remove-MgBetaSecurityCaseEdiscoveryCaseLegalHoldSiteSource
Remove-MgBetaSecurityCaseEdiscoveryCaseLegalHoldUserSource
Remove-MgBetaSecurityCaseEdiscoveryCaseMember
Remove-MgBetaSecurityCaseEdiscoveryCaseNoncustodialDataSourceHold
Remove-MgBetaSecurityCaseEdiscoveryCaseReviewSetQuery
Remove-MgBetaSecurityCaseEdiscoveryCaseSearch
Remove-MgBetaSecurityCaseEdiscoveryCaseTag
Reset-MgBetaComplianceEdiscoveryCaseSettingToDefault
Reset-MgBetaSecurityCaseEdiscoveryCaseSettingToDefault
Start-MgBetaSecurityCaseEdiscoveryCaseReviewSetQuery
Update-MgBetaComplianceEdiscoveryCase
Update-MgBetaComplianceEdiscoveryCaseCustodian
Update-MgBetaComplianceEdiscoveryCaseLegalHold
Update-MgBetaComplianceEdiscoveryCaseReviewSetQuery
Update-MgBetaComplianceEdiscoveryCaseSetting
Update-MgBetaComplianceEdiscoveryCaseSourceCollection
Update-MgBetaComplianceEdiscoveryCaseTag
Update-MgBetaSecurityCaseEdiscoveryCase
Update-MgBetaSecurityCaseEdiscoveryCaseCustodianIndex
Update-MgBetaSecurityCaseEdiscoveryCaseLegalHold
Update-MgBetaSecurityCaseEdiscoveryCaseNoncustodialDataSourceIndex
Update-MgBetaSecurityCaseEdiscoveryCaseReviewSet
Update-MgBetaSecurityCaseEdiscoveryCaseReviewSetQuery
Update-MgBetaSecurityCaseEdiscoveryCaseSearch
Update-MgBetaSecurityCaseEdiscoveryCaseSetting
Update-MgBetaSecurityCaseEdiscoveryCaseTag

Code Examples

C# / .NET SDK
// Install: dotnet add package Microsoft.Graph
// Install: dotnet add package Azure.Identity
using Microsoft.Graph;
using Azure.Identity;

// Delegated permissions - interactive user sign-in
var scopes = new[] { "eDiscovery.ReadWrite.All" };
var options = new InteractiveBrowserCredentialOptions
{
    ClientId = "YOUR_CLIENT_ID",
    TenantId = "YOUR_TENANT_ID",
    RedirectUri = new Uri("http://localhost")
};
var credential = new InteractiveBrowserCredential(options);
var graphClient = new GraphServiceClient(credential, scopes);

// Example: GET /me
var result = await graphClient.Me.GetAsync();
Console.WriteLine($"User: {result?.DisplayName}");

// Application permissions - daemon/service app
var tenantId = "YOUR_TENANT_ID";
var clientId = "YOUR_CLIENT_ID";
var clientSecret = "YOUR_CLIENT_SECRET";

var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(credential);

// Example: GET /users/{user-id}
var users = await graphClient.Users.GetAsync();
foreach (var user in users?.Value ?? [])
{
    Console.WriteLine($"User: {user.DisplayName}");
}
JavaScript / TypeScript
// npm install @azure/msal-browser @microsoft/microsoft-graph-client
import { PublicClientApplication } from "@azure/msal-browser";
import { Client } from "@microsoft/microsoft-graph-client";
import { AuthCodeMSALBrowserAuthenticationProvider } from 
    "@microsoft/microsoft-graph-client/authProviders/authCodeMsalBrowser";

const msalConfig = {
    auth: {
        clientId: "YOUR_CLIENT_ID",
        authority: "https://login.microsoftonline.com/YOUR_TENANT_ID"
    }
};

const pca = new PublicClientApplication(msalConfig);
await pca.initialize();

// Delegated: Login with required scope
const loginResponse = await pca.loginPopup({
    scopes: ["eDiscovery.ReadWrite.All"]
});

const authProvider = new AuthCodeMSALBrowserAuthenticationProvider(pca, {
    account: loginResponse.account,
    scopes: ["eDiscovery.ReadWrite.All"],
    interactionType: "popup"
});

const graphClient = Client.initWithMiddleware({ authProvider });

// Example: GET /me
const result = await graphClient.api("/me").get();
console.log(result);

// Application: Use client credentials (Node.js backend only)
// npm install @azure/identity @microsoft/microsoft-graph-client
import { ClientSecretCredential } from "@azure/identity";
import { TokenCredentialAuthenticationProvider } from 
    "@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials";

const credential = new ClientSecretCredential(
    "YOUR_TENANT_ID",
    "YOUR_CLIENT_ID", 
    "YOUR_CLIENT_SECRET"
);

const authProvider = new TokenCredentialAuthenticationProvider(credential, {
    scopes: ["https://graph.microsoft.com/.default"]
});

const graphClient = Client.initWithMiddleware({ authProvider });
const result = await graphClient.api("/users").get();
console.log(result);
PowerShell
# Install Microsoft Graph PowerShell module
Install-Module Microsoft.Graph -Scope CurrentUser

# Delegated access - interactive sign-in
Connect-MgGraph -Scopes "eDiscovery.ReadWrite.All"

# Verify connection
Get-MgContext | Select-Object Account, TenantId, Scopes

# Example: GET /me
$result = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/me"
$result | ConvertTo-Json -Depth 5

# Application access with certificate
$params = @{
    ClientId = "YOUR_CLIENT_ID"
    TenantId = "YOUR_TENANT_ID"
    CertificateThumbprint = "YOUR_CERT_THUMBPRINT"
}
Connect-MgGraph @params

# Or with client secret (not recommended for production)
# Connect-MgGraph -ClientSecretCredential $credential

# Example: GET /users
$result = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/users"
$result | ConvertTo-Json -Depth 5

# Always disconnect when done
Disconnect-MgGraph
Python
# pip install msgraph-sdk azure-identity
from azure.identity import InteractiveBrowserCredential, ClientSecretCredential
from msgraph import GraphServiceClient
import asyncio

# Delegated permissions - interactive browser sign-in
credential = InteractiveBrowserCredential(
    client_id="YOUR_CLIENT_ID",
    tenant_id="YOUR_TENANT_ID"
)
scopes = ["eDiscovery.ReadWrite.All"]
client = GraphServiceClient(credential, scopes)

async def get_data():
    # Example: GET /me
    result = await client.me.get()
    print(f"User: {result.display_name}")
    return result

asyncio.run(get_data())

# Application permissions - client credentials
credential = ClientSecretCredential(
    tenant_id="YOUR_TENANT_ID",
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET"
)
scopes = ["https://graph.microsoft.com/.default"]
client = GraphServiceClient(credential, scopes)

async def get_users():
    # Example: GET /users
    result = await client.users.get()
    for user in result.value:
        print(f"User: {user.display_name}")
    return result

asyncio.run(get_users())

App Registration

1

Navigate to Azure Portal

Go to App registrations in Microsoft Entra admin center

2

Add API Permission

Select your app → API permissions → Add a permission → Microsoft Graph

3

Select Permission Type

Choose Application permissions or Delegated permissions and search for eDiscovery.ReadWrite.All

4

Grant Admin Consent

Application permissions always require admin consent. Click "Grant admin consent" in the Azure portal.