Microsoft Graph in Practice #1: What Graph Is — One API for All of Microsoft 365

5 min read

If your company runs on Microsoft 365, your organization already has a vast amount of data in one place: everyone’s mail and calendars (Outlook), the org chart and accounts (Entra ID), files (OneDrive and SharePoint), and conversations (Teams). Microsoft Graph is the single door to all of it, through one API. “Collect the team’s calendars every Monday and post a summary to Teams,” “automatically back up a departing employee’s files,” “generate a report and send it by mail” — workplace automations like these all live behind this door.

This series covers Graph from the working-automation angle across seven parts. This part draws the overall map; part 2 covers authentication (app registration, delegated vs. application permissions), part 3 the first calls with the Python SDK, part 4 mail and calendar, part 5 files (OneDrive and SharePoint), part 6 Teams, and part 7 operations (throttling, pagination, delta, change notifications).

What “one endpoint” actually means #

Before Graph, Microsoft’s APIs came one per product: EWS for Exchange, SharePoint’s own REST/CSOM, and yet another API for Entra ID (formerly Azure AD). Each had its own authentication and SDKs, so even a simple “read mail, save to SharePoint” automation meant learning two different worlds.

Graph unified this. Every request goes to the same place.

Graph URL structure
https://graph.microsoft.com/{version}/{resource}

GET https://graph.microsoft.com/v1.0/me                  # my profile
GET https://graph.microsoft.com/v1.0/me/messages         # my mail
GET https://graph.microsoft.com/v1.0/me/calendar/events  # my events
GET https://graph.microsoft.com/v1.0/users               # users in the org
GET https://graph.microsoft.com/v1.0/me/drive/root/children  # my OneDrive root
GET https://graph.microsoft.com/v1.0/teams/{id}/channels     # a team's channels

Reading URLs is reading Graph. me is “the authenticated user”; swap in users/{id} and you’re pointing at someone else (given the permission). Resources chain hierarchically — me → drive → root → children follows ownership as a path — and the consistency is such that, once you’re familiar with it, you can often guess a URL before opening the docs.

Authentication is unified too: whatever resource you touch, you authenticate with one token issued by Entra ID, and what you’re allowed to do is determined by the permissions (scopes) in that token. That permission model is the real gateway to learning Graph, and part 2 is devoted entirely to it.

v1.0 and beta — which one to use #

Two values go in the version slot: v1.0 and beta. The rule is clear.

  • v1.0 — the supported version. Backward compatibility is managed; production should depend only on this.
  • beta — a preview. New features arrive here first, but can change or disappear without notice. Use it for experiments and validation, never in operational code.

The common accident: relying on a beta-only field until the day the response shape changes and the automation quietly breaks. Build the habit of checking the version selector at the top of every docs page.

What you can do — the resource map #

Grouping Graph’s territory by automation scenario:

AreaKey resourcesAutomation examples
Org & accounts (Entra ID)users, groupsOn/offboarding, org chart sync, account audits
Mail (Outlook)messages, mailFoldersReport delivery, inbox triage, attachment collection
Calendar (Outlook)events, calendarsRoom usage, team schedule digests, auto-created meetings
Files (OneDrive/SharePoint)drives, driveItems, sitesDocument backup, artifact upload, sharing links
Collaboration (Teams)teams, channels, chatMessagesNotifications, channel archiving, message collection
Security & adminauditLogs, signIns, reportsSign-in audits, usage reports

One instinct worth building early: Graph’s power is not any single feature but that these areas compose under one token and one SDK. “Read the roster from SharePoint → check each user’s calendar → mail the results → leave a summary in Teams” becomes a single script.

OData — the shared grammar for lists #

Every list-shaped resource accepts the OData query parameters — the same grammar everywhere, so learning it once pays across all areas.

OData query examples
# Only the fields you need (smaller responses — a core habit)
GET /v1.0/me/messages?$select=subject,from,receivedDateTime

# Filtering
GET /v1.0/users?$filter=department eq 'Engineering'

# Sorting + limiting
GET /v1.0/me/messages?$orderby=receivedDateTime desc&$top=10

# Count only
GET /v1.0/users/$count

$select in particular deserves to become a habit. Graph’s default responses carry many fields; selecting only what you need shrinks responses and processing time, and conserves the throttling budget we’ll discuss in part 7.

Graph Explorer — start today, without code #

The best learning tool for Graph is Microsoft’s web console, Graph Explorer (at aka.ms/ge). It runs Graph requests right in the browser, in two modes.

  • Without signing in — practice against a sample organization’s fake data. You can run GET /v1.0/me right now.
  • Signed in with your work account — requests run against your real data. It shows which permissions each request needs and lets you consent on the spot — the best hands-on way to internalize part 2’s permission concepts.

Explorer has one more practical use: the code snippets tab converts the request you just ran into SDK code for each language. “Finish the request in Explorer → move it to code” is the workflow we’ll repeat throughout this series.

What Graph is not — the boundaries #

To set expectations precisely:

  • Azure resource management is not Graph. Creating VMs and managing storage belongs to the Azure Resource Manager (ARM) APIs. Graph handles Microsoft 365 and Entra ID data.
  • The relationship with Power Automate — the no-code tool’s connectors largely call Graph under the hood. Simple flows that take a few clicks are faster in Power Automate; automations with complex conditions, integration with existing systems, or version-control needs belong to direct Graph calls. This series is about the latter.
  • On-premises Exchange and SharePoint servers are out of scope. Graph is the API of the cloud (Microsoft 365).

Summary #

  • Microsoft Graph opens all of Microsoft 365 — mail, calendar, files, Teams, org data — through the single graph.microsoft.com endpoint, with authentication unified on Entra ID tokens.
  • Production uses v1.0 only; beta is a preview that changes without notice.
  • Read URLs as me, users/{id}, and ownership paths; handle lists with the shared OData grammar ($select, $filter, $top). Make $select a habit.
  • Graph Explorer lets you start today without code, and its snippets tab turns finished requests into SDK code — the start of the working workflow.
  • Graph’s power is composition: read a roster, check calendars, send mail, post to Teams — one script.

Next is the key that opens this door: authentication. Entra ID app registration, the delegated/application distinction, and admin consent — the most important part of the series.

X