Power Interconnection Queue (PJM) API v1
Generated from
core.contract.describe_power_interconnection_queue_pjm_v1()and checked fixture-backed examples. Do not hand-edit the example JSON files.
Capability
- Capability:
power.interconnection_queue_pjm - Primitive:
query_power_interconnection_queue_pjm_v1 - Status:
available - Current source:
energy.pjm.queue - Source publisher: PJM Interconnection, L.L.C.
- Snapshot behavior:
as_of = latestresolves to an exact snapshot date in every response.
What It Can Answer
- Which projects have REQUESTED to connect to the PJM grid, by state/county, fuel, project type, and status.
- The requested MFO / net summer / net winter megawatts of each queued project, cited to its source row.
- The realized in-service (built) megawatts of completed PJM projects (in_service_mw), separate from requested MW.
- The as-reported status of each PJM project (Active / Withdrawn / In Service / …), kept verbatim.
- Row-level detail records when
include_recordsis true. - Raw workbook row evidence for any returned row-level citation.
Represented Facts
PJM's New Services (interconnection) queue reports each project's REQUESTED interconnection capacity (MFO / net summer / net winter MW) — a request, not built capacityPJM's queue reports each project's location (state, POI county), fuel and project type, the single as-reported status, the study-document URLs and per-stage statuses, and lifecycle datesPJM also reports in_service_mw — the realized BUILT MW for in-service projects — carried under its own name, never as a requested figure
Data Point Contract
- Data point:
power.interconnection_queue_pjm - Product spec:
blocks/power_interconnection_queue_pjm/card.md - Grain:
project_snapshot - Source basis:
energy.pjm.queue - Represented fact: The PJM New Services (interconnection) queue — the public waiting line of every project that has REQUESTED to connect to the PJM grid (the mid-Atlantic RTO, incl. Northern Virginia), served as-reported, project by project. PJM's full published structure is carried faithfully (its own 43 columns, defined in PJM's words via the workbook's Definitions-Mapping sheet): the requested megawatts (requested_max_output_mw = MFO, requested_summer_mw = MW Capacity / summer net, requested_winter_mw = MW Energy / winter net), the single as-reported
status, project_type (Generation Interconnection / Merchant Transmission / Long-Term Firm Transmission / Upgrade Request), fuel (verbatim; hybrids ';'-joined and flagged), the study-document URLs and per-stage statuses, and the lifecycle dates. This is a REQUEST, not built capacity: historically the large majority of queued MW withdraws before it is built, so every requested_* MW is named as a request and is never summed as operating capacity. PJM ALSO reports in_service_mw — the realized BUILT MW for in-service projects — carried honestly under its own name (a built figure, not a request). This is a forward-looking slice (capacity/generation/demand are backward-looking actuals). PJM carries no county_fips and no lat/lon; county_fips is derived by name where it resolves and left null otherwise (the POI county may differ from the physical site). It is NOT a data-center product — PJM reports no load/data-center type and we never infer one.
Does not answer:
built/operating/nameplate capacity as a queue total (requested_* MW is REQUESTED, not built; for operating capacity use power.capacity / EIA-860M; in_service_mw is the only built figure here, per-project)a sum of requested MW treated as planned or operating capacity (most queued MW withdraws — requested totals are labeled, 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 the MISO queue use query_power_interconnection_queue_v1, for the CAISO queue use query_power_interconnection_queue_caiso_v1)which projects are data-center- or load-driven (PJM 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 (PJM supplies none; only state, as-reported POI county, and derived county_fips)queues for other ISOs/RTOs (MISO, CAISO, NYISO, ISO-NE, ERCOT, SPP) — each is a separate block under the same gate
REST Surface
GET /v1/healthGET /v1/capabilitiesGET /v1/power/interconnection-queue-pjm/schemaPOST /v1/power/interconnection-queue-pjm/queryPOST /v1/evidence/source-row
MCP Surface
list_capabilities_v1describe_power_interconnection_queue_pjm_v1query_power_interconnection_queue_pjm_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_fipsstatusproject_typecapacity_or_energyfuelproject_ac_dctransmission_ownerattachment_typefeasibility_study_statussystem_impact_study_statusfacilities_study_statussubmitted_date
Group by:
statecounty_fipsstatusproject_typecapacity_or_energyfuelproject_ac_dctransmission_ownerattachment_typefeasibility_study_statussystem_impact_study_statusfacilities_study_statusis_hybrid
Date range parameters:
submitted_date_fromsubmitted_date_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": [
"requested_max_output_mw",
"requested_summer_mw",
"requested_winter_mw",
"in_service_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:
requested_max_output_mwrequested_summer_mwrequested_winter_mwin_service_mwsource_record_count
Metric groups:
{
"built_mw": [
"in_service_mw"
],
"records": [
"source_record_count"
],
"requested_mw": [
"requested_max_output_mw",
"requested_summer_mw",
"requested_winter_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 |
|---|---|---|---|---|---|---|
requested_max_output_mw |
requested_mw | MW | sum | true | summary.totals.requested_max_output_mw |
The project's Maximum Facility Output (MFO) — the headline requested size, as PJM reports it. |
requested_summer_mw |
requested_mw | MW | sum | true | summary.totals.requested_summer_mw |
The project's requested Capacity interconnection (summer net) MW — PJM's MW Capacity column. |
requested_winter_mw |
requested_mw | MW | sum | true | summary.totals.requested_winter_mw |
The project's requested net winter MW — PJM's MW Energy column (a winter MW figure, not MWh). |
in_service_mw |
built_mw | MW | sum | true | summary.totals.in_service_mw |
The realized built MW once the project is in service — PJM's MW In Service column. |
source_record_count |
records | count | count source records | true | summary.totals.source_record_count |
Count of queued PJM projects in the current result scope (one atom = one PJM project). |
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_nameisoproject_idproject_id_rawnamecommercial_namestatestate_rawcountycounty_fipscounty_fips_sourcecounty_fips_unresolvedstatustransmission_ownerrequested_max_output_mwrequested_summer_mwrequested_winter_mwin_service_mwcapacity_or_energyproject_typefuelis_hybridproject_ac_dcrights_mwinitial_studyfeasibility_studyfeasibility_study_statussystem_impact_studysystem_impact_study_statusfacilities_studyfacilities_study_statusinterconnection_agreementinterconnection_agreement_statuswholesale_market_participation_agreementconstruction_service_agreementconstruction_service_agreement_statusupgrade_construction_service_agreementupgrade_construction_service_agreement_statusbackfeed_datesubmitted_dateltf_service_start_dateltf_service_end_datetest_energy_datewithdrawal_datewithdrawn_remarksprojected_in_service_datecommercial_operation_milestoneactual_in_service_dateattachment_typealternate_projectsliding_projectreport_periodsource_record_keysource_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 |
|---|---|---|---|---|
status |
the distinct status values observed in the served PJM snapshot | 12 | Active = Active — a live request still in the queue (requested, not built), Withdrawn = Withdrawn — the request left the queue (the queue is withdrawn-dominated), In Service = In Service — the project is built and operating, Under Construction = Under construction, Partially in Service - Under Construction = Partially in service, still under construction |
ALWAYS scope by status — the full queue is dominated by Withdrawn requests. Active is the live pipeline of REQUESTED (not built) capacity; In Service / Under Construction / Partially in Service - Under Construction are built or building; Withdrawn / Retracted / Deactivated / Annulled / Canceled have left the queue. A queue-MW total is requested capacity, never built — for built/operating capacity use query_power_capacity_v1 (or the in_service_mw field). |
fuel |
the distinct fuel values observed in the served PJM snapshot | 10 | Natural Gas = Natural gas, Solar = Solar, Wind = Wind, Storage = Storage (battery / other), Solar; Storage = Solar + storage hybrid (is_hybrid = true) |
Filter fuel by PJM's EXACT value — e.g. Natural Gas (NOT 'Gas', unlike MISO). Hybrids are ';'-joined (e.g. 'Solar; Storage') and flagged with is_hybrid. Values are as-reported, so a request with no fuel is null, not a category. |
project_type |
the distinct project-type values observed in the served PJM snapshot | 4 | Generation Interconnection = Generation interconnection (GI), Merchant Transmission = Merchant transmission, Long-Term Firm Transmission = Long-term firm transmission (LTFT), Upgrade Request = Upgrade request (UR) |
The PJM queue mixes generation with transmission/upgrade requests. Filter project_type = Generation Interconnection for generation; the others are transmission/upgrade. (PJM's own data dictionary abbreviates these GI/TI/LTFT/UR, but the served values are the long forms observed in the data.) |
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 projects sit in the PJM queue, by status? | {"group_by": ["status"]} |
pjm-queue-by-status.json |
| Which states have the most requested interconnection capacity in PJM's queue? | {"group_by": ["state"], "order_by": "requested_max_output_mw", "top_n": 10} |
requested-mw-by-state.json |
| What fuels are the active PJM interconnection requests, and how much capacity? | {"group_by": ["fuel"], "status": "Active"} |
active-requests-by-fuel.json |
| Return one PJM queue project with a row-level citation. | {"include_records": true, "limit": 1, "state": "PA"} |
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_pjm. - Call
describe_power_interconnection_queue_pjm_v1to inspect valid filters, groupings, metrics, and citation fields. - Call
query_power_interconnection_queue_pjm_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.