Documentation 29
Azure DevOps quickstart · 3 min read
Keep azure-devops-node-api. Change one line.
The serverUrl is the organization URL, exactly like dev.azure.com — and the discovery contract the official SDKs route through (connectionData, resource areas, and the OPTIONS location service in both the per-area and the all-areas form) is served and verified against both of them, so your client just works.
Coverage, hosts and pinned snapshots for Azure DevOps — 189 of 232 read surfaces served and verified.
01 / Base URL
The organization URL, provider paths.
Point your client at https://ado.sandboxapis.dev/olympus-labs. Paths mirror dev.azure.com — envelopes, TF-shaped errors, api-version negotiation and all. Graph/Identities answer on the auxiliary ado-vssps. host, resolved automatically via resource areas.
curl "https://ado.sandboxapis.dev/olympus-labs/_apis/projects?api-version=7.1"02 / Drop in your client
azure-devops-node-api works unmodified.
The only change is the serverUrl.
import * as azdev from "azure-devops-node-api";
const connection = new azdev.WebApi(
"https://ado.sandboxapis.dev/olympus-labs",
azdev.getPersonalAccessTokenHandler("any-token"),
);
const git = await connection.getGitApi();
const repos = await git.getRepositories(); // the org's repos
const prs = await git.getPullRequests("parthenon", // pass the project too: the
{ status: 4 }, "olympus-labs"); // project-less route 404s
const build = await connection.getBuildApi();
const builds = await build.getBuilds("olympus-labs"); // same run numbers as
// the GitLab/Bitbucket renderingsBoth official SDKs are proved end to end rather than described: azure-devops-node-api and the Python azure-devops package each have their exact snippet executed against https://ado.sandboxapis.dev/olympus-labs by a script that checks the output, discovery handshake included — the two ask the location service differently, one area at a time and the whole catalogue at once, and both forms are served. Plain requests is verified alongside them, for a script that wants no dependency. Verified quickstarts →
03 / A real response
Live from the universe.
{
"id": "3ffe37f3-d0a3-4d49-95b3-d77d3294fc8b",
"name": "parthenon",
"url": "https://ado.sandboxapis.dev/olympus-labs/a2558cfa-3e94-49f8-992c-ec94ef0c47f2/_apis/git/repositories/3ffe37f3-d0a3-4d49-95b3-d77d3294fc8b",
"project": {
"id": "a2558cfa-3e94-49f8-992c-ec94ef0c47f2",
"name": "olympus-labs",
"url": "https://ado.sandboxapis.dev/olympus-labs/_apis/projects/a2558cfa-3e94-49f8-992c-ec94ef0c47f2",
"state": "wellFormed",
"revision": 11,
"visibility": "private",
"lastUpdateTime": "2026-04-26T17:20:00.8854655Z"
},
"defaultBranch": "refs/heads/main",
"size": 305600,
"remoteUrl": "https://ado.sandboxapis.dev/olympus-labs/olympus-labs/_git/parthenon",
"sshUrl": "git@ssh.ado.sandboxapis.dev:v3/olympus-labs/olympus-labs/parthenon",
"webUrl": "https://ado.sandboxapis.dev/olympus-labs/olympus-labs/_git/parthenon",
"isDisabled": false,
"isInMaintenance": false
}04 / Pin a snapshot
Deterministic CI.
Same env-var swap, a *.snap. host — byte-identical on every request.
# reproducible in CI
export AZDO_ORG_SERVICE_URL=https://ado-7-1.snap.sandboxapis.dev/olympus-labsTour the universe → · Coverage manifest → · Versioning & pinning →