Guide

Exchange Server Calendar API Options

EWS blocking for Exchange Online starts on October 1, 2026, with full disablement on April 1, 2027. This reference compares EWS, Microsoft Graph, and a unified CLI for Exchange calendar access, with a decision matrix covering cloud, hybrid, and on-premises deployments.

Written by Qasim Muhammad Staff SRE

VerifiedCLI 3.1.17 · Exchange · last tested June 9, 2026

What are my Exchange Server calendar API options in 2026?

The Exchange Server calendar API choice in 2026 comes down to three options: Exchange Web Services (EWS), which Microsoft starts blocking for Exchange Online on October 1, 2026; Microsoft Graph, the REST API that covers cloud mailboxes only; and a unified abstraction such as the Nylas platform, which routes calendar calls to the correct protocol per mailbox.

EWS shipped with Exchange Server 2007 as a SOAP/XML interface and powered calendar integrations for 19 years. Microsoft Graph replaced it as the strategic API for the more than 400 million Microsoft 365 commercial seats, but Graph never gained support for on-premises Exchange Server. That gap is what makes the decision non-trivial: cloud-only shops have one obvious answer, while hybrid and on-prem deployments need either two codepaths or an abstraction layer. Three factors decide it: where the mailboxes are homed, whether you also support non-Microsoft calendars, and how much OAuth plumbing your team wants to own.

When does EWS stop working for Exchange calendar access?

EWS calendar calls against Exchange Online start failing on October 1, 2026, when Microsoft begins disabling the protocol tenant by tenant. Admins who configure an AppID Allow List and set EWSEnabled to True by the end of August 2026 keep temporary access, and EWS is fully and permanently disabled on April 1, 2027. On-premises Exchange Server is not affected.

Microsoft first announced the retirement in September 2023 and publishes the phased schedule on the official EWS deprecation page: EWS starts to be disabled globally for all organizations in October 2026, and is fully disabled in April 2027. The Exchange team's February 2026 post “Exchange Online EWS, Your Time is Almost Up” spells out the mechanics: tenants still on the default EWSEnabled setting get switched to blocked as the rollout reaches them, so EWS operations like CreateItem on calendar folders and GetUserAvailability stop answering for cloud mailboxes once the block lands. If your calendar sync, room booking, or free/busy code still speaks EWS to a cloud mailbox, it has a hard expiry date. The EWS retirement checklist walks through auditing what breaks.

What does Microsoft Graph offer for Exchange calendar access?

Microsoft Graph is the supported calendar API for Exchange Online: full CRUD on events and calendars, free/busy lookups via getSchedule, meeting-slot search via findMeetingTimes, and webhook change notifications. It requires OAuth 2.0 through an Entra ID app registration and reaches cloud mailboxes only.

The Graph calendar resource documentation covers the full surface: a single REST endpoint at graph.microsoft.com, JSON payloads instead of SOAP envelopes, and scopes like Calendars.ReadWrite that need admin consent for application-level access. Access tokens expire every 60–90 minutes, so production integrations also need token refresh plumbing, and Graph's Outlook service limits cap each app at 10,000 requests per mailbox in any 10-minute window. The one hard limit: per Microsoft's hybrid deployment docs, mailboxes homed on on-premises Exchange Server are invisible to Graph — only mailboxes hosted in Exchange Online are reachable.

Which calendar API fits my Exchange deployment type?

Match the API to where your mailboxes live: Exchange Online tenants should use Microsoft Graph or a unified API, on-premises Exchange Server deployments must keep EWS because Graph cannot reach them, and hybrid environments need both protocols or an abstraction that routes per mailbox. Multi-provider products need a unified API regardless of deployment.

DeploymentEWSMicrosoft GraphUnified API (Nylas)
Exchange Online onlyBlocked starting Oct 1, 2026RecommendedSupported
Hybrid (cloud + on-prem mailboxes)On-prem mailboxes onlyCloud mailboxes onlyBoth, routed automatically
On-prem (Subscription Edition, 2019)Supported, no retirement dateNot supportedSupported via EWS internally
Multi-provider (Exchange + Google, iCloud…)Exchange onlyMicrosoft onlyOne interface, 6 providers

The on-prem row matters more than it looks: Exchange Server 2016 and 2019 reached end of support on October 14, 2025, and Microsoft's upgrade path is Exchange Server Subscription Edition, which keeps full EWS support with no announced retirement. Calendar data on every Exchange version still follows the iCalendar model standardized in RFC 5545, but the transport API differs per deployment — that split is the dual-codebase problem the EWS to Graph migration guide covers in depth.

How do I manage Exchange calendars with a unified CLI?

The Nylas CLI gives you Exchange calendar access without writing EWS SOAP envelopes or registering an Entra ID app: one authentication step, then the same commands work against Exchange Online, on-prem Exchange, Google, and iCloud. The platform picks Graph or EWS internally based on where the mailbox lives, so the October 2026 cutoff requires no code change on your side.

Install with Homebrew (other methods are in the getting started guide), then run nylas auth config with your API key. The nylas calendar events list command defaults to the next 7 days and auto-paginates past 200 events. Setup takes about 2 minutes.

# Install
brew install nylas/nylas-cli/nylas

# Authenticate once -- no Entra ID app registration
nylas auth config --api-key YOUR_API_KEY

# List the next 7 days of Exchange calendar events
nylas calendar events list

# Same data as JSON for scripts
nylas calendar events list --limit 50 --json

Creating events uses the same flag syntax regardless of which protocol serves the mailbox. The create subcommand takes natural date strings, repeats --participant for each attendee, and sends Exchange meeting invitations automatically — one command replaces roughly 30 lines of Graph SDK code.

# Create a meeting with two participants
nylas calendar events create \
  --title "Quarterly planning" \
  --start "2026-06-15 14:00" --end "2026-06-15 15:00" \
  --participant "alice@company.com" \
  --participant "bob@company.com" \
  --location "Room 4B"

# Check free/busy across attendees before booking
nylas calendar availability check \
  --emails alice@company.com,bob@company.com \
  --start "tomorrow 9am" --end "tomorrow 5pm"

The availability check replaces Graph's getSchedule call and EWS's GetUserAvailability operation with one flag-driven command. For the full Graph-only walkthrough, including raw REST calls, see the Microsoft Graph calendar quickstart.

Next steps

Pick the path that matches your deployment from the matrix above, then use these guides for the specific migration or integration work. Each one includes tested commands and provider-specific troubleshooting.