Natural Gas Prices API v1
Generated from
core.contract.describe_natural_gas_prices_v1()and checked fixture-backed examples. Do not hand-edit the example JSON files.
Capability
- Capability:
natural_gas.prices - Primitive:
query_natural_gas_prices_v1 - Status:
available - Current source:
energy.eia.natural_gas_prices - Source publisher: U.S. Energy Information Administration
- Snapshot behavior:
as_of = latestresolves to an exact snapshot date in every response.
What It Can Answer
- Daily Henry Hub spot prices in EIA's source $/MMBtu unit.
- Monthly state-average prices paid by the electric-power sector in EIA's source $/Mcf unit.
- Texas electric-power prices in one state-filtered call, with no unit conversion.
- Explicit source-null state-month records and per-atom coverage windows.
- Exact archived API record evidence keyed by series id and period.
Represented Facts
EIA publishes the daily Henry Hub natural-gas spot price in dollars per MMBtu and monthly state-average natural-gas prices paid by electric-power consumers in dollars per Mcf. The state series is an aggregate of what the state's power sector paid in that month, not a plant-level price. Source-null state-month values remain explicit nulls and revisions remain separate capture vintages.Source-null state-month prices remain explicit nulls, and mixed source units are never blended.
Data Point Contract
- Data point:
natural_gas.prices - Product spec:
blocks/natural_gas_prices/card.md - Grain:
series_period - Source basis:
energy.eia.natural_gas_prices - Represented fact: EIA publishes the daily Henry Hub natural-gas spot price in dollars per MMBtu and monthly state-average natural-gas prices paid by electric-power consumers in dollars per Mcf. The state series is an aggregate of what the state's power sector paid in that month, not a plant-level price. Source-null state-month values remain explicit nulls and revisions remain separate capture vintages.
Does not answer:
plant-level fuel prices or fuel-receipt costsregional licensed hub indices such as Katy, Houston Ship Channel, or Wahadollars per MWh, spark spreads, heat rates, or generation costsconversions between dollars per Mcf and dollars per MMBtuproxy assignment to any generator or fleet
REST Surface
GET /v1/healthGET /v1/capabilitiesGET /v1/natural-gas/prices/schemaPOST /v1/natural-gas/prices/queryPOST /v1/evidence/source-row
MCP Surface
list_capabilities_v1describe_natural_gas_prices_v1query_natural_gas_prices_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_ofatomseries_idstatedatemonthprice_status
Group by:
atomseries_idstatedateprice_statusunit
Date range parameters:
date_fromdate_to
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": [
"avg_price",
"min_price",
"max_price",
"reported_price_count",
"missing_price_count",
"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:
avg_pricemin_pricemax_pricereported_price_countmissing_price_countsource_record_count
Metric groups:
{
"price": [
"avg_price",
"min_price",
"max_price"
],
"records": [
"reported_price_count",
"missing_price_count",
"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 |
|---|---|---|---|---|---|---|
avg_price |
price | source physical unit | average | false | summary.totals.avg_price |
Average, minimum, or maximum EIA price within a single-unit result scope. Mixed $/MMBtu and $/Mcf scopes return null. |
min_price |
price | source physical unit | minimum | false | summary.totals.min_price |
Average, minimum, or maximum EIA price within a single-unit result scope. Mixed $/MMBtu and $/Mcf scopes return null. |
max_price |
price | source physical unit | maximum | false | summary.totals.max_price |
Average, minimum, or maximum EIA price within a single-unit result scope. Mixed $/MMBtu and $/Mcf scopes return null. |
reported_price_count |
records | count | conditional count | true | summary.totals.reported_price_count |
Count of EIA records with a numeric value. |
missing_price_count |
records | count | conditional count | true | summary.totals.missing_price_count |
Count of EIA records whose source value is null. |
source_record_count |
records | count | count source records | true | summary.totals.source_record_count |
Count of EIA series-period records 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:
avg_price,min_price,max_price.
Detail record fields returned when include_records is true:
source_idatomsheet_namesource_record_keyreport_perioddatesource_periodfrequencygrainstatearea_nameduoareaseries_idseries_descriptionproduct_codeproduct_nameprocess_codeprocess_nameprice_rawpriceunit_rawunitprice_statussource_row_numberas_ofraw_file_sha256citation
Row-level citation fields:
source_idsource_urlsource_filesheetsource_rowsource_colseries_idperiodraw_file_sha256as_of
Aggregate citation fields:
source_idpublishersource_urlsource_fileraw_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 was the daily Henry Hub spot price over the latest requested window? | {"atom": "henry_hub_daily_spot", "date_from": "2026-07-22", "date_to": "2026-07-24", "group_by": ["date"]} |
henry-hub-daily.json |
| What average natural-gas price did the Texas electric-power sector pay by month? | {"atom": "state_electric_power_monthly", "group_by": ["date"], "state": "TX"} |
texas-electric-power-monthly.json |
| Which state-month electric-power prices are explicitly unavailable? | {"atom": "state_electric_power_monthly", "include_records": true, "price_status": "source_missing"} |
explicit-missing-state-month.json |
| Return one Texas state-month price with exact archived API-record evidence. | {"atom": "state_electric_power_monthly", "include_records": true, "limit": 1, "month": "2026-04-01", "state": "TX"} |
gas-price-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 selectnatural_gas.prices. - Call
describe_natural_gas_prices_v1to inspect valid filters, groupings, metrics, and citation fields. - Call
query_natural_gas_prices_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.