v1 end of life: raw.datafornerds.io will be retired on November 1, 2026. Migration guide →

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

MethodBehavior
GETReturns the full JSON response
HEADReturns headers only (useful for checking freshness without downloading)
OPTIONSReturns CORS preflight headers
All others405 Method Not Allowed

Status Codes

CodeMeaning
200Success. JSON body returned
304Not Modified. Your cached copy is still current (requires If-None-Match header)
404Dataset not found
405HTTP method not allowed

Response Headers

HeaderValueNotes
Content-Typeapplication/jsonAll responses are JSON
Cache-Controlpublic, max-age=21600, stale-while-revalidate=864006-hour client cache, 24-hour stale-while-revalidate
ETag"abc123..."Content hash for conditional requests
Last-ModifiedSun, 25 May 2026 06:15:30 GMTWhen 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-MethodsGET, 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.