
Microsoft will retire the Microsoft Entra Privileged Identity Management (PIM) Iteration 2 (beta) APIs on October 28, 2026. Any automation, scripts, or integrations using the /beta/privilegedAccess endpoints will stop working after this date.
If you manage privileged access using automation, you must migrate to Iteration 3 (Generally Available) APIs to avoid service disruption.
/beta/privilegedAccess will fail./v1.0/roleManagement/directory (Iteration 3).The older Iteration 2 APIs were built on a "Provider" architecture (specifically the aadRoles and azureResources providers). While functional, they were inconsistent with the rest of Microsoft Graph.
Iteration 3 brings PIM into the Unified Role Management fold. This means PIM operations now look and act like standard Entra ID role assignments, providing better reliability and faster execution.
These APIs are now being fully replaced by Iteration 3 APIs, which are production-ready, more consistent, and aligned with the Microsoft Graph and Azure Resource Manager architecture.

The retirement specifically affects APIs under:
/beta/privilegedAccess
/beta/privilegedAccess/aadRoles/beta/privilegedAccess/azureResources
These endpoints were commonly used to manage:
/beta/privilegedAccess/aadRoles/roleAssignments/v1.0/roleManagement/directory/roleAssignmentsRole Definitions/beta/privilegedAccess/aadRoles/roleDefinitions/v1.0/roleManagement/directory/roleDefinitionsAssignment Requests/beta/privilegedAccess/aadRoles/roleAssignmentRequests/v1.0/roleManagement/directory/roleAssignmentScheduleRequestsEligible Assignments/beta/privilegedAccess/aadRoles/roleEligibilityRequests/v1.0/roleManagement/directory/roleEligibilityScheduleRequests
If your organization uses automation, the impact can be significant.
Typical symptoms after retirement:
HTTP 404
HTTP 410
Authorization errors or Empty responses
This is not a permissions issue . . .

the 403 / provider not supported error
the legacy permissions that now require admin consent
GET https://graph.microsoft.com/beta/privilegedAccess
The request fails with a 403 Forbidden error and an additional provider error message.
What this shows

/beta/privilegedAccessThis error is not just a permission issue. It is an architectural change.
The PrivilegedAccess provider model used in Iteration 2 is being phased out and replaced by the Unified Role Management model in Iteration 3.
This means:
After October 28, 2026, these calls will fail permanently.
All permissions show:
Admin consent required: Yes
Status: Unconsented
This is expected behavior because:
In a regulated enterprise, you likely have these legacy calls hidden in:
PrivilegedAccess.ReadWrite.AzureAD.Critical Note: The legacyPrivilegedAccess.*permissions are being replaced. You must grant the newerRoleManagement.ReadWrite.DirectoryandPrivilegedAssignmentSchedule.ReadWrite.Directorypermissions to your automation identities.
To migrate, you must update two things: Your Code and Your App Permissions.
Endpoint Mapping
Direct Roles/beta/privilegedAccess/aadRoles
/v1.0/roleManagement/directory
Azure Resources
/beta/privilegedAccess/azureResources
/v1.0/roleManagement/cloudPC (or ARM APIs)
Assignments
.../roleAssignments
.../roleAssignmentScheduleRequests
Permission Mapping
Stop using the "PrivilegedAccess" scopes. Switch your Service Principal or App Registration to:
RoleManagement.ReadWrite.DirectoryPrivilegedAssignmentSchedule.ReadWrite.DirectoryFor regulated entities, moving PIM management into Terraform ensures a clear audit trail. Iteration 3 is fully supported by the AzureAD (Entra) and Microsoft Graph providers.
Instead of a beta API call, use the azuread_privileged_access_group_eligibility_schedule or the equivalent role assignment resource:
Terraform
# Iteration 3 Approach using Terraform
resource "azuread_privileged_access_group_eligibility_schedule" "admin_eligibility" {
group_id = azuread_group.privileged_group.id
principal_id = azuread_user.admin_user.object_id
role_definition_id = "f2ef1f12-3b3f-4ae0-bde6-ee2019ad5493" # Global Reader
schedule {
start_date = "2026-03-30T00:00:00Z"
expiration {
duration_days = 365
}
}
}If you must use scripts, use the Microsoft Graph PowerShell SDK (v2.x+), which defaults to the Iteration 3 logic.
PowerShell
# Migrating a Role Activation Request
$params = @{
Action = "selfActivate"
Justification = "Regulated Change Request #12345"
RoleDefinitionId = "f2ef1f12-3b3f-4ae0-bde6-ee2019ad5493"
DirectoryScopeId = "/"
PrincipalId = "USER_GUID"
ScheduleInfo = @{
StartDateTime = [System.DateTime]::UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
Expiration = @{
Type = "afterDuration"
Duration = "PT4H" # 4-hour window for compliance
}
}
}
New-MgRoleManagementDirectoryRoleAssignmentScheduleRequest -BodyParameter $paramsprivilegedAccess/aadRoles.⚠️ Audit Warning: Security auditors may flag "Unconsented" or "Deprecated" permissions in your App Registrations. Removing these legacy PrivilegedAccess.* scopes is a key step in reducing your Entra ID attack surface.If you're running a similar setup or have questions, reach out in the comments or on LinkedIn.
— Antonio | AboutCloud
arusso@aboutcloud.io

Keeping Microsoft Entra ID secure requires constant vigilance. As security configurations, Conditional Access policies, and Privileged Identity Management (PIM) rules evolve, configuration drift becomes an inevitable risk. Manual quarterly reviews leave too much room for silent m
By Antonio Russo

A practical read for engineering and governance teams , the actual API surface, the limits that shape your design, and an honest comparison against Microsoft365DSC | Tenant Configuration Management APIs, Maester, ScubaGear and Azure Policy. If you run identity for an organization of any size, you have two lists. The list of tenants you manage, and the list of tenants that exist. They are not the same list, and the gap between them is where incidents start. On 10 August, Microsoft moved Entra T
By Antonio Russo