Documentation 40

Guide · Microsoft Teams

How do I test a Microsoft Teams integration without a real tenant?

You do not need one. Point your client at a read-only Microsoft Teams replica that already holds the olympus-labs data set, and your code runs unchanged.

01 / The one change

Swap the base URL. Nothing else.

Your client talks to graph.microsoft.com. Point it at graph.sandboxapis.dev instead: same paths, same JSON, same headers, same status codes. No tenant to create, no seed script.

For CI, use a pinned host. This page uses teams-v1-g12.snap.sandboxapis.dev, the newest pin for Microsoft Teams, which answers the same bytes on every run, so an assertion written today still holds next month.

The live host, graph.sandboxapis.dev, re-rolls daily and can carry a newer generation of the data set than teams-v1-g12.snap.sandboxapis.dev; every answer on this page is for teams-v1-g12.snap.sandboxapis.dev.

02 / Run it now

One request, no account.

request.sh
curl -H 'Authorization: Bearer any-token' "https://teams-v1-g12.snap.sandboxapis.dev/v1.0/me/joinedTeams"

It answers with the teams the signed-in user has joined, the Argonauts among them, in Microsoft Graph's own OData value envelope.

03 / Writes

A write gets Microsoft Teams's own error shape.

Every host is read-only. A write answers 403 with Microsoft Teams's own error body, naming what you tried, so your client's existing error handling meets a shape it knows.

request.sh
curl -s -X POST "https://teams-v1-g12.snap.sandboxapis.dev/v1.0/teams" -H 'content-type: application/json' -d '{"displayName":"test"}'

The body is Graph's own error object: error.code is Forbidden, error.message names the method and path you tried and links the coverage page, and error.innerError carries a date and a request id minted per request.

04 / Where it stops

Coverage is counted, not claimed.

13 of 13 Microsoft Teams read surfaces are served and verified against Microsoft Teams's own published spec. A call to one that is not covered returns a 404 with an X-SandboxAPIs-Coverage header, never invented data. The row-by-row list is on the Microsoft Teams reference and the coverage page.

Next: read the Microsoft Teams quickstart, or run the four-hop walk to watch one incident cross four services.

What this is not

Read this before you rely on it.

SandboxAPIs is read-only: a write returns the provider's own error unless your key has opted in to scratch writes, and those never reach anybody else. Coverage is bounded, and the manifest that says exactly where it stops is public. The data is a simulated company, not yours and not a copy of anybody's. And it reproduces what each vendor documents and publishes, not the vendor's undocumented behaviour, so keep one test against the real service for that.