Power Interconnection Queue (ERCOT) API v1
Generated from
core.contract.describe_power_interconnection_queue_ercot_v1()and checked fixture-backed examples. Do not hand-edit the example JSON files.
Capability
- Capability:
power.interconnection_queue_ercot - Primitive:
query_power_interconnection_queue_ercot_v1 - Status:
available - Current source:
energy.ercot.queue - Source publisher: Electric Reliability Council of Texas (ERCOT)
- Snapshot behavior:
as_of = latestresolves to an exact snapshot date in every response.
What It Can Answer
- Which generation projects have REQUESTED to connect to the ERCOT (Texas) grid, by county, fuel, technology, zone, lifecycle, and size.
- The requested capacity (MW) of each queued ERCOT project, cited to its source row.
- The as-reported lifecycle (ACTIVE / INACTIVE / CANCELLED, derived from ERCOT's sheet structure), kept separate from build progress.
- The build-progress signal — the GIM Study Phase token string and the milestone dates — as ERCOT reports them.
- Row-level detail records when
include_recordsis true. - Raw workbook row evidence for any returned row-level citation.
Represented Facts
ERCOT's GIS Report lists each generation project's REQUESTED interconnection capacity (capacity_mw — one figure, no summer/winter split) across four lifecycle sheets (Large/Small Gen active, plus Inactive and Cancellation); a request, not built capacityERCOT publishes no status column, so application_status (ACTIVE / INACTIVE / CANCELLED) is derived from the sheet the project is filed on (sheet_name served verbatim), and the build-progress reading is carried SEPARATELY in gim_study_phase + the milestone dates, never collapsedERCOT files a hybrid project's legs as separate INR rows linked only by a shared poi_location (no in-row hybrid encoding); the GIS Report is generation-only and reports no load/data-center type
Data Point Contract
- Data point:
power.interconnection_queue_ercot - Product spec:
blocks/power_interconnection_queue_ercot/card.md - Grain:
project_snapshot - Source basis:
energy.ercot.queue - Represented fact: The ERCOT generator interconnection queue — ERCOT's public GIS Report (EMIL PG7-200-ER, reportTypeId 15933), the waiting line of every generation project that has REQUESTED to connect to the ERCOT (Texas) grid, served as-reported, project by project across the four lifecycle sheets ERCOT publishes (Large Gen + Small Gen = active; Inactive Projects; Cancellation Update). ERCOT's full published structure is carried faithfully, in ERCOT's own words: the requested interconnection
capacity_mw(ERCOT publishes one capacity figure, no summer/winter split), thefuelandtechnologycodes, thecdr_reporting_zone, theinterconnecting_entity, thepoi_location, the compositegim_study_phasetoken string, and the milestone dates (screening study, FIS, IA signed, air/GHG permit, water availability, meets-planning, construction start/end, approved for energization/synchronization, projected COD). This is a REQUEST, not built capacity: historically the large majority of queued MW withdraws before it is built. ERCOT publishes NO single status column, soapplication_status(ACTIVE / INACTIVE / CANCELLED) is derived from the sheet ERCOT files the project on — andsheet_nameis served verbatim alongside, so the derivation is transparent and reversible (this reads ERCOT's own filing structure; it invents no maturity score). The build-progress reading is carried SEPARATELY ingim_study_phase+ the milestone dates, never collapsed into application_status. (The Inactive/Cancellation sheets list RECENT departures, not the full historical withdrawn set.) This is a forward-looking slice (capacity/generation/demand are backward-looking actuals). ERCOT carries no county_fips, no lat/lon, and no State column (its footprint is within Texas, sostate= TX); county_fips is derived by name where it resolves and left null otherwise. ERCOT files a hybrid project's legs (e.g. solar + co-located storage) as SEPARATE INR rows linked only by a sharedpoi_location— no in-row hybrid flag exists, so none is invented; that co-location join is the analyst's. It is NOT a data-center product — the GIS Report is generation-only (ERCOT's large-load / data-center queue is a separate, unstructured source we do not serve) and no load/data-center type is inferred.
Does not answer:
built/operating/nameplate capacity as a queue total (capacity_mw is REQUESTED interconnection, not built; for operating capacity use power.capacity / EIA-860M; build progress is in gim_study_phase + the milestone dates)a sum of capacity_mw treated as planned or operating capacity (most queued MW withdraws — totals are scoped by application_status, never read as built)a cross-ISO or national queue total (methodologies, inclusion, and withdrawal rates differ per ISO — never summed or deduped across ISOs; for MISO use query_power_interconnection_queue_v1, for PJM query_power_interconnection_queue_pjm_v1 (or query_power_interconnection_queue_pjm_cycle_v1), for CAISO query_power_interconnection_queue_caiso_v1, for NYISO query_power_interconnection_queue_nyiso_v1, for ISO-NE query_power_interconnection_queue_isone_v1)the ERCOT large-load / data-center interconnection queue (a SEPARATE, unstructured ERCOT source published only as TAC-meeting PDF slides — not the GIS Report; the GIS Report is generation-only and no load/data-center type is inferred)which projects are "data-center driven" (ERCOT's GIS Report reports no load/data-center type; that inference is the analyst's, never tagged here)the probability that a queued project will actually be built or reach commercial operationgeneration MWh, demand, prices, retail sales, or transmission flowslat/lon or plant-level attribution (ERCOT supplies no coordinate and no State column; only county, derived county_fips, CDR reporting zone, and the constant state TX)queues for other ISOs/RTOs (MISO, PJM, CAISO, NYISO, ISO-NE, SPP) — each is a separate block under the same gate
REST Surface
GET /v1/healthGET /v1/capabilitiesGET /v1/power/interconnection-queue-ercot/schemaPOST /v1/power/interconnection-queue-ercot/queryPOST /v1/evidence/source-row
MCP Surface
list_capabilities_v1describe_power_interconnection_queue_ercot_v1query_power_interconnection_queue_ercot_v1get_source_evidence_v1
Local MCP Setup
Some MCP clients launch servers from the user's home directory or ignore a configured cwd. Use uv run --directory so the server always starts from the repository project.
{
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/OSINT",
"python",
"-m",
"core.mcp_server"
]
}
Leave EXASCALE_PARQUET_BASE / EXASCALE_RAW_BASE unset: the one server hosts every data point's tools, and with no override it resolves each block's promoted snapshots and raw archive from the repository layout. Setting either env var points ALL tools at one directory — a per-block path breaks every other block's tools. They exist only for single-source sandboxes and tests.
Request Schema
Filters:
as_ofstatecounty_fipsapplication_statussize_categoryfueltechnologycdr_reporting_zonegim_study_phaseinterconnecting_entityprojected_cod
Group by:
statecounty_fipsapplication_statussize_categoryfueltechnologycdr_reporting_zonegim_study_phaseinterconnecting_entity
Date range parameters:
projected_cod_fromprojected_cod_to
Controls:
include_recordsinclude_evidencelimitorder_bytop_norderrollup_other
Ranking (how order_by / top_n / order join — order_by ranks groups by a metric, never a group_by dimension; top_n needs both a group_by and an order_by):
{
"no_ranking": "Omit order_by and top_n to return all groups in group-key order.",
"order": {
"default": "desc",
"valid_values": [
"desc",
"asc"
]
},
"order_by": {
"accepts": "one of output.metrics",
"note": "Ranks the groups by a metric (a measure). Not a group_by dimension \u2014 rows already come back grouped by each group_by field.",
"requires": [
"group_by"
],
"valid_values": [
"capacity_mw",
"source_record_count"
]
},
"top_n": {
"note": "Keeps the top N groups by order_by; the rest fold into one (other) remainder (additive metrics sum into it, non-additive ones are nulled) so the result still reconciles to summary.totals.",
"requires": [
"group_by",
"order_by"
],
"type": "positive integer"
}
}
Output Schema
Aggregate metrics:
capacity_mwsource_record_count
Metric groups:
{
"records": [
"source_record_count"
],
"requested_mw": [
"capacity_mw"
]
}
Response summary fields:
group_counttotals
Accepted fact policy:
- Query responses contain accepted, gate-passed facts only.
- Gate, monitor, and audit quality signals are internal controls, not agent-facing answer caveats.
- If a source snapshot is not fit to serve, the source must fail closed before it reaches this API.
Metric metadata:
| Metric | Category | Unit | Aggregation | Additive Across Groups | Authoritative Total | Definition |
|---|---|---|---|---|---|---|
capacity_mw |
requested_mw | MW | sum | true | summary.totals.capacity_mw |
The project's requested interconnection capacity in MW, as ERCOT reports it (Capacity (MW) on the active sheets, MW ** on the withdrawal sheets). |
source_record_count |
records | count | count source records | true | summary.totals.source_record_count |
Count of ERCOT GIS queue rows in the current result scope (one atom = one INR row of an in-scope sheet). |
Rollup rules:
summary.totals.<metric>is the authoritative total for the full matched query.- Grouped row metrics may be summed only when
additive_across_groupsistrue.
Detail record fields returned when include_records is true:
source_idsheet_nameisoinrsource_record_keyapplication_statussize_categoryproject_nameinterconnecting_entitystatecountycounty_fipscounty_fips_sourcecounty_fips_unresolvedcdr_reporting_zonefueltechnologypoi_locationcapacity_mwgim_study_phaseeconomic_study_requiredair_permitghg_permitwater_availabilitychange_indicatorsfinancial_securitycommentscreening_study_startedscreening_study_completefis_requestedfis_approvedia_signedmeets_planningmeets_all_planningconstruction_startconstruction_endapproved_for_energizationapproved_for_synchronizationprojected_codmodel_ready_dateinactive_datecancel_datereport_periodsource_row_numberas_ofraw_file_sha256citation
Row-level citation fields:
source_idsource_urlsource_filesheetsource_rowraw_file_sha256as_of
Aggregate citation fields:
source_idpublishersource_urlsource_fileraw_file_sha256as_ofsource_rows_countsource_rows_sampleverifylineage_filter
Codebooks
| Field | Coverage | Codes | Examples | Note |
|---|---|---|---|---|
application_status |
the lifecycle states served from the ERCOT snapshot | 3 | ACTIVE = Active — a live request still in the queue (Large/Small Gen sheets; requested, not built), INACTIVE = Inactive — recently went inactive (Inactive Projects sheet), CANCELLED = Cancelled — recently cancelled (Cancellation Update sheet) |
ALWAYS scope by application_status. ACTIVE = the live request pipeline (the Large/Small Gen sheets); INACTIVE / CANCELLED = projects that recently left the queue (the Inactive Projects / Cancellation Update sheets — these list RECENT departures, NOT the full historical withdrawn set). A queue-MW total is REQUESTED capacity, never built — for built/operating capacity use query_power_capacity_v1. Build progress is SEPARATE (gim_study_phase + dates). |
size_category |
the size classes served from the ERCOT snapshot | 2 | Large = Large generator, Small = Small generator |
ERCOT splits the active queue into Large Gen and Small Gen sheets; the withdrawal sheets carry ERCOT's own Size Category value. |
fuel |
the distinct fuel codes served from the ERCOT snapshot | 13 | BIO = Biomass, COA = Coal, GAS = Gas, GEO = Geothermal, HYD = Hydrogen (NOT hydro — hydro is WAT) |
ERCOT's own fuel codes on the active sheets. NOTE: a battery / storage project carries OTH (fuel) + BA (technology) — there is no BAT fuel code in the standard legend (a one-month 2025-07 BAT anomaly aside). HYD is HYDROGEN, not hydro — hydro is WAT. On the Inactive / Cancellation sheets Fuel is FREE TEXT (e.g. 'Wind', 'Solar', 'Battery Storage'), not a code — served verbatim. Filter by ERCOT's EXACT value. |
technology |
the distinct technology codes served from the ERCOT snapshot | 14 | BA = Battery Energy Storage, CC = Combined-Cycle, CE = Compressed-Air Energy Storage, CP = Concentrated Solar Power, EN = Energy Storage |
ERCOT's own technology codes on the active sheets (the (Fuel, Technology) pair defines the resource — e.g. SOL/PV solar, OTH/BA battery, GAS/CC combined-cycle, WIN/WT wind). Filter by ERCOT's EXACT code. |
cdr_reporting_zone |
the distinct zones served from the ERCOT snapshot | 7 | NORTH = North, SOUTH = South, WEST = West, COASTAL = Coastal, HOUSTON = Houston |
ERCOT's CDR (Capacity, Demand and Reserves) reporting zone. Filter by ERCOT's EXACT value. |
gim_study_phase |
the distinct GIM Study Phase strings served from the ERCOT snapshot | 0 | ERCOT's build-progress signal — a COMMA-JOINED string of study-milestone tokens, e.g. 'SS Completed, FIS Completed, IA' (Screening Study completed, Full Interconnection Study completed, Interconnection Agreement) or 'SS Completed, FIS Started, No IA'. Served VERBATIM (never collapsed into a maturity score); the individual milestone DATE columns carry the same progression structurally. SS = Security Screening Study, FIS = Full Interconnection Study, IA = Interconnection Agreement. Filter by ERCOT's EXACT string. |
The complete machine-readable codebooks are included in capability-schema.json.
Checked Examples
| Agent question | Request params | Checked output |
|---|---|---|
| How much requested capacity and how many rows sit in the ERCOT queue, by lifecycle status? | {"group_by": ["application_status"]} |
ercot-queue-by-status.json |
| What fuels lead ERCOT's active interconnection requests, by requested MW? | {"application_status": "ACTIVE", "group_by": ["fuel"], "order_by": "capacity_mw", "top_n": 5} |
active-by-fuel.json |
| Which ERCOT CDR reporting zones have the most active requested capacity? | {"application_status": "ACTIVE", "group_by": ["cdr_reporting_zone"], "order_by": "capacity_mw"} |
active-mw-by-zone.json |
| Return one active ERCOT queue project with a row-level citation. | {"application_status": "ACTIVE", "include_records": true, "limit": 1} |
queue-detail-with-citation.json |
| Verify the raw workbook row behind a returned citation | citations[ref].verify (aggregate) or records[0].citation (detail) |
source-row-evidence.json |
| Dogfood the tool sequence as an agent | list -> describe -> query -> evidence |
agent-dogfood-transcript.json |
The checked schema output is capability-schema.json.
Agent Workflow
- Call
list_capabilities_v1and selectpower.interconnection_queue_ercot. - Call
describe_power_interconnection_queue_ercot_v1to inspect valid filters, groupings, metrics, and citation fields. - Call
query_power_interconnection_queue_ercot_v1with bounded JSON params. - If the answer needs proof, pass a returned row-level
citationobject toget_source_evidence_v1. - Answer with the resolved
as_ofand relevant citations. Present returned metrics as authoritative for their declared source, snapshot, grain, and aggregation.