Home / Articles

Microsoft Graph or legacy REST endpoints: a 2026 decision guide

Learn which Microsoft 365 REST APIs are retired or retiring in 2026, how Graph differs on auth, batching and throttling, and when SharePoint REST or EWS still fits.

Publisher: REACTAPP.TOP8 min read1924 words

This article is published in English.

Sources: REST API vs Microsoft Graph API — Which One Should You Call in 2026?

The question is slightly wrong

Anyone wiring an app into Microsoft 365, Entra ID, Teams or Outlook data eventually searches for some form of "REST API or Microsoft Graph?" It sounds like a fair choice between two things, but it isn't quite. Graph is itself a REST API. What people usually mean is this:

Should you keep calling the older, per-service REST endpoints (Azure AD Graph, the Outlook REST API, SharePoint REST, EWS and friends), or move to the unified Microsoft Graph API?

In 2026 that question has real deadlines attached. Microsoft has spent roughly three years shutting down the fragmented APIs and steering everyone toward Graph, and a few of those shutdowns are only weeks out. Below you'll find the naming sorted out, a status check on what still works, a side-by-side comparison, and a decision process you can apply to both new builds and old integrations.

Sorting out the names

REST is an architectural style. It isn't a product you install. An API that uses HTTP verbs like GET, POST, PATCH and DELETE, addresses things as resources by URL, and usually exchanges JSON can fairly call itself RESTful. By that definition Microsoft Graph, Azure AD Graph, the retired Outlook REST API and SharePoint REST all qualify.

Microsoft Graph is the single REST API that covers Microsoft 365 and Entra ID together. You don't hop between one endpoint for mail, another for files and a third for directory data. Everything sits under https://graph.microsoft.com/: users, groups, mail, calendars, Teams chats, files, security alerts, and lately AI agents as well.

So the useful comparison is unified Graph against the legacy, service-specific REST surfaces. Where those legacy APIs stand right now matters a lot, because the picture has moved quickly over the past year.

What still works in 2026

API Status in mid-2026 What it means for you
Azure AD Graph (graph.windows.net) Retiring July 31, 2026 Overdue; migrate immediately
Outlook REST API v2.0 Returns HTTP 410 Gone since March 2024 Already dead
EWS from third-party apps (Exchange Online) Blocked from October 1, 2026 Hard deadline this autumn
SharePoint add-ins on ACS Retired Must move to Entra ID auth
SharePoint REST (_api/web/...) Supported Fine for gaps Graph doesn't cover
EWS on on-premises Exchange Supported Not affected by the Exchange Online block
Microsoft Graph Actively developed Default for anything new

If anything you own still hits graph.windows.net, you're already late; looking from mid-July 2026, that door closes within a couple of weeks. The old Outlook REST API has been gone for more than two years. Third-party EWS access against Exchange Online gets cut off this autumn. Nearly every argument that once justified sticking with a native REST endpoint has either expired or is about to.

Microsoft has moved several of these dates before, so confirm the current deadline on Microsoft Learn before you schedule a migration around it. The direction, though, hasn't changed in years: everything consolidates onto Graph.

Graph against the legacy endpoints

Three differences matter most in daily work.

Authentication

Over a decade the legacy surfaces collected a pile of auth options: Basic Auth, NTLM, Kerberos, and the Azure Access Control Service that SharePoint add-ins relied on. For Microsoft 365 workloads all of those have been retired. Graph has only ever accepted OAuth 2.0 through Microsoft Entra ID. That gives you one way to get tokens, one permission model and one place to audit who can access what. Admins get a security improvement out of it, not just developers a nicer API.

Queries and batching

One Graph request like the one below can filter, trim and page mail in a single round trip:

GET https://graph.microsoft.com/v1.0/me/messages
    ?$select=subject,receivedDateTime,from
    &$filter=receivedDateTime ge 2026-07-01T00:00:00Z
    &$top=25
    &$orderby=receivedDateTime desc

Against the older, less flexible endpoints the same result often took several narrow calls or filtering on the client. Add $batch and you can pack up to 20 independent operations into one HTTP request, mixing reads and writes across entirely different resource types.

Throttling

Graph applies several limits at once: per app across all tenants, per tenant across all apps, and per app inside one tenant. The actual numbers differ by service, with mail, files, directory and Teams messaging each publishing their own ceilings. Whichever limit you hit first returns 429 Too Many Requests with a Retry-After header that tells you how long to wait. Compared with the legacy APIs, where throttling was often undocumented and you learned the limits in production, that's a big step up. The advice is old but still right: use $select to fetch only the fields you need, prefer batching and delta queries to polling, and always respect Retry-After rather than retrying straight away.

Where something other than Graph still makes sense

Graph doesn't cover everything yet, and a few cases really do call for a different API.

  • Detailed SharePoint site administration. Full permission-level detail, some site group operations, and parts of content type and list schema management only exist in SharePoint REST under _api/web/.... Mature SharePoint projects usually run day-to-day file, list and drive work through Graph and use SharePoint REST only for what's missing.
  • SPFx web parts. The SharePoint Framework runtime already gives you a ready SharePoint REST context, so for in-page customizations it's often the easiest route, even though the same web part can call Graph too.
  • On-premises Exchange Server. The October 2026 block only applies to Exchange Online, so EWS keeps working against on-prem Exchange. For a fully on-prem mail setup, the real choice is EWS or migrating to Exchange Online first.
  • Large one-off admin jobs. Bulk permission cleanups, tenant reporting and site provisioning at scale are often done with higher-level tools such as PnP PowerShell, which itself calls a mix of Graph and SharePoint REST internally.

