Get all behind-the-meter gas plants
curl --request GET \
--url https://api.cleanview.co/api/v1/gas-plants \
--header 'x-api-key: <api-key>'import requests
url = "https://api.cleanview.co/api/v1/gas-plants"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.cleanview.co/api/v1/gas-plants', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cleanview.co/api/v1/gas-plants",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cleanview.co/api/v1/gas-plants"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cleanview.co/api/v1/gas-plants")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cleanview.co/api/v1/gas-plants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"metadata": {
"total_count": 110,
"generated_at": "2026-10-15T16:00:00.000Z"
},
"customer": {
"id": "test_user_001",
"name": "Test Developer"
},
"data": [
{
"id": 88,
"plant_name": "Apollo Power Generation Facility",
"developer": "Williams",
"status": "Under Construction",
"nameplate_capacity_mw": 493.1,
"operating_capacity_mw": null,
"under_construction_capacity_mw": 493.1,
"permitted_capacity_mw": null,
"announced_capacity_mw": null,
"capacity_is_partial": false,
"generating_units": 27,
"firm_output_mw": 350,
"firm_output_basis": "permit_limit",
"first_operating_year": 2027,
"announcement_date": "2025-11-05",
"equipment_types": "Gas turbine, Reciprocating engine",
"oems": "Caterpillar, Siemens Energy, Solar Turbines",
"campus_id": 243,
"campus_name": "Meta Bowling Green",
"county": "Wood",
"state": "OH",
"latitude": 41.463279,
"longitude": -83.626865,
"air_permit_url": "https://storage.googleapis.com/data-center-source-files/gas-plants/88__meta-bowling-green-power-plant/2026-06-02_air-permit_ohio-epa-final-pti-p0139272-will-power-oh-apollo.pdf",
"sources": [
{
"title": "Final Air Pollution Permit-to-Install P0139272, Will-Power OH LLC - Apollo",
"document_type": "air-permit",
"document_date": "2026-06-02",
"url": "https://storage.googleapis.com/data-center-source-files/gas-plants/88__meta-bowling-green-power-plant/2026-06-02_air-permit_ohio-epa-final-pti-p0139272-will-power-oh-apollo.pdf",
"original_url": "https://edocpub.epa.ohio.gov/publicportal/ViewDocument.aspx?docid=4139063"
}
]
}
]
}
BTM Gas Plants
Gas Plants
Retrieve behind-the-meter gas plants built to power data centers, with status and capacity rolled up from their units
GET
/
gas-plants
Get all behind-the-meter gas plants
curl --request GET \
--url https://api.cleanview.co/api/v1/gas-plants \
--header 'x-api-key: <api-key>'import requests
url = "https://api.cleanview.co/api/v1/gas-plants"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.cleanview.co/api/v1/gas-plants', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cleanview.co/api/v1/gas-plants",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cleanview.co/api/v1/gas-plants"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cleanview.co/api/v1/gas-plants")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cleanview.co/api/v1/gas-plants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"metadata": {
"total_count": 110,
"generated_at": "2026-10-15T16:00:00.000Z"
},
"customer": {
"id": "test_user_001",
"name": "Test Developer"
},
"data": [
{
"id": 88,
"plant_name": "Apollo Power Generation Facility",
"developer": "Williams",
"status": "Under Construction",
"nameplate_capacity_mw": 493.1,
"operating_capacity_mw": null,
"under_construction_capacity_mw": 493.1,
"permitted_capacity_mw": null,
"announced_capacity_mw": null,
"capacity_is_partial": false,
"generating_units": 27,
"firm_output_mw": 350,
"firm_output_basis": "permit_limit",
"first_operating_year": 2027,
"announcement_date": "2025-11-05",
"equipment_types": "Gas turbine, Reciprocating engine",
"oems": "Caterpillar, Siemens Energy, Solar Turbines",
"campus_id": 243,
"campus_name": "Meta Bowling Green",
"county": "Wood",
"state": "OH",
"latitude": 41.463279,
"longitude": -83.626865,
"air_permit_url": "https://storage.googleapis.com/data-center-source-files/gas-plants/88__meta-bowling-green-power-plant/2026-06-02_air-permit_ohio-epa-final-pti-p0139272-will-power-oh-apollo.pdf",
"sources": [
{
"title": "Final Air Pollution Permit-to-Install P0139272, Will-Power OH LLC - Apollo",
"document_type": "air-permit",
"document_date": "2026-06-02",
"url": "https://storage.googleapis.com/data-center-source-files/gas-plants/88__meta-bowling-green-power-plant/2026-06-02_air-permit_ohio-epa-final-pti-p0139272-will-power-oh-apollo.pdf",
"original_url": "https://edocpub.epa.ohio.gov/publicportal/ViewDocument.aspx?docid=4139063"
}
]
}
]
}
The BTM gas plant endpoints require the
gas-plants scope on your API key. A key without it gets 403 INSUFFICIENT_SCOPE. Contact us to add it.Overview
Data centers that can’t wait for the grid are building their own gas plants. This endpoint returns one record per behind-the-meter gas plant built to power a data center. A plant is behind the meter when its power goes straight to the data center instead of through a utility meter. Each record has the plant’s developer, status, capacity, the data center campus it powers, its location, its air permit, and the documents Cleanview archived for it. This is a “download link” style endpoint that returns all records in a single response. There is no pagination.Plants and Units
A plant is one generation site. Its equipment is broken into units on Gas Plant Units, linked byplant_id. A unit is one equipment model at one stage of the build, with its own count, capacity, status and year. A plant with two engine models, each installed in two stages, has four units.
The plant’s status and capacity on this endpoint are rolled up from its units. The campus it powers is on Data Center Campuses, linked by campus_id.
Status Values
Each unit has its own status. A plant shows the status of its most advanced unit that isn’t canceled, so a plant with an operating first stage and a second stage under construction isOperating. A plant is Canceled only when every unit is.
| Status | Description |
|---|---|
Announced | Announced or applied for. No air permit or siting approval has been issued |
Permitted | An air permit or state siting approval has been issued, but construction hasn’t started |
Under Construction | Work on the generation equipment is underway: foundations, equipment on pads, stacks. Clearing and grading don’t count |
Operating | Generating power for its data center, including temporary bridge power |
Canceled | The project won’t be built |
Capacity
nameplate_capacity_mw is the number of machines times the manufacturer’s rating for each machine, summed over the units that aren’t canceled. Manufacturers rate gas turbines at 59°F at sea level and engines at 77°F. So one machine has one rating wherever it’s installed, and nameplate adds up across plants and manufacturers. A plant’s real output on a hot day or at altitude is lower.
operating_capacity_mw, under_construction_capacity_mw, permitted_capacity_mw and announced_capacity_mw split the nameplate capacity by unit status, so they add up to it. When capacity_is_partial is true, some units have no known capacity yet, and the capacity fields are a minimum.
firm_output_mw is the power the plant is contracted, permitted or stated to deliver to its data center. It’s usually 55% to 85% of nameplate, because of heat, altitude, the plant’s own load and spare machines. It’s only given when a document states it, and never estimated. firm_output_basis names the kind of document:
| Basis | Description |
|---|---|
contracted | A contract figure stated in a filing |
permit_limit | A permit or siting condition on the power the plant can deliver |
net_capacity | A grid-connected plant’s net capacity, from the EIA or a commission order |
developer_stated | The developer’s own statement of the power the plant delivers |
Air Permits and Sources
air_permit_url is Cleanview’s copy of the plant’s issued air permit, or its latest amendment, once the plant is Permitted, Under Construction or Operating. sources lists every document Cleanview archived for the plant, newest first, including permit applications and drafts. Each url is Cleanview’s archived copy, so it keeps working if the original is taken down. original_url is where the document was first published.
Example Requests
Get All Gas Plants
Get All Gas Plants
curl -H "x-api-key: your_api_key_here" \
"https://api.cleanview.co/api/v1/gas-plants"
Response Schema
{
"success": true,
"metadata": {
"total_count": 110,
"generated_at": "2026-10-15T16:00:00.000Z"
},
"customer": {
"id": "test_user_001",
"name": "Test Developer"
},
"data": [
{
"id": 88,
"plant_name": "Apollo Power Generation Facility",
"developer": "Williams",
"status": "Under Construction",
"nameplate_capacity_mw": 493.1,
"operating_capacity_mw": null,
"under_construction_capacity_mw": 493.1,
"permitted_capacity_mw": null,
"announced_capacity_mw": null,
"capacity_is_partial": false,
"generating_units": 27,
"firm_output_mw": 350,
"firm_output_basis": "permit_limit",
"first_operating_year": 2027,
"announcement_date": "2025-11-05",
"equipment_types": "Gas turbine, Reciprocating engine",
"oems": "Caterpillar, Siemens Energy, Solar Turbines",
"campus_id": 243,
"campus_name": "Meta Bowling Green",
"county": "Wood",
"state": "OH",
"latitude": 41.463279,
"longitude": -83.626865,
"air_permit_url": "https://storage.googleapis.com/data-center-source-files/gas-plants/88__meta-bowling-green-power-plant/2026-06-02_air-permit_ohio-epa-final-pti-p0139272-will-power-oh-apollo.pdf",
"sources": [
{
"title": "Final Air Pollution Permit-to-Install P0139272, Will-Power OH LLC - Apollo",
"document_type": "air-permit",
"document_date": "2026-06-02",
"url": "https://storage.googleapis.com/data-center-source-files/gas-plants/88__meta-bowling-green-power-plant/2026-06-02_air-permit_ohio-epa-final-pti-p0139272-will-power-oh-apollo.pdf",
"original_url": "https://edocpub.epa.ohio.gov/publicportal/ViewDocument.aspx?docid=4139063"
}
]
}
]
}
Response Fields
Metadata Section
| Field | Type | Description |
|---|---|---|
success | boolean | Indicates if the request was successful |
total_count | number | Total number of plant records returned |
generated_at | string | ISO 8601 timestamp when response was generated |
Gas Plant Fields
| Field | Type | Description |
|---|---|---|
id | number | Unique identifier for the plant. Units carry it as plant_id |
plant_name | string | The plant’s name in its permit, siting case or announcement; otherwise the data center’s name followed by “power plant” |
developer | string | Company that builds and owns the plant. Often not the data center developer: Williams builds Meta’s plants in Ohio |
status | string | Status of the plant’s most advanced unit that isn’t canceled (see Status Values) |
nameplate_capacity_mw | number | Number of machines × the manufacturer’s rating, summed over the units that aren’t canceled (MW) |
operating_capacity_mw | number | Nameplate capacity of the operating units (MW) |
under_construction_capacity_mw | number | Nameplate capacity of the units under construction (MW) |
permitted_capacity_mw | number | Nameplate capacity of the permitted units (MW) |
announced_capacity_mw | number | Nameplate capacity of the announced units (MW) |
capacity_is_partial | boolean | true when some units have no known capacity yet, so the capacity fields are a minimum |
generating_units | number | Number of turbines, engines and fuel cell servers that aren’t canceled. A minimum when a unit’s count isn’t public |
firm_output_mw | number | Power the plant is contracted, permitted or stated to deliver to its data center (MW). Only given when a document states it |
firm_output_basis | string | The kind of document behind firm_output_mw: contracted, permit_limit, net_capacity or developer_stated |
first_operating_year | number | Year the plant’s first unit began generating, or Cleanview’s estimate of when it will |
announcement_date | string | Date of the first public record of the plant (YYYY-MM-DD) |
equipment_types | string | Kinds of equipment at the plant, comma-separated: Gas turbine, Steam turbine, Reciprocating engine, Fuel cell |
oems | string | Equipment manufacturers at the plant, comma-separated |
campus_id | number | The data center campus the plant powers, as id in Data Center Campuses |
campus_name | string | Name of the data center campus the plant powers |
county | string | County where the plant’s generation equipment is |
state | string | Two-letter state code |
latitude | number | Latitude of the plant’s generation equipment, not the data center campus |
longitude | number | Longitude of the plant’s generation equipment, not the data center campus |
air_permit_url | string | Cleanview’s archived copy of the plant’s issued air permit, or its latest amendment. null until the plant is permitted |
sources | array | Every document Cleanview archived for the plant, newest first: title, document_type, document_date, url (Cleanview’s copy) and original_url |
Null Values:
null means Cleanview doesn’t know the value yet, not zero. A capacity field is null when no unit in it has a capacity, including when the plant has no units with that status. campus_id is null when the campus the plant powers isn’t in Data Center Campuses; campus_name is still given. equipment_types and oems are null until the equipment is public.Data Updates
Plant figures are computed from the unit records in Gas Plant Units on every request, so the two endpoints always agree.Authorizations
API key authentication using x-api-key header
Response
Successful response with all gas plants