Quickstart
Set your key as an environment variable, then call the health endpoint. Every example on this page targets production.
export MSCHANGES_API_KEY='msc_live_…'
curl -H "x-api-key: $MSCHANGES_API_KEY" \
https://mc.msnugget.com/api/v1/health
{ "status": "ok", "changes": 2164, "products": 7 }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.
Endpoints
/healthService status and current dataset size.
/productsProduct catalog, colors and dataset metadata.
/changesNewest documentation changes with filtering and pagination.
/changes/{id}One documentation change by its stable identifier.
Filter the change feed
Combine query parameters to narrow the feed. Results are newest first; pagination uses limit and offset.
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.curl -H "x-api-key: $MSCHANGES_API_KEY" \
"https://mc.msnugget.com/api/v1/changes?product=Intune&since=2026-06-01&limit=5"
Predictable limits
Strongly consistent Cloudflare Durable Objects enforce both layers before expensive dataset work begins.
Responses expose RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy. A blocked request returns 429 with Retry-After.
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.