ESC
Type to search...

AccessReview.ReadWrite.All

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

Allows the app to read, update, delete and perform actions on access reviews, reviewers, decisions and settings in the organization, without a signed-in user.

Delegated Access App-Only Access

Permission Details

Application Permission

Manage all access reviews

Allows the app to read, update, delete and perform actions on access reviews, reviewers, decisions and settings in the organization, without a signed-in user.

Delegated Permission Admin consent required

Manage all access reviews that user can access

Allows the app to read, update, delete and perform actions on access reviews, reviewers, decisions and settings that the signed-in user has access to in the organization.

Properties

Property Type Description
id string The unique identifier for an entity. Read-only.
instances microsoft.graph.accessReviewInstance collection Set of access reviews instances for this access review series. Access reviews that don't recur will only have one instance; otherwise, there's an instance for each recurrence.
scope object Defines the entities whose access is reviewed. For supported scopes, see accessReviewScope. Required on create. Supports $select and $filter (contains only). For examples of options for configuring scope, see Configure the scope of your access review definition using the Microsoft Graph API.
displayName stringNullable Name of the access review series. Supports $select and $orderby. Required on create.
lastModifiedDateTime date-timeNullable Timestamp when the access review series was last modified. Supports $select. Read-only.
createdDateTime date-timeNullable Timestamp when the access review series was created. Supports $select. Read-only.
createdBy object User who created this review. Read-only.
stageSettings microsoft.graph.accessReviewStageSettings collection Required only for a multi-stage access review to define the stages and their settings. You can break down each review instance into up to three sequential stages, where each stage can have a different set of reviewers, fallback reviewers, and settings. Stages are created sequentially based on the dependsOn property. Optional. When this property is defined, its settings are used instead of the corresponding settings in the accessReviewScheduleDefinition object and its settings, reviewers, and fallbackReviewers properties.
additionalNotificationRecipients microsoft.graph.accessReviewNotificationRecipientItem collection Defines the list of additional users or group members to be notified of the access review progress.
instanceEnumerationScope object This property is required when scoping a review to guest users' access across all Microsoft 365 groups and determines which Microsoft 365 groups are reviewed. Each group becomes a unique accessReviewInstance of the access review series. For supported scopes, see accessReviewScope. Supports $select. For examples of options for configuring instanceEnumerationScope, see Configure the scope of your access review definition using the Microsoft Graph API.
descriptionForReviewers stringNullable Description provided by review creators to provide more context of the review to reviewers. Reviewers see this description in the email sent to them requesting their review. Email notifications support up to 256 characters. Supports $select.
fallbackReviewers microsoft.graph.accessReviewReviewerScope collection This collection of reviewer scopes is used to define the list of fallback reviewers. These fallback reviewers will be notified to take action if no users are found from the list of reviewers specified. This could occur when either the group owner is specified as the reviewer but the group owner doesn't exist, or manager is specified as reviewer but a user's manager doesn't exist. See accessReviewReviewerScope. Replaces backupReviewers. Supports $select. NOTE: The value of this property will be ignored if fallback reviewers are assigned through the stageSettings property.
status stringNullable This read-only field specifies the status of an access review. The typical states include Initializing, NotStarted, Starting, InProgress, Completing, Completed, AutoReviewing, and AutoReviewed. Supports $select, $orderby, and $filter (eq only). Read-only.
settings object The settings for an access review series, see type definition below. Supports $select. Required on create.
reviewers microsoft.graph.accessReviewReviewerScope collection This collection of access review scopes is used to define who are the reviewers. The reviewers property is only updatable if individual users are assigned as reviewers. Required on create. Supports $select. For examples of options for assigning reviewers, see Assign reviewers to your access review definition using the Microsoft Graph API. NOTE: The value of this property will be ignored if reviewers are assigned through the stageSettings property.

Showing 15 of 17 properties. View all on Microsoft Learn →

JSON Representation

