Microsoft Graph API Orchestration Skill
Microsoft Graph is a unified REST API endpoint for accessing Microsoft Cloud resources across Microsoft 365, Windows, and Enterprise Mobility + Security. Base URL: https://graph.microsoft.com/{version}/{resource}
API Versions: v1.0 (production) or beta (preview)
Authentication: OAuth 2.0 via Azure AD
Data Format: JSON
When to Load Which Resource
| Task |
Service |
Load Resource |
| Setup auth, register apps, manage credentials |
Applications & Auth |
resources/authentication-apps.md |
| Manage users, groups, organization, directory |
Identity & Access |
resources/identity-access.md |
| Email, folders, attachments, rules, signatures |
Mail Operations |
resources/mail-operations.md |
| Calendar, events, scheduling, meetings, free/busy |
Calendar & Scheduling |
resources/calendar-scheduling.md |
| Upload files, folders, share, OneDrive, SharePoint |
Files & Storage |
resources/files-storage.md |
| Teams, channels, chats, presence, online meetings |
Teams & Communications |
resources/teams-communications.md |
| Planner tasks, To Do lists, OneNote notebooks |
Planning & Notes |
resources/planning-notes.md |
| Security alerts, compliance, device management, reports |
Security & Governance |
resources/security-governance.md |
Orchestration Protocol
Phase 1: Analyze Your Task
Identify which service area you need by answering:
- What resource? (users, files, messages, events, etc.)
- What action? (read, create, update, delete)
- Who? (signed-in user or service account)
- Permissions? (delegated or application)
Phase 2: Load the Right Resource
Use the decision table above to find your resource file. Each resource includes:
- Complete endpoint reference with base paths
- Request/response examples for all CRUD operations
- Query parameters and filter options
- Required permissions (delegated and application)
- Error handling patterns and best practices
- Common workflows and patterns
Phase 3: Implement with Confidence
Each resource shows practical, copy-paste-ready examples for your use case.
Universal Graph Concepts
Standard Query Parameters:
$select=prop1,prop2 Choose properties to return
$filter=startsWith(name,'A') Filter results by condition
$orderby=name desc Sort results (asc or desc)
$top=25 Limit to 25 results (default 20)
$skip=50 Skip first 50 results
$expand=members Include related/nested data
$count=true Include total count in response
$search="keyword" Full-text search across content
Standard CRUD Operations:
GET /me/messages?$select=subject&$top=10 # Read
POST /me/events {"subject": "Meeting", ...} # Create
PATCH /users/{id} {"jobTitle": "Manager"} # Update
DELETE /me/messages/{id} # Delete
Pagination: Always follow @odata.nextLink in responses for complete data sets
Batch Requests: Use POST /$batch to combine 1-20 operations into single call
Delta Queries: Use GET /users/delta to track changes since last query via @odata.deltaLink
Error Response Format:
{"error": {"code": "Code", "message": "Description"}}
Common Status Codes:
- 200/201/204: Success
- 400: Invalid request
- 401: Authentication required
- 403: Insufficient permissions
- 404: Resource not found
- 429: Rate limited (check Retry-After header)
- 500-503: Server error (implement exponential backoff)
Resource File Index
| File |
Focus |
Lines |
| authentication-apps.md |
App registration, OAuth, credentials |
350+ |
| identity-access.md |
Users, groups, organization, directory |
350+ |
| mail-operations.md |
Email, folders, attachments, rules |
400+ |
| calendar-scheduling.md |
Events, recurring, meetings, free/busy |
350+ |
| files-storage.md |
OneDrive, SharePoint, uploads, sharing |
400+ |
| teams-communications.md |
Teams, channels, chats, presence |
350+ |
| planning-notes.md |
Planner, To Do, OneNote |
350+ |
| security-governance.md |
Security, compliance, devices, reports |
400+ |
Best Practices
Performance: Use $select for specific properties, implement pagination, cache tokens, use batch for bulk ops, apply delta queries for sync scenarios
Security: Store tokens securely (never in code), request least-privilege permissions, use managed identities for Azure, rotate credentials every 90 days, validate all responses
Development: Test in beta endpoint first, monitor deprecation notices, implement exponential backoff for retries, respect rate limiting, check Graph health status
Troubleshooting:
- 401 Unauthorized → Check token validity and scopes
- 403 Forbidden → Verify permissions are configured in Azure AD
- 404 Not Found → Verify resource ID and that resource exists
- 429 Too Many Requests → Implement retry with exponential backoff
Tools & SDK Resources
Interactive Testing: Graph Explorer at https://developer.microsoft.com/graph/graph-explorer
SDKs:
- .NET:
Microsoft.Graph NuGet
- JavaScript/TypeScript:
@microsoft/microsoft-graph-client npm
- Python:
msgraph-sdk-python pip
Documentation:
Skill Version: 2.1 | API Versions: v1.0 (production), beta (preview) | Updated: December 2025
1---2name: microsoft-graph3description: Orchestration hub for Microsoft Graph API across Microsoft 365 services. Use for Graph API integrations, querying Microsoft 365 data, and building applications that interact with Azure AD.4---5
6# Microsoft Graph API Orchestration Skill
7
8Microsoft Graph is a unified REST API endpoint for accessing Microsoft Cloud resources across Microsoft 365, Windows, and Enterprise Mobility + Security. Base URL: `https://graph.microsoft.com/{version}/{resource}`
9
10**API Versions:** `v1.0` (production) or `beta` (preview)
11**Authentication:** OAuth 2.0 via Azure AD
12**Data Format:** JSON
13
14## When to Load Which Resource
15
16| Task | Service | Load Resource |
17|------|---------|---------------|
18| Setup auth, register apps, manage credentials | Applications & Auth | [resources/authentication-apps.md](resources/authentication-apps.md) |
19| Manage users, groups, organization, directory | Identity & Access | [resources/identity-access.md](resources/identity-access.md) |
20| Email, folders, attachments, rules, signatures | Mail Operations | [resources/mail-operations.md](resources/mail-operations.md) |
21| Calendar, events, scheduling, meetings, free/busy | Calendar & Scheduling | [resources/calendar-scheduling.md](resources/calendar-scheduling.md) |
22| Upload files, folders, share, OneDrive, SharePoint | Files & Storage | [resources/files-storage.md](resources/files-storage.md) |
23| Teams, channels, chats, presence, online meetings | Teams & Communications | [resources/teams-communications.md](resources/teams-communications.md) |
24| Planner tasks, To Do lists, OneNote notebooks | Planning & Notes | [resources/planning-notes.md](resources/planning-notes.md) |
25| Security alerts, compliance, device management, reports | Security & Governance | [resources/security-governance.md](resources/security-governance.md) |
26
27## Orchestration Protocol
28
29### Phase 1: Analyze Your Task
30
31Identify which service area you need by answering:
32- **What resource?** (users, files, messages, events, etc.)
33- **What action?** (read, create, update, delete)
34- **Who?** (signed-in user or service account)
35- **Permissions?** (delegated or application)
36
37### Phase 2: Load the Right Resource
38
39Use the decision table above to find your resource file. Each resource includes:
40- Complete endpoint reference with base paths
41- Request/response examples for all CRUD operations
42- Query parameters and filter options
43- Required permissions (delegated and application)
44- Error handling patterns and best practices
45- Common workflows and patterns
46
47### Phase 3: Implement with Confidence
48
49Each resource shows practical, copy-paste-ready examples for your use case.
50
51## Universal Graph Concepts
52
53**Standard Query Parameters:**
54```
55$select=prop1,prop2 Choose properties to return
56$filter=startsWith(name,'A') Filter results by condition
57$orderby=name desc Sort results (asc or desc)
58$top=25 Limit to 25 results (default 20)
59$skip=50 Skip first 50 results
60$expand=members Include related/nested data
61$count=true Include total count in response
62$search="keyword" Full-text search across content
63```
64
65**Standard CRUD Operations:**
66```http
67GET /me/messages?$select=subject&$top=10 # Read
68POST /me/events {"subject": "Meeting", ...} # Create
69PATCH /users/{id} {"jobTitle": "Manager"} # Update
70DELETE /me/messages/{id} # Delete
71```
72
73**Pagination:** Always follow `@odata.nextLink` in responses for complete data sets
74
75**Batch Requests:** Use `POST /$batch` to combine 1-20 operations into single call
76
77**Delta Queries:** Use `GET /users/delta` to track changes since last query via `@odata.deltaLink`
78
79**Error Response Format:**
80```json
81{"error": {"code": "Code", "message": "Description"}}
82```
83
84**Common Status Codes:**
85- 200/201/204: Success
86- 400: Invalid request
87- 401: Authentication required
88- 403: Insufficient permissions
89- 404: Resource not found
90- 429: Rate limited (check Retry-After header)
91- 500-503: Server error (implement exponential backoff)
92
93## Resource File Index
94
95| File | Focus | Lines |
96|------|-------|-------|
97| [authentication-apps.md](resources/authentication-apps.md) | App registration, OAuth, credentials | 350+ |
98| [identity-access.md](resources/identity-access.md) | Users, groups, organization, directory | 350+ |
99| [mail-operations.md](resources/mail-operations.md) | Email, folders, attachments, rules | 400+ |
100| [calendar-scheduling.md](resources/calendar-scheduling.md) | Events, recurring, meetings, free/busy | 350+ |
101| [files-storage.md](resources/files-storage.md) | OneDrive, SharePoint, uploads, sharing | 400+ |
102| [teams-communications.md](resources/teams-communications.md) | Teams, channels, chats, presence | 350+ |
103| [planning-notes.md](resources/planning-notes.md) | Planner, To Do, OneNote | 350+ |
104| [security-governance.md](resources/security-governance.md) | Security, compliance, devices, reports | 400+ |
105
106## Best Practices
107
108**Performance:** Use `$select` for specific properties, implement pagination, cache tokens, use batch for bulk ops, apply delta queries for sync scenarios
109
110**Security:** Store tokens securely (never in code), request least-privilege permissions, use managed identities for Azure, rotate credentials every 90 days, validate all responses
111
112**Development:** Test in `beta` endpoint first, monitor deprecation notices, implement exponential backoff for retries, respect rate limiting, check Graph health status
113
114**Troubleshooting:**
115- 401 Unauthorized → Check token validity and scopes
116- 403 Forbidden → Verify permissions are configured in Azure AD
117- 404 Not Found → Verify resource ID and that resource exists
118- 429 Too Many Requests → Implement retry with exponential backoff
119
120## Tools & SDK Resources
121
122**Interactive Testing:** Graph Explorer at https://developer.microsoft.com/graph/graph-explorer
123
124**SDKs:**
125- .NET: `Microsoft.Graph` NuGet
126- JavaScript/TypeScript: `@microsoft/microsoft-graph-client` npm
127- Python: `msgraph-sdk-python` pip
128
129**Documentation:**
130- API Reference: https://docs.microsoft.com/graph/api/overview
131- Permissions Reference: https://docs.microsoft.com/graph/permissions-reference
132- Changelog: https://docs.microsoft.com/graph/changelog
133
134---
135
136**Skill Version:** 2.1 | **API Versions:** v1.0 (production), beta (preview) | **Updated:** December 2025