Substation capacity API
Capacity per substation, from every publication that names it
Find substations by name, operator, voltage, area or distance, and read every capacity record their operators publish for them — with the asset's identifiers in each source, and its location at exactly the precision the operator gave.
Free plan, 250 requests a month, no card.
One substation, several names, several files
A transmission operator and a distribution operator may both publish figures for the same site, under different names and codes. A heatmap names it one way, a queue register another. Joining them by hand means guessing, and a wrong join puts one site's headroom on another's map.
Every asset here has a stable id of our own and a list of its identities in each source, with how each was matched. Matches the resolver is unsure of go to a human; two assets on the same plot are marked related, not merged.
What an asset carries
- Asset type (substation, node, busbar, feeder, transformer, congestion zone, connection point, grid cell or area), voltage and network level.
- A location at the operator's precision — exact, approximate, obfuscated, municipality or region — never improved from another source.
- Its identity in every source that names it, with the match method, and related assets on the same site.
- A capacity summary: how many series, how many withheld, from which sources, and when they last changed.
Endpoints
| Method | Path | Returns |
|---|---|---|
| GET | /v1/substations | Search: country, operator, q, bbox, radius, voltage, has_capacity. |
| GET | /v1/substations/{id} | One asset: identities, related assets, summary. |
| GET | /v1/substations/{id}/capacity | Its current records, filterable by every dimension. |
| GET | /v1/capacity/nearby | Records around a point, sorted by distance. |
| GET | /v1/assets.geojson | Asset points for a map, no values. No key needed. |
Example
Request
curl "https://api.gridcapacityapi.com/v1/substations?country=GB&voltage_min_kv=33&has_capacity=true&q=park" \ -H "Authorization: Bearer gc_live_..."Voltage filters use the asset's published voltage. has_capacity keeps only assets with at least one capacity record, served or withheld.
Response shapeplaceholder values — not a capacity claim
{
"data": [
{
"id": "sub_…",
"type": "substation",
"name": "…",
"slug": "…",
"country": "GB",
"operator": {
"id": "op_…",
"slug": "…",
"name": "…",
"type": "DSO"
},
"network_level": "…",
"voltage_kv": 33,
"location": {
"type": "Point",
"coordinates": [
0,
0
],
"precision": "exact"
}
}
],
"pagination": {
"has_more": false,
"next_cursor": null,
"limit": 20
},
"meta": {
"request_id": "req_…"
}
}What the API holds today
Read from the API as this page renders. A source is listed with its rights status, because a listed source is not always a served one.
| Country | Status | Sources served | Assets | Newest operator date |
|---|---|---|---|---|
| United Kingdom | Partial | 14 | 4,920 | 14 Aug 2026 |
| Netherlands | Partial | 3 | 1,245 | 13 Sep 2026 |
| Belgium | Live | 3 | 1,139 | 24 Sep 2026 |
| France | Live | 3 | 5,237 | 25 Aug 2026 |
| Spain | Partial | 0 | 16,467 | 9 Sep 2026 |
| Portugal | Partial | 0 | 461 | 11 Jul 2026 |
| Austria | Partial | 0 | 443 | 29 Jul 2026 |
| Denmark | Live | 1 | 160 | 1 Feb 2026 |
| Italy | Partial | 0 | 110 | 1 Sep 2026 |
| Switzerland | Live | 1 | 778 | — |
What people build with it
Asset pages in your product
Link your own site records to a stable asset id and show its operators' figures beside them.
Radius screening
Every record within a radius of a candidate site, nearest first, in one call.
Maps
Plot asset points from the public GeoJSON and fetch values only for what the user clicks.
Questions
Why are some locations imprecise?
Is OpenStreetMap geometry used?
Do asset ids ever change?
Start building on grid-capacity data
A key in under a minute, on the Free plan.