JSON representation
{
  "id": "String",
  "instances": "[...]",
  "scope": "{...}",
  "displayName": "String",
  "lastModifiedDateTime": "String",
  "createdDateTime": "String",
  "createdBy": "{...}",
  "stageSettings": "[...]",
  "additionalNotificationRecipients": "[...]",
  "instanceEnumerationScope": "{...}",
  "descriptionForReviewers": "String",
  "fallbackReviewers": "[...]",
  "status": "String",
  "settings": "{...}",
  "reviewers": "[...]",
  "descriptionForAdmins": "String",
  "backupReviewers": "[...]"
}

Relationships

Relationship Type Description
instances accessReviewInstance collection Set of access reviews instances for this access review series.
definitions accessReviewScheduleDefinition collection Represents the template and scheduling for an access review.

Graph Methods

Delegated access App-only access
Methods
GET /identityGovernance/accessReviews/definitions
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/contactedReviewers
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/decisions
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/decisions/{accessReviewInstanceDecisionItemId}
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/decisions/filterByCurrentUser(on='reviewer')
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/{accessReviewStageId}
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/{accessReviewStageId}/decisions
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/filterByCurrentUser(on='reviewer')
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/filterByCurrentUser(on='reviewer')
GET /identityGovernance/accessReviews/definitions/filterByCurrentUser(on='reviewer')
GET /identityGovernance/accessReviews/historyDefinitions
GET /identityGovernance/accessReviews/historyDefinitions/{accessReviewHistoryDefinitionId}/instances
GET /identityGovernance/accessReviews/historyDefinitions/{definition-id}
POST /identityGovernance/accessReviews/definitions
POST /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/acceptRecommendations
POST /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/applyDecisions
POST /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/batchRecordDecisions
POST /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/resetDecisions
POST /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/sendReminder
POST /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/{accessReviewStageId}/stop
POST /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stop
POST /identityGovernance/accessReviews/historyDefinitions
POST /identityGovernance/accessReviews/historyDefinitions/{accessReviewHistoryDefinitionId}/instances/{accessReviewHistoryInstanceId}/generateDownloadUri
PATCH /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/decisions/{accessReviewInstanceDecisionItemId}
PATCH /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/{accessReviewStageId}
PUT /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}
PUT /identityGovernance/accessReviews/definitions/{review-id}
DELETE /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}
Methods
GET /accessReviews?$filter=businessFlowTemplateId eq {businessFlowTemplate-id}&$top={pagesize}&$skip=0
GET /accessReviews/{reviewId}
GET /accessReviews/{reviewId}/decisions
GET /accessReviews/{reviewId}/myDecisions
GET /accessReviews/{reviewId}/reviewers
GET /identityGovernance/accessReviews/definitions
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/contactedReviewers
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/decisions
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/decisions/{accessReviewInstanceDecisionItemId}
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/decisions/filterByCurrentUser(on='reviewer')
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/{accessReviewStageId}
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/{accessReviewStageId}/decisions
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/filterByCurrentUser(on='reviewer')
GET /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/filterByCurrentUser(on='reviewer')
GET /identityGovernance/accessReviews/definitions/{definition-id}/instances
GET /identityGovernance/accessReviews/definitions/{definition-id}/instances/{instance-id}
GET /identityGovernance/accessReviews/definitions/{review-id}
GET /identityGovernance/accessReviews/definitions/filterByCurrentUser(on='reviewer')
GET /identityGovernance/accessReviews/historyDefinitions
GET /identityGovernance/accessReviews/historyDefinitions/{accessReviewHistoryDefinitionId}/instances
GET /identityGovernance/accessReviews/historyDefinitions/{definition-id}
GET /me/pendingAccessReviewInstances
GET /me/pendingAccessReviewInstances/{instance-id}/decisions
POST /accessReviews
POST /accessReviews/{reviewId}/applyDecisions
POST /accessReviews/{reviewId}/resetDecisions
POST /accessReviews/{reviewId}/reviewers
POST /accessReviews/{reviewId}/sendReminder
POST /accessReviews/{reviewId}/stop
POST /identityGovernance/accessReviews/decisions/filterByCurrentUser(on='reviewer')/recordAllDecisions
POST /identityGovernance/accessReviews/definitions
POST /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/resetDecisions
POST /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/{accessReviewStageId}/stop
POST /identityGovernance/accessReviews/definitions/{definition-id}/instances/{instance-id}/applyDecisions
POST /identityGovernance/accessReviews/definitions/{definition-id}/instances/{instance-id}/stop
POST /identityGovernance/accessReviews/definitions/{definition-id}/instances/{instance-id}/stopApplyDecisions
POST /identityGovernance/accessReviews/definitions/{definitionId}/instances/{instanceId}/sendReminder
POST /identityGovernance/accessReviews/historyDefinitions
POST /identityGovernance/accessReviews/historyDefinitions/{accessReviewHistoryDefinitionId}/instances/{accessReviewHistoryInstanceId}/generateDownloadUri
POST /me/pendingAccessReviewInstances/{accessReviewInstanceId}/batchRecordDecisions
POST /me/pendingAccessReviewInstances/{instance-id}/acceptRecommendations
PATCH /accessReviews/{reviewId}
PATCH /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/decisions/{accessReviewInstanceDecisionItemId}
PATCH /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}/stages/{accessReviewStageId}
PUT /identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinitionId}/instances/{accessReviewInstanceId}
PUT /identityGovernance/accessReviews/definitions/{review-id}
DELETE /accessReviews/{reviewId}
DELETE /accessReviews/{reviewId}/reviewers/{userId}
DELETE /identityGovernance/accessReviews/definitions/{review-id}
Commands
Add-MgIdentityGovernanceAccessReviewDefinitionInstanceDecision
Get-MgIdentityGovernanceAccessReviewDefinition
Get-MgIdentityGovernanceAccessReviewDefinitionInstance
Get-MgIdentityGovernanceAccessReviewDefinitionInstanceContactedReviewer
Get-MgIdentityGovernanceAccessReviewDefinitionInstanceDecision
Get-MgIdentityGovernanceAccessReviewDefinitionInstanceStage
Get-MgIdentityGovernanceAccessReviewDefinitionInstanceStageDecision
Get-MgIdentityGovernanceAccessReviewHistoryDefinition
Get-MgIdentityGovernanceAccessReviewHistoryDefinitionInstance
Invoke-MgAcceptIdentityGovernanceAccessReviewDefinitionInstanceRecommendation
Invoke-MgBatchIdentityGovernanceAccessReviewDefinitionInstanceRecordDecision
Invoke-MgFilterIdentityGovernanceAccessReviewDefinitionByCurrentUser
Invoke-MgFilterIdentityGovernanceAccessReviewDefinitionInstanceByCurrentUser
Invoke-MgFilterIdentityGovernanceAccessReviewDefinitionInstanceStageByCurrentUser
Invoke-MgFilterIdentityGovernanceAccessReviewDefinitionInstanceStageDecisionByCurrentUser
New-MgIdentityGovernanceAccessReviewDefinition
New-MgIdentityGovernanceAccessReviewHistoryDefinition
New-MgIdentityGovernanceAccessReviewHistoryDefinitionInstanceDownloadUri
Remove-MgIdentityGovernanceAccessReviewDefinition
Reset-MgIdentityGovernanceAccessReviewDefinitionInstanceDecision
Send-MgIdentityGovernanceAccessReviewDefinitionInstanceReminder
Set-MgIdentityGovernanceAccessReviewDefinition
Stop-MgIdentityGovernanceAccessReviewDefinitionInstance
Stop-MgIdentityGovernanceAccessReviewDefinitionInstanceStage
Update-MgIdentityGovernanceAccessReviewDefinitionInstance
Update-MgIdentityGovernanceAccessReviewDefinitionInstanceStage
Update-MgIdentityGovernanceAccessReviewDefinitionInstanceStageDecision
Commands
Add-MgBetaAccessReviewDecision
Add-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceDecision
Get-MgBetaAccessReview
Get-MgBetaAccessReviewDecision
Get-MgBetaAccessReviewMyDecision
Get-MgBetaAccessReviewReviewer
Get-MgBetaIdentityGovernanceAccessReviewDefinition
Get-MgBetaIdentityGovernanceAccessReviewDefinitionInstance
Get-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceContactedReviewer
Get-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceDecision
Get-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceStage
Get-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceStageDecision
Get-MgBetaIdentityGovernanceAccessReviewHistoryDefinition
Get-MgBetaIdentityGovernanceAccessReviewHistoryDefinitionInstance
Invoke-MgBetaAcceptIdentityGovernanceAccessReviewDecisionInstanceRecommendation
Invoke-MgBetaAcceptIdentityGovernanceAccessReviewDefinitionInstanceRecommendation
Invoke-MgBetaAcceptIdentityGovernanceAccessReviewInstanceDecisionInstanceRecommendation
Invoke-MgBetaAcceptIdentityGovernanceAccessReviewInstanceRecommendation
Invoke-MgBetaAcceptIdentityGovernanceAccessReviewInstanceStageDecisionInstanceRecommendation
Invoke-MgBetaBatchIdentityGovernanceAccessReviewDecisionInstanceRecordDecision
Invoke-MgBetaBatchIdentityGovernanceAccessReviewDefinitionInstanceRecordDecision
Invoke-MgBetaBatchIdentityGovernanceAccessReviewInstanceDecisionInstanceRecordDecision
Invoke-MgBetaBatchIdentityGovernanceAccessReviewInstanceRecordDecision
Invoke-MgBetaBatchIdentityGovernanceAccessReviewInstanceStageDecisionInstanceRecordDecision
Invoke-MgBetaFilterIdentityGovernanceAccessReviewDefinitionByCurrentUser
Invoke-MgBetaFilterIdentityGovernanceAccessReviewDefinitionInstanceByCurrentUser
Invoke-MgBetaFilterIdentityGovernanceAccessReviewDefinitionInstanceDecisionByCurrentUser
Invoke-MgBetaFilterIdentityGovernanceAccessReviewDefinitionInstanceStageByCurrentUser
Invoke-MgBetaRecordIdentityGovernanceAccessReviewDecision
Invoke-MgBetaRecordIdentityGovernanceAccessReviewDecisionInstanceDecision
Invoke-MgBetaRecordIdentityGovernanceAccessReviewDecisionInstanceStageDecision
Invoke-MgBetaRecordIdentityGovernanceAccessReviewDefinitionInstanceDecision
Invoke-MgBetaRecordIdentityGovernanceAccessReviewDefinitionInstanceStageDecision
Invoke-MgBetaRecordIdentityGovernanceAccessReviewInstanceDecision
Invoke-MgBetaRecordIdentityGovernanceAccessReviewInstanceDecisionInstanceStageDecision
Invoke-MgBetaRecordIdentityGovernanceAccessReviewInstanceStageDecision
Invoke-MgBetaRecordIdentityGovernanceAccessReviewInstanceStageDecisionInstanceDecision
New-MgBetaAccessReview
New-MgBetaAccessReviewReviewer
New-MgBetaIdentityGovernanceAccessReviewDefinition
New-MgBetaIdentityGovernanceAccessReviewHistoryDefinition
New-MgBetaIdentityGovernanceAccessReviewHistoryDefinitionInstanceDownloadUri
Remove-MgBetaAccessReview
Remove-MgBetaAccessReviewReviewer
Remove-MgBetaIdentityGovernanceAccessReviewDefinition
Reset-MgBetaAccessReviewDecision
Reset-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceDecision
Send-MgBetaAccessReviewReminder
Send-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceReminder
Set-MgBetaIdentityGovernanceAccessReviewDefinition
Stop-MgBetaAccessReview
Stop-MgBetaIdentityGovernanceAccessReviewDefinitionInstance
Stop-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceApplyDecision
Stop-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceStage
Update-MgBetaAccessReview
Update-MgBetaIdentityGovernanceAccessReviewDefinitionInstance
Update-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceDecision
Update-MgBetaIdentityGovernanceAccessReviewDefinitionInstanceStage

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[] { "AccessReview.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: ["AccessReview.ReadWrite.All"]
});

const authProvider = new AuthCodeMSALBrowserAuthenticationProvider(pca, {
    account: loginResponse.account,
    scopes: ["AccessReview.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 "AccessReview.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 = ["AccessReview.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 AccessReview.ReadWrite.All

4

Grant Admin Consent

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