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 #
- Each status is the last reported project status as of a dated source (status_as_of), not the status today.
- Locators are not building footprints or construction extents; some markers identify only a town or region, not a facility position.
- Empty or null values are unknown, never zero.
- Coverage is incomplete and varies by country.
Endpoints #
| Path | Description | Example |
|---|---|---|
| api/ | API root: dataset metadata, endpoint templates, downloads, licences and the citation. | example |
| api/ | Array of site summaries, sorted by name. | example |
| api/ | GeoJSON FeatureCollection of every site; feature properties are site summaries. | example |
| api/ | One site: typed site record, its projects and every evidence row. | example |
| api/ | Array of typed project records (CSV order). | example |
| api/ | One project with its site summary and evidence. | example |
| api/ | Array of typed evidence records (CSV order). | example |
| api/ | One evidence record with the projects and sites it supports. | example |
| api/ | Country summaries, by site count. | example |
| api/ | One country (upper-case ISO code) with its site summaries. | example |
| api/ | Counts by status, month, country, location type and source, with units and research audit metadata. | example |
| api/ | Every dataset version with counts, files, checksums and record-level changes from the previous version. | example |
| api/ | Labels and descriptions for coded values. | example |
| api/ | One site as a GeoJSON FeatureCollection (one feature), for GIS tools. | example |
| api/ | The sites of one country as a GeoJSON FeatureCollection. | example |
| api/ | The sites of one country as CSV (RFC 4180, CRLF, list columns as JSON arrays). | example |
| api/ | How to cite the current version: APA text, BibTeX, biblatex, RIS and CSL-JSON. | example |
| api/ | OpenAPI 3.1 description of every endpoint, with JSON Schemas of each response. | example |
| api/ | Index 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.
Explorer links #
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": [
…