API

A static, read-only JSON API at https://kiankyars.github.io/datacenter-atlas/api/v1/. Plain files over HTTPS: no key, no sign-up and no rate limit beyond GitHub Pages fair use. GitHub Pages sends CORS headers, so browsers can fetch it from any origin.

The path is versioned. Within v1, changes are additive only: new fields or endpoints may appear, existing ones keep their meaning. A breaking change would get a new path. api/v1/index.json names the dataset version it serves; every version has its own download directory and version page.

Read before using #

Endpoints #

PathDescriptionExample
api/v1/index.jsonAPI root: dataset metadata, endpoint templates, downloads, licences and the citation.example
api/v1/sites.jsonArray of site summaries, sorted by name.example
api/v1/sites.geojsonGeoJSON FeatureCollection of every site; feature properties are site summaries.example
api/v1/sites/{site_id}.jsonOne site: typed site record, its projects and every evidence row.example
api/v1/projects.jsonArray of typed project records (CSV order).example
api/v1/projects/{project_id}.jsonOne project with its site summary and evidence.example
api/v1/evidence.jsonArray of typed evidence records (CSV order).example
api/v1/evidence/{evidence_id}.jsonOne evidence record with the projects and sites it supports.example
api/v1/countries.jsonCountry summaries, by site count.example
api/v1/countries/{iso2}.jsonOne country (upper-case ISO code) with its site summaries.example
api/v1/stats.jsonCounts by status, month, country, location type and source, with units and research audit metadata.example
api/v1/versions.jsonEvery dataset version with counts, files, checksums and record-level changes from the previous version.example
api/v1/vocabularies.jsonLabels and descriptions for coded values.example
api/v1/sites/{site_id}.geojsonOne site as a GeoJSON FeatureCollection (one feature), for GIS tools.example
api/v1/countries/{iso2}.geojsonThe sites of one country as a GeoJSON FeatureCollection.example
api/v1/countries/{iso2}.csvThe sites of one country as CSV (RFC 4180, CRLF, list columns as JSON arrays).example
api/v1/citation.jsonHow to cite the current version: APA text, BibTeX, biblatex, RIS and CSL-JSON.example
api/v1/openapi.jsonOpenAPI 3.1 description of every endpoint, with JSON Schemas of each response.example
api/v1/schemas/index.jsonIndex of the JSON Schemas (2020-12) of every API response and record type.example

GitHub Pages serves .ndjson, .sqlite and SHA256SUMS as application/octet-stream and .zip as application/x-zip-compressed; identify formats by file extension or by media_type here, not by Content-Type.

Machine-readable contract #

api/v1/openapi.json is an OpenAPI 3.1 description of every endpoint; import it into Swagger UI, Postman or a code generator. Each response and record type also has a JSON Schema (2020-12), listed in api/v1/schemas/index.json. The schemas are generated from the dataset's schema.json and the descriptions on this page; new optional fields may appear within v1. Language models and agents can start from llms.txt.

