3 Ways to Find Contract Details for Microsoft 365

Explore three methods to locate Microsoft 365 contract details fast, ensuring accurate account and renewal insights for admins
The author of the article Chris Shuptrine
Aug 2025
3 Ways to Find Contract Details for Microsoft 365

Keeping track of Microsoft 365 contracts can feel harder than deploying a mailbox. Renewal dates hide in different dashboards, account numbers change between portals, and a wrong click can ripple through licence planning.

Here we break the search into three options so you can pull billing IDs, subscription names, and renewal timelines in minutes, not hours. Pick the route that fits your role and rights.

Table of Contents

Use Microsoft 365’s UI

Use the Microsoft 365 admin center to review the contract linked to your subscription.

Step 1. Sign in as an admin

  • Open a browser and go to admin.microsoft.com.
  • Sign in with an account that holds either the Global or Billing admin role.

Step 2. Head to Billing > Your products

  • On the left nav, choose Billing. If the menu is collapsed, click the three-line icon first.
  • Pick Your products. Microsoft’s “Check your subscription details” article calls out the same step.

Step 3. Open the subscription’s detail pane

  • Locate the tile for the subscription you need.
  • Select the subscription name; a pane opens on the right.

Step 4. Locate contract info

  • Inside the pane, expand Subscription details if it isn’t already.
  • Look for a section labeled Contract or Service agreement. You’ll see:
  • Contract or Agreement number
  • Start and end dates
  • Renewal setting and term length

Step 5. Download the official document (optional)

  • Still in the pane, scroll to Documents.
  • Select the Service agreement PDF to download. Microsoft’s “Download your Microsoft Customer Agreement” page covers the same step.

Step 6. View earlier contracts

  • Back in Your products, choose History near the top.
  • Open any past term to see its detail pane, then repeat Step 4 for that contract.

Step 7. Check all agreements at once

  • On the left nav, return to Billing and select Invoices & payments.
  • Open the My agreements tab. Active contracts appear with their IDs and legal names.

If any menu is missing, your account may need a higher-level admin role.

Use Torii

Instead of combing through Microsoft 365 by hand, you can rely on Torii, a SaaS management platform, to surface your Microsoft 365 contract data. SMPs give teams a central dashboard for every SaaS subscription they pay for, turning scattered data into one reliable source.

1. Sign up for Torii

Reach out to Torii and request a free two-week trial account.

2. Connect your expense accounts & contracts to Torii

After your workspace is active, connect your financial systems (Coupa, QuickBooks, or whichever tool you use) to Torii. Doing so automatically brings the Microsoft 365 spend details into the platform.

You can also upload contract PDFs directly; Torii’s AI will read them and capture the costs for you.

You’ll find setup instructions for the Microsoft 365 integration here: Full setup instructions for the Microsoft 365 integration here.

3. Search for Microsoft 365 within Torii

Use the search bar at the top of the Torii dashboard to locate Microsoft 365. From that product page you’ll see license counts, total spend, upcoming renewal dates, and other key metrics, putting everything you need in one spot.

torii and microsoft 365

Or, chat with Eko

Looking for Microsoft 365 info while you’re already in Torii? Launch Torii’s AI helper, Eko. Tap the icon in the dashboard’s lower-right corner, ask in plain language, and the answer appears immediately in the chat thread.

using eko to find contract details in microsoft 365

Use Microsoft 365’s API

Here you’ll tap Microsoft Graph to list the contracts tied to your tenant and read things like contract type and display name.

1. Give your app permission to read contracts

  • Add the permission Contract.Read.All (or Directory.Read.All) to the Azure AD app you plan to use.
  • Grant admin consent so the permission works for tenant-wide data.

2. Get an access token

Start by requesting an access token with the OAuth 2.0 client-credentials flow. This curl example expects these variables to be set in your shell: TENANT_ID, CLIENT_ID, and CLIENT_SECRET.

