API Overview
Base URL
https://api.datafornerds.io
All dataset endpoints are under the /v2/ path prefix.
Response Envelope
Every dataset response uses the same JSON envelope:
{
"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": [...]
}
Metadata fields
| Field | Type | Description | Example |
|---|---|---|---|
provider | string | Always "DataForNerds" | DataForNerds |
apiVersion | string | Always "v2" | v2 |
dataset | string | Dataset identifier matching the filename | windows-update-history |
recordCount | integer | Number of records in the data array | 1842 |
sourceUrls | string[] | URLs of the Microsoft pages this data was collected from | https://support.microsoft.com/... |
lastModified | datetime | When the data last changed (ISO 8601) | 2026-05-25T06:15:30.0000000Z |
lastCollected | datetime | When the collector last ran (ISO 8601) | 2026-05-25T06:15:30.0000000Z |
HTTP Methods
| Method | Behavior |
|---|---|
| GET | Returns the full JSON response |
| HEAD | Returns headers only (useful for checking freshness without downloading) |
| OPTIONS | Returns CORS preflight headers |
| All others | 405 Method Not Allowed |
Status Codes
| Code | Meaning |
|---|---|
| 200 | Success. JSON body returned |
| 304 | Not Modified. Your cached copy is still current (requires If-None-Match header) |
| 404 | Dataset not found |
| 405 | HTTP method not allowed |
Response Headers
| Header | Value | Notes |
|---|---|---|
Content-Type | application/json | All responses are JSON |
Cache-Control | public, max-age=21600, stale-while-revalidate=86400 | 6-hour client cache, 24-hour stale-while-revalidate |
ETag | "abc123..." | Content hash for conditional requests |
Last-Modified | Sun, 25 May 2026 06:15:30 GMT | When the R2 object was last uploaded |
Link | <.../microsoft/schemas/name.schema.json>; rel="describedby" | Points to the JSON Schema for this dataset |
Access-Control-Allow-Origin | * | CORS is fully open |
Access-Control-Allow-Methods | GET, HEAD, OPTIONS |
Conditional Requests
Use the ETag header to avoid downloading data that hasn’t changed:
# First request - save the ETag
curl -s -D- https://api.datafornerds.io/v2/microsoft/language-codes.json -o /dev/null 2>&1 | grep etag
# Subsequent requests - send the ETag back
curl -s -o /dev/null -w "%{http_code}" \
-H 'If-None-Match: "abc123"' \
https://api.datafornerds.io/v2/microsoft/language-codes.json
# Returns 304 if unchanged, 200 if updated
CORS
All endpoints allow cross-origin requests from any domain. No API key or authentication is required. You can call the API directly from browser JavaScript.
Dataset Catalog
GET /v2/index.json returns a catalog of all available datasets with their URLs, descriptions, schema URLs, and lastModified timestamps. The root path (/) and /v2/ both redirect to /v2/index.json.