Migrating from v1
What changed
v2 is a ground-up redesign of the API. The base URL, envelope format, field names, and URL structure are all different.
Base URL
| URL |
|---|
| v1 | https://raw.datafornerds.io |
| v2 | https://api.datafornerds.io |
Endpoint paths
| v1 path | v2 path |
|---|
/ms/mswin/buildnumbers.json | /v2/microsoft/windows-update-history.json |
/ms/mswin/releases.json | /v2/microsoft/windows-release-history.json |
/ms/msapps/buildnumbers.json | /v2/microsoft/m365-apps-update-history.json |
/ms/msother/mslocales.json | /v2/microsoft/language-codes.json |
Response envelope
v1:
{
"DataForNerds": {
"LastUpdatedUTC": "2026-05-25T06:15:30.0000000Z",
"SourceList": ["https://support.microsoft.com/..."]
},
"Data": [...]
}
v2:
{
"metadata": {
"provider": "DataForNerds",
"apiVersion": "v2",
"dataset": "windows-update-history",
"recordCount": 1842,
"sourceUrls": ["https://support.microsoft.com/..."],
"lastModified": "2026-05-25T06:15:30.0000000Z",
"lastCollected": "2026-05-25T06:15:30.0000000Z"
},
"data": [...]
}
Key differences:
- The wrapper key changed from
DataForNerds to metadata and Data to data
LastUpdatedUTC / SourceList replaced by richer metadata fields
recordCount, dataset, provider, and apiVersion are new
Windows Update History fields
| v1 field | v2 field | Notes |
|---|
Win10Version | FullVersion | Same value (e.g., 10.0.19045.5198) |
Version | OSBuild | Same value (e.g., 19045.5198) |
ReleaseDate | ReleaseDate | Unchanged |
Article | KBNumber | Same value |
KBTitle | (removed) | Synthesized field, not present in v2 |
LTSCOnly | (removed) | v1-only derivation, not carried forward |
Comment | (removed) | Replaced by IsExpired boolean |
| (none) | OSType | New. "Client" or "Server" |
| (none) | MajorVersion | New. 10 or 11 |
| (none) | WindowsVersion | New. e.g., "22H2" |
| (none) | ReleaseType | New. "Standard", "Preview", "Out-of-band", etc. |
| (none) | ArticleUrl | New. Direct link to the KB article |
| (none) | IsExpired | New. Replaces the Comment field’s "- EXPIRED" convention |
Windows Release History fields
| v1 field | v2 field | Notes |
|---|
Version | OSBuild | Same value |
FullVersion | FullVersion | Unchanged |
Build | WindowsVersion | Same value (e.g., "22H2") |
| (none) | OSType | New |
| (none) | MajorVersion | New |
M365 Apps Update History fields
| v1 field | v2 field | Notes |
|---|
ReleaseDate | ReleaseDate | Unchanged |
Channel | ChannelName | v1 used abbreviated names; v2 uses full channel names |
Build | Build | Unchanged |
Version | Version | Unchanged |
FullBuild | FullBuild | Unchanged |
Channel name changes:
| v1 Channel | v2 ChannelName |
|---|
| Current | Current Channel |
| Monthly Enterprise | Monthly Enterprise Channel |
| Semi-Annual Enterprise Preview | Semi-Annual Enterprise Channel (Preview) |
| Semi-Annual Enterprise | Semi-Annual Enterprise Channel |
Language Codes fields
| v1 field | v2 field | Notes |
|---|
LangCode | LanguageCode | v1 returned an integer; v2 returns a string |
LangCodeHex | (removed) | Hex representation, not present in v2 |
LangName | Description | Same value |
LangTag | BCP47 | Same value |
Other changes
- JSON Schemas - every v2 dataset has a published schema at
/v2/microsoft/schemas/<dataset>.schema.json, linked via the Link response header
- Dataset catalog -
GET /v2/index.json returns a machine-readable list of all datasets with URLs, descriptions, and lastModified timestamps
- Changelogs - each dataset has a changelog at
/v2/microsoft/<dataset>.changelog.json
- CORS - v2 returns full CORS headers (
Access-Control-Allow-Origin: *); v1 did not
- Caching - v2 uses
Cache-Control: public, max-age=21600, stale-while-revalidate=86400 (6-hour cache); v1 used the same policy
- Deprecation header - all v1 responses now include
Deprecation: true and a Link header pointing to v2
Migration example
v1 (PowerShell):
$response = Invoke-RestMethod 'https://raw.datafornerds.io/ms/mswin/buildnumbers.json'
$updates = $response.Data
$updates | Where-Object { $_.Win10Version -like '10.0.22621.*' }
v2 (PowerShell):
$response = Invoke-RestMethod 'https://api.datafornerds.io/v2/microsoft/windows-update-history.json'
$updates = $response.data
$updates | Where-Object { $_.FullVersion -like '10.0.22621.*' }
Timeline
| Date | What happens |
|---|
| Now | Both v1 and v2 are live. v1 responses include Deprecation: true header. |
| November 1, 2026 | raw.datafornerds.io stops serving data. All v1 endpoints return errors. |