FERC Form 1 Plant Costs API v1
Generated from
core.contract.describe_power_plant_costs_v1()and checked fixture-backed examples. Do not hand-edit the example JSON files.
Capability
- Capability:
power.plant_costs - Primitive:
query_power_plant_costs_v1 - Status:
available - Current source:
energy.ferc.form1_plant_costs - Source publisher: Federal Energy Regulatory Commission
- Snapshot behavior:
as_of = latestresolves to an exact snapshot date in every response.
What It Can Answer
- As-filed large-steam plant installed capacity, net generation, plant balances, fuel expense, and separate O&M line items.
- Raw respondent and plant-name filtering without normalization or EIA matching.
- The respondents and raw plant names with data in a report year, with explicit partial-ERCOT coverage.
- Exact archive-member and XBRL-fact evidence for every returned numeric value.
Represented Facts
Accepted native-XBRL FERC Form 1 filings report as-filed large steam-electric plant statistics by respondent, year, and raw plant name: installed capacity, net generation, plant-cost balance facts, and separate production-expense line items. Dollar values are nominal and are never inflation-adjusted, allocated, or summed into a derived O&M total.
Data Point Contract
- Data point:
power.plant_costs - Product spec:
blocks/power_plant_costs/card.md - Grain:
respondent_year_plant_fact - Source basis:
energy.ferc.form1_plant_costs - Represented fact: Accepted native-XBRL FERC Form 1 filings report as-filed large steam-electric plant statistics by respondent, year, and raw plant name: installed capacity, net generation, plant-cost balance facts, and separate production-expense line items. Dollar values are nominal and are never inflation-adjusted, allocated, or summed into a derived O&M total.
Does not answer:
complete US or ERCOT fleet coverage; ERCOT-only merchant entities largely do not file Form 1plant-name-to-EIA-plant-id matching or any normalized entity identityheat rate, efficiency, dollars per MWh, inflation-adjusted dollars, allocations, or probabilitieshydro, pumped-storage, migrated historical XBRL, or Visual FoxPro-era filings in v0plant state; the large-steam schedule does not file a plant-state field
REST Surface
GET /v1/healthGET /v1/capabilitiesGET /v1/power/plant-costs/schemaPOST /v1/power/plant-costs/queryPOST /v1/evidence/source-row
MCP Surface
list_capabilities_v1describe_power_plant_costs_v1query_power_plant_costs_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_ofreport_yearrespondent_idrespondent_nameplant_nameplant_name_containsmeasuremeasure_categoryunitercot_relevance
Group by:
report_yearrespondent_idrespondent_nameplant_namemeasuremeasure_categoryunit
Date range parameters:
Controls:
include_recordsinclude_evidencelimitorder_bytop_norder
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": [
"value",
"source_record_count",
"distinct_respondent_count",
"distinct_plant_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:
valuesource_record_countdistinct_respondent_countdistinct_plant_count
Metric groups:
{
"as_filed_value": [
"value"
],
"entities": [
"distinct_respondent_count",
"distinct_plant_count"
],
"records": [
"source_record_count"
]
}
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 |
|---|---|---|---|---|---|---|
value |
as_filed_value | source physical unit | single fact only | false | summary.totals.value |
One as-filed Form 1 XBRL fact; inspect unit and measure before use. |
source_record_count |
records | count | count source records | true | summary.totals.source_record_count |
Count of separately cited XBRL facts in scope. |
distinct_respondent_count |
entities | count | count_distinct | false | summary.totals.distinct_respondent_count |
Count of distinct FERC respondent CIDs with facts in scope. |
distinct_plant_count |
entities | count | count_distinct | false | summary.totals.distinct_plant_count |
Count of distinct respondent CID plus raw plant-name pairs in scope. |
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. - Do not sum grouped values for these non-additive metrics:
value,distinct_respondent_count,distinct_plant_count.
Detail record fields returned when include_records is true:
source_idschedulesheet_namesource_membersource_record_keysource_row_numberreport_yearrespondent_idrespondent_namestates_served_rawercot_relevanceplant_namemeasuremeasure_categoryxbrl_conceptxbrl_fact_idxbrl_context_refxbrl_unit_refxbrl_unit_measuredecimals_as_filedvalue_rawvalueunitnominal_dollarsas_ofraw_file_sha256citation
Row-level citation fields:
source_idsource_urlsource_filesource_membersheetsource_rowsource_colxbrl_fact_idxbrl_context_refraw_file_sha256as_of
Aggregate citation fields:
source_idpublishersource_urlsource_filesource_memberraw_file_sha256as_ofsource_rows_countsource_rows_sampleverifylineage_filter
Codebooks
| Field | Coverage | Codes | Examples | Note |
|---|---|---|---|---|
The complete machine-readable codebooks are included in capability-schema.json.
Checked Examples
| Agent question | Request params | Checked output |
|---|---|---|
| What as-filed plant facts did respondent C001111 report for Steam Plant Alpha in 2025? | {"plant_name_contains": "Steam Plant Alpha", "report_year": 2025, "respondent_id": "C001111"} |
respondent-plant-facts.json |
| Which separate production-expense line items were filed for respondent C001111? | {"measure_category": "production_expense", "report_year": 2025, "respondent_id": "C001111"} |
separate-production-expenses.json |
| Which served Form 1 respondents have a raw states-served disclosure mentioning Texas? | {"ercot_relevance": true, "report_year": 2025} |
ercot-relevance.json |
| Return one as-filed plant-cost fact with its exact XBRL fact citation. | {"include_records": true, "limit": 1, "report_year": 2025} |
plant-cost-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.plant_costs. - Call
describe_power_plant_costs_v1to inspect valid filters, groupings, metrics, and citation fields. - Call
query_power_plant_costs_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.