Microsoft Graph · Rate Limits
Microsoft Graph Rate Limits
Microsoft Graph applies per-service throttling on top of a global per-app ceiling of 130,000 requests per 10 seconds. Each service (mail, calendar, files, identity, Teams, Excel, education, reports) has its own per-app-per-tenant and per-app-across-all-tenants quotas. Identity & directory uses a ResourceUnit token-bucket model with size-tiered quotas (Small / Medium / Large tenant). Returns 429 with Retry-After.
18 Limits
Throttle: 429
Rate LimitingMicrosoft GraphMicrosoft 365IdentityMicrosoft
Limits
Global ceiling per application across all tenants application
130000
Identity & Access (read) — small tenant (<50 users) app/tenant
3500
Identity & Access (read) — medium tenant (50–500 users) app/tenant
5000
Identity & Access (read) — large tenant (>500 users) app/tenant
8000
Identity & Access (write) per app/tenant app/tenant
3000
Identity & Access (read) per app across tenants application
150000
Identity & Access (write) per app across tenants application
35000
Excel workbook — any request per app/tenant app/tenant
1500
Excel workbook — any request per app across tenants application
5000
Teams Calls per app/tenant app/tenant
50000
Teams Presence per app/tenant app/tenant
10000
Teams Call Records per app/tenant app/tenant
1500
Teams Call Records per application across tenants application
15000
Identity & Access Reports — any request per app/tenant app/tenant
5
Education service per app/tenant app/tenant
35000
Exchange Message Trace tenant
100
Outlook (mail / calendar / contacts) app/mailbox
per-mailbox throttling — see Outlook docs; fall back to Retry-After
Files (OneDrive / SharePoint) app/tenant
see SharePoint Online throttling guidance
Policies
ResourceUnit cost model
Identity / directory requests are charged base ResourceUnits (most are 1 RU; some paths cost 2–5 RU). Plan capacity in ResourceUnits, not raw requests.
Backoff Strategy
Honour Retry-After on 429 / 503; the SDK handlers do this by default.
Use change tracking
Prefer delta queries and change notifications (subscriptions) over polling.
Use $batch
Combine up to 20 requests in a single $batch envelope; each is throttled individually.
Microsoft Graph Data Connect for bulk
For tenant-wide bulk extraction, use Data Connect to bypass REST throttling.
Request priority
Set x-ms-throttle-priority (high / normal / low) to influence which traffic is shed first under contention.