API REFERENCE
The buildout, as your agent calls it.
An agent-first, source-cited data layer for the US buildout. Two transports, one contract — call it from MCP or REST and get identical, cited JSON. The authoritative, machine-readable reference is always the live /v1/capabilities and each tool's describe schema.
Need exact fields and examples? The complete generated reference publishes every capability’s filters, metrics, citations, caveats, and checked JSON examples.
Browse the full API reference →The loop
Designed so an agent never has to guess:
- discover —
list_capabilitieslists every data point + how they join (anchors). - describe — each tool's schema returns its exact filters, group-bys, measures, and what it does not answer.
- query — filters +
group_by+ server-sideorder_by/top_n→ cited rows + summary. - verify —
get_source_evidencere-opens the raw file, re-hashes it (SHA-256), and returns the literal source cell.
Two surfaces, one contract
| Surface | Endpoint |
|---|---|
| Agent discovery card | GET /.well-known/agent.json |
| MCP discovery | GET /.well-known/mcp |
| MCP (streamable-http) | https://api.exascale.build/mcp |
| REST — discover | GET /v1/capabilities |
| REST — schema | GET /v1/power/capacity/schema |
| REST — query | POST /v1/power/capacity/query |
| REST — evidence | POST /v1/evidence/source-row |
Point an agent at the discovery card and it gets the whole map — endpoints, capabilities, and auth posture — in one GET.
Capabilities
Twenty-six live data points plus the capacity-factor compound — each cited to its source file and joinable where the source provides shared anchors (county_fips, state, balancing_authority_code, eia_plant_id). The always-current machine-readable list is /v1/capabilities.
| Data point | What it answers | |
|---|---|---|
power.capacity | Operating / planned / retired generator capacity (MW) — EIA-860M | live |
power.asset_ownership | Annual generator ownership shares and raw owner names — EIA-860; absence from the Owner schedule resolves to the same-vintage operator default | live |
power.generation | Net generation (MWh) plus separately cited total and electric-only fuel consumption (MMBtu) by plant, fuel, state, and balancing authority, with aligned history from 2014 to present — EIA-923 | live |
power.fuel_cost | Receipt-level delivered fuel costs (cents/MMBtu) and quantities — EIA-923; withheld costs remain explicit missing values | live |
power.plant_costs | As-filed FERC Form 1 plant capacity, generation, plant balances, fuel expense, and separate O&M line items; ERCOT coverage is explicitly partial | live |
natural_gas.prices | Daily Henry Hub spot prices ($/MMBtu) and monthly state-average electric-power prices ($/Mcf) — EIA; units stay separate and unavailable state-months remain explicit nulls | live |
power.capacity_factor | How hard a fleet runs — generation ÷ (capacity × hours), cited to both sources (compound) | live |
power.demand | Hourly electricity demand (MW) by balancing authority — EIA-930 | live |
power.demand_rollup | Hourly demand (MW) for the US48 national total + 13 EIA regions — EIA-930 | live |
power.retail_sales | Annual retail sales (MWh), revenue, and customers by state & sector — EIA-861 | live |
power.price_ercot | ERCOT day-ahead settlement-point prices ($/MWh), hourly — NP4-190-CD | live |
power.interconnection_queue_* | Generation projects requesting grid connection across all 7 US ISOs/RTOs — MISO, PJM, CAISO, NYISO, ISO-NE, ERCOT, SPP (requested MW, status, county; a request, never read as built) | live |
ai_infrastructure.construction | Monthly data-center & semiconductor-fab construction spend ($M) — Census C30 | live |
ai_infrastructure.employment | Quarterly jobs, establishments & wages by US / state / county — data-center (NAICS 518210) & semiconductor (334413) industries plus the local-economy series for every US county: total all-industries, construction, commercial building, retail, accommodation, food service — BLS QCEW | live |
ai_infrastructure.trade | Monthly US imports of all integrated circuits (HS-8542) — value (USD) by country of origin — Census International Trade | live |
ai_infrastructure.equipment_trade | Monthly US imports of chip-making equipment (HS-8486, incl. flat-panel machinery) — value (USD) by country of origin — the fab-buildout tooling leg — Census International Trade | live |
ai_infrastructure.production | Monthly semiconductor & electronic-component production index (2017=100) and capacity utilization (%) — NAICS 3344, history to 1972, the fab-output leg — Fed G.17 | live |
robotics.adoption | Share of US manufacturing plants using industrial robots, share of workers exposed, and robotics capex — by industry, state, and plant size (ASM 2018-2021 + 2022 Economic Census editions, never spliced) — Census Industrial Robotic Equipment | live |
space.satellite_filings | The FCC satellite licensing docket — every space-station filing back to the 1960s (applicant, application type, status, lifecycle dates), from the FCC's own daily IBFS dump; new-filing intake ends at the FCC's ICFS cutover (~mid-2025, engraved) | live |
robotics.trade | Monthly US imports of industrial robots (HS-10 8479.50 + 8428.70) — customs value (USD) and robot counts by country of origin — Census International Trade | live |
| Space | Launch / spaceport buildout, on the same power substrate | rolling out |
A query, and what comes back
curl -X POST https://api.exascale.build/v1/power/capacity/query \
-H 'content-type: application/json' \
-d '{"group_by":["state"],"order_by":"nameplate_mw","top_n":3}'
{
"as_of": "2026-04-01",
"summary": { "group_count": 51, "totals": { "nameplate_mw": 1392666.4 } },
"rows": [
{ "group": {"state":"TX"}, "metrics": {"nameplate_mw": 200429.4},
"lineage": {"citation_ref": "c1"} }
],
"citations": { "c1": { "source_rows_count": 2437,
"verify": { "source_id":"energy.eia.eia860m", "source_file":"april_generator2026.xlsx",
"sheet":"Operating", "source_row":26, "raw_file_sha256":"ec15…",
"as_of":"2026-04-01" } } }
}
Pass that verify object to /v1/evidence/source-row and the response includes "hash_verified": true with the literal row values — proof, in one call.
Honesty by design
Each tool declares what it won't answer (e.g. capacity is MW, not generation MWh), so your agent declines out-of-scope questions instead of fabricating. Results also carry scope notes on known traps (cumulative vs. flow, region scope, signed measures). Defaults are sensible (current operating fleet, US-only) and never gate what you can reach.
Troubleshooting
Errors are designed to tell an agent what to do next, not just fail:
- 429 — rate limited. You hit a fair-use limit; the response includes
retry_after(seconds). Back off and retry. - 400 — invalid query. The error names the offending parameter and the allowed values; call the tool's
describe/schemafor valid filters, group-bys, and measures. - Empty result. Your filters matched no rows — widen them, or check the data point's scope in
describe. Defaults are the current operating fleet, US-only. - Evidence won't verify. A
raw_hash_mismatchorcitation_not_servederror means the snapshot was superseded — re-query for the currentas_ofand pass the freshverifyhandle. - Connection / health. Endpoint is
https://api.exascale.build/mcp(streamable HTTP). Latest-snapshot evaluation is available without a key; identified and historical access usesAuthorization: Bearer <key>. Health check:GET https://api.exascale.build/v1/health.
Still stuck? Email info@exascaledata.net.