Point @microsoft/microsoft-graph-client (or curl) at https://graph.sandboxapis.dev via the client's baseUrl option — clients target graph.microsoft.com, so graph.sandboxapis.dev is the drop-in prefix (teams.sandboxapis.dev aliases it). Auth is any Bearer token (real Graph wants an Entra JWT; any value passes here, but the header must be present — its absence answers Graph's real 401). This is the Microsoft Teams rendering of the org's team-messaging surface: the SAME channels, threads, and byte-identical message text the Slack host serves, in Graph's dialect — /v1.0/me/joinedTeams → /teams/{id}/channels → channel messages → replies, with OData paging (@odata.nextLink/$skiptoken; channel messages default to 20 per page). Everything in Graph outside the teamwork slice answers a coverage-honest Graph-shaped error.
Coverage badge
Full13/13 · 100%
The share of read rows with a final answer — served and verified, a deviation, retired upstream, or a reviewed empty/refusal. Computed in the coverage manifest, copied here.
graph.sandboxapis.devServed & verified
13 / 100%
Answering with real universe data, each response checked against Microsoft Teams's published spec by the conformance suite on this build.
The full read API
13
Every read surface Microsoft Teams publishes, deferred long tail included, minus the rows excluded by policy. Writes are out of scope: this universe is read-only.
Not served yet
0
Nothing — every read surface Microsoft Teams publishes is answered.
01 / The swap
No SDK of ours, no shim, no recorded fixtures. The same client library you already use, one environment variable different.
curl -H 'Authorization: Bearer any-token' "https://graph.sandboxapis.dev/v1.0/me/joinedTeams"Verified drop-in clients
@microsoft/microsoft-graph-client3.0.7The versions the conformance suite drives against this host on every build — pinned in coverage/client-pins.yaml, and watched weekly for upstream releases, because a client library moving without us is how a shipped integration breaks silently.
02 / Coverage by family
All 13 rows the coverage manifest carries for Microsoft Teams, deferred long tail included and nothing capped. Open a family, or filter by path to find the exact endpoint your client calls.
Status — what a conformance test found
Mode — what kind of answer a row gets
A row with no mode shown has not been judged yet. Modes are the manifest's own words, from coverage/MODES.yaml; every empty and refuse carries a written reason and a review date before it counts as final.
Badge — where Full starts
REST + GraphQL + git rows that are not `excluded`. Write operations are NOT rows (DECISIONS 2026-09-01 decision 9): they are counted in meta.write_operations and never enter this ratio.
13 read surfaces in 5 families
03 / What's simulated
Every Microsoft Teams call resolves against the same simulated data set every other provider serves. Counted from the teams-v1-g11 artifact (universe generation 11):
Each line below is one assertion in the conformance suite named beside it — run on every build, over one artifact, through the real renderers. Nothing is claimed here that no expect checks.
Every `body.content`, every `createdDateTime` second, the whole chain/reply partition, the per-message reaction sets and the user directory are the same on this host and on Slack — each dialect's own documented ordering normalised away first, and the residue asserted identical over full `@odata.nextLink` walks, not samples. A team's `/members` contains every member of the Slack channel roster, and any extra holds no channel membership anywhere.
Against Slack · parity/messaging-parity.test.ts
05 / Pinned snapshots
Each pin regenerates byte-identically on every request, so a test written against one never drifts. Generations are DIFFERENT universes, not versions of one — never swap a suffix expecting the same data.
teams-v1.snap.sandboxapis.devgeneration 6v1.0servedteams-v1-g10.snap.sandboxapis.devgeneration 10v1.0servedteams-v1-g11.snap.sandboxapis.devgeneration 11v1.0servedteams-v1-g8.snap.sandboxapis.devgeneration 8v1.0servedteams-v1-g9.snap.sandboxapis.devgeneration 9v1.0servedNeed an endpoint that is not served yet?
Every row Microsoft Teams's manifest carries is on this page, so “not here” is an answer rather than a gap in the rendering. Tell us which path and which client, and it moves up the queue — the order is set by what people ask for.