Beyond those narrow cases a brand-new project has little technical reason to begin on one of the old per-service endpoints this year, since most are already offline or on their way out.

How to decide

Run any new integration through these questions:

  1. Is it a new build? Use Microsoft Graph. New features ship there first, and it's the only surface Microsoft is still investing in.
  2. Does an existing app call Azure AD Graph, the Outlook REST API, or ACS-based SharePoint add-ins? Outlook REST and ACS are already past their windows, and Azure AD Graph retires on July 31, 2026. Treat this as urgent work.
  3. Does a third-party app use EWS against Exchange Online? Microsoft starts blocking those calls on October 1, 2026. Start moving to Graph's mail and calendar endpoints now.
  4. Do you need a SharePoint feature Graph doesn't have yet? Use SharePoint REST for that one call and Graph for everything else. Check the SharePoint-in-Graph docs first, since the list of gaps keeps getting shorter.
  5. Is the environment on-prem only? EWS and other on-prem protocols are still valid there. Graph is cloud-first and can't reach on-prem Exchange or SharePoint Server directly.

For nearly everyone this comes down to one rule: call Microsoft Graph unless you have a specific, documented reason not to.

The same request, then and now

Here's the retired Outlook REST v2.0 call, shown only for comparison:

GET https://outlook.office.com/api/v2.0/me/messages
Authorization: Bearer {token}

That endpoint has answered with HTTP 410 Gone since March 2024. The Graph version of the same request looks like this:

GET https://graph.microsoft.com/v1.0/me/messages?$select=subject,from,receivedDateTime&$top=10
Authorization: Bearer {token}

SharePoint REST, which is still supported, reads list items like this:

GET https://{tenant}.sharepoint.com/sites/{site}/_api/web/lists/getbytitle('Documents')/items
Authorization: Bearer {token}
Accept: application/json;odata=verbose

Where Graph supports the same operation, the call becomes:

GET https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items
Authorization: Bearer {token}

The HTTP mechanics are identical in both eras. What Graph adds is one base URL, one auth model and one JSON convention, whichever Microsoft 365 service you're actually talking to.

Migrating off a legacy API

If you've just realized something in your tenant still depends on a retiring API, work through this list:

  1. Find out what actually calls it. Entra ships two recommendations, "Migrate Applications" and "Migrate Service Principals", which list real Azure AD Graph usage observed in your tenant over the last 30 days. That beats guessing from source code by a wide margin.
  2. Map permissions explicitly. Legacy permissions don't translate one to one into Graph scopes. Work from Microsoft's official permission mapping references instead of assuming two scopes with similar names are equivalent.
  3. Move auth to MSAL. Anything still on the old Azure AD Authentication Library (ADAL) has a separate overdue migration on its hands, because ADAL has been out of support for years.
  4. Switch SDKs, not only URLs. The official Graph SDKs for .NET, JavaScript and TypeScript, Python, Java, Go and PowerShell handle batching, retries and pagination for you. Don't hand-write raw HTTP calls unless you really have to.
  5. Be careful with beta. If a feature only exists on the beta Graph endpoint, its contract can change under you. Either plan for that or wait until it reaches general availability.
  6. Find 429s in staging. Load-test with realistic call volumes so you hit your throttling ceiling before your users do.
  7. Put the real cutoff date in your calendar, and verify it against Microsoft's live documentation right before you rely on it. These dates have shifted before, so treat any date you read secondhand, this page included, as provisional.

Graph is also where AI agents are managed

There's one more reason the gap keeps growing. Graph is turning into the control plane for Microsoft's AI agent ecosystem. During 2026 Microsoft added Graph endpoints for managing Microsoft 365 Copilot agents and apps, keeping an inventory of agents, and pulling more detailed Copilot usage reports, features tied to newer licensing such as Agent 365. None of that exists on Azure AD Graph, Outlook REST or EWS, and it never will. If your organization plans to build on Copilot extensibility or custom agents, that's one more road that only leads to Graph.

Where this leaves you

The title question has a fairly clear answer in 2026:

  • Starting something new on Microsoft 365 or Entra ID? Use Microsoft Graph. There's no remaining case where a fresh project should begin on a legacy service-specific REST API.
  • Maintaining an older integration? Compare it against the status table above. If it touches Azure AD Graph, Outlook REST, ACS-based SharePoint add-ins or third-party EWS access, you're working against a deadline, and some of those deadlines are very close.
  • Missing one SharePoint capability in Graph? Drop to SharePoint REST for that single call and keep everything else on Graph.

Back in 2018, when Microsoft really did run several competing REST surfaces side by side, "REST API or Graph" was a reasonable debate. Today it's mostly cleanup. The consolidation is nearly finished, and the alternatives are running out of time.