curl -X POST https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-D "client_id=$CLIENT_ID" \
-D "client_secret=$CLIENT_SECRET" \
-D "scope=https%3A%2F%2Fgraph.microsoft.com%2F.default" \
-D "grant_type=client_credentials"

After the request completes, grab the access_token value from the JSON response and save it for the next calls.

3. List every contract in the tenant

Call the contracts endpoint to retrieve every agreement associated with the tenant, regardless of type or status.

curl -X GET https://graph.microsoft.com/v1.0/contracts \
-H "Authorization: Bearer ACCESS_TOKEN"

Microsoft Graph responds with a JSON array similar to the following example.

{
    "value": [
        {
            "id": "a1b2c3d4-e5f6-7890-ab12-34567890cdef",
            "contractType": "MSA",
            "displayName": "Contoso Sales Agreement",
            "defaultDomainName": "contoso.com",
            "customerId": "67890abc-1234-5678-90ab-cdef12345678"
        }
    ]
}

4. Grab one contract by ID

If you only need a single record, include the contract ID in the request path.

curl -X GET https://graph.microsoft.com/v1.0/contracts/a1b2c3d4-e5f6-7890-ab12-34567890cdef \
-H "Authorization: Bearer ACCESS_TOKEN"

5. Filter or project only the fields you care about

  • Filter on contract type:

GET /v1.0/contracts?$filter=contractType eq 'MSA'

  • Return only id and displayName:

GET /v1.0/contracts?$select=id,displayName

6. Handle the common hiccups

  • 401 Unauthorized: Token expired or wrong scope. Request a fresh token with Contract.Read.All.
  • 403 Forbidden: Permission added but admin consent missing.
  • 404 Not Found: The contract ID doesn’t exist in your tenant.

With those steps complete, you now have contract data ready for whatever comes next in your workflow. You can stream it into dashboards, billing tools, or any internal system that needs a clean contract feed.

Torii for SaaS Management

Looking to level up SaaS management across your organization and cut busywork? Torii’s SaaS Management Platform can:

  • Uncover shadow apps: AI keeps a constant eye on new tools spinning up across the company and flags anything unapproved the moment seems.
  • Trim expenses: Stop paying for unused seats and overlapping software by surfacing waste before the next invoice lands.
  • Automate onboarding and offboarding: Hand off joiner-mover-leaver tasks to automated workflows that handle provisioning and deprovisioning without human follow-up ever.
  • Stay ahead of renewals: Receive timely renewal alerts so contract deadlines stop sneaking past busy teams and draining next quarter’s budget.

Torii brings Finance, IT, and Security teams onto the same page with one unified SaaS management hub.

For more details and a closer look, visit Torii when you’re ready.

Frequently Asked Questions

Microsoft 365 contracts can be surfaced three ways: use the admin center’s Billing > Your products page, connect your tenant to Torii’s SaaS Management Platform, or query the Microsoft Graph contracts endpoint. Pick whichever route matches your admin rights, budget tools, or automation needs.

Open admin.microsoft.com as a Global or Billing admin, choose Billing, then Your products. Click the subscription name, expand Subscription details, and the Contract or Service agreement section shows the agreement number, start date, end date, renewal term, and other identifiers.

Torii aggregates license counts, total spend, upcoming renewal dates, contract PDFs, and even AI-extracted costs for Microsoft 365. With one search you see which plans are active, how many seats are unused, and when an auto-renewal will hit your finance system.

Your Azure AD app needs Contract.Read.All — or the broader Directory.Read.All — permission. After adding it, grant tenant-wide admin consent; otherwise Graph will reject calls to /contracts with 401 or 403 errors because the token lacks authority to read contract data.

Within the subscription’s detail pane in Microsoft 365, scroll to Documents and click the Service agreement PDF. This downloads the official Microsoft Customer Agreement for that term, giving Finance or Legal the signed copy they often request during audits.

A 401 usually means your access token expired or didn’t include Contract.Read.All scope; request a fresh token. A 403 indicates the permission was added but admin consent is missing. A 404 means the contract ID you queried doesn’t exist in the tenant.