Production · API v1

Microsoft docs changes, ready for your workflow.

Use the same change feed as MSChanges in scripts, dashboards and automations. Read-only, API-key protected and globally rate-limited.

Base URL https://mc.msnugget.com/api/v1
01

Quickstart

Set your key as an environment variable, then call the health endpoint. Every example on this page targets production.

Shell
export MSCHANGES_API_KEY='msc_live_…'

curl -H "x-api-key: $MSCHANGES_API_KEY" \
  https://mc.msnugget.com/api/v1/health
200{ "status": "ok", "changes": 2164, "products": 7 }
02

Authentication

Send your API key with either an Authorization bearer token or the x-api-key header. Keep keys out of frontend code and public repositories.

Bearer tokenAuthorization: Bearer msc_live_…
API key headerx-api-key: msc_live_…
03

Endpoints

GET/health

Service status and current dataset size.

GET/products

Product catalog, colors and dataset metadata.

GET/changes

Newest documentation changes with filtering and pagination.

GET/changes/{id}

One documentation change by its stable identifier.

04

Filter the change feed

Combine query parameters to narrow the feed. Results are newest first; pagination uses limit and offset.

ParameterPurpose
productExact product, for example Intune or Entra.
areaExact product sub-area.
statusadded, modified, renamed or removed.
sinceInclusive ISO date, such as 2026-06-01.
qSearch title, product, area, message, author and path.
limitPage size: default 50, maximum 200.
offsetNumber of records to skip.
Filtered request
curl -H "x-api-key: $MSCHANGES_API_KEY" \
  "https://mc.msnugget.com/api/v1/changes?product=Intune&since=2026-06-01&limit=5"
05

Predictable limits

Strongly consistent Cloudflare Durable Objects enforce both layers before expensive dataset work begins.

60requests/minute per client IP
20requests/minute per valid API key

Responses expose RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy. A blocked request returns 429 with Retry-After.

06

Error responses

Every error uses the same JSON envelope, so clients can branch on error.code.

{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit of 20 requests per minute exceeded."
  }
}
401 Missing or invalid key 403 Disabled key 404 Route or change not found 405 Unsupported method 429 Rate limit exceeded 503 Dataset unavailable

Need an API key?

Tell us briefly what you want to build. We approve and issue personal keys manually.