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
requests_per_10_seconds · second
130000
Identity & Access (read) — small tenant (<50 users) app/tenant
resource_units_per_10_seconds · second
3500
Identity & Access (read) — medium tenant (50–500 users) app/tenant
resource_units_per_10_seconds · second
5000
Identity & Access (read) — large tenant (>500 users) app/tenant
resource_units_per_10_seconds · second
8000
Identity & Access (write) per app/tenant app/tenant
requests_per_2m30s · second
3000
Identity & Access (read) per app across tenants application
resource_units_per_20_seconds · second
150000
Identity & Access (write) per app across tenants application
requests_per_5_minutes · minute
35000
Excel workbook — any request per app/tenant app/tenant
requests_per_10_seconds · second
1500
Excel workbook — any request per app across tenants application
requests_per_10_seconds · second
5000
Teams Calls per app/tenant app/tenant
requests_per_15_seconds · second
50000
Teams Presence per app/tenant app/tenant
requests_per_30_seconds · second
10000
Teams Call Records per app/tenant app/tenant
requests_per_20_seconds · second
1500
Teams Call Records per application across tenants application
requests_per_20_seconds · second
15000
Identity & Access Reports — any request per app/tenant app/tenant
requests_per_10_seconds · second
5
Education service per app/tenant app/tenant
requests_per_10_seconds · second
35000
Exchange Message Trace tenant
requests_per_5_minutes · minute
100
Outlook (mail / calendar / contacts) app/mailbox
varies
per-mailbox throttling — see Outlook docs; fall back to Retry-After
Files (OneDrive / SharePoint) app/tenant
varies
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.

Sources