@knowttl/mg-axi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1138 -0
- package/dist/api.js +953 -0
- package/dist/app-auth.js +47 -0
- package/dist/auth.js +59 -0
- package/dist/bin/mg-axi.js +7 -0
- package/dist/catalogue.js +2191 -0
- package/dist/cli.js +1314 -0
- package/dist/docs.js +559 -0
- package/dist/doctor.js +75 -0
- package/dist/entra-access-reviews.js +425 -0
- package/dist/entra-apps.js +374 -0
- package/dist/entra-audit-logs.js +381 -0
- package/dist/entra-auth-methods.js +296 -0
- package/dist/entra-ca-policy-update.js +353 -0
- package/dist/entra-certificate-auth.js +384 -0
- package/dist/entra-conditional-access.js +317 -0
- package/dist/entra-contacts.js +827 -0
- package/dist/entra-contracts.js +252 -0
- package/dist/entra-custom-security-attributes.js +464 -0
- package/dist/entra-data-policy-operations.js +274 -0
- package/dist/entra-delegated-admin.js +468 -0
- package/dist/entra-deleted-items.js +461 -0
- package/dist/entra-directory-objects.js +274 -0
- package/dist/entra-directory.js +411 -0
- package/dist/entra-domains.js +399 -0
- package/dist/entra-entitlement-management.js +645 -0
- package/dist/entra-federation-configurations.js +290 -0
- package/dist/entra-grants.js +272 -0
- package/dist/entra-group-lifecycle.js +349 -0
- package/dist/entra-group-member-add.js +278 -0
- package/dist/entra-groups.js +336 -0
- package/dist/entra-identity-providers.js +297 -0
- package/dist/entra-lifecycle-workflows.js +673 -0
- package/dist/entra-multi-tenant-organization.js +309 -0
- package/dist/entra-on-premises-synchronization.js +231 -0
- package/dist/entra-organization.js +398 -0
- package/dist/entra-risk-dismiss.js +191 -0
- package/dist/entra-risk.js +404 -0
- package/dist/entra-roles.js +310 -0
- package/dist/entra-subscriptions.js +289 -0
- package/dist/entra-tenant-information.js +152 -0
- package/dist/entra-terms-of-use.js +380 -0
- package/dist/entra-user-revoke-sessions.js +170 -0
- package/dist/entra-user-update.js +170 -0
- package/dist/entra-users.js +211 -0
- package/dist/graph-session.js +1034 -0
- package/dist/msal-app-provider.js +42 -0
- package/dist/msal-provider.js +82 -0
- package/dist/mutations.js +529 -0
- package/dist/profiles.js +139 -0
- package/dist/setup.js +116 -0
- package/dist/version.js +2 -0
- package/docs/coverage.md +1028 -0
- package/inventory/operations.json +4 -0
- package/inventory/schema.json +71 -0
- package/package.json +32 -0
- package/skills/mg-axi/SKILL.md +293 -0
package/dist/api.js
ADDED
|
@@ -0,0 +1,953 @@
|
|
|
1
|
+
import { AxiError } from "axi-sdk-js";
|
|
2
|
+
import { KNOWN_CONTACTED_REVIEWER_FIELDS, KNOWN_DECISION_FIELDS, KNOWN_DEFINITION_FIELDS, KNOWN_INSTANCE_FIELDS, KNOWN_STAGE_FIELDS } from "./entra-access-reviews.js";
|
|
3
|
+
import { KNOWN_ACCESS_PACKAGE_FIELDS, KNOWN_ASSIGNMENT_POLICY_FIELDS, KNOWN_CATALOG_FIELDS, KNOWN_RESOURCE_ROLE_SCOPE_FIELDS } from "./entra-entitlement-management.js";
|
|
4
|
+
import { KNOWN_LIFECYCLE_SETTINGS_FIELDS, KNOWN_RUN_FIELDS, KNOWN_SUBJECT_PROCESSING_FIELDS, KNOWN_TASK_DEFINITION_FIELDS, KNOWN_TASK_FIELDS, KNOWN_TASK_REPORT_FIELDS, KNOWN_USER_PROCESSING_FIELDS, KNOWN_WORKFLOW_FIELDS, KNOWN_WORKFLOW_TEMPLATE_FIELDS } from "./entra-lifecycle-workflows.js";
|
|
5
|
+
import { KNOWN_BRANDING_FIELDS, KNOWN_ORGANIZATION_FIELDS } from "./entra-organization.js";
|
|
6
|
+
import { KNOWN_CONTRACT_FIELDS } from "./entra-contracts.js";
|
|
7
|
+
import { KNOWN_DELEGATED_ADMIN_CUSTOMER_FIELDS, KNOWN_DELEGATED_ADMIN_RELATIONSHIP_FIELDS, KNOWN_DELEGATED_ADMIN_ACCESS_ASSIGNMENT_FIELDS, KNOWN_DELEGATED_ADMIN_OPERATION_FIELDS, KNOWN_DELEGATED_ADMIN_REQUEST_FIELDS } from "./entra-delegated-admin.js";
|
|
8
|
+
import { KNOWN_TENANT_INFORMATION_FIELDS } from "./entra-tenant-information.js";
|
|
9
|
+
import { KNOWN_MTO_FIELDS, KNOWN_MTO_JOIN_REQUEST_FIELDS, KNOWN_MTO_TENANT_FIELDS } from "./entra-multi-tenant-organization.js";
|
|
10
|
+
import { KNOWN_DATA_POLICY_FIELDS } from "./entra-data-policy-operations.js";
|
|
11
|
+
import { KNOWN_FEDERATION_FIELDS } from "./entra-federation-configurations.js";
|
|
12
|
+
import { KNOWN_CA_FIELDS, KNOWN_PKI_FIELDS } from "./entra-certificate-auth.js";
|
|
13
|
+
import { KNOWN_SUBSCRIPTION_FIELDS } from "./entra-subscriptions.js";
|
|
14
|
+
import { KNOWN_SYNC_FIELDS } from "./entra-on-premises-synchronization.js";
|
|
15
|
+
import { KNOWN_ACCEPTANCE_FIELDS, KNOWN_AGREEMENT_FIELDS } from "./entra-terms-of-use.js";
|
|
16
|
+
import { KNOWN_DIRECTORY_OBJECT_FIELDS } from "./entra-directory-objects.js";
|
|
17
|
+
import { KNOWN_DELETED_ADMINISTRATIVE_UNIT_FIELDS, KNOWN_DELETED_APPLICATION_FIELDS, KNOWN_DELETED_GROUP_FIELDS, KNOWN_DELETED_SERVICE_PRINCIPAL_FIELDS, KNOWN_DELETED_SHOW_FIELDS, KNOWN_DELETED_USER_FIELDS } from "./entra-deleted-items.js";
|
|
18
|
+
import { KNOWN_CONTACT_FIELDS, KNOWN_NAV_FIELDS } from "./entra-contacts.js";
|
|
19
|
+
import { KNOWN_LIFECYCLE_FIELDS, KNOWN_TEMPLATE_FIELDS } from "./entra-group-lifecycle.js";
|
|
20
|
+
import { KNOWN_ALLOWED_VALUE_FIELDS, KNOWN_ATTRIBUTE_SET_FIELDS, KNOWN_CUSTOM_SECURITY_DEFINITION_FIELDS } from "./entra-custom-security-attributes.js";
|
|
21
|
+
import { encodeGraphPathSegment, functionBindingFor, GraphSession, resolveSessionOperation } from "./graph-session.js";
|
|
22
|
+
// API-01: the reviewed read-only raw Graph surface.
|
|
23
|
+
//
|
|
24
|
+
// The discovery inventory (inventory/operations.json) stays discovery-only: it
|
|
25
|
+
// carries no reviewed-raw-read rows and must be regenerated, never edited. The
|
|
26
|
+
// review therefore lives here, in the implementation catalogue: exact v1.0
|
|
27
|
+
// inventory row ids, collection/singleton kind, per-route query keys, reviewed
|
|
28
|
+
// $select fields, and sourced access constraints. Access choices come from the
|
|
29
|
+
// representative SOC contracts in docs/graph-coverage.md; each entry cites its
|
|
30
|
+
// upstream operation documentation (retained verbatim from its inventory row,
|
|
31
|
+
// except authentication methods where upstream supplies no externalDocs and the
|
|
32
|
+
// cited method documentation is used instead). Group permission choices were
|
|
33
|
+
// rechecked against current upstream documentation on REVIEWED_ON: group-list
|
|
34
|
+
// now marks a write permission least-privileged while listing
|
|
35
|
+
// GroupMember.Read.All and Group.Read.All as supported read alternatives, so
|
|
36
|
+
// the review records the read choices rather than the first table cell.
|
|
37
|
+
//
|
|
38
|
+
// What this module never reviews: secret-value and credential-minting routes,
|
|
39
|
+
// mail/file content, beta routes, and anything but GET. Those fail closed in
|
|
40
|
+
// matchReviewed before any profile, credential or transport is touched. Pack,
|
|
41
|
+
// preview, /me and sensitive-area policy still runs inside the shared session,
|
|
42
|
+
// so raw reads cannot bypass named-command gating.
|
|
43
|
+
export const REVIEWED_ON = "2026-10-04";
|
|
44
|
+
const TRUNCATE_AT = 4000;
|
|
45
|
+
// Collections support server filtering, ordering and paging hints. Advanced
|
|
46
|
+
// queries ($search, $count=true) need per-endpoint ConsistencyLevel review and
|
|
47
|
+
// stay unsupported here; $skiptoken is server paging state, paged via --all.
|
|
48
|
+
const COLLECTION_QUERY = ["$select", "$filter", "$top", "$orderby"];
|
|
49
|
+
const SINGLE_QUERY = ["$select"];
|
|
50
|
+
const DEFAULT_CA_FIELDS = KNOWN_CA_FIELDS.filter(field => field !== "certificate");
|
|
51
|
+
const USER_FIELDS = ["id", "displayName", "userPrincipalName", "mail", "accountEnabled", "userType", "jobTitle", "department", "officeLocation", "businessPhones", "mobilePhone", "createdDateTime"];
|
|
52
|
+
const GROUP_FIELDS = ["id", "displayName", "description", "mail", "mailEnabled", "mailNickname", "securityEnabled", "groupTypes", "visibility", "classification", "isAssignableToRole", "createdDateTime", "expirationDateTime", "renewedDateTime", "membershipRule", "membershipRuleProcessingState"];
|
|
53
|
+
const MEMBER_FIELDS = ["id", "displayName"];
|
|
54
|
+
const CA_POLICY_FIELDS = ["id", "displayName", "state", "createdDateTime", "modifiedDateTime", "conditions", "grantControls", "sessionControls"];
|
|
55
|
+
const NAMED_LOCATION_FIELDS = ["id", "displayName", "createdDateTime", "modifiedDateTime", "isTrusted", "ipRanges", "countriesAndRegions", "includeUnknownCountriesAndRegions"];
|
|
56
|
+
const AUTH_METHOD_FIELDS = ["id", "createdDateTime", "displayName", "phoneNumber", "phoneType", "smsSignInState", "emailAddress"];
|
|
57
|
+
const REGISTRATION_FIELDS = ["id", "userPrincipalName", "userDisplayName", "userType", "isAdmin", "isMfaRegistered", "isMfaCapable", "isPasswordlessCapable", "isSsprRegistered", "isSsprEnabled", "isSsprCapable", "userPreferredMethodForSecondaryAuthentication", "lastUpdatedDateTime"];
|
|
58
|
+
const SIGNIN_FIELDS = ["id", "createdDateTime", "userId", "userPrincipalName", "userDisplayName", "appDisplayName", "appId", "ipAddress", "location", "status", "conditionalAccessStatus", "riskDetail", "riskLevelAggregated", "riskLevelDuringSignIn", "riskState", "resourceDisplayName", "resourceId", "clientAppUsed"];
|
|
59
|
+
const AUDIT_FIELDS = ["id", "activityDateTime", "activityDisplayName", "category", "loggedByService", "operationType", "result", "resultReason", "correlationId", "initiatedBy", "targetResources"];
|
|
60
|
+
const RISKY_USER_FIELDS = ["id", "userPrincipalName", "userDisplayName", "riskDetail", "riskLastUpdatedDateTime", "riskLevel", "riskState"];
|
|
61
|
+
const RISK_DETECTION_FIELDS = ["id", "detectedDateTime", "activityDateTime", "userId", "userPrincipalName", "userDisplayName", "ipAddress", "location", "riskDetail", "riskLevel", "riskState", "riskEventType", "detectionTimingType", "lastUpdatedDateTime", "source"];
|
|
62
|
+
const APP_FIELDS = ["id", "appId", "displayName", "createdDateTime", "signInAudience", "publisherDomain", "keyCredentials", "passwordCredentials", "requiredResourceAccess", "web", "spa", "publicClient"];
|
|
63
|
+
const SP_FIELDS = ["id", "appId", "displayName", "servicePrincipalType", "accountEnabled", "appOwnerOrganizationId", "appRoleAssignmentRequired", "preferredSingleSignOnMode", "loginUrl"];
|
|
64
|
+
const GRANT_FIELDS = ["id", "clientId", "consentType", "principalId", "resourceId", "scope", "startTime", "expiryTime"];
|
|
65
|
+
const APP_ROLE_FIELDS = ["id", "appRoleId", "principalId", "principalDisplayName", "principalType", "resourceId", "resourceDisplayName", "createdDateTime"];
|
|
66
|
+
const ROLE_ASSIGNMENT_FIELDS = ["id", "principalId", "roleDefinitionId", "directoryScopeId", "appScopeId", "createdDateTime"];
|
|
67
|
+
const PIM_INSTANCE_FIELDS = ["id", "roleDefinitionId", "principalId", "assignmentType", "memberType", "startDateTime", "endDateTime", "activatedUsing"];
|
|
68
|
+
const DEVICE_FIELDS = ["id", "deviceId", "displayName", "operatingSystem", "operatingSystemVersion", "trustType", "isCompliant", "isManaged", "accountEnabled", "createdDateTime", "approximateLastSignInDateTime", "manufacturer", "model"];
|
|
69
|
+
const AU_FIELDS = ["id", "displayName", "description", "visibility", "membershipType", "membershipRule"];
|
|
70
|
+
const DOMAIN_FIELDS = ["id", "authenticationType", "availabilityStatus", "isAdminManaged", "isDefault", "isInitial", "isRoot", "isVerified", "supportedServices", "passwordValidityPeriodInDays", "passwordNotificationWindowInDays", "state"];
|
|
71
|
+
const DNS_RECORD_FIELDS = ["id", "isOptional", "label", "recordType", "supportedService", "ttl", "mailExchange", "preference", "canonicalName", "nameTarget", "port", "priority", "protocol", "service", "weight", "text"];
|
|
72
|
+
const PROVIDER_FIELDS = ["id", "displayName", "identityProviderType", "clientId"];
|
|
73
|
+
// The reviewed surface, exported for capability reporting (PACK-01) and tests.
|
|
74
|
+
export const REVIEWED_ROUTES = [
|
|
75
|
+
{ id: "v1.0:GET:/users", kind: "collection", query: COLLECTION_QUERY, fields: USER_FIELDS,
|
|
76
|
+
access: "D User.ReadBasic.All for basics, User.Read.All for richer SOC data; A User.Read.All. Delegated callers pass one as --scopes.",
|
|
77
|
+
sources: ["https://learn.microsoft.com/graph/api/user-list?view=graph-rest-1.0"] },
|
|
78
|
+
{ id: "v1.0:GET:/users/{user-id}", kind: "single", query: SINGLE_QUERY, fields: USER_FIELDS,
|
|
79
|
+
access: "D User.ReadBasic.All for basics, User.Read.All for richer SOC data; A User.Read.All. Delegated callers pass one as --scopes.",
|
|
80
|
+
sources: ["https://learn.microsoft.com/graph/api/user-get?view=graph-rest-1.0"] },
|
|
81
|
+
{ id: "v1.0:GET:/groups", kind: "collection", query: COLLECTION_QUERY, fields: GROUP_FIELDS,
|
|
82
|
+
access: "D/A GroupMember.Read.All is a supported read choice; Group.Read.All for further properties. Delegated callers pass one as --scopes.",
|
|
83
|
+
note: "Upstream marks a write permission least-privileged here; the review records the supported read alternatives instead.",
|
|
84
|
+
sources: ["https://learn.microsoft.com/graph/api/group-list?view=graph-rest-1.0"] },
|
|
85
|
+
{ id: "v1.0:GET:/groups/{group-id}", kind: "single", query: SINGLE_QUERY, fields: GROUP_FIELDS,
|
|
86
|
+
access: "D/A GroupMember.Read.All is a supported read choice; Group.Read.All for further properties. Delegated callers pass one as --scopes.",
|
|
87
|
+
sources: ["https://learn.microsoft.com/graph/api/group-get?view=graph-rest-1.0"] },
|
|
88
|
+
{ id: "v1.0:GET:/groups/{group-id}/members", kind: "collection", query: COLLECTION_QUERY, fields: MEMBER_FIELDS,
|
|
89
|
+
access: "D/A GroupMember.ReadBasic.All minimum; richer access GroupMember.Read.All. Delegated callers pass one as --scopes.",
|
|
90
|
+
note: "Hidden membership needs Member.Read.Hidden; the server omits what the caller cannot see rather than failing. Richer member fields need single-object reads.",
|
|
91
|
+
warning: "Microsoft Graph v1.0 may omit service principals from group members; completed pagination does not establish complete membership.",
|
|
92
|
+
sources: ["https://learn.microsoft.com/graph/api/group-list-members?view=graph-rest-1.0"] },
|
|
93
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/policies", kind: "collection", query: COLLECTION_QUERY, fields: CA_POLICY_FIELDS,
|
|
94
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (for example Security Reader) is also required.",
|
|
95
|
+
note: "CA needs P1; risk-based CA needs P2.",
|
|
96
|
+
sources: ["https://learn.microsoft.com/graph/api/conditionalaccessroot-list-policies?view=graph-rest-1.0"] },
|
|
97
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/policies/{conditionalAccessPolicy-id}", kind: "single", query: SINGLE_QUERY, fields: CA_POLICY_FIELDS,
|
|
98
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (for example Security Reader) is also required.",
|
|
99
|
+
note: "CA needs P1; risk-based CA needs P2.",
|
|
100
|
+
sources: ["https://learn.microsoft.com/graph/api/conditionalaccesspolicy-get?view=graph-rest-1.0"] },
|
|
101
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/namedLocations", kind: "collection", query: COLLECTION_QUERY, fields: NAMED_LOCATION_FIELDS,
|
|
102
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (for example Security Reader) is also required.",
|
|
103
|
+
sources: ["https://learn.microsoft.com/graph/api/conditionalaccessroot-list-namedlocations?view=graph-rest-1.0"] },
|
|
104
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/namedLocations/{namedLocation-id}", kind: "single", query: SINGLE_QUERY, fields: NAMED_LOCATION_FIELDS,
|
|
105
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (for example Security Reader) is also required.",
|
|
106
|
+
sources: ["https://learn.microsoft.com/graph/api/countrynamedlocation-get?view=graph-rest-1.0"] },
|
|
107
|
+
{ id: "v1.0:GET:/users/{user-id}/authentication/methods", kind: "collection", query: ["$select"], fields: AUTH_METHOD_FIELDS,
|
|
108
|
+
access: "D/A UserAuthenticationMethod.Read.All for other users; delegated self UserAuthenticationMethod.Read. Dedicated administrator roles also apply.",
|
|
109
|
+
note: "Targeted per-user inspection only; aggregate coverage belongs to the registration report, never to a scan across users.",
|
|
110
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/authentication-list-methods?view=graph-rest-1.0"] },
|
|
111
|
+
{ id: "v1.0:GET:/users/{user-id}/authentication/methods/{authenticationMethod-id}", kind: "single", query: SINGLE_QUERY, fields: AUTH_METHOD_FIELDS,
|
|
112
|
+
access: "D/A UserAuthenticationMethod.Read.All for other users; delegated self UserAuthenticationMethod.Read. Dedicated administrator roles also apply.",
|
|
113
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/authentication-list-methods?view=graph-rest-1.0"] },
|
|
114
|
+
{ id: "v1.0:GET:/reports/authenticationMethods/userRegistrationDetails", kind: "collection", query: COLLECTION_QUERY, fields: REGISTRATION_FIELDS,
|
|
115
|
+
access: "D/A AuditLog.Read.All. Delegated callers pass it as --scopes.",
|
|
116
|
+
note: "The report does not cover disabled users; absence is not proof of no MFA.",
|
|
117
|
+
sources: ["https://learn.microsoft.com/graph/api/authenticationmethodsroot-list-userregistrationdetails?view=graph-rest-1.0"] },
|
|
118
|
+
{ id: "v1.0:GET:/auditLogs/signIns", kind: "collection", query: COLLECTION_QUERY, fields: SIGNIN_FIELDS,
|
|
119
|
+
access: "D/A AuditLog.Read.All; CA details carry additional policy permission and role requirements. Delegated callers pass the read scope as --scopes.",
|
|
120
|
+
note: "Conservative P1/P2 deployment prerequisite; retention, premium fields and the generating feature licence stay separate constraints.",
|
|
121
|
+
sources: ["https://learn.microsoft.com/graph/api/signin-list?view=graph-rest-1.0"] },
|
|
122
|
+
{ id: "v1.0:GET:/auditLogs/directoryAudits", kind: "collection", query: COLLECTION_QUERY, fields: AUDIT_FIELDS,
|
|
123
|
+
access: "D/A AuditLog.Read.All. Delegated callers pass it as --scopes.",
|
|
124
|
+
sources: ["https://learn.microsoft.com/graph/api/directoryaudit-list?view=graph-rest-1.0"] },
|
|
125
|
+
{ id: "v1.0:GET:/identityProtection/riskyUsers", kind: "collection", query: COLLECTION_QUERY, fields: RISKY_USER_FIELDS,
|
|
126
|
+
access: "D/A IdentityRiskyUser.Read.All. Delegated callers pass it as --scopes.",
|
|
127
|
+
note: "Full investigation needs P2/Suite; limited results stay limited, never reinterpreted as empty.",
|
|
128
|
+
sources: ["https://learn.microsoft.com/graph/api/riskyuser-list?view=graph-rest-1.0"] },
|
|
129
|
+
{ id: "v1.0:GET:/identityProtection/riskyUsers/{riskyUser-id}", kind: "single", query: SINGLE_QUERY, fields: RISKY_USER_FIELDS,
|
|
130
|
+
access: "D/A IdentityRiskyUser.Read.All. Delegated callers pass it as --scopes.",
|
|
131
|
+
sources: ["https://learn.microsoft.com/graph/api/riskyuser-get?view=graph-rest-1.0"] },
|
|
132
|
+
{ id: "v1.0:GET:/identityProtection/riskDetections", kind: "collection", query: COLLECTION_QUERY, fields: RISK_DETECTION_FIELDS,
|
|
133
|
+
access: "D/A IdentityRiskEvent.Read.All. Delegated callers pass it as --scopes.",
|
|
134
|
+
note: "The API permits P1 or P2; full details need P2.",
|
|
135
|
+
sources: ["https://learn.microsoft.com/graph/api/riskdetection-list?view=graph-rest-1.0"] },
|
|
136
|
+
{ id: "v1.0:GET:/identityProtection/riskDetections/{riskDetection-id}", kind: "single", query: SINGLE_QUERY, fields: RISK_DETECTION_FIELDS,
|
|
137
|
+
access: "D/A IdentityRiskEvent.Read.All. Delegated callers pass it as --scopes.",
|
|
138
|
+
sources: ["https://learn.microsoft.com/graph/api/riskdetection-get?view=graph-rest-1.0"] },
|
|
139
|
+
{ id: "v1.0:GET:/applications", kind: "collection", query: COLLECTION_QUERY, fields: APP_FIELDS,
|
|
140
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
141
|
+
note: "appId (client ID) is distinct from the object id. Credential fields carry expiry metadata only; GET never returns secret values and success redaction still applies.",
|
|
142
|
+
sources: ["https://learn.microsoft.com/graph/api/application-list?view=graph-rest-1.0"] },
|
|
143
|
+
{ id: "v1.0:GET:/applications/{application-id}", kind: "single", query: SINGLE_QUERY, fields: APP_FIELDS,
|
|
144
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
145
|
+
note: "appId (client ID) is distinct from the object id. Credential fields carry expiry metadata only; GET never returns secret values and success redaction still applies.",
|
|
146
|
+
sources: ["https://learn.microsoft.com/graph/api/application-get?view=graph-rest-1.0"] },
|
|
147
|
+
{ id: "v1.0:GET:/servicePrincipals", kind: "collection", query: COLLECTION_QUERY, fields: SP_FIELDS,
|
|
148
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
149
|
+
note: "appId (client ID) is distinct from the object id.",
|
|
150
|
+
sources: ["https://learn.microsoft.com/graph/api/serviceprincipal-list?view=graph-rest-1.0"] },
|
|
151
|
+
{ id: "v1.0:GET:/servicePrincipals/{servicePrincipal-id}", kind: "single", query: SINGLE_QUERY, fields: SP_FIELDS,
|
|
152
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
153
|
+
note: "appId (client ID) is distinct from the object id.",
|
|
154
|
+
sources: ["https://learn.microsoft.com/graph/api/serviceprincipal-get?view=graph-rest-1.0"] },
|
|
155
|
+
{ id: "v1.0:GET:/servicePrincipals/{servicePrincipal-id}/appRoleAssignments", kind: "collection", query: COLLECTION_QUERY, fields: APP_ROLE_FIELDS,
|
|
156
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
157
|
+
note: "Actual granted assignments; requested permissions are a separate contract.",
|
|
158
|
+
sources: ["https://learn.microsoft.com/graph/api/serviceprincipal-list-approleassignments?view=graph-rest-1.0"] },
|
|
159
|
+
{ id: "v1.0:GET:/oauth2PermissionGrants", kind: "collection", query: COLLECTION_QUERY, fields: GRANT_FIELDS,
|
|
160
|
+
access: "D/A Directory.Read.All as the read choice. Delegated callers pass it as --scopes.",
|
|
161
|
+
note: "Actual granted consent; requested permissions are a separate contract.",
|
|
162
|
+
sources: ["https://learn.microsoft.com/graph/api/oauth2permissiongrant-list?view=graph-rest-1.0"] },
|
|
163
|
+
{ id: "v1.0:GET:/oauth2PermissionGrants/{oAuth2PermissionGrant-id}", kind: "single", query: SINGLE_QUERY, fields: GRANT_FIELDS,
|
|
164
|
+
access: "D/A Directory.Read.All as the read choice. Delegated callers pass it as --scopes.",
|
|
165
|
+
sources: ["https://learn.microsoft.com/graph/api/oauth2permissiongrant-get?view=graph-rest-1.0"] },
|
|
166
|
+
{ id: "v1.0:GET:/roleManagement/directory/roleAssignments", kind: "collection", query: COLLECTION_QUERY, fields: ROLE_ASSIGNMENT_FIELDS,
|
|
167
|
+
access: "D/A RoleManagement.Read.Directory. Delegated callers pass it as --scopes.",
|
|
168
|
+
note: "Built-in roles are base; custom role assignments need P1.",
|
|
169
|
+
sources: ["https://learn.microsoft.com/graph/api/rbacapplication-list-roleassignments?view=graph-rest-1.0"] },
|
|
170
|
+
{ id: "v1.0:GET:/roleManagement/directory/roleEligibilityScheduleInstances", kind: "collection", query: COLLECTION_QUERY, fields: PIM_INSTANCE_FIELDS,
|
|
171
|
+
access: "D/A RoleEligibilitySchedule.Read.Directory. Delegated callers pass it as --scopes.",
|
|
172
|
+
note: "Eligible (not active) assignments; PIM needs P2 or ID Governance.",
|
|
173
|
+
sources: ["https://learn.microsoft.com/graph/api/rbacapplication-list-roleeligibilityscheduleinstances?view=graph-rest-1.0"] },
|
|
174
|
+
{ id: "v1.0:GET:/roleManagement/directory/roleAssignmentScheduleInstances", kind: "collection", query: COLLECTION_QUERY, fields: PIM_INSTANCE_FIELDS,
|
|
175
|
+
access: "D/A RoleAssignmentSchedule.Read.Directory. Delegated callers pass it as --scopes.",
|
|
176
|
+
note: "Active (including activated eligible) assignments; PIM needs P2 or ID Governance.",
|
|
177
|
+
sources: ["https://learn.microsoft.com/graph/api/rbacapplication-list-roleassignmentscheduleinstances?view=graph-rest-1.0"] },
|
|
178
|
+
{ id: "v1.0:GET:/devices", kind: "collection", query: COLLECTION_QUERY, fields: DEVICE_FIELDS,
|
|
179
|
+
access: "D/A Device.Read.All. Delegated callers pass it as --scopes.",
|
|
180
|
+
note: "Directory-device scope only; Intune device management is a separately authorized surface.",
|
|
181
|
+
sources: ["https://learn.microsoft.com/graph/api/device-list?view=graph-rest-1.0"] },
|
|
182
|
+
{ id: "v1.0:GET:/devices/{device-id}", kind: "single", query: SINGLE_QUERY, fields: DEVICE_FIELDS,
|
|
183
|
+
access: "D/A Device.Read.All. Delegated callers pass it as --scopes.",
|
|
184
|
+
sources: ["https://learn.microsoft.com/graph/api/device-get?view=graph-rest-1.0"] },
|
|
185
|
+
{ id: "v1.0:GET:/directory/administrativeUnits", kind: "collection", query: COLLECTION_QUERY, fields: AU_FIELDS,
|
|
186
|
+
access: "D/A AdministrativeUnit.Read.All. Delegated callers pass it as --scopes.",
|
|
187
|
+
note: "P1 for scoped administrators, Free for members; dynamic membership needs additional P1 licensing.",
|
|
188
|
+
sources: ["https://learn.microsoft.com/graph/api/directory-list-administrativeunits?view=graph-rest-1.0"] },
|
|
189
|
+
{ id: "v1.0:GET:/directory/administrativeUnits/{administrativeUnit-id}", kind: "single", query: SINGLE_QUERY, fields: AU_FIELDS,
|
|
190
|
+
access: "D/A AdministrativeUnit.Read.All. Delegated callers pass it as --scopes.",
|
|
191
|
+
sources: ["https://learn.microsoft.com/graph/api/administrativeunit-get?view=graph-rest-1.0"] },
|
|
192
|
+
{ id: "v1.0:GET:/organization", kind: "collection", query: ["$select"], fields: KNOWN_ORGANIZATION_FIELDS,
|
|
193
|
+
access: "D User.Read for restricted basics (id, displayName and verifiedDomains only; other properties return null) or Organization.Read.All for full metadata; A Organization.Read.All. Delegated callers pass it as --scopes and additionally need a supported Entra role (Directory Readers and Global Reader are among the supported least-privilege roles). No P1/P2 prerequisite is stated for this list; contact fields are personal data.",
|
|
194
|
+
note: "Graph documents $select only on the organization list; $filter/$top are not reviewed here. Exactly one organization exists per tenant.",
|
|
195
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/organization-list?view=graph-rest-1.0"] },
|
|
196
|
+
{ id: "v1.0:GET:/organization/{organization-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_ORGANIZATION_FIELDS,
|
|
197
|
+
access: "D User.Read for restricted basics (id, displayName and verifiedDomains only; other properties return null) or Organization.Read.All for full metadata; A Organization.Read.All. Delegated callers pass it as --scopes and additionally need a supported Entra role (Directory Readers and Global Reader are among the supported least-privilege roles). No P1/P2 prerequisite is stated for this read; contact fields are personal data.",
|
|
198
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/organization-get?view=graph-rest-1.0"] },
|
|
199
|
+
{ id: "v1.0:GET:/organization/{organization-id}/branding", kind: "single", query: SINGLE_QUERY, fields: KNOWN_BRANDING_FIELDS,
|
|
200
|
+
access: "D User.Read least-privileged or the purpose-built OrganizationalBranding.Read.All (Organization.Read.All also works). Delegated callers pass it as --scopes and additionally need Global Reader or Organizational Branding Administrator; A OrganizationalBranding.Read.All. No P1/P2 prerequisite is stated for this read, but configuring custom branding needs P1/P2. A 404 may indicate unconfigured branding or a missing or inaccessible organization.",
|
|
201
|
+
note: "The session sends Accept-Language: 0 to read the default branding; only non-Stream properties are reviewed here and Stream image bytes are refused.",
|
|
202
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/organizationalbranding-get?view=graph-rest-1.0"] },
|
|
203
|
+
{ id: "v1.0:GET:/organization/{organization-id}/branding/localizations", kind: "collection", query: ["$select"], fields: KNOWN_BRANDING_FIELDS,
|
|
204
|
+
access: "D User.Read least-privileged or the purpose-built OrganizationalBranding.Read.All (Organization.Read.All also works). Delegated callers pass it as --scopes and additionally need Global Reader or Organizational Branding Administrator; A OrganizationalBranding.Read.All. No P1/P2 prerequisite is stated for this list.",
|
|
205
|
+
note: "Graph documents $select only on the localization list; $filter/$top are not reviewed here.",
|
|
206
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/organizationalbranding-list-localizations?view=graph-rest-1.0"] },
|
|
207
|
+
{ id: "v1.0:GET:/organization/{organization-id}/branding/localizations/{organizationalBrandingLocalization-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_BRANDING_FIELDS,
|
|
208
|
+
access: "D User.Read least-privileged or the purpose-built OrganizationalBranding.Read.All (Organization.Read.All also works). Delegated callers pass it as --scopes and additionally need Global Reader or Organizational Branding Administrator; A OrganizationalBranding.Read.All. No P1/P2 prerequisite is stated for this read.",
|
|
209
|
+
note: "Only non-Stream properties are reviewed here; Stream image bytes are refused.",
|
|
210
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/organizationalbrandinglocalization-get?view=graph-rest-1.0"] },
|
|
211
|
+
{ id: "v1.0:GET:/domains", kind: "collection", query: ["$select"], fields: DOMAIN_FIELDS,
|
|
212
|
+
access: "D/A Domain.Read.All. Delegated callers pass it as --scopes; a supported Entra role is also required (Domain Name Administrator or Global Reader are least-privileged). No P1/P2 prerequisite is stated for domain reads.",
|
|
213
|
+
note: "Graph documents a known issue with $search, $top and $filter on domain lists; only $select is reviewed here.",
|
|
214
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/domain-list?view=graph-rest-1.0"] },
|
|
215
|
+
{ id: "v1.0:GET:/domains/{domain-id}", kind: "single", query: SINGLE_QUERY, fields: DOMAIN_FIELDS,
|
|
216
|
+
access: "D/A Domain.Read.All. Delegated callers pass it as --scopes; a supported Entra role is also required (Domain Name Administrator or Global Reader are least-privileged). No P1/P2 prerequisite is stated for domain reads.",
|
|
217
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/domain-get?view=graph-rest-1.0"] },
|
|
218
|
+
{ id: "v1.0:GET:/domains/{domain-id}/verificationDnsRecords", kind: "collection", query: COLLECTION_QUERY, fields: DNS_RECORD_FIELDS,
|
|
219
|
+
access: "D/A Domain.Read.All. Delegated callers pass it as --scopes; Domain Name Administrator or Global Reader are the least-privileged delegated roles. No P1/P2 prerequisite is stated for DNS record reads.",
|
|
220
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/domain-list-verificationdnsrecords?view=graph-rest-1.0"] },
|
|
221
|
+
{ id: "v1.0:GET:/domains/{domain-id}/verificationDnsRecords/{domainDnsRecord-id}", kind: "single", query: SINGLE_QUERY, fields: DNS_RECORD_FIELDS,
|
|
222
|
+
access: "D/A Domain.Read.All. Delegated callers pass it as --scopes; Domain Name Administrator or Global Reader are the least-privileged delegated roles. No P1/P2 prerequisite is stated for DNS record reads.",
|
|
223
|
+
note: "No operation-level documentation page; access follows the parent verification-records contract and the domainDnsRecord resource reference.",
|
|
224
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/domain-list-verificationdnsrecords?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/domaindnsrecord?view=graph-rest-1.0"] },
|
|
225
|
+
{ id: "v1.0:GET:/domains/{domain-id}/serviceConfigurationRecords", kind: "collection", query: COLLECTION_QUERY, fields: DNS_RECORD_FIELDS,
|
|
226
|
+
access: "D/A Domain.Read.All. Delegated callers pass it as --scopes; Domain Name Administrator or Global Reader are the least-privileged delegated roles. No P1/P2 prerequisite is stated for DNS record reads.",
|
|
227
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/domain-list-serviceconfigurationrecords?view=graph-rest-1.0"] },
|
|
228
|
+
{ id: "v1.0:GET:/domains/{domain-id}/serviceConfigurationRecords/{domainDnsRecord-id}", kind: "single", query: SINGLE_QUERY, fields: DNS_RECORD_FIELDS,
|
|
229
|
+
access: "D/A Domain.Read.All. Delegated callers pass it as --scopes; Domain Name Administrator or Global Reader are the least-privileged delegated roles. No P1/P2 prerequisite is stated for DNS record reads.",
|
|
230
|
+
note: "No operation-level documentation page; access follows the parent service-configuration contract and the domainDnsRecord resource reference.",
|
|
231
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/domain-list-serviceconfigurationrecords?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/domaindnsrecord?view=graph-rest-1.0"] },
|
|
232
|
+
{ id: "v1.0:GET:/domainDnsRecords", kind: "collection", query: COLLECTION_QUERY, fields: DNS_RECORD_FIELDS,
|
|
233
|
+
access: "D/A Domain.Read.All. Delegated callers pass it as --scopes; Domain Name Administrator or Global Reader are the least-privileged delegated roles. No P1/P2 prerequisite is stated for DNS record reads.",
|
|
234
|
+
note: "No operation-level documentation page; access follows the documented domain/DNS-read contract and the domainDnsRecord resource reference.",
|
|
235
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/domain-list?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/domaindnsrecord?view=graph-rest-1.0"] },
|
|
236
|
+
{ id: "v1.0:GET:/domainDnsRecords/{domainDnsRecord-id}", kind: "single", query: SINGLE_QUERY, fields: DNS_RECORD_FIELDS,
|
|
237
|
+
access: "D/A Domain.Read.All. Delegated callers pass it as --scopes; Domain Name Administrator or Global Reader are the least-privileged delegated roles. No P1/P2 prerequisite is stated for DNS record reads.",
|
|
238
|
+
note: "No operation-level documentation page; access follows the documented domain/DNS-read contract and the domainDnsRecord resource reference.",
|
|
239
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/domain-list?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/domaindnsrecord?view=graph-rest-1.0"] },
|
|
240
|
+
{ id: "v1.0:GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_PKI_FIELDS,
|
|
241
|
+
access: "D/A PublicKeyInfrastructure.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Privileged Authentication Administrator or Authentication Administrator; personal Microsoft accounts are not supported. No P1/P2 prerequisite is stated for PKI reads; an empty list may mean certificate-based authentication is not configured.",
|
|
242
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/publickeyinfrastructureroot-list-certificatebasedauthconfigurations?view=graph-rest-1.0"] },
|
|
243
|
+
{ id: "v1.0:GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{certificateBasedAuthPki-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_PKI_FIELDS,
|
|
244
|
+
access: "D/A PublicKeyInfrastructure.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Privileged Authentication Administrator or Authentication Administrator; personal Microsoft accounts are not supported. No P1/P2 prerequisite is stated for this read.",
|
|
245
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/certificatebasedauthpki-get?view=graph-rest-1.0"] },
|
|
246
|
+
{ id: "v1.0:GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{certificateBasedAuthPki-id}/certificateAuthorities", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_CA_FIELDS, defaultFields: DEFAULT_CA_FIELDS,
|
|
247
|
+
access: "D/A PublicKeyInfrastructure.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Privileged Authentication Administrator or Authentication Administrator; personal Microsoft accounts are not supported. No P1/P2 prerequisite is stated for authority reads.",
|
|
248
|
+
note: "The certificate field carries the public CA key only; large blobs stay truncated at the output boundary unless --full is passed.",
|
|
249
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/certificatebasedauthpki-list-certificateauthorities?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/certificateauthoritydetail?view=graph-rest-1.0"] },
|
|
250
|
+
{ id: "v1.0:GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{certificateBasedAuthPki-id}/certificateAuthorities/{certificateAuthorityDetail-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_CA_FIELDS, defaultFields: DEFAULT_CA_FIELDS,
|
|
251
|
+
access: "D/A PublicKeyInfrastructure.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Privileged Authentication Administrator or Authentication Administrator; personal Microsoft accounts are not supported. No P1/P2 prerequisite is stated for this read.",
|
|
252
|
+
note: "No operation-level query documentation beyond $select; access follows the parent authority-list contract and the certificateAuthorityDetail resource reference. The certificate field carries the public CA key only.",
|
|
253
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/certificatebasedauthpki-list-certificateauthorities?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/certificateauthoritydetail-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/certificateauthoritydetail?view=graph-rest-1.0"] },
|
|
254
|
+
{ id: "v1.0:GET:/directory/subscriptions", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_SUBSCRIPTION_FIELDS,
|
|
255
|
+
access: "D/A Organization.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Global Reader, Directory Readers, or Dynamics 365 Business Central Administrator for read-only standard properties); personal Microsoft accounts are not supported. No P1/P2 prerequisite is stated for subscription reads.",
|
|
256
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract.",
|
|
257
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directory-list-subscriptions?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/companysubscription?view=graph-rest-1.0"] },
|
|
258
|
+
{ id: "v1.0:GET:/directory/subscriptions/{companySubscription-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_SUBSCRIPTION_FIELDS,
|
|
259
|
+
access: "D/A Organization.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Global Reader, Directory Readers, or Dynamics 365 Business Central Administrator for read-only standard properties); personal Microsoft accounts are not supported. No P1/P2 prerequisite is stated for this read.",
|
|
260
|
+
note: "The commerceSubscriptionId alternate-key lookup ships as its own reviewed route below; object-ID shows never accept function-style identifiers.",
|
|
261
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/companysubscription-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/companysubscription?view=graph-rest-1.0"] },
|
|
262
|
+
{ id: "v1.0:GET:/directory/subscriptions(commerceSubscriptionId='{commerceSubscriptionId}')", kind: "single", query: SINGLE_QUERY, fields: KNOWN_SUBSCRIPTION_FIELDS,
|
|
263
|
+
access: "D/A Organization.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Global Reader, Directory Readers, or Dynamics 365 Business Central Administrator for read-only standard properties); personal Microsoft accounts are not supported. No P1/P2 prerequisite is stated for this read.",
|
|
264
|
+
note: "Alternate-key lookup by commerceSubscriptionId: the raw path carries the key as an OData-quoted function argument and the shared session re-validates, re-quotes and encodes it; only this allowlisted shape binds.",
|
|
265
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/companysubscription-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/companysubscription?view=graph-rest-1.0"] },
|
|
266
|
+
{ id: "v1.0:GET:/directory/onPremisesSynchronization", kind: "collection", query: ["$select"], fields: KNOWN_SYNC_FIELDS,
|
|
267
|
+
access: "D OnPremDirectorySynchronization.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Global Administrator, the only supported Entra role for this operation; personal Microsoft accounts are not supported and Graph documents no supported application permission, so application profiles are refused before credentials. No P1/P2 prerequisite is stated for on-premises-synchronization reads.",
|
|
268
|
+
delegatedOnly: true,
|
|
269
|
+
note: "Graph documents $select only on the on-premises-synchronization list; $filter is not reviewed here. The $count scalar stays scheduled for a later counts subfamily.",
|
|
270
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/onpremisesdirectorysynchronization-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/onpremisesdirectorysynchronization?view=graph-rest-1.0"] },
|
|
271
|
+
{ id: "v1.0:GET:/directory/onPremisesSynchronization/{onPremisesDirectorySynchronization-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_SYNC_FIELDS,
|
|
272
|
+
access: "D OnPremDirectorySynchronization.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Global Administrator, the only supported Entra role for this operation; personal Microsoft accounts are not supported and Graph documents no supported application permission, so application profiles are refused before credentials. No P1/P2 prerequisite is stated for this read.",
|
|
273
|
+
delegatedOnly: true,
|
|
274
|
+
note: "Secret-shaped values inside configuration and features stay redacted by the shared session; no credential fields are projected.",
|
|
275
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/onpremisesdirectorysynchronization-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/onpremisesdirectorysynchronization?view=graph-rest-1.0"] },
|
|
276
|
+
{ id: "v1.0:GET:/agreements", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_AGREEMENT_FIELDS, defaultFields: ["id", "displayName"],
|
|
277
|
+
access: "D Agreement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Security Reader, the least-privileged supported Entra role for this operation (Global Reader, Conditional Access Administrator or Security Administrator also work); personal Microsoft accounts are not supported and Graph documents no supported application permission, so application profiles are refused before credentials. Terms of use needs Microsoft Entra ID P1.",
|
|
278
|
+
delegatedOnly: true,
|
|
279
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. The legacy /agreements root shares the termsOfUse operation contract documented on /identityGovernance/termsOfUse/agreements. Agreement file and files navigation properties are never requested: file bytes are never downloaded or printed.",
|
|
280
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/termsofusecontainer-list-agreements?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/agreement?view=graph-rest-1.0"] },
|
|
281
|
+
{ id: "v1.0:GET:/agreements/{agreement-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_AGREEMENT_FIELDS,
|
|
282
|
+
access: "D Agreement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Security Reader, the least-privileged supported Entra role for this operation (Global Reader, Conditional Access Administrator or Security Administrator also work); personal Microsoft accounts are not supported and Graph documents no supported application permission, so application profiles are refused before credentials. Terms of use needs Microsoft Entra ID P1.",
|
|
283
|
+
delegatedOnly: true,
|
|
284
|
+
note: "Graph documents $select only on the agreement get; $filter is not reviewed here. Agreement file and files navigation properties are never requested: file bytes are never downloaded or printed.",
|
|
285
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/agreement-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/agreement?view=graph-rest-1.0"] },
|
|
286
|
+
{ id: "v1.0:GET:/agreements/{agreement-id}/acceptances", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_ACCEPTANCE_FIELDS, defaultFields: ["id", "agreementId", "state", "recordedDateTime"],
|
|
287
|
+
access: "D AgreementAcceptance.Read least-privileged (AgreementAcceptance.Read.All is the documented higher-privileged alternative). Delegated callers pass one as --scopes; delegated access additionally needs Security Reader, the least-privileged supported Entra role for this operation (Global Reader, Conditional Access Administrator or Security Administrator also work); personal Microsoft accounts are not supported and Graph documents no supported application permission, so application profiles are refused before credentials. Terms of use needs Microsoft Entra ID P1.",
|
|
288
|
+
delegatedOnly: true,
|
|
289
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. Acceptance records are personal data: default rows carry id, agreementId, state and recordedDateTime only, and identifying fields need an explicit $select.",
|
|
290
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/agreement-list-acceptances?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/agreementacceptance?view=graph-rest-1.0"] },
|
|
291
|
+
{ id: "v1.0:GET:/agreements/{agreement-id}/acceptances/{agreementAcceptance-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_ACCEPTANCE_FIELDS, defaultFields: ["id", "agreementId", "state", "recordedDateTime"],
|
|
292
|
+
access: "D AgreementAcceptance.Read least-privileged (AgreementAcceptance.Read.All is the documented higher-privileged alternative). Delegated callers pass one as --scopes; delegated access additionally needs Security Reader, the least-privileged supported Entra role for this operation (Global Reader, Conditional Access Administrator or Security Administrator also work); personal Microsoft accounts are not supported and Graph documents no supported application permission, so application profiles are refused before credentials. Terms of use needs Microsoft Entra ID P1.",
|
|
293
|
+
delegatedOnly: true,
|
|
294
|
+
note: "No single-acceptance operation page; access follows the parent acceptance-list contract and the agreementAcceptance resource reference. Acceptance records are personal data: default rows carry id, agreementId, state and recordedDateTime only.",
|
|
295
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/agreement-list-acceptances?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/agreementacceptance?view=graph-rest-1.0"] },
|
|
296
|
+
{ id: "v1.0:GET:/agreementAcceptances", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_ACCEPTANCE_FIELDS, defaultFields: ["id", "agreementId", "state", "recordedDateTime"],
|
|
297
|
+
access: "D AgreementAcceptance.Read least-privileged (AgreementAcceptance.Read.All is the documented higher-privileged alternative). Delegated callers pass one as --scopes; delegated access additionally needs Security Reader, the least-privileged supported Entra role for this operation (Global Reader, Conditional Access Administrator or Security Administrator also work); personal Microsoft accounts are not supported and Graph documents no supported application permission, so application profiles are refused before credentials. Terms of use needs Microsoft Entra ID P1.",
|
|
298
|
+
delegatedOnly: true,
|
|
299
|
+
note: "The root acceptance list has no dedicated operation page; access follows the reviewed acceptance-list contract and the agreementAcceptance resource reference. Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. Acceptance records are personal data: default rows carry id, agreementId, state and recordedDateTime only.",
|
|
300
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/agreement-list-acceptances?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/agreementacceptance?view=graph-rest-1.0"] },
|
|
301
|
+
{ id: "v1.0:GET:/agreementAcceptances/{agreementAcceptance-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_ACCEPTANCE_FIELDS, defaultFields: ["id", "agreementId", "state", "recordedDateTime"],
|
|
302
|
+
access: "D AgreementAcceptance.Read least-privileged (AgreementAcceptance.Read.All is the documented higher-privileged alternative). Delegated callers pass one as --scopes; delegated access additionally needs Security Reader, the least-privileged supported Entra role for this operation (Global Reader, Conditional Access Administrator or Security Administrator also work); personal Microsoft accounts are not supported and Graph documents no supported application permission, so application profiles are refused before credentials. Terms of use needs Microsoft Entra ID P1.",
|
|
303
|
+
delegatedOnly: true,
|
|
304
|
+
note: "No single-acceptance operation page; access follows the parent acceptance-list contract and the agreementAcceptance resource reference. Acceptance records are personal data: default rows carry id, agreementId, state and recordedDateTime only.",
|
|
305
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/agreement-list-acceptances?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/agreementacceptance?view=graph-rest-1.0"] },
|
|
306
|
+
{ id: "v1.0:GET:/directoryObjects", kind: "collection", query: ["$select"], fields: KNOWN_DIRECTORY_OBJECT_FIELDS, defaultFields: ["id"], keepODataType: true,
|
|
307
|
+
access: "D/A Directory.Read.All. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for directory-object reads. Personal Microsoft accounts are not supported.",
|
|
308
|
+
note: "No List operation page exists; access follows the sibling directoryobject-get contract and the directoryObject resource reference. Graph documents no collection filter contract here, so only $select is reviewed. Rows are polymorphic: the @odata.type discriminator rides along automatically and subtype properties need the subtype's named reads, never raw $select of unreviewed fields.",
|
|
309
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directoryobject-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/directoryobject?view=graph-rest-1.0"] },
|
|
310
|
+
{ id: "v1.0:GET:/directoryObjects/{directoryObject-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DIRECTORY_OBJECT_FIELDS, defaultFields: ["id", "deletedDateTime"], keepODataType: true,
|
|
311
|
+
access: "D/A Directory.Read.All. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for this read. Personal Microsoft accounts are not supported.",
|
|
312
|
+
note: "Single reads return the base-type properties plus the @odata.type discriminator; subtype detail needs the subtype's named reads. Only base properties are projected, so subtype secrets or credentials can never appear.",
|
|
313
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directoryobject-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/directoryobject?view=graph-rest-1.0"] },
|
|
314
|
+
{ id: "v1.0:GET:/directory/deletedItems/graph.user", kind: "collection", query: ["$select"], fields: KNOWN_DELETED_USER_FIELDS, defaultFields: ["id", "displayName", "deletedDateTime"], keepODataType: true,
|
|
315
|
+
access: "D/A User.Read.All. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for deleted-user reads. Personal Microsoft accounts are not supported.",
|
|
316
|
+
note: "Upstream requires the user cast: untyped GET /directory/deletedItems is not supported. Rows are polymorphic: the @odata.type discriminator rides along automatically. Deleted users are personal data and default rows stay minimal.",
|
|
317
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directory-deleteditems-list?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0"] },
|
|
318
|
+
{ id: "v1.0:GET:/directory/deletedItems/graph.group", kind: "collection", query: ["$select"], fields: KNOWN_DELETED_GROUP_FIELDS, defaultFields: ["id", "displayName", "deletedDateTime"], keepODataType: true,
|
|
319
|
+
access: "D/A Group.Read.All. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for deleted-group reads. Personal Microsoft accounts are not supported.",
|
|
320
|
+
note: "Upstream requires the group cast: untyped GET /directory/deletedItems is not supported. Soft-deleted security groups report securityEnabled false through a known upstream limitation; read groupTypes to name the real kind.",
|
|
321
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directory-deleteditems-list?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/group?view=graph-rest-1.0"] },
|
|
322
|
+
{ id: "v1.0:GET:/directory/deletedItems/graph.application", kind: "collection", query: ["$select"], fields: KNOWN_DELETED_APPLICATION_FIELDS, defaultFields: ["id", "appId", "displayName", "deletedDateTime"], keepODataType: true,
|
|
323
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for deleted-application reads. Personal Microsoft accounts are not supported.",
|
|
324
|
+
note: "Upstream requires the application cast: untyped GET /directory/deletedItems is not supported. appId (client ID) is distinct from the object id; credential collections are never projected and GET never returns secret values.",
|
|
325
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directory-deleteditems-list?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/application?view=graph-rest-1.0"] },
|
|
326
|
+
{ id: "v1.0:GET:/directory/deletedItems/graph.servicePrincipal", kind: "collection", query: ["$select"], fields: KNOWN_DELETED_SERVICE_PRINCIPAL_FIELDS, defaultFields: ["id", "appId", "displayName", "deletedDateTime"], keepODataType: true,
|
|
327
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for deleted-service-principal reads. Personal Microsoft accounts are not supported.",
|
|
328
|
+
note: "Upstream requires the servicePrincipal cast: untyped GET /directory/deletedItems is not supported. appId (client ID) is distinct from the object id; secret-bearing fields are never projected.",
|
|
329
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directory-deleteditems-list?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/serviceprincipal?view=graph-rest-1.0"] },
|
|
330
|
+
{ id: "v1.0:GET:/directory/deletedItems/graph.administrativeUnit", kind: "collection", query: ["$select"], fields: KNOWN_DELETED_ADMINISTRATIVE_UNIT_FIELDS, defaultFields: ["id", "displayName", "deletedDateTime"], keepODataType: true,
|
|
331
|
+
access: "D/A AdministrativeUnit.Read.All. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for deleted-administrative-unit reads. Personal Microsoft accounts are not supported.",
|
|
332
|
+
note: "Upstream requires the administrativeUnit cast: untyped GET /directory/deletedItems is not supported. Rows are polymorphic: the @odata.type discriminator rides along automatically.",
|
|
333
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directory-deleteditems-list?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/administrativeunit?view=graph-rest-1.0"] },
|
|
334
|
+
{ id: "v1.0:GET:/directory/deletedItems/{directoryObject-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DELETED_SHOW_FIELDS, keepODataType: true,
|
|
335
|
+
access: "D/A User.Read.All, Group.Read.All, Application.Read.All or AdministrativeUnit.Read.All matching the object's type. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for this read. Personal Microsoft accounts are not supported.",
|
|
336
|
+
note: "The untyped get can return any deletable type, so only the cross-type safe properties are reviewed here; per-type detail needs the typed deleted-item lists.",
|
|
337
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directory-deleteditems-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/directoryobject?view=graph-rest-1.0"] },
|
|
338
|
+
{ id: "v1.0:GET:/contacts", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_CONTACT_FIELDS, defaultFields: ["id", "displayName", "mail", "companyName"],
|
|
339
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All is the documented higher-privileged alternative). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
340
|
+
note: "Filtering passes through as plain $filter with $count=true and ConsistencyLevel eventual; $search and $orderby stay unreviewed. Contacts are personal data: default rows carry id, displayName, mail and companyName only, and identifying fields need an explicit $select. Only flat scalar properties are reviewed; $expand is never offered and the nested phones/addresses/error collections need their own projection review.",
|
|
341
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
342
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_CONTACT_FIELDS, defaultFields: ["id", "displayName", "mail", "companyName"],
|
|
343
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All is the documented higher-privileged alternative). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
344
|
+
note: "Single reads return the reviewed flat scalar set with minimal personal-data defaults; navigation objects are never expanded and subtype detail is not applicable. Only $select is reviewed.",
|
|
345
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
346
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/manager", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
347
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
348
|
+
note: "Single directoryObject: the manager user or contact. Rows carry the @odata.type discriminator plus minimal personal-data defaults; subtype detail needs the subtype's named reads. Only $select is reviewed.",
|
|
349
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-get-manager?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
350
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/directReports", kind: "collection", query: ["$select"], fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
351
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
352
|
+
note: "Graph documents $select only on directReports; $filter/$search/$top stay unreviewed. Rows are polymorphic users/contacts: the @odata.type discriminator rides along automatically and subtype properties need the subtype's named reads, never raw $select of unreviewed fields.",
|
|
353
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-directreports?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
354
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/directReports/graph.orgContact", kind: "collection", query: ["$select"], fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
355
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
356
|
+
note: "OData cast selects only contact direct reports; access follows the parent directReports contract and the orgContact resource reference.",
|
|
357
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-directreports?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
358
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/directReports/graph.user", kind: "collection", query: ["$select"], fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
359
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
360
|
+
note: "OData cast selects only user direct reports; access follows the parent directReports contract.",
|
|
361
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-directreports?view=graph-rest-1.0"] },
|
|
362
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/directReports/{directoryObject-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
363
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
364
|
+
note: "No operation-level documentation page; access follows the parent directReports contract. Single directoryObject with the @odata.type discriminator plus minimal personal-data defaults.",
|
|
365
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-directreports?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
366
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/directReports/{directoryObject-id}/graph.orgContact", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
367
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
368
|
+
note: "No operation-level documentation page; OData cast selects the contact subtype and access follows the parent directReports contract and the orgContact resource reference.",
|
|
369
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-directreports?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
370
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/directReports/{directoryObject-id}/graph.user", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
371
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
372
|
+
note: "No operation-level documentation page; OData cast selects the user subtype and access follows the parent directReports contract.",
|
|
373
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-directreports?view=graph-rest-1.0"] },
|
|
374
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/memberOf", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
375
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
376
|
+
note: "Filtering passes through as plain $filter with $count=true and ConsistencyLevel eventual; $search and $orderby stay unreviewed. Rows are groups and administrative units: the @odata.type discriminator rides along automatically and subtype properties need the subtype's named reads, never raw $select of unreviewed fields.",
|
|
377
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-memberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
378
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/memberOf/graph.group", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
379
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
380
|
+
note: "OData cast selects only group memberships; access follows the parent memberOf contract and the group resource reference.",
|
|
381
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-memberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/group?view=graph-rest-1.0"] },
|
|
382
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/memberOf/graph.administrativeUnit", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
383
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
384
|
+
note: "OData cast selects only administrative-unit memberships; access follows the parent memberOf contract and the administrativeUnit resource reference.",
|
|
385
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-memberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/administrativeunit?view=graph-rest-1.0"] },
|
|
386
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/memberOf/{directoryObject-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
387
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
388
|
+
note: "No operation-level documentation page; access follows the parent memberOf contract. Single directoryObject with the @odata.type discriminator plus minimal defaults.",
|
|
389
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-memberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
390
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/memberOf/{directoryObject-id}/graph.group", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
391
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
392
|
+
note: "No operation-level documentation page; OData cast selects the group subtype and access follows the parent memberOf contract and the group resource reference.",
|
|
393
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-memberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/group?view=graph-rest-1.0"] },
|
|
394
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/memberOf/{directoryObject-id}/graph.administrativeUnit", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
395
|
+
access: "D/A OrgContact.Read.All least-privileged (Directory.Read.All, Directory.ReadWrite.All and Group.Read.All are the documented higher-privileged alternatives). Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
396
|
+
note: "No operation-level documentation page; OData cast selects the administrativeUnit subtype and access follows the parent memberOf contract and the administrativeUnit resource reference.",
|
|
397
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-memberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/administrativeunit?view=graph-rest-1.0"] },
|
|
398
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/transitiveMemberOf", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
399
|
+
access: "D/A OrgContact.Read.All and Group.Read.All together least-privileged (Directory.Read.All is the documented higher-privileged alternative). Delegated callers pass both as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
400
|
+
note: "Filtering passes through as plain $filter with $count=true and ConsistencyLevel eventual; $search and $orderby stay unreviewed. Rows are groups and administrative units: the @odata.type discriminator rides along automatically and subtype properties need the subtype's named reads, never raw $select of unreviewed fields.",
|
|
401
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-transitivememberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
402
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/transitiveMemberOf/graph.group", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
403
|
+
access: "D/A OrgContact.Read.All and Group.Read.All together least-privileged (Directory.Read.All is the documented higher-privileged alternative). Delegated callers pass both as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
404
|
+
note: "OData cast selects only group memberships; access follows the parent transitiveMemberOf contract and the group resource reference.",
|
|
405
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-transitivememberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/group?view=graph-rest-1.0"] },
|
|
406
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/transitiveMemberOf/graph.administrativeUnit", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
407
|
+
access: "D/A OrgContact.Read.All and Group.Read.All together least-privileged (Directory.Read.All is the documented higher-privileged alternative). Delegated callers pass both as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
408
|
+
note: "OData cast selects only administrative-unit memberships; access follows the parent transitiveMemberOf contract and the administrativeUnit resource reference.",
|
|
409
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-transitivememberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/administrativeunit?view=graph-rest-1.0"] },
|
|
410
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/transitiveMemberOf/{directoryObject-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
411
|
+
access: "D/A OrgContact.Read.All and Group.Read.All together least-privileged (Directory.Read.All is the documented higher-privileged alternative). Delegated callers pass both as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
412
|
+
note: "No operation-level documentation page; access follows the parent transitiveMemberOf contract. Single directoryObject with the @odata.type discriminator plus minimal defaults.",
|
|
413
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-transitivememberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/orgcontact?view=graph-rest-1.0"] },
|
|
414
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/transitiveMemberOf/{directoryObject-id}/graph.group", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
415
|
+
access: "D/A OrgContact.Read.All and Group.Read.All together least-privileged (Directory.Read.All is the documented higher-privileged alternative). Delegated callers pass both as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
416
|
+
note: "No operation-level documentation page; OData cast selects the group subtype and access follows the parent transitiveMemberOf contract and the group resource reference.",
|
|
417
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-transitivememberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/group?view=graph-rest-1.0"] },
|
|
418
|
+
{ id: "v1.0:GET:/contacts/{orgContact-id}/transitiveMemberOf/{directoryObject-id}/graph.administrativeUnit", kind: "single", query: SINGLE_QUERY, fields: KNOWN_NAV_FIELDS, defaultFields: ["id", "displayName"], keepODataType: true,
|
|
419
|
+
access: "D/A OrgContact.Read.All and Group.Read.All together least-privileged (Directory.Read.All is the documented higher-privileged alternative). Delegated callers pass both as --scopes; delegated access additionally needs a supported Entra role (Directory Readers reads basic properties; Global Reader, Directory Writers, Intune Administrator or User Administrator also work). Personal Microsoft accounts are not supported.",
|
|
420
|
+
note: "No operation-level documentation page; OData cast selects the administrativeUnit subtype and access follows the parent transitiveMemberOf contract and the administrativeUnit resource reference.",
|
|
421
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/orgcontact-list-transitivememberof?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/administrativeunit?view=graph-rest-1.0"] },
|
|
422
|
+
{ id: "v1.0:GET:/groupLifecyclePolicies", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_LIFECYCLE_FIELDS,
|
|
423
|
+
access: "D/A Directory.Read.All. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for lifecycle-policy reads. Personal Microsoft accounts are not supported.",
|
|
424
|
+
note: "Filtering uses plain $filter with no $count or ConsistencyLevel contract; no P1/P2 prerequisite is stated for lifecycle-policy reads.",
|
|
425
|
+
sources: ["https://learn.microsoft.com/graph/api/grouplifecyclepolicy-list?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/grouplifecyclepolicy?view=graph-rest-1.0"] },
|
|
426
|
+
{ id: "v1.0:GET:/groupLifecyclePolicies/{groupLifecyclePolicy-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_LIFECYCLE_FIELDS,
|
|
427
|
+
access: "D/A Directory.Read.All. Delegated callers pass it as --scopes; no delegated role prerequisite is stated for lifecycle-policy reads. Personal Microsoft accounts are not supported.",
|
|
428
|
+
note: "No P1/P2 prerequisite is stated for lifecycle-policy reads.",
|
|
429
|
+
sources: ["https://learn.microsoft.com/graph/api/grouplifecyclepolicy-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/grouplifecyclepolicy?view=graph-rest-1.0"] },
|
|
430
|
+
{ id: "v1.0:GET:/groupSettingTemplates", kind: "collection", query: ["$select"], fields: KNOWN_TEMPLATE_FIELDS,
|
|
431
|
+
access: "D/A GroupSettings.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers or Global Reader are the least-privileged roles). Personal Microsoft accounts are not supported.",
|
|
432
|
+
note: "Graph documents $select only for template lists; $filter is not supported. No P1/P2 prerequisite is stated for setting-template reads.",
|
|
433
|
+
sources: ["https://learn.microsoft.com/graph/api/groupsettingtemplate-list?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/groupsettingtemplate?view=graph-rest-1.0"] },
|
|
434
|
+
{ id: "v1.0:GET:/groupSettingTemplates/{groupSettingTemplate-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_TEMPLATE_FIELDS,
|
|
435
|
+
access: "D/A GroupSettings.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers or Global Reader are the least-privileged roles). Personal Microsoft accounts are not supported.",
|
|
436
|
+
note: "No P1/P2 prerequisite is stated for setting-template reads.",
|
|
437
|
+
sources: ["https://learn.microsoft.com/graph/api/groupsettingtemplate-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/groupsettingtemplate?view=graph-rest-1.0"] },
|
|
438
|
+
{ id: "v1.0:GET:/directory/attributeSets", kind: "collection", query: ["$select", "$top", "$orderby"], fields: KNOWN_ATTRIBUTE_SET_FIELDS,
|
|
439
|
+
access: "D/A CustomSecAttributeDefinition.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a custom-security-attribute role (Attribute Assignment Reader, Attribute Definition Reader, Attribute Assignment Administrator or Attribute Definition Administrator); by default Global Administrator and other administrator roles have no custom-security-attribute access. Personal Microsoft accounts are not supported.",
|
|
440
|
+
note: "Graph documents $select, $top and $orderby only for attribute-set lists; $filter is not supported. No P1/P2 prerequisite is stated for attribute-set reads.",
|
|
441
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directory-list-attributesets?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/attributeset?view=graph-rest-1.0"] },
|
|
442
|
+
{ id: "v1.0:GET:/directory/attributeSets/{attributeSet-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_ATTRIBUTE_SET_FIELDS,
|
|
443
|
+
access: "D/A CustomSecAttributeDefinition.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a custom-security-attribute role (Attribute Assignment Reader, Attribute Definition Reader, Attribute Assignment Administrator or Attribute Definition Administrator); by default Global Administrator and other administrator roles have no custom-security-attribute access. Personal Microsoft accounts are not supported.",
|
|
444
|
+
note: "No P1/P2 prerequisite is stated for attribute-set reads.",
|
|
445
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/attributeset-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/attributeset?view=graph-rest-1.0"] },
|
|
446
|
+
{ id: "v1.0:GET:/directory/customSecurityAttributeDefinitions", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_CUSTOM_SECURITY_DEFINITION_FIELDS,
|
|
447
|
+
access: "D/A CustomSecAttributeDefinition.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a custom-security-attribute role (Attribute Definition Reader, Attribute Assignment Administrator or Attribute Definition Administrator); by default Global Administrator and other administrator roles have no custom-security-attribute access. Personal Microsoft accounts are not supported.",
|
|
448
|
+
note: "Filtering uses plain $filter (eq) with no $count or ConsistencyLevel contract; the allowedValues navigation property is not returned by default and needs its own list/show reads ($expand is not reviewed here). No P1/P2 prerequisite is stated for definition reads.",
|
|
449
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/directory-list-customsecurityattributedefinitions?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/customsecurityattributedefinition?view=graph-rest-1.0"] },
|
|
450
|
+
{ id: "v1.0:GET:/directory/customSecurityAttributeDefinitions/{customSecurityAttributeDefinition-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_CUSTOM_SECURITY_DEFINITION_FIELDS,
|
|
451
|
+
access: "D/A CustomSecAttributeDefinition.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a custom-security-attribute role (Attribute Assignment Reader, Attribute Definition Reader, Attribute Assignment Administrator or Attribute Definition Administrator); by default Global Administrator and other administrator roles have no custom-security-attribute access. Personal Microsoft accounts are not supported.",
|
|
452
|
+
note: "No P1/P2 prerequisite is stated for definition reads.",
|
|
453
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/customsecurityattributedefinition-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/customsecurityattributedefinition?view=graph-rest-1.0"] },
|
|
454
|
+
{ id: "v1.0:GET:/directory/customSecurityAttributeDefinitions/{customSecurityAttributeDefinition-id}/allowedValues", kind: "collection", query: ["$select"], fields: KNOWN_ALLOWED_VALUE_FIELDS,
|
|
455
|
+
access: "D/A CustomSecAttributeDefinition.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a custom-security-attribute role (Attribute Assignment Reader, Attribute Definition Reader, Attribute Assignment Administrator or Attribute Definition Administrator); by default Global Administrator and other administrator roles have no custom-security-attribute access. Personal Microsoft accounts are not supported.",
|
|
456
|
+
note: "Graph documents $select only for allowed-value lists; $filter is not supported. Definitions that allow free-form values carry no predefined values. No P1/P2 prerequisite is stated for allowed-value reads.",
|
|
457
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/customsecurityattributedefinition-list-allowedvalues?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/allowedvalue?view=graph-rest-1.0"] },
|
|
458
|
+
{ id: "v1.0:GET:/directory/customSecurityAttributeDefinitions/{customSecurityAttributeDefinition-id}/allowedValues/{allowedValue-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_ALLOWED_VALUE_FIELDS,
|
|
459
|
+
access: "D/A CustomSecAttributeDefinition.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Attribute Definition Reader or Attribute Definition Administrator; by default Global Administrator and other administrator roles have no custom-security-attribute access. Personal Microsoft accounts are not supported.",
|
|
460
|
+
note: "No P1/P2 prerequisite is stated for allowed-value reads.",
|
|
461
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/allowedvalue-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/allowedvalue?view=graph-rest-1.0"] },
|
|
462
|
+
{ id: "v1.0:GET:/contracts", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_CONTRACT_FIELDS,
|
|
463
|
+
access: "D/A Directory.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers is the least-privileged role); personal Microsoft accounts are not supported. Contracts exist in partner tenants only.",
|
|
464
|
+
note: "Filtering is documented for customerId, defaultDomainName and displayName; no P1/P2 prerequisite is stated for contract reads.",
|
|
465
|
+
sources: ["https://learn.microsoft.com/graph/api/contract-list?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/contract?view=graph-rest-1.0"] },
|
|
466
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminCustomers", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_DELEGATED_ADMIN_CUSTOMER_FIELDS,
|
|
467
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
468
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. Customer objects are created by the system when a relationship exists and deleted when none remain, so a non-partner tenant lists zero customers. No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
469
|
+
sources: ["https://learn.microsoft.com/graph/api/tenantrelationship-list-delegatedadmincustomers?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadmincustomer?view=graph-rest-1.0"] },
|
|
470
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminCustomers/{delegatedAdminCustomer-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DELEGATED_ADMIN_CUSTOMER_FIELDS,
|
|
471
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
472
|
+
note: "No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
473
|
+
sources: ["https://learn.microsoft.com/graph/api/delegatedadmincustomer-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadmincustomer?view=graph-rest-1.0"] },
|
|
474
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminRelationships", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_DELEGATED_ADMIN_RELATIONSHIP_FIELDS,
|
|
475
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
476
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. Rows may carry the resellerDelegatedAdminRelationship subtype; its unreviewed extras are never projected. No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
477
|
+
sources: ["https://learn.microsoft.com/graph/api/tenantrelationship-list-delegatedadminrelationships?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadminrelationship?view=graph-rest-1.0"] },
|
|
478
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DELEGATED_ADMIN_RELATIONSHIP_FIELDS,
|
|
479
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
480
|
+
note: "Single reads may return the resellerDelegatedAdminRelationship subtype; its unreviewed extras are never projected. No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
481
|
+
sources: ["https://learn.microsoft.com/graph/api/delegatedadminrelationship-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadminrelationship?view=graph-rest-1.0"] },
|
|
482
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/accessAssignments", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_DELEGATED_ADMIN_ACCESS_ASSIGNMENT_FIELDS,
|
|
483
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
484
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract; $top supports up to 300 objects. No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
485
|
+
sources: ["https://learn.microsoft.com/graph/api/delegatedadminrelationship-list-accessassignments?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadminaccessassignment?view=graph-rest-1.0"] },
|
|
486
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/accessAssignments/{delegatedAdminAccessAssignment-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DELEGATED_ADMIN_ACCESS_ASSIGNMENT_FIELDS,
|
|
487
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
488
|
+
note: "No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
489
|
+
sources: ["https://learn.microsoft.com/graph/api/delegatedadminaccessassignment-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadminaccessassignment?view=graph-rest-1.0"] },
|
|
490
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/operations", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_DELEGATED_ADMIN_OPERATION_FIELDS,
|
|
491
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
492
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract; $top supports up to 300 objects. The data payload is a JSON-encoded string. No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
493
|
+
sources: ["https://learn.microsoft.com/graph/api/delegatedadminrelationship-list-operations?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadminrelationshipoperation?view=graph-rest-1.0"] },
|
|
494
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/operations/{delegatedAdminRelationshipOperation-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DELEGATED_ADMIN_OPERATION_FIELDS,
|
|
495
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
496
|
+
note: "The data payload is a JSON-encoded string. No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
497
|
+
sources: ["https://learn.microsoft.com/graph/api/delegatedadminrelationshipoperation-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadminrelationshipoperation?view=graph-rest-1.0"] },
|
|
498
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/requests", kind: "collection", query: ["$select", "$filter", "$top"], fields: KNOWN_DELEGATED_ADMIN_REQUEST_FIELDS,
|
|
499
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
500
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
501
|
+
sources: ["https://learn.microsoft.com/graph/api/delegatedadminrelationship-list-requests?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadminrelationshiprequest?view=graph-rest-1.0"] },
|
|
502
|
+
{ id: "v1.0:GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/requests/{delegatedAdminRelationshipRequest-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DELEGATED_ADMIN_REQUEST_FIELDS,
|
|
503
|
+
access: "D/A DelegatedAdminRelationship.Read.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. Delegated-admin reads run in the partner tenant.",
|
|
504
|
+
note: "No P1/P2 prerequisite is stated for delegated-admin reads.",
|
|
505
|
+
sources: ["https://learn.microsoft.com/graph/api/delegatedadminrelationshiprequest-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/delegatedadminrelationshiprequest?view=graph-rest-1.0"] },
|
|
506
|
+
{ id: "v1.0:GET:/tenantRelationships/multiTenantOrganization", kind: "single", query: SINGLE_QUERY, fields: KNOWN_MTO_FIELDS,
|
|
507
|
+
access: "D/A MultiTenantOrganization.Read.All. Delegated callers pass it as --scopes (the lower-privileged delegated MultiTenantOrganization.ReadBasic.All is also accepted); delegated access additionally needs Security Reader or Global Reader, the least-privileged supported Entra roles; personal Microsoft accounts are not supported. Multi-tenant-organization reads run in the commercial Global service.",
|
|
508
|
+
note: "At most one multitenant organization exists per tenant; a tenant outside any multitenant organization reads state inactive with null properties. Multi-tenant-organization participation needs Entra ID P1.",
|
|
509
|
+
sources: ["https://learn.microsoft.com/graph/api/multitenantorganization-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/multitenantorganization?view=graph-rest-1.0"] },
|
|
510
|
+
{ id: "v1.0:GET:/tenantRelationships/multiTenantOrganization/joinRequest", kind: "single", query: SINGLE_QUERY, fields: KNOWN_MTO_JOIN_REQUEST_FIELDS,
|
|
511
|
+
access: "D/A MultiTenantOrganization.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Security Reader or Global Reader, the least-privileged supported Entra roles; personal Microsoft accounts are not supported. Multi-tenant-organization reads run in the commercial Global service.",
|
|
512
|
+
note: "Join acceptance is a write and stays out of raw reads. Multi-tenant-organization participation needs Entra ID P1.",
|
|
513
|
+
sources: ["https://learn.microsoft.com/graph/api/multitenantorganizationjoinrequestrecord-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/multitenantorganizationjoinrequestrecord?view=graph-rest-1.0"] },
|
|
514
|
+
{ id: "v1.0:GET:/tenantRelationships/multiTenantOrganization/tenants", kind: "collection", query: ["$select", "$filter"], fields: KNOWN_MTO_TENANT_FIELDS,
|
|
515
|
+
access: "D/A MultiTenantOrganization.Read.All. Delegated callers pass it as --scopes (the lower-privileged delegated MultiTenantOrganization.ReadBasic.All returns displayName and tenantId of active tenants only); delegated access additionally needs Security Reader or Global Reader, the least-privileged supported Entra roles; personal Microsoft accounts are not supported. Multi-tenant-organization reads run in the commercial Global service.",
|
|
516
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. Multi-tenant-organization participation needs Entra ID P1.",
|
|
517
|
+
sources: ["https://learn.microsoft.com/graph/api/multitenantorganization-list-tenants?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/multitenantorganizationmember?view=graph-rest-1.0"] },
|
|
518
|
+
{ id: "v1.0:GET:/tenantRelationships/findTenantInformationByDomainName(domainName='{domainName}')", kind: "single", query: [], fields: KNOWN_TENANT_INFORMATION_FIELDS,
|
|
519
|
+
access: "D/A CrossTenantInformation.ReadBasic.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. No Entra role is required and no P1/P2 prerequisite is stated for this read.",
|
|
520
|
+
note: "Tenant lookup by domain name: the raw path carries the domain as an OData-quoted function argument and the shared session re-validates, re-quotes and encodes it; only this allowlisted shape binds. The operation documents no query parameters, so the full reviewed tenantInformation set is always returned.",
|
|
521
|
+
sources: ["https://learn.microsoft.com/graph/api/tenantrelationship-findtenantinformationbydomainname?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/tenantinformation?view=graph-rest-1.0"] },
|
|
522
|
+
{ id: "v1.0:GET:/tenantRelationships/findTenantInformationByTenantId(tenantId='{tenantId}')", kind: "single", query: [], fields: KNOWN_TENANT_INFORMATION_FIELDS,
|
|
523
|
+
access: "D/A CrossTenantInformation.ReadBasic.All. Delegated callers pass it as --scopes; application callers need it admin-consented; personal Microsoft accounts are not supported. No Entra role is required and no P1/P2 prerequisite is stated for this read.",
|
|
524
|
+
note: "Tenant lookup by tenant ID: the raw path carries the GUID as an OData-quoted function argument and the shared session re-validates, re-quotes and encodes it; only this allowlisted shape binds. The operation documents no query parameters, so the full reviewed tenantInformation set is always returned.",
|
|
525
|
+
sources: ["https://learn.microsoft.com/graph/api/tenantrelationship-findtenantinformationbytenantid?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/tenantinformation?view=graph-rest-1.0"] },
|
|
526
|
+
{ id: "v1.0:GET:/contracts/{contract-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_CONTRACT_FIELDS,
|
|
527
|
+
access: "D/A Directory.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (Directory Readers is the least-privileged role); personal Microsoft accounts are not supported. Contracts exist in partner tenants only.",
|
|
528
|
+
note: "No P1/P2 prerequisite is stated for contract reads.",
|
|
529
|
+
sources: ["https://learn.microsoft.com/graph/api/contract-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/contract?view=graph-rest-1.0"] },
|
|
530
|
+
{ id: "v1.0:GET:/identity/identityProviders", kind: "collection", query: COLLECTION_QUERY, fields: PROVIDER_FIELDS,
|
|
531
|
+
access: "D/A IdentityProvider.Read.All. Delegated callers pass it as --scopes; delegated reads additionally need a directory role that can read federation configuration (Global Reader is the least-privileged read-only directory role). Personal Microsoft accounts are not supported; no per-operation licence prerequisite is stated.",
|
|
532
|
+
note: "Workforce context only; external-customer user-flow provider bindings are separate scheduled operations. clientSecret and certificateData are never projected: the former is write-only and the latter is key material.",
|
|
533
|
+
sources: ["https://learn.microsoft.com/graph/api/identitycontainer-list-identityproviders?view=graph-rest-1.0"] },
|
|
534
|
+
{ id: "v1.0:GET:/identity/identityProviders/{identityProviderBase-id}", kind: "single", query: SINGLE_QUERY, fields: PROVIDER_FIELDS,
|
|
535
|
+
access: "D/A IdentityProvider.Read.All. Delegated callers pass it as --scopes; delegated reads additionally need a directory role that can read federation configuration (Global Reader is the least-privileged read-only directory role). Personal Microsoft accounts are not supported; no per-operation licence prerequisite is stated.",
|
|
536
|
+
note: "Workforce context only. clientSecret and certificateData are never projected: the former is write-only and the latter is key material.",
|
|
537
|
+
sources: ["https://learn.microsoft.com/graph/api/identityproviderbase-get?view=graph-rest-1.0"] },
|
|
538
|
+
{ id: "v1.0:GET:/directory/federationConfigurations", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_FEDERATION_FIELDS,
|
|
539
|
+
access: "D/A Domain.Read.All least-privileged (Domain.ReadWrite.All is the documented higher-privileged alternative). Delegated callers pass one as --scopes; delegated access additionally needs External Identity Provider Administrator, the least-privileged supported Entra role for this operation; personal Microsoft accounts are not supported. No per-operation licence prerequisite is stated for these reads.",
|
|
540
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. The domains navigation property needs its own review ($expand is not reviewed here). signingCertificate carries the public token-signing key only and stays truncated at the output boundary unless --full is passed.",
|
|
541
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/samlorwsfedexternaldomainfederation-list?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/samlorwsfedexternaldomainfederation?view=graph-rest-1.0"] },
|
|
542
|
+
{ id: "v1.0:GET:/directory/federationConfigurations/{identityProviderBase-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_FEDERATION_FIELDS,
|
|
543
|
+
access: "D/A Domain.Read.All least-privileged (Domain.ReadWrite.All is the documented higher-privileged alternative). Delegated callers pass one as --scopes; delegated access additionally needs External Identity Provider Administrator, the least-privileged supported Entra role for this operation; personal Microsoft accounts are not supported. No per-operation licence prerequisite is stated for this read.",
|
|
544
|
+
note: "The domains navigation property needs its own review ($expand is not reviewed here). signingCertificate carries the public token-signing key only; no private key material exists on this resource.",
|
|
545
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/samlorwsfedexternaldomainfederation-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/samlorwsfedexternaldomainfederation?view=graph-rest-1.0"] },
|
|
546
|
+
{ id: "v1.0:GET:/dataPolicyOperations", kind: "collection", query: ["$select"], fields: KNOWN_DATA_POLICY_FIELDS,
|
|
547
|
+
access: "D/A User.Export.All plus User.Read.All. Delegated callers pass both as --scopes; delegated access additionally needs Company Administrator, the privileged role documented for export reads; personal Microsoft accounts are not supported. No P1/P2 prerequisite is stated for these reads.",
|
|
548
|
+
note: "No list operation documentation page exists; the list shares the single-get permission contract and resource shape. Graph documents $select only here, so $filter is not reviewed. storageLocation always renders as the redaction marker: export blob URLs and signed links never reach output. Workforce context only; export submission belongs to no read slice.",
|
|
549
|
+
sources: ["https://learn.microsoft.com/graph/api/datapolicyoperation-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/datapolicyoperation?view=graph-rest-1.0"] },
|
|
550
|
+
{ id: "v1.0:GET:/dataPolicyOperations/{dataPolicyOperation-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DATA_POLICY_FIELDS,
|
|
551
|
+
access: "D/A User.Export.All plus User.Read.All. Delegated callers pass both as --scopes; delegated access additionally needs Company Administrator, the privileged role documented for export reads; personal Microsoft accounts are not supported. No P1/P2 prerequisite is stated for this read.",
|
|
552
|
+
note: "storageLocation always renders as the redaction marker: export blob URLs and signed links never reach output. Workforce context only; export submission belongs to no read slice.",
|
|
553
|
+
sources: ["https://learn.microsoft.com/graph/api/datapolicyoperation-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/datapolicyoperation?view=graph-rest-1.0"] },
|
|
554
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_DEFINITION_FIELDS,
|
|
555
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
556
|
+
note: "Definitions are review schedules (a series), never their occurrences; access reviews need P2 or ID Governance depending on capability.",
|
|
557
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewset-list-definitions?view=graph-rest-1.0"] },
|
|
558
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DEFINITION_FIELDS,
|
|
559
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
560
|
+
note: "A definition never carries its instances; access reviews need P2 or ID Governance depending on capability.",
|
|
561
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewscheduledefinition-get?view=graph-rest-1.0"] },
|
|
562
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_INSTANCE_FIELDS,
|
|
563
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
564
|
+
note: "Instances are occurrences of one definition schedule, never schedules themselves; access reviews need P2 or ID Governance depending on capability.",
|
|
565
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewscheduledefinition-list-instances?view=graph-rest-1.0"] },
|
|
566
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_INSTANCE_FIELDS,
|
|
567
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
568
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewinstance-get?view=graph-rest-1.0"] },
|
|
569
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/decisions", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_DECISION_FIELDS,
|
|
570
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
571
|
+
note: "Decisions are read-only here: listing never approves, denies or applies anything; access reviews need P2 or ID Governance depending on capability.",
|
|
572
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewinstance-list-decisions?view=graph-rest-1.0"] },
|
|
573
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/decisions/{accessReviewInstanceDecisionItem-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DECISION_FIELDS,
|
|
574
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
575
|
+
note: "Showing a decision never approves, denies or applies anything; access reviews need P2 or ID Governance depending on capability.",
|
|
576
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewinstancedecisionitem-get?view=graph-rest-1.0"] },
|
|
577
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/contactedReviewers", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_CONTACTED_REVIEWER_FIELDS,
|
|
578
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
579
|
+
note: "Contacted reviewers are reviewer identities recorded on one instance, whether or not notified; access reviews need P2 or ID Governance depending on capability.",
|
|
580
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewinstance-list-contactedreviewers?view=graph-rest-1.0"] },
|
|
581
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/contactedReviewers/{accessReviewReviewer-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_CONTACTED_REVIEWER_FIELDS,
|
|
582
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
583
|
+
note: "The single shares its list's reviewed resource contract: accessReviewReviewer carries no relationships; access reviews need P2 or ID Governance depending on capability.",
|
|
584
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewinstance-list-contactedreviewers?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/accessreviewreviewer?view=graph-rest-1.0"] },
|
|
585
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/stages", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_STAGE_FIELDS,
|
|
586
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
587
|
+
note: "Stages are sequential phases of one instance, present only when stageSettings is defined; filters document eq only; access reviews need P2 or ID Governance depending on capability.",
|
|
588
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewinstance-list-stages?view=graph-rest-1.0"] },
|
|
589
|
+
{ id: "v1.0:GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/stages/{accessReviewStage-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_STAGE_FIELDS,
|
|
590
|
+
access: "D/A AccessReview.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role (group/app reviews: review creator, Global Reader, Security Reader, User Administrator, Identity Governance Administrator or Security Administrator; Entra-role reviews: Security Reader, Identity Governance Administrator, Privileged Role Administrator or Security Administrator); personal Microsoft accounts are not supported.",
|
|
591
|
+
note: "durationInDays is not a stage property (it folds into endDateTime); per-stage decisions belong to a later slice; access reviews need P2 or ID Governance depending on capability.",
|
|
592
|
+
sources: ["https://learn.microsoft.com/graph/api/accessreviewstage-get?view=graph-rest-1.0"] },
|
|
593
|
+
{ id: "v1.0:GET:/identityGovernance/entitlementManagement/catalogs", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_CATALOG_FIELDS,
|
|
594
|
+
access: "D/A EntitlementManagement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role with catalog visibility (Global Reader and Identity Governance Administrator are among the supported roles); personal Microsoft accounts are not supported.",
|
|
595
|
+
note: "Catalogs are package containers: a catalog never carries its access packages; filtering passes through as plain $filter with no $count or ConsistencyLevel contract. Entitlement management needs P2 or ID Governance depending on capability.",
|
|
596
|
+
sources: ["https://learn.microsoft.com/graph/api/entitlementmanagement-list-catalogs?view=graph-rest-1.0"] },
|
|
597
|
+
{ id: "v1.0:GET:/identityGovernance/entitlementManagement/catalogs/{accessPackageCatalog-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_CATALOG_FIELDS,
|
|
598
|
+
access: "D/A EntitlementManagement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role with catalog visibility (Global Reader and Identity Governance Administrator are among the supported roles); personal Microsoft accounts are not supported.",
|
|
599
|
+
note: "Only scalar catalog properties are reviewed; accessPackages, resources, resourceScopes, resourceRoles and customWorkflowExtensions are navigation properties needing $expand and stay out. Entitlement management needs P2 or ID Governance depending on capability.",
|
|
600
|
+
sources: ["https://learn.microsoft.com/graph/api/accesspackagecatalog-get?view=graph-rest-1.0"] },
|
|
601
|
+
{ id: "v1.0:GET:/identityGovernance/entitlementManagement/accessPackages", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_ACCESS_PACKAGE_FIELDS,
|
|
602
|
+
access: "D/A EntitlementManagement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role with catalog visibility (Global Reader and Identity Governance Administrator are among the supported roles); personal Microsoft accounts are not supported.",
|
|
603
|
+
note: "Access packages are the assignable bundles; assignment and request detail lives on the assignment reads, while approvals and subjects carry personal data and belong to a later part. Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. Entitlement management needs P2 or ID Governance depending on capability.",
|
|
604
|
+
sources: ["https://learn.microsoft.com/graph/api/entitlementmanagement-list-accesspackages?view=graph-rest-1.0"] },
|
|
605
|
+
{ id: "v1.0:GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_ACCESS_PACKAGE_FIELDS,
|
|
606
|
+
access: "D/A EntitlementManagement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role with catalog visibility (Global Reader and Identity Governance Administrator are among the supported roles); personal Microsoft accounts are not supported.",
|
|
607
|
+
note: "Only scalar package properties are reviewed; the catalog link and incompatible sets are navigation properties needing $expand and stay out. Entitlement management needs P2 or ID Governance depending on capability.",
|
|
608
|
+
sources: ["https://learn.microsoft.com/graph/api/accesspackage-get?view=graph-rest-1.0"] },
|
|
609
|
+
{ id: "v1.0:GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/assignmentPolicies", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_ASSIGNMENT_POLICY_FIELDS,
|
|
610
|
+
access: "D/A EntitlementManagement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role with catalog visibility (Global Reader and Identity Governance Administrator are among the supported roles); personal Microsoft accounts are not supported.",
|
|
611
|
+
note: "No operation-level documentation page; access follows the top-level assignment-policy list contract and the accessPackageAssignmentPolicy resource reference. Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. Questions and custom-extension stages are navigation properties and stay out. Entitlement management needs P2 or ID Governance depending on capability.",
|
|
612
|
+
sources: ["https://learn.microsoft.com/graph/api/entitlementmanagement-list-assignmentpolicies?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/accesspackageassignmentpolicy?view=graph-rest-1.0"] },
|
|
613
|
+
{ id: "v1.0:GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/assignmentPolicies/{accessPackageAssignmentPolicy-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_ASSIGNMENT_POLICY_FIELDS,
|
|
614
|
+
access: "D/A EntitlementManagement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role with catalog visibility (Global Reader and Identity Governance Administrator are among the supported roles); personal Microsoft accounts are not supported.",
|
|
615
|
+
note: "No operation-level documentation page; access follows the top-level assignment-policy list contract and the accessPackageAssignmentPolicy resource reference. Entitlement management needs P2 or ID Governance depending on capability.",
|
|
616
|
+
sources: ["https://learn.microsoft.com/graph/api/entitlementmanagement-list-assignmentpolicies?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/accesspackageassignmentpolicy?view=graph-rest-1.0"] },
|
|
617
|
+
{ id: "v1.0:GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/resourceRoleScopes", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_RESOURCE_ROLE_SCOPE_FIELDS,
|
|
618
|
+
access: "D/A EntitlementManagement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role with catalog visibility (Global Reader and Identity Governance Administrator are among the supported roles); personal Microsoft accounts are not supported.",
|
|
619
|
+
note: "No operation-level documentation page; access follows the parent access-package contract and the accessPackageResourceRoleScope resource reference. Only the pairing identity is reviewed; the role and scope links need $expand and stay out. Filtering passes through as plain $filter with no $count or ConsistencyLevel contract. Entitlement management needs P2 or ID Governance depending on capability.",
|
|
620
|
+
sources: ["https://learn.microsoft.com/graph/api/accesspackage-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/accesspackageresourcerolescope?view=graph-rest-1.0"] },
|
|
621
|
+
{ id: "v1.0:GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/resourceRoleScopes/{accessPackageResourceRoleScope-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_RESOURCE_ROLE_SCOPE_FIELDS,
|
|
622
|
+
access: "D/A EntitlementManagement.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs a supported Entra role with catalog visibility (Global Reader and Identity Governance Administrator are among the supported roles); personal Microsoft accounts are not supported.",
|
|
623
|
+
note: "No operation-level documentation page; access follows the parent access-package contract and the accessPackageResourceRoleScope resource reference. Entitlement management needs P2 or ID Governance depending on capability.",
|
|
624
|
+
sources: ["https://learn.microsoft.com/graph/api/accesspackage-get?view=graph-rest-1.0", "https://learn.microsoft.com/en-us/graph/api/resources/accesspackageresourcerolescope?view=graph-rest-1.0"] },
|
|
625
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_WORKFLOW_FIELDS,
|
|
626
|
+
access: "D/A LifecycleWorkflows-Workflow.ReadBasic.All (LifecycleWorkflows-Workflow.Read.All or LifecycleWorkflows.Read.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
627
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract ($search/$orderby/$expand stay unreviewed). Only scalar workflow properties are reviewed; tasks, runs, processing results, versions, scopes and createdBy/lastModifiedBy links stay out. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
628
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-lifecycleworkflowscontainer-list-workflows?view=graph-rest-1.0"] },
|
|
629
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_WORKFLOW_FIELDS,
|
|
630
|
+
access: "D/A LifecycleWorkflows-Workflow.ReadBasic.All (LifecycleWorkflows-Workflow.Read.All or LifecycleWorkflows.Read.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
631
|
+
note: "Tasks ride expanded by default on the wire and are dropped in local projection; createdBy, lastModifiedBy and previewScope need $expand and stay out. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
632
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-workflow-get?view=graph-rest-1.0"] },
|
|
633
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflowTemplates", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_WORKFLOW_TEMPLATE_FIELDS,
|
|
634
|
+
access: "D/A LifecycleWorkflows.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
635
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract ($orderby stays unreviewed). Only scalar template properties are reviewed; template tasks belong to a later slice. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
636
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-lifecycleworkflowscontainer-list-workflowtemplates?view=graph-rest-1.0"] },
|
|
637
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflowTemplates/{workflowTemplate-id}", kind: "single", query: [], fields: KNOWN_WORKFLOW_TEMPLATE_FIELDS,
|
|
638
|
+
access: "D/A LifecycleWorkflows.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
639
|
+
note: "Graph documents no query parameters on the template get, so only whole rows are reviewed here; template tasks belong to a later slice. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
640
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-workflowtemplate-get?view=graph-rest-1.0"] },
|
|
641
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/taskDefinitions", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_TASK_DEFINITION_FIELDS,
|
|
642
|
+
access: "D/A LifecycleWorkflows.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
643
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract ($orderby stays unreviewed). Task definitions carry no relationships. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
644
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-lifecycleworkflowscontainer-list-taskdefinitions?view=graph-rest-1.0"] },
|
|
645
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/taskDefinitions/{taskDefinition-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_TASK_DEFINITION_FIELDS,
|
|
646
|
+
access: "D/A LifecycleWorkflows.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
647
|
+
note: "Only scalar definition properties are reviewed. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
648
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-taskdefinition-get?view=graph-rest-1.0"] },
|
|
649
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/settings", kind: "single", query: SINGLE_QUERY, fields: KNOWN_LIFECYCLE_SETTINGS_FIELDS,
|
|
650
|
+
access: "D/A LifecycleWorkflows.Read.All. Delegated callers pass it as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
651
|
+
note: "The tenant settings singleton carries no relationships; the update action belongs to no read slice. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
652
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-lifecyclemanagementsettings-get?view=graph-rest-1.0"] },
|
|
653
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/runs", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_RUN_FIELDS,
|
|
654
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
655
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract ($search/$orderby/$expand stay unreviewed). Only scalar run properties are reviewed; user, subject and task processing results need their own sub-reads. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
656
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-workflow-list-runs?view=graph-rest-1.0"] },
|
|
657
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/runs/{run-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_RUN_FIELDS,
|
|
658
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
659
|
+
note: "Only scalar run properties are reviewed; processing-result relationships need their own sub-reads. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
660
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-run-get?view=graph-rest-1.0"] },
|
|
661
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/userProcessingResults", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_USER_PROCESSING_FIELDS,
|
|
662
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
663
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract ($search/$orderby/$expand stay unreviewed). User processing results are personal data: defaults carry status and counts only and the subject link needs $expand and stays out. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
664
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-workflow-list-userprocessingresults?view=graph-rest-1.0"] },
|
|
665
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/userProcessingResults/{userProcessingResult-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_USER_PROCESSING_FIELDS,
|
|
666
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
667
|
+
note: "The operation page shows the run-level get; the workflow-level get shares its contract. User processing results are personal data: defaults carry status and counts only and the subject link stays out. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
668
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-userprocessingresult-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/identitygovernance-userprocessingresult?view=graph-rest-1.0"] },
|
|
669
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/subjectProcessingResults", kind: "collection", query: ["$filter"], fields: KNOWN_SUBJECT_PROCESSING_FIELDS,
|
|
670
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
671
|
+
note: "No workflow-level operation page exists; access follows the run-level subject-list contract and the subjectProcessingResult resource reference. Graph documents $filter but not $select here, so only $filter is reviewed and rows arrive whole. Subject processing results are personal data: defaults carry subject type, status and counts only and the subject navigation stays out. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
672
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-run-list-subjectprocessingresults?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/identitygovernance-subjectprocessingresult?view=graph-rest-1.0"] },
|
|
673
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/subjectProcessingResults/{subjectProcessingResult-id}", kind: "single", query: [], fields: KNOWN_SUBJECT_PROCESSING_FIELDS,
|
|
674
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
675
|
+
note: "No workflow-level operation page exists; access follows the run-level subject-get contract and the subjectProcessingResult resource reference. The get documents $expand only, so whole rows are reviewed here and the subject navigation stays out. Subject processing results are personal data: defaults carry subject type, status and counts only. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
676
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-subjectprocessingresult-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/identitygovernance-subjectprocessingresult?view=graph-rest-1.0"] },
|
|
677
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/taskReports", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_TASK_REPORT_FIELDS,
|
|
678
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
679
|
+
note: "Filtering passes through as plain $filter with no $count or ConsistencyLevel contract ($orderby/$expand stay unreviewed). Only scalar report properties are reviewed; the task, taskDefinition and taskProcessingResults navigations need their own sub-reads. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
680
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-workflow-list-taskreports?view=graph-rest-1.0"] },
|
|
681
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/taskReports/{taskReport-id}", kind: "single", query: [], fields: KNOWN_TASK_REPORT_FIELDS,
|
|
682
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
683
|
+
note: "No operation-level get page exists; access follows the taskReports list contract and the taskReport resource reference. No query parameters are reviewed here, so whole rows arrive and are projected locally; the task, taskDefinition and taskProcessingResults navigations stay out. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
684
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-workflow-list-taskreports?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/identitygovernance-taskreport?view=graph-rest-1.0"] },
|
|
685
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/taskReports/{taskReport-id}/task", kind: "single", query: [], fields: KNOWN_TASK_FIELDS,
|
|
686
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
687
|
+
note: "No taskReport-nested operation page exists; access follows the taskReports list contract with the task-get contract (which documents LifecycleWorkflows-Workflow.Read.All for its own workflow-tasks route) and the task resource reference. No query parameters are reviewed here, so whole rows arrive and are projected locally; task arguments ride along as reviewed fields while taskProcessingResults stay out. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
688
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-workflow-list-taskreports?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/identitygovernance-task-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/identitygovernance-task?view=graph-rest-1.0"] },
|
|
689
|
+
{ id: "v1.0:GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/taskReports/{taskReport-id}/taskDefinition", kind: "single", query: [], fields: KNOWN_TASK_DEFINITION_FIELDS,
|
|
690
|
+
access: "D/A LifecycleWorkflows-Reports.Read.All (LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All for richer detail). Delegated callers pass one as --scopes; delegated access additionally needs Global Reader or Lifecycle Workflows Administrator; personal Microsoft accounts are not supported.",
|
|
691
|
+
note: "No taskReport-nested operation page exists; access follows the taskReports list contract with the top-level taskdefinition-get contract (which documents LifecycleWorkflows.Read.All for its own route) and the taskDefinition resource reference. No query parameters are reviewed here, so whole rows arrive and are projected locally. Lifecycle workflows need Microsoft Entra ID Governance or Microsoft Entra Suite.",
|
|
692
|
+
sources: ["https://learn.microsoft.com/graph/api/identitygovernance-workflow-list-taskreports?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/identitygovernance-taskdefinition-get?view=graph-rest-1.0"] },
|
|
693
|
+
];
|
|
694
|
+
function splitPath(path) {
|
|
695
|
+
return path.split("/").filter(segment => segment.length > 0);
|
|
696
|
+
}
|
|
697
|
+
// Structural match of a server-relative path against a reviewed template:
|
|
698
|
+
// literals compare case-insensitively like Graph routing; whole-segment
|
|
699
|
+
// placeholders capture one non-empty segment each for the session to bind and
|
|
700
|
+
// validate. Returns the bindings, or null when the route is not this one.
|
|
701
|
+
function matchTemplate(template, pathname) {
|
|
702
|
+
const expected = splitPath(template);
|
|
703
|
+
const actual = splitPath(pathname);
|
|
704
|
+
if (expected.length !== actual.length)
|
|
705
|
+
return null;
|
|
706
|
+
const params = Object.create(null);
|
|
707
|
+
for (let i = 0; i < expected.length; i++) {
|
|
708
|
+
const slot = expected[i];
|
|
709
|
+
const segment = actual[i];
|
|
710
|
+
const name = /^\{([^{}]+)\}$/.exec(slot)?.[1];
|
|
711
|
+
if (name) {
|
|
712
|
+
if (!segment.length || /[()]/.test(segment))
|
|
713
|
+
return null;
|
|
714
|
+
encodeGraphPathSegment(segment);
|
|
715
|
+
params[name] = segment;
|
|
716
|
+
}
|
|
717
|
+
else if (/[{}]/.test(slot)) {
|
|
718
|
+
const bound = matchFunctionArgument(template, slot, segment);
|
|
719
|
+
if (!bound)
|
|
720
|
+
return null;
|
|
721
|
+
Object.assign(params, bound);
|
|
722
|
+
}
|
|
723
|
+
else if (slot.toLowerCase() !== segment.toLowerCase())
|
|
724
|
+
return null;
|
|
725
|
+
}
|
|
726
|
+
return params;
|
|
727
|
+
}
|
|
728
|
+
// Structural match of one allowlisted function-argument segment from a raw
|
|
729
|
+
// path: the template slot must be the exact allowlisted shape and the
|
|
730
|
+
// actual segment must carry the value as one OData-quoted literal (single
|
|
731
|
+
// quotes doubled). The unquoted value is validated here and bound for the
|
|
732
|
+
// session, which re-validates, re-quotes and encodes it canonically before
|
|
733
|
+
// credentials. Anything else is not this route.
|
|
734
|
+
function matchFunctionArgument(template, slot, segment) {
|
|
735
|
+
const binding = functionBindingFor(template);
|
|
736
|
+
if (!binding || slot !== `${binding.functionName}(${binding.param}='{${binding.placeholder}}')`)
|
|
737
|
+
return null;
|
|
738
|
+
const head = `${binding.functionName}(${binding.param}=`;
|
|
739
|
+
if (!segment.toLowerCase().startsWith(head.toLowerCase()) || !segment.endsWith(")"))
|
|
740
|
+
return null;
|
|
741
|
+
const literal = /^'((?:[^']|'')*)'$/.exec(segment.slice(head.length, -1))?.[1];
|
|
742
|
+
if (literal === undefined)
|
|
743
|
+
return null;
|
|
744
|
+
const value = literal.replaceAll("''", "'");
|
|
745
|
+
binding.validate(value);
|
|
746
|
+
return { [binding.placeholder]: value };
|
|
747
|
+
}
|
|
748
|
+
export function matchReviewed(pathname) {
|
|
749
|
+
for (const route of REVIEWED_ROUTES) {
|
|
750
|
+
const params = matchTemplate(route.id.slice("v1.0:GET:".length), pathname);
|
|
751
|
+
if (params)
|
|
752
|
+
return { route, params };
|
|
753
|
+
}
|
|
754
|
+
return null;
|
|
755
|
+
}
|
|
756
|
+
function parseQuery(raw) {
|
|
757
|
+
if (!raw)
|
|
758
|
+
return {};
|
|
759
|
+
const text = raw.startsWith("?") ? raw.slice(1) : raw;
|
|
760
|
+
const params = new URLSearchParams(text);
|
|
761
|
+
const out = Object.create(null);
|
|
762
|
+
for (const [key, value] of params) {
|
|
763
|
+
if (Object.hasOwn(out, key))
|
|
764
|
+
throw new AxiError(`Duplicate query key ${key}`, "VALIDATION_ERROR", ["Pass each query key once: --odata 'k=v&k2=v2'"]);
|
|
765
|
+
out[key] = value;
|
|
766
|
+
}
|
|
767
|
+
if (!Object.keys(out).length && text.trim() !== "")
|
|
768
|
+
throw new AxiError(`Invalid --odata '${raw}'`, "VALIDATION_ERROR", ["Example: --odata '$top=5&$select=id,displayName'"]);
|
|
769
|
+
return out;
|
|
770
|
+
}
|
|
771
|
+
function checkQueryKeys(route, query) {
|
|
772
|
+
for (const key of Object.keys(query)) {
|
|
773
|
+
if (route.query.includes(key))
|
|
774
|
+
continue;
|
|
775
|
+
if (key === "$search" || key === "$count") {
|
|
776
|
+
throw new AxiError(`Advanced query ${key} is not reviewed for raw reads`, "VALIDATION_ERROR", [
|
|
777
|
+
"Advanced queries need per-endpoint ConsistencyLevel review; named slices declare supported combinations",
|
|
778
|
+
]);
|
|
779
|
+
}
|
|
780
|
+
if (key === "$skiptoken") {
|
|
781
|
+
throw new AxiError("Server paging state cannot be supplied; page with --all", "VALIDATION_ERROR", ["mg-axi api get --help"]);
|
|
782
|
+
}
|
|
783
|
+
throw new AxiError(`Unsupported query key ${key} for ${route.id}`, "VALIDATION_ERROR", [
|
|
784
|
+
`Reviewed query keys: ${route.query.join(", ")}`,
|
|
785
|
+
]);
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
function checkQuery(route, query) {
|
|
789
|
+
checkQueryKeys(route, query);
|
|
790
|
+
// Routes without a documented $select contract (the tenant-information
|
|
791
|
+
// function lookups) never carry server field selection; every other
|
|
792
|
+
// reviewed route defaults to its reviewed set.
|
|
793
|
+
if (!route.query.includes("$select"))
|
|
794
|
+
return;
|
|
795
|
+
const select = query["$select"] ??= (route.defaultFields ?? route.fields).join(",");
|
|
796
|
+
const fields = select.split(",").map(field => field.trim()).filter(field => field.length > 0);
|
|
797
|
+
if (!fields.length)
|
|
798
|
+
throw new AxiError("Empty $select names no fields", "VALIDATION_ERROR", [`Reviewed fields: ${route.fields.join(", ")}`]);
|
|
799
|
+
const unknown = fields.filter(field => !route.fields.includes(field));
|
|
800
|
+
if (unknown.length) {
|
|
801
|
+
throw new AxiError(`Unreviewed $select field${unknown.length === 1 ? "" : "s"} ${unknown.join(", ")} for ${route.id}`, "VALIDATION_ERROR", [
|
|
802
|
+
`Reviewed fields: ${route.fields.join(", ")}`,
|
|
803
|
+
]);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
function isRecord(value) {
|
|
807
|
+
return value !== null && typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype;
|
|
808
|
+
}
|
|
809
|
+
function reviewedFields(route, value) {
|
|
810
|
+
if (!isRecord(value))
|
|
811
|
+
return null;
|
|
812
|
+
const kept = Object.fromEntries(Object.entries(value).filter(([key]) => route.fields.includes(key)));
|
|
813
|
+
if (route.keepODataType === true && typeof value["@odata.type"] === "string")
|
|
814
|
+
kept["@odata.type"] = value["@odata.type"];
|
|
815
|
+
return kept;
|
|
816
|
+
}
|
|
817
|
+
// String truncation at the output boundary, mirroring az-axi's 4000-char
|
|
818
|
+
// convention. --full disables truncation; redaction already ran in the
|
|
819
|
+
// session and row caps are unaffected. Plain objects and arrays only.
|
|
820
|
+
function truncateForOutput(value, full) {
|
|
821
|
+
if (typeof value === "string") {
|
|
822
|
+
if (full || value.length <= TRUNCATE_AT)
|
|
823
|
+
return { value, truncated: false };
|
|
824
|
+
return { value: `${value.slice(0, TRUNCATE_AT)}... (truncated, ${value.length} chars total)`, truncated: true };
|
|
825
|
+
}
|
|
826
|
+
if (Array.isArray(value)) {
|
|
827
|
+
let truncated = false;
|
|
828
|
+
const shaped = value.map(item => {
|
|
829
|
+
const child = truncateForOutput(item, full);
|
|
830
|
+
truncated = truncated || child.truncated;
|
|
831
|
+
return child.value;
|
|
832
|
+
});
|
|
833
|
+
return { value: shaped, truncated };
|
|
834
|
+
}
|
|
835
|
+
if (isRecord(value)) {
|
|
836
|
+
let truncated = false;
|
|
837
|
+
const shaped = {};
|
|
838
|
+
for (const [key, child] of Object.entries(value)) {
|
|
839
|
+
const next = truncateForOutput(child, full);
|
|
840
|
+
truncated = truncated || next.truncated;
|
|
841
|
+
shaped[key] = next.value;
|
|
842
|
+
}
|
|
843
|
+
return { value: shaped, truncated };
|
|
844
|
+
}
|
|
845
|
+
return { value, truncated: false };
|
|
846
|
+
}
|
|
847
|
+
export async function runApiGet(args, deps) {
|
|
848
|
+
const version = args.apiVersion || "v1.0";
|
|
849
|
+
const pathname = args.path ?? "";
|
|
850
|
+
if (!pathname.startsWith("/") || pathname.includes("://") || pathname.includes("?") || pathname.includes("#") || pathname.includes("\\")) {
|
|
851
|
+
throw new AxiError(`Refused raw path '${pathname || "(empty)"}'`, "VALIDATION_ERROR", [
|
|
852
|
+
"Pass a server-relative Graph path such as /users; query belongs in --odata 'k=v&k2=v2'",
|
|
853
|
+
"The command never takes a host, scheme or headers; the session owns the Graph destination",
|
|
854
|
+
]);
|
|
855
|
+
}
|
|
856
|
+
const matched = matchReviewed(pathname);
|
|
857
|
+
if (!matched || version !== "v1.0") {
|
|
858
|
+
if (version !== "v1.0") {
|
|
859
|
+
throw new AxiError(`No reviewed ${version} raw reads (API-01 reviews v1.0 only): GET ${pathname}`, "VALIDATION_ERROR", [
|
|
860
|
+
"mg-axi api get --help",
|
|
861
|
+
"Beta reads need an explicitly reviewed contract; v1.0 stays the default with no fallback",
|
|
862
|
+
]);
|
|
863
|
+
}
|
|
864
|
+
throw new AxiError(`GET ${pathname} is not in the reviewed raw inventory (API-01, reviewed ${REVIEWED_ON})`, "VALIDATION_ERROR", [
|
|
865
|
+
"mg-axi api get --help",
|
|
866
|
+
"Named commands, secret-value, mail/file-content and write routes are never served raw",
|
|
867
|
+
]);
|
|
868
|
+
}
|
|
869
|
+
const { route, params } = matched;
|
|
870
|
+
if (route.delegatedOnly === true && args.profile.mode === "application") {
|
|
871
|
+
throw new AxiError(`GET ${pathname} needs a delegated profile; Graph documents no supported application permission for ${route.id}`, "VALIDATION_ERROR", [
|
|
872
|
+
"mg-axi profile create --name <name> --tenant <tenant-id> --client <client-id> --cloud commercial",
|
|
873
|
+
]);
|
|
874
|
+
}
|
|
875
|
+
if (route.kind === "single" && args.cursor !== undefined) {
|
|
876
|
+
throw new AxiError("--cursor is available for collection reads only", "VALIDATION_ERROR", ["Resume with the same collection path that returned the cursor"]);
|
|
877
|
+
}
|
|
878
|
+
if (args.profile.mode === "application" && args.scopes !== undefined) {
|
|
879
|
+
throw new AxiError("Application profiles use the configured Graph .default audience; delegated scopes are unavailable", "VALIDATION_ERROR", [
|
|
880
|
+
"mg-axi profile show --profile <name>",
|
|
881
|
+
]);
|
|
882
|
+
}
|
|
883
|
+
const query = args.cursor !== undefined && args.odata === undefined ? undefined : parseQuery(args.odata);
|
|
884
|
+
// The inventory row is authoritative for destination, method and policy; the
|
|
885
|
+
// review above only selects which row may run. Binding, query-shape and
|
|
886
|
+
// policy failures below still throw before the session acquires credentials.
|
|
887
|
+
const operation = resolveSessionOperation(version, "GET", route.id.slice(`${version}:GET:`.length));
|
|
888
|
+
const localSelection = operation.path === "/users/{user-id}/authentication/methods";
|
|
889
|
+
const scopes = args.scopes === undefined ? undefined : args.scopes.split(",").map(scope => scope.trim()).filter(scope => scope.length > 0);
|
|
890
|
+
const session = new GraphSession({ ...deps, transport: async (request) => {
|
|
891
|
+
const url = new URL(request.url);
|
|
892
|
+
const query = Object.fromEntries(url.searchParams);
|
|
893
|
+
delete query["$skiptoken"];
|
|
894
|
+
if (route.query.includes("$select"))
|
|
895
|
+
query["$select"] ??= selection["$select"];
|
|
896
|
+
checkQuery(route, query);
|
|
897
|
+
if (localSelection)
|
|
898
|
+
url.searchParams.delete("$select");
|
|
899
|
+
else if (query["$select"] !== undefined)
|
|
900
|
+
url.searchParams.set("$select", query["$select"]);
|
|
901
|
+
const response = await deps.transport({ ...request, url: url.toString() });
|
|
902
|
+
if (response.status < 200 || response.status >= 300 || !response.body)
|
|
903
|
+
return response;
|
|
904
|
+
let body;
|
|
905
|
+
try {
|
|
906
|
+
body = JSON.parse(response.body);
|
|
907
|
+
}
|
|
908
|
+
catch {
|
|
909
|
+
return response;
|
|
910
|
+
}
|
|
911
|
+
if (route.kind === "single")
|
|
912
|
+
body = reviewedFields(outputRoute, body);
|
|
913
|
+
else if (isRecord(body) && Array.isArray(body.value))
|
|
914
|
+
body = { ...body, value: body.value.map(row => reviewedFields(outputRoute, row)) };
|
|
915
|
+
return { ...response, body: JSON.stringify(body), receivedBodyBytes: response.receivedBodyBytes ?? Buffer.byteLength(response.body, "utf8") };
|
|
916
|
+
} });
|
|
917
|
+
const selection = query ?? { ...session.cursorQuery(operation, args.cursor) };
|
|
918
|
+
checkQuery(route, selection);
|
|
919
|
+
// Select-less routes project the full reviewed set; every other route
|
|
920
|
+
// projects exactly the requested selection.
|
|
921
|
+
const outputRoute = { ...route, fields: selection["$select"] !== undefined ? selection["$select"].split(",").map(field => field.trim()).filter(Boolean) : [...route.fields] };
|
|
922
|
+
const full = !!args.full;
|
|
923
|
+
if (route.kind === "single") {
|
|
924
|
+
const body = await session.execute({ profile: args.profile, operation, params, query, scopes });
|
|
925
|
+
const shaped = truncateForOutput(reviewedFields(outputRoute, body), full);
|
|
926
|
+
const record = isRecord(shaped.value) ? shaped.value : { value: shaped.value };
|
|
927
|
+
return shaped.truncated ? { ...record, help: ["Strings truncated at 4000 chars; re-run with --full"] } : record;
|
|
928
|
+
}
|
|
929
|
+
const collected = await session.collect({ profile: args.profile, operation, params, query, scopes, limit: args.limit, cursor: args.cursor });
|
|
930
|
+
const shaped = truncateForOutput(collected.value.map(row => reviewedFields(outputRoute, row)), full);
|
|
931
|
+
const value = shaped.value;
|
|
932
|
+
const warnings = route.warning ? { warnings: [route.warning] } : {};
|
|
933
|
+
if (collected.complete) {
|
|
934
|
+
return shaped.truncated
|
|
935
|
+
? { returned: value.length, complete: true, value, ...warnings, help: ["Strings truncated at 4000 chars; re-run with --full"] }
|
|
936
|
+
: { returned: value.length, complete: true, value, ...warnings };
|
|
937
|
+
}
|
|
938
|
+
const hint = "Resume the same path, profile and scopes with --cursor - and supply the cursor token on stdin; use --limit <rows> or --all";
|
|
939
|
+
const help = shaped.truncated ? [hint, "Strings truncated at 4000 chars; re-run with --full"] : [hint];
|
|
940
|
+
return { returned: value.length, complete: false, reason: collected.reason, value, ...warnings, cursor: collected.cursor, help };
|
|
941
|
+
}
|
|
942
|
+
// Minimal HTTPS transport: sends only what the session authorized (GET on the
|
|
943
|
+
// commercial Graph host with session-owned headers) and returns status,
|
|
944
|
+
// headers and text. Timeouts and cancellation arrive through the session's
|
|
945
|
+
// AbortSignal; credential attachment happened before this call.
|
|
946
|
+
export const fetchTransport = async (request) => {
|
|
947
|
+
const response = await fetch(request.url, { method: "GET", headers: request.headers, signal: request.signal, redirect: "manual" });
|
|
948
|
+
const headers = {};
|
|
949
|
+
response.headers.forEach((value, key) => {
|
|
950
|
+
headers[key] = value;
|
|
951
|
+
});
|
|
952
|
+
return { status: response.status, headers, body: await response.text() };
|
|
953
|
+
};
|