Https- Graph.microsoft.com V1.0 Applications 〈99% FRESH〉

GET /applications?$expand=requiredResourceAccess Then compare with actual API calls. If you expose an API ( api.oauth2PermissionScopes ), the default scope user_impersonation is not automatically added. Many developers forget to define it, then wonder why "Sign in & read user profile" doesn't work. 6. Performance & Throttling Realities This endpoint lives under the /v1.0 workload, which has different throttling than /beta .

| Entity | Endpoint | Tenant scope | Analogy | |--------|----------|--------------|---------| | Application | /v1.0/applications | Home tenant only | Blueprint | | Service Principal | /v1.0/servicePrincipals | One per tenant | Built house |

POST /servicePrincipals

But that’s not the same as a ( /servicePrincipals ), which is the instance of that app in a specific tenant. https- graph.microsoft.com v1.0 applications

| Limit | Value | |-------|-------| | Requests per 10 seconds per app | 2,000 | | Requests per 10 seconds per tenant | 5,000 | | Max $top | 999 |

Query for apps with unused delegated permissions:

In this post, we’ll tear down the endpoint, explore its hidden properties, look at real-world automation patterns, and cover the security pitfalls that even seasoned admins miss. Before writing code, we need to clear up a massive source of confusion. GET /applications

"appId": "<the appId from above>"

In Microsoft Graph, an ( /applications ) is the global, multi-tenant definition of an app—its logo, requested permissions, redirect URIs, and certs/secrets.

But $expand on passwordCredentials or keyCredentials is . Avoid it unless necessary. Instead, fetch apps first (no expand), then batch request credentials: | Limit | Value | |-------|-------| | Requests

The endpoint https://graph.microsoft.com/v1.0/applications is the programmatic backbone of application identity management in Entra ID (formerly Azure AD). It’s powerful, subtle, and—if you’re not careful—dangerous.

$body = @ displayName = "CI/CD Automation App" signInAudience = "AzureADMyOrg" keyCredentials = @( @ type = "AsymmetricX509Cert" usage = "Verify" key = $base64Cert startDateTime = (Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ") endDateTime = (Get-Date).AddYears(1).ToString("yyyy-MM-ddTHH:mm:ssZ")

"requests": [ "id": "1", "method": "GET", "url": "/applications/id/passwordCredentials" , "id": "2", "method": "GET", "url": "/applications/id/keyCredentials" ]