The map explorer keeps its view in the URL (q, country, status, locator, power, from, to, sort and #site=<site_id>), so a link reproduces a filtered view, for example ?country=US. The parameters, the columns of the explorer's CSV and GeoJSON exports and its optional WebMCP tools for browser agents are documented in the maintainer notes.

Response fields #

Records are typed from the source schema.json: empty CSV values become null; *_json columns become parsed JSON without the suffix; numbers, integers and booleans are JSON types. Statuses are the last reported project status on the status date. Absolute URLs in responses start with the base_url given in api/v1/index.json. The field dictionary describes every column and coded value, and the methodology explains how identifiers are formed and how long they stay valid. GeoJSON responses orient polygon rings as RFC 7946 requires (exterior rings counterclockwise); the CSV files and typed records keep the original ring order.

Site summaries #

sites.json, sites.geojson properties and country files.

site_id
Atlas site identifier.
name
Site or campus name.
country
Country or territory name.
country_iso_a2
ISO 3166-1 alpha-2 code.
latitude
Display anchor latitude (WGS 84). Not a footprint centroid.
longitude
Display anchor longitude (WGS 84).
geometry_type
Point, Polygon or MultiPolygon.
official_boundary
true when any project at the site uses an official boundary geometry.
locator_scopes
Geometry use scopes of the site (sites.csv geometry_use_scopes_json).
statuses
Distinct last reported project statuses of the site's projects.
newest_status_as_of
Latest project status date at the site.
oldest_status_as_of
Earliest project status date at the site.
project_count
Number of linked projects.
projects
Linked projects as {project_id, name, status, status_as_of}, sorted by name.
status_publishers
Sorted distinct publishers of the projects' status evidence.
power_observations
Typed power observations of the site's projects as {project_id, metric, stage, low, base, high, unit, as_of_date}, ordered by project name then metric. Planned or design values are not installed capacity.
verification_posture
Verification basis code (see vocabularies).
independent_imagery_verification
Whether imagery verification is claimed; false throughout.
url
Absolute URL of the site page.
api_url
Absolute URL of the full site document.
geometry_licenses
Sorted distinct licences of the site's geometry evidence rows (see the derived site field of the same name).
geometry_attributions
Sorted distinct attributions of the site's geometry evidence rows.

Country summaries #

countries.json and each country document.

country_iso_a2
ISO 3166-1 alpha-2 code (upper case); used in the country API paths.
country
Country or territory name.
slug
Lower-case ISO code, used in the country page URL.
site_count
Number of physical sites in the country.
project_count
Number of projects at those sites.
statuses
Number of projects per last reported project status (counts projects, not sites), most frequent first.
site_ids
Sorted site_id values of the country's sites.
url
Absolute URL of the country page.
api_url
Absolute URL of the country JSON document (api/v1/countries/<ISO>.json).
geojson_url
Absolute URL of the country's sites as GeoJSON (api/v1/countries/<ISO>.geojson).
csv_url
Absolute URL of the country's sites as CSV (api/v1/countries/<ISO>.csv).

Statistics #

stats.json: every map with its unit.

counts
Record counts of the version (see Counts). Keys come from the data snapshot manifest plus four derived counts.
by_status
Projects per last reported project status (unit: projects; sums to counts.projects).
by_country
Sites per country name (unit: sites; sums to counts.physical_sites).
by_status_month
Projects per month (YYYY-MM) of status_as_of (unit: projects).
by_geometry_type
Sites per geometry type; Polygon and MultiPolygon are counted separately here (unit: sites).
by_locator_scope
Projects per geometry_use_scope code (unit: projects). reviewed_site_locator here is one specific scope code; counts.reviewed_site_locator_projects instead counts every project with any reviewed locator.
by_verification_posture
Projects per verification posture code (unit: projects).
by_evidence_kind
Evidence rows per kind (unit: evidence rows; sums to counts.evidence).
by_evidence_license
Evidence rows per licence code; rows without a licence count as 'unspecified' (unit: evidence rows).
by_power_metric
Typed power observations per metric (unit: observations, not projects). Efficiency (PUE) and annual-energy observations are not included.
release_gates
Legacy research checks from selection-report.json; lists are replaced by their lengths.
units
The unit each by_* map counts: projects, sites, evidence_rows or observations.

Counts #

The counts object of index.json, stats.json and atlas.json.

physical_sites
Physical sites (rows of sites.csv).
projects
Projects (rows of projects.csv).
evidence
Evidence rows (rows of evidence.csv).
countries
Distinct countries and territories with at least one site.
non_us_sites
Sites outside the United States.
official_boundary_projects
Projects whose geometry is an official boundary (geometry_use_scope official_boundary).
reviewed_site_locator_projects
Projects with a reviewed locator (campus, project or site locator), not only the geometry_use_scope code reviewed_site_locator. Official-boundary and host-estate-context projects are not included.
host_estate_context_projects
Projects whose geometry only gives host-estate locality context (geometry_use_scope host_estate_context): the estate around the site, not a locator of the site. Present only in data updates that have such projects.
polygon_sites
Sites with a Polygon or MultiPolygon geometry (derived; MultiPolygon sites are included).
point_sites
Sites with a Point geometry (derived).
power_observation_projects
Projects with at least one typed power observation (derived). Efficiency and annual-energy observations do not count.
multi_project_sites
Sites with more than one project (derived).
imported_source_records
Original project records preserved by consolidation, including multi-site programs and unresolved identities.
snapshot_only_records
Multi-site or unresolved source records retained outside the counted site and project tables.
imported_source_references
Original record-local source references preserved in the evidence table.

Versions #

Each entry of versions.json.

id
Version identifier: the dataset directory name.
kind
Publication category: published for date-based updates; older snapshots retain their original archive category.
label
Human-readable version name.
checkpoint_date
Date the data snapshot was recorded.
lifecycle_reference_date
Date used to calculate observation age. Equals the update date for date-based updates; older snapshots retain their original reference date.
release_status
Published for date-based updates; older snapshots retain their original publication status.
publishable_as_final
True for published data updates. Historical snapshots retain the result of their original publication review.
counts
Record counts from the version's manifest.
manifest_sha256
SHA-256 of the version's manifest.json, which binds every original file.
files
Every file in downloads/<id>/: the original data snapshot files (derived false; they never change) and, for versions published as current, the derived formats, zip and SHA256SUMS written by the site builder (derived true; rebuilt by each site build).
download_base_url
The version's download directory; its index page lists every file with its checksum.
repository_url
The version's directory in the source repository.
added_site_ids
Sites in this version that were not in the previous one.
removed_site_ids
Sites of the previous version that are not in this one.
page_url
The version's HTML page with its changes and citation.
derived_downloads
Whether downloads/<id>/ also holds derived formats and a zip.
changes
Record-level changes from the previous version: for sites, projects and evidence the added, removed and changed IDs (with the names of the changed CSV columns), and columns added or removed per table.

Index #

api/v1/index.json.

api_version
API version of this path ("1").
name
Site name.
description
Site tagline.
base_url
Absolute URL every other URL starts with.
repository_url
Source repository.
dataset
The current data snapshot with counts, update date, observation date range and manifest hash. Observation dates are separate from the update date.
endpoints
Absolute URL templates of every endpoint; replace {site_id}, {project_id}, {evidence_id} or {iso2}.
downloads
Files of downloads/latest/ with format, media type, size, SHA-256 and pinned URL under downloads/<id>/.
license
Licence layering: Atlas data, code, OpenStreetMap-derived geometries (ODbL) and third-party terms.
attribution_url
Attribution and legal notices page.
docs_url
Human-readable API guide.
build
Source commit the site was built from (null for a local build).
title
Dataset title used in citations.
caveats
The four rules every reader of the data needs.
attribution
Attribution statement to use when reusing the data.
citation
Citation of the current version (APA style).
citation_url
All citation formats (api/v1/citation.json).
openapi_url
OpenAPI 3.1 description of the API.
schemas_url
Index of the JSON Schemas of every response.
llms_txt_url
Plain-text guide for language models and agents.
versions_url
Versions page.
downloads_url
Index of the download directories.
dataset_files_url
Download directory of the current version.
feeds
Atom feeds of new versions and new sites.
media_type_note
How GitHub Pages labels some download formats.

Examples #

curl and jq

curl -s https://kiankyars.github.io/datacenter-atlas/api/v1/sites.json | jq '.[] | {name, country, statuses, newest_status_as_of}'
curl -s https://kiankyars.github.io/datacenter-atlas/api/v1/stats.json | jq .by_status

JavaScript

const index = await (await fetch("https://kiankyars.github.io/datacenter-atlas/api/v1/index.json")).json();
const sites = await (await fetch(index.endpoints.sites)).json();
const first = await (await fetch(index.endpoints.site.replace("{site_id}", sites[0].site_id))).json();
console.log(first.site.name, first.projects.length, first.evidence.length);

Python

import json
import urllib.request

with urllib.request.urlopen("https://kiankyars.github.io/datacenter-atlas/api/v1/sites.json") as response:
    sites = json.load(response)
for site in sites[:5]:
    print(site["name"], site["statuses"], site["newest_status_as_of"])

Citation #

Kyars, K. (2026). Data Center Atlas (2026-10-27) [Data set]. Source files

@misc{kyars2026datacenteratlas,
  author = "Kyars, Kian",
  title  = "Data Center Atlas",
  year   = "2026",
  note   = "Data as published 2026-10-27",
  url    = "https://kiankyars.github.io/datacenter-atlas/downloads/2026-10-27-research-hundredsecond/"
}

Also as BibTeX file, RIS (EndNote, Zotero, Mendeley) and JSON with CSL-JSON and biblatex.

Example response #

The first 60 lines of api/v1/sites/vcc-site-7e0aadb2cd0ce2755f0d.json, pretty-printed (the file itself is minified):

{
  "api_version": "1",
  "dataset": {
    "id": "2026-10-27-research-hundredsecond",
    "label": "2026-10-27 · 838 sites",
    "release_status": "published",
    "publishable_as_final": true,
    "checkpoint_date": "2026-10-27",
    "lifecycle_reference_date": "2026-10-27",
    "updated_at": "2026-10-27",
    "observation_window_start": "2024-08-06",
    "observation_window_end": "2026-10-27"
  },
  "site": {
    "site_id": "vcc-site-7e0aadb2cd0ce2755f0d",
    "physical_site_stable_key": "curated:telehouse-canada-151-front-street-west-toronto",
    "name": "151 Front Street West Data Centre (Telehouse Canada), Toronto",
    "country": "Canada",
    "country_iso_a2": "CA",
    "latitude": 43.6446834278069,
    "longitude": -79.383946611135,
    "geometry": {
      "coordinates": [
        -79.383946611135,
        43.6446834278069
      ],
      "type": "Point"
    },
    "geometry_type": "Point",
    "geometry_source_entity_kinds": [
      "campus"
    ],
    "geometry_derivations": [
      "direct_geometry"
    ],
    "geometry_methods": [
      "city_of_toronto_one_address_repository_address_point_id_7929376_published_wgs84_unchanged"
    ],
    "geometry_scope_classes": [
      "official_municipal_address_point_of_operator_stated_facility_address"
    ],
    "geometry_authority_classes": [
      "official_source"
    ],
    "geometry_use_scopes": [
      "campus_locator"
    ],
    "geometry_precision_scopes": [
      "City of Toronto One Address Repository Land address point for 151 Front St W, the address Telehouse Canada gives for this data centre; the catalogue says points are positioned within the parcel or the building footprint. Used as the campus locator for the multi-tenant carrier-hotel building: it locates the building's civic address, not a floor, suite or surveyed building centre, and does not show where in the building any data hall lies."
    ],
    "horizontal_uncertainty_metres": null,
    "horizontal_uncertainty_unknown_reason": "The City of Toronto publishes no positional accuracy for One Address Repository points; the catalogue states only that points lie within the parcel or the building footprint, and the footprint and parcel were not retrieved.",
    "geometry_evidence_ids": [
      "073e9a8a-df12-5c3f-a8c6-179c863df5b7"
    ],
    "project_count": 1,
    "project_ids": [
      "b2d66094-8af2-56ec-973b-06672cba38f8"
    ],
    "project_stable_keys": [
…