Data Dictionary

Every field of the sealed records Aquadrio keeps: the hour of a grid's electricity, the index day and the index month, a facility's hour, a building's hour, a named power plant's hour, and the correction. Each table names a field by its full path in the record (an array as name[], a field of an array's elements as name[].field), its type, its unit, what it states, and an example from the sample records:

  • leave-behind/sample_hour_record.json, CAISO's hour ending 2026-06-29T23
  • leave-behind/sample_index_record.json, MISO-Central's UTC day 2026-09-18
  • leave-behind/sample_plant_record.json, Dearborn Industrial Generation's hour ending 2025-08-05T18
  • measurement/agents/testdata/sample_facility_hour.json, a modeled campus on CAISO's sample hour
  • measurement/agents/testdata/sample_building_hour.json, that campus's building
  • measurement/agents/testdata/sample_correction_record.json, a correction of a plant's hour

Three record shapes appear in no sample above, and their examples come from other records the engine built: a building's priced line from measurement/agents/testdata/sample_building_hour_ford_field.json, an index month from the Index page's fixtures (web/tests/fixtures/upstream, built by scripts/index_fixture_series.py under the index check's test payload), and a plant's hour as Standard 0.9 seals it, with its valuation and its link to the grid hour, from Dearborn's hour ending 2025-08-05T18 as measurement/agents/test_valuation_block.py builds it on its fixture grid hour (the plant sample above was sealed before 0.9 and keeps its shape). The builders are measurement/agents/hour_record.py and measurement/agents/index_record.py. The seal's rule is docs/CERT_CANONICALIZATION.md. python scripts/dictionary_fields.py --check walks the six samples and names any path this document does not carry.

Conventions

Periods

An hour's period reads YYYY-MM-DDTHH and names the hour ending at that time, in UTC, as EIA-930 reports it: 2026-06-29T23 is the hour from 22:00 to 23:00 UTC. lag_hours runs from that close to sealed_at.

An index day's period reads YYYY-MM-DD and names a UTC day: the hours ending 01 through 23 of that date and the hour ending 00 of the next date. The day 2026-09-18 holds the periods 2026-09-18T01 through 2026-09-18T23 and 2026-09-19T00.

An index month's period reads YYYY-MM and names a UTC month: the UTC days of that month.

sealed_at reads UTC to the second, YYYY-MM-DDTHH:MM:SSZ, on every record.

Seals and Numbers

Every record carries canon_version, kind, its body under one key, and record_hash. The body sits under the key kind names (hour, facility_hour, building_hour, plant_hour, correction), apart from the two index kinds, whose body sits under index. record_hash is the SHA-256 of the record's canonical form with its top-level record_hash and signature left out: keys sorted, numbers at fixed places (six by default, four inside a generation mix), strings in Unicode NFC. A record_hash deeper in a record is a link to another sealed record, and a changed link breaks the seal of the record that holds it. The records carry no signature yet. node leave-behind/verify_record.mjs <file> recomputes any seal.

A figure prints to the places the record states it: gallons per MWh to two places, percents to the tenth, energy to four places on a site's record, dollars to the cent, and dollars per MWh to four places. A field the record states as null holds no value for that line, as a group with no ceiling holds no percent of prescription.

Labels

origin reads real on a record built from the grid's published data or from federal filings (every hour's record, a named site's records, and an index record built from real hours), and simulated on a modeled site's record. A record names what it models in plain words: an hour's hour.water.basis reads modeled from 2024 plant data; a site's load_basis reads modeled; a building's building_hour.compute.cooling_water.basis reads modeled; a plant's plant_hour.water.basis and plant_hour.modeled[] say how its water is modeled; a priced line's basis names the schedule's place (utility serving the place or nearest published rate).

Whole-Hour Rule

An hour is sealed only when its fuel rows are whole: it carries, with a value, every fuel code that held at least 5 percent of the grid's generation in any of the 48 hours before it. A half-loaded daily file renormalizes to a clean mix, so an hour short of a fuel is left unsealed until its rows arrive. The first record of an hour stands, and no sealed record is edited.

Short-Day Rule

An index day is sealed once it is older than yesterday in UTC and all 24 of its hours are sealed. A day still short of its 24 hours seals over the hours it has once it is more than seven days old: its index.hours_sealed counts them, its index.short reads true, and its level is taken over those hours alone. An index month is sealed once it has ended and each of its days holds a record or is past the seven days with no hours at all.

Basin Groups

A basin line's group is one of these ids, and its label is the name the records print. A group that carries a ceiling is held against it; a group with no ceiling prints "no grade" as its result. Each id names the basin group a plant's water is attributed to; the table lists the groups and the units that place them.

Group idLabel as printedGridUnits that place it
mississippiMississippiMISO-Centralregions 05, 06, 07, 08, 10, 11; Dayton Hydro (EIA 10520) by hand
great_lakesGreat LakesMISO-Central, PJMregion 04
groundwater_municipalGroundwater and municipalevery gridthe declared water source
upper_columbiaUpper ColumbiaBPAsubregions 1701, 1702, 1703
middle_lower_columbiaMiddle and Lower ColumbiaBPAsubregions 1707, 1708
snakeSnakeBPA, NEVPsubregions 1704, 1705, 1706
willametteWillametteBPAsubregion 1709
coastal_puget_soundCoastal and Puget SoundBPAsubregions 1710, 1711
oregon_closed_basinsOregon closed basinsBPAsubregion 1712
sacramentoSacramentoCAISOsubregion 1802
san_joaquinSan JoaquinCAISOsubregion 1804
tulare_buena_vistaTulare-Buena Vista LakesCAISOsubregion 1803
san_francisco_baySan Francisco BayCAISOsubregion 1805
coastalCoastalCAISOsubregions 1801, 1806, 1807
desert_basinsDesert basinsCAISO, NEVPsubregions 1808, 1809, 1810
lower_coloradoLower ColoradoCAISO, AZPS, SRP, NEVP, PNM, TEPC, WALCregion 15; on the Southwest's grids also the water a conveyance carries, by its name (the Central Arizona Project, the Salt River Project's canals)
upper_coloradoUpper ColoradoAZPS, PNM, WALCregion 14
great_basinGreat BasinCAISO, NEVP, WALCregion 16
pacific_ocean_seawaterPacific Ocean (seawater)CAISOthe declared water source; no ceiling
ohioOhioPJMregion 05
mid_atlanticMid-AtlanticPJMregion 02
upper_mississippiUpper MississippiPJMregion 07
south_atlanticSouth AtlanticPJMregion 03
tennesseeTennesseePJMregion 06
texas_gulfTexas-GulfERCOTregion 12
rio_grandeRio GrandeERCOT, PNM, EPEregion 13
arkansas_white_redArkansas-White-RedERCOT, PNMregion 11
estuary_oceanEstuary and ocean (saline and brackish)PJM, ERCOTthe cooling systems' declared saline or brackish water; no ceiling
outside_footprintOutside the footprintanywater from a fuel with no plant in the grid's footprint; no ceiling

Fields Every Record Carries

FieldTypeUnitWhat it statesExample
canon_versionstringThe canonical form's ruleset the seal is computed under: "2" for every record here."2"
kindstringThe kind of record, which names the key its body sits under: hour, facility_hour, building_hour, plant_hour, correction, index_day, or index_month."hour"
record_hashstringhexThe record's seal: 64 lowercase hexadecimal characters."091981c2b471…"

Hour Record

One grid, one hour of electricity (kind hour). Example: leave-behind/sample_hour_record.json.

FieldTypeUnitWhat it statesExample
hourobjectThe hour's body.
hour.record_idstringThe record's id: hour_<jurisdiction>_<period>."hour_CAISO_2026-06-29T23"
hour.jurisdictionstringThe meter's grid: MISO-CENTRAL, BPA, CAISO, PJM, ERCOT, or one of the Southwest's AZPS, SRP, NEVP, PNM, TEPC, EPE, and WALC."CAISO"
hour.periodstringUTCThe hour ending, YYYY-MM-DDTHH."2026-06-29T23"
hour.markstringMINTED when the hour's carbon result and its water result both read pass; RECORDED otherwise."MINTED"
hour.originstringreal: the hour is built from the grid's published data."real"
hour.feedstringThe public feed the hour's mix and demand come from."EIA-930 Hourly Electric Grid Monitor"
hour.respondentstringThe feed's respondent code for the grid."CISO"
hour.feed_notestring or nullThe territory the feed's figure covers: demand net of rooftop solar on CAISO, the feed covers all of MISO on MISO-Central, null on BPA, PJM, ERCOT, and the Southwest's seven."demand net of rooftop solar"
hour.sealed_atstringUTCWhen the record was sealed."2026-09-21T18:45:44Z"
hour.lag_hoursnumberhoursHours from the hour's close to sealed_at, to the tenth.2011.8
hour.waterobjectThe hour's gridwater: the water consumed at the plants to generate the hour's electricity.
hour.water.termstringThe quantity's name."gridwater"
hour.water.gal_per_mwhnumbergallons per MWhThe water consumed upstream to generate one MWh of the hour's electricity.64.17
hour.water.plant_cooling_gal_per_mwhnumbergallons per MWhThe part consumed in plant cooling.60.81
hour.water.reservoir_evaporation_gal_per_mwhnumbergallons per MWhThe part evaporated from hydroelectric reservoirs.3.36
hour.water.by_fuel_gal_per_mwhobjectgallons per MWhEach fuel's part of the hour's gallons per MWh; the seven add to hour.water.gal_per_mwh.
hour.water.by_fuel_gal_per_mwh.coalnumbergallons per MWhCoal's part.0.0
hour.water.by_fuel_gal_per_mwh.gasnumbergallons per MWhNatural gas's part.4.58
hour.water.by_fuel_gal_per_mwh.hydronumbergallons per MWhHydroelectric's part, its reservoirs' evaporation.3.36
hour.water.by_fuel_gal_per_mwh.nuclearnumbergallons per MWhNuclear's part.27.14
hour.water.by_fuel_gal_per_mwh.othernumbergallons per MWhEvery other fuel's part.10.38
hour.water.by_fuel_gal_per_mwh.solarnumbergallons per MWhSolar's part.18.71
hour.water.by_fuel_gal_per_mwh.windnumbergallons per MWhWind's part.0.0
hour.water.basins[]arrayOne line for each basin group the hour's water left, the most water first.
hour.water.basins[].groupstringThe basin group's id (Basin Groups)."lower_colorado"
hour.water.basins[].labelstringThe group's name as the record prints it."Lower Colorado"
hour.water.basins[].gal_per_mwhnumbergallons per MWhThe water this group gave up for one MWh of the hour's electricity.2.73
hour.water.basins[].pct_of_hournumberpercentThe group's share of the hour's water, to the tenth.4.2
hour.water.basins[].snumber or nullThe group's stress factor in force for the hour: the group's ceiling is 198 gallons per MWh times S times the group's share of the grid's generation. Null where the group has no ceiling.0.75
hour.water.basins[].ceiling_gal_per_mwhnumber or nullgallons per MWhThe group's ceiling under the embedded-water prescription in force, read on the local date the hour closed for a group whose S changes by season.5.0
hour.water.basins[].pct_of_prescriptionnumber or nullpercentThe line's gallons per MWh over its ceiling, times 100, to the tenth, read off the two figures the line prints.54.6
hour.water.basins[].resultstringunder when the group's gallons are strictly under its ceiling, at or over otherwise, and no grade for a group with no ceiling."under"
hour.water.basins[].valuationobject or nullThe line's valuation from Standard 0.9 (Valuation Block): its gallons within and over its ceiling for the hour, valued. Null on a group with no ceiling, and on every line while no ratified valuation payload states its figures for the hour's UTC day.
hour.water.highest_pct_of_prescriptionnumber or nullpercentThe highest percent of prescription among the lines that carry one.54.6
hour.water.highest_groupstring or nullThe group that holds it; a tie goes to the first line in the record's order."lower_colorado"
hour.water.basisstringHow the hour's water is modeled."modeled from 2024 plant data"
hour.water.resultstringpass when every group that carries a ceiling is under it, fail otherwise."pass"
hour.water.reasonstringThe water result in a sentence, naming each group at or over its ceiling."every graded basin under its ceiling"
hour.water.valuationobject or nullThe record's own sum of its lines' dollars from Standard 0.9 (Valuation Block); null while no ratified payload is in force for the hour's UTC day.
hour.generation_mixobjectpercentThe hour's generation by fuel, percent of its MWh, to two places. Since 2026-11-02 the feed's battery storage code (BAT) is dropped from the hour's rows before the mix is normalized; storage's negative values (charging) have always been clamped to zero. Since 2026-11-03 a grid's code map reads a feed code onto another fuel after that drop: on SRP, EPE, and WALC the feed's solar with integrated battery storage (SNB) is solar, and on every other grid it is other. An hour is sealed only when its rows carry at least three fuel codes and generation at or over its grid's completeness floor, the lower of 500 MW and 10 percent of the grid's shoulder dial (93 MW on EPE, 95 on WALC, and 500 on every grid metered before the Southwest's).
hour.generation_mix.coalnumberpercentCoal's share.0.0
hour.generation_mix.gasnumberpercentNatural gas's share.4.24
hour.generation_mix.hydronumberpercentHydroelectric's share.0.21
hour.generation_mix.nuclearnumberpercentNuclear's share.10.09
hour.generation_mix.othernumberpercentEvery other fuel's share.3.46
hour.generation_mix.solarnumberpercentSolar's share.71.96
hour.generation_mix.windnumberpercentWind's share.10.04
hour.carbonobjectThe hour's carbon intensity against its threshold.
hour.carbon.intensity_g_per_kwhnumbergrams CO2 per kWhThe hour's carbon intensity from its mix, to two places.78.05
hour.carbon.threshold_g_per_kwhnumbergrams CO2 per kWhThe threshold the intensity is read against.100.0
hour.carbon.resultstringpass at or under the threshold, fail over it."pass"
hour.carbon.reasonstringThe carbon result in a sentence."78.05 is at or under 100"
hour.demandobjectThe grid's demand in the same hour.
hour.demand.gwnumberGWThe grid's demand for the period, as the feed reports it, to three places.27.578
hour.demand.peak_band_gwnumberGWThe demand above which the grid is at peak.34.59
hour.demand.at_peakbooleanTrue when the demand is over the peak band.false
vintageobjectThe versions of the Standard and the tables the record was built with.
vintage.standard_versionstringThe Standard in force when the record was sealed."0.9"
vintage.emission_factor_table_versionstringThe carbon emission factors."ef-2026-07-06"
vintage.cooling_mix_table_versionstringThe regional cooling mix by fuel."cm-eia860-923-2024"
vintage.water_factor_table_versionstringThe water consumption factors by fuel and cooling type."wf-2026-06-13"
vintage.basin_shares_table_versionstringEach fuel's water split by basin group."bs-eia860-923-2024-r3"
vintage.rate_table_versionstringThe water rate table a site's priced lines read."water-rates-r3"
vintage.embedded_water_prescriptionobjectThe embedded-water prescription the hour's basin lines are read against.
vintage.embedded_water_prescription.versionstringThe grid's prescription version."1"
vintage.embedded_water_prescription.p_gal_per_mwhnumbergallons per MWh generatedAquadrio's bar, the 198 that every group's ceiling scales.198.0
vintage.embedded_water_prescription.boundarystringThe test: a group passes strictly under its ceiling."strict_under"
vintage.embedded_water_prescription.derivation_refstringThe grid's prescription memo."calibration/water/EMBEDDED_WATER_GRID_MEMO_2026-09-21_CAISO.md"
vintage.valuation_versionstring or nullFrom Standard 0.9, the valuation payload the hour's lines are valued under; null when none was in force for the hour's UTC day."valuation-1"

The Hours' Rows

The Hours carry each sealed hour as one row of hours.csv, each column's unit in its name, and hours.parquet holds the same columns typed. After each basin group's four columns stand the valuation's: the record's own sum, then each group's gallons within and over its ceiling and their dollars, read from the line's valuation block. A record sealed before Standard 0.9 carries no block, and a line with no ceiling carries none, so those cells are empty (null in Parquet). The index records in index.json carry the valuation of every hour in the span, including the hours sealed before Standard 0.9; a span's value is the sum of its index day records' dollars. The examples are the sample hour's row, its Lower Colorado line standing for <group>.

ColumnTypeUnitWhat it statesExample
valuation_dollarsnumberdollarsThe record's valuation, hour.water.valuation.dollars. Empty for an hour sealed before Standard 0.9 or valued under no ratified payload.1010.02
valuation_dollars_per_mwhnumberdollars per MWhhour.water.valuation.dollars_per_mwh: those dollars over the hour's MWh.0.0366
valuation_versionstringhour.water.valuation.version: the valuation payload's version.valuation-1
<group>_within_ceiling_gallonsnumbergallonsThe line's valuation.within_ceiling_gallons: the group's gallons within its ceiling for the hour. Empty on a line with no ceiling.75287.9
<group>_over_ceiling_gallonsnumbergallonsThe line's valuation.over_ceiling_gallons: its gallons above its ceiling.0
<group>_valuation_dollarsnumberdollarsThe line's valuation.dollars: the two parts valued.75.09

Index Day Record

One grid, one UTC day (kind index_day, Standard 0.8). A day's level is its gallons over its MWh, each hour's gallons taken as the hour's sealed gallons per MWh times its sealed demand in MWh, summed exactly at the records' own places. Example: leave-behind/sample_index_record.json.

FieldTypeUnitWhat it statesExample
indexobjectThe day's body.
index.record_idstringThe record's id: index_day_<jurisdiction>_<period>."index_day_MISO-CENTRAL_2026-09-18"
index.jurisdictionstringThe meter's grid."MISO-CENTRAL"
index.footprintstring or nullThe territory the grid's figures cover: all of MISO on MISO-Central, demand net of rooftop solar on CAISO, null on BPA, PJM, ERCOT, and the Southwest's seven."all of MISO"
index.periodstringUTCThe UTC day, YYYY-MM-DD."2026-09-18"
index.originstringreal when every hour the day reads is real."real"
index.sealed_atstringUTCWhen the record was sealed."2026-10-22T12:00:00Z"
index.hours_expectedintegerhoursThe hours a UTC day holds.24
index.hours_sealedintegerhoursThe sealed hours the day reads.24
index.shortbooleanTrue when the day sealed over fewer than 24 hours (Short-Day Rule).false
index.demand_mwhnumberMWhThe day's demand: the sum of its hours' demand in MWh.1596756.0
index.basisobject or nullThe yearly gallons per MWh basis the grid publishes, with its own footprint; null on BPA.
index.basis.gal_per_mwhnumbergallons per MWhThe basis.321
index.basis.footprintstringThe territory the basis covers."MISO-Central"
index.basis.tablestringThe payload the basis comes from."fwb-eia860-923-2024-r2"
index.waterobjectThe day's gridwater.
index.water.termstringThe quantity's name."gridwater"
index.water.gal_per_mwhnumbergallons per MWhThe day's level: its gallons over its MWh, to two places.300.59
index.water.gallonsnumbergallonsThe day's gallons, to the tenth.479968886.0
index.water.basins[]arrayOne line for each basin group, in the order of the day's first hour.
index.water.basins[].groupstringThe basin group's id."mississippi"
index.water.basins[].labelstringThe group's name as the record prints it."Mississippi"
index.water.basins[].gal_per_mwhnumbergallons per MWhThe group's level: its gallons over the day's MWh, to two places.193.48
index.water.basins[].gallonsnumbergallonsThe group's gallons for the day, to the tenth.308940350.9
index.water.basins[].ceiling_gal_per_mwhnumber or nullgallons per MWhThe group's ceiling for the day: the one its hours print, or, where it changed inside the day, the mean of the hourly ceilings weighted by each hour's MWh, to two places.87.2
index.water.basins[].ceiling_variedbooleanTrue when the group's ceiling changed inside the day.false
index.water.basins[].snumber or nullThe group's one S in force over the day; null where it varied or the group has no ceiling.1.0
index.water.basins[].pct_of_prescriptionnumber or nullpercentThe line's level over its ceiling, times 100, to the tenth.221.9
index.water.basins[].resultstringunder when the group's gallons are strictly under its ceiling over the day, at or over otherwise, no grade with no ceiling."at or over"
index.water.basins[].valuationobject or nullThe line's valuation (Valuation Block); null while the valuation payload in force is unratified, and on a group with no ceiling.
index.water.highest_pct_of_prescriptionnumber or nullpercentThe highest percent of prescription among the day's lines.221.9
index.water.highest_groupstring or nullThe group that holds it."mississippi"
index.water.valuationobject or nullThe record's own sum of its lines' dollars (Valuation Block); null while unratified.
hours[]arrayEach constituent hour, in period order.
hours[].periodstringUTCThe hour's period."2026-09-18T01"
hours[].record_hashstringhexThe hour's seal, a link: a changed hour breaks the day's seal."f8d52fa9b0ec…"
vintageobjectThe versions the record was built with.
vintage.standard_versionstringThe Standard in force."0.8"
vintage.embedded_water_ceilings_versionstringThe ceilings payload's version."5"
vintage.embedded_water_ceilings_idstringThe ceilings payload's id."embedded-water-ceilings"
vintage.valuation_versionstringThe valuation payload the record names."valuation-1"
vintage.valuation_ratifiedbooleanTrue when that payload was ratified, so the record carries dollars.true

Index Month Record

One grid, one UTC month (kind index_month). A month reads its day records' printed figures: its gallons and MWh are their sums, and each line's level, ceiling, percent, and result follow the day's rules over the month. It carries the day's fields under index apart from index.hours_expected and index.short, and adds the fields below. Example: MISO-Central's 2026-08 in the Index page's fixtures.

FieldTypeUnitWhat it statesExample
index.days_expectedintegerdaysThe days the UTC month holds.31
index.days_sealedintegerdaysThe day records the month reads.31
index.hours_sealedintegerhoursThe sum of its days' sealed hours.744
days[]arrayEach constituent day record, in period order.
days[].periodstringUTCThe day's period."2026-08-01"
days[].record_hashstringhexThe day record's seal, a link: a changed day breaks the month's seal."4a2d00d7b07d…"

A month's index.record_id reads index_month_<jurisdiction>_<period>, as index_month_MISO-CENTRAL_2026-08.

Valuation Block

Aquadrio's valuation of a record's gallons, by the ratified method, while the valuation payload in force is ratified: a group's gallons within its ceiling valued at the base reference and its gallons above it at the scarcity step, each reference read per acre-foot on the UTC day the record's period belongs to and converted at the payload's gallons per acre-foot. An index record carries it from Standard 0.8: a day splits each hour's gallons against that hour's ceiling and sums the parts; a month sums its days' parts and dollars. From Standard 0.9 the hour, a facility's and a building's hour, and a plant's hour carry the same block (On Every Record below). The examples in this table are the sample index record's, valued under valuation-1.

FieldTypeUnitWhat it statesExample
index.water.basins[].valuation.within_ceiling_gallonsnumbergallonsThe group's gallons within its ceiling, to the tenth.139237123.2
index.water.basins[].valuation.over_ceiling_gallonsnumbergallonsIts gallons above its ceiling, to the tenth.169703227.7
index.water.basins[].valuation.dollarsnumberdollarsThe two parts valued, to the cent.651340.77
index.water.basins[].valuation.dollars_per_mwhnumberdollars per MWhThose dollars over the record's MWh, to four places.0.4079
index.water.basins[].valuation.base_referenceobjectThe reference the gallons within the ceiling are valued at.
index.water.basins[].valuation.base_reference.namestring or arrayIts name; on a month, each name in force over the month."Bureau of Reclamation, Lower Colorado River Basin System Conservation and Efficiency Program (Bucket 1), cost per acre-foot by agreement start year"
index.water.basins[].valuation.base_reference.dollars_per_acre_footnumber or arraydollars per acre-footIts figure in force on the day; on a month, each figure in force.325.0
index.water.basins[].valuation.scarcity_stepobjectThe reference the gallons above the ceiling are valued at.
index.water.basins[].valuation.scarcity_step.namestring or arrayIts name."Metropolitan Water District of Southern California, full service untreated volumetric cost per acre-foot, as adopted"
index.water.basins[].valuation.scarcity_step.dollars_per_acre_footnumber or arraydollars per acre-footIts figure in force.984.0
index.water.basins[].valuation.gallons_per_acre_footnumber or arraygallons per acre-footThe conversion the payload states.325851
index.water.basins[].valuation.versionstring or arrayThe valuation payload's version."valuation-1"
index.water.valuation.dollarsnumberdollarsThe sum of the record's own lines' dollars, to the cent.915119.5
index.water.valuation.dollars_per_mwhnumberdollars per MWhThat sum over the record's MWh, to four places.0.5731
index.water.valuation.versionstring or arrayThe payload's version."valuation-1"

On Every Record

From Standard 0.9 every record that states gallons by basin group carries its valuation, each graded line's block with the fields above and each record's sum of its own lines' dollars, inside the one record; nothing adds dollars across records. Each kind splits its gallons at the ceiling from the figures it already prints:

  • The hour's record: a graded line's gallons within the ceiling are the lesser of its gallons per MWh and its ceiling, times the hour's MWh (hour.demand.gw times 1,000), and its gallons over the ceiling are its gallons per MWh above the ceiling times the hour's MWh, never below zero. This is the hour arithmetic the index day performs, so a day's hours' dollars sum to the day's within the rounding of 24 hours at a cent each.
  • A facility's and a building's record: a graded line's gallons over the ceiling are its over_prescription_gallons, and the rest of its gallons are within it, over the block's energy_mwh. The cooling water of a building's compute block carries no valuation.
  • A plant's hour: the plant's gallons over the ceiling are its gallons times the share of the grid hour's line for the plant's basin group that sits above the line's ceiling (its gallons per MWh less its ceiling, over its gallons per MWh), rounded half up to the tenth, and the rest are within it, over the plant's net MWh. The record names the grid hour it read (plant_hour.electricity_hour).

A line with no ceiling, an hour of no energy or no generation, and a record whose UTC day has no ratified payload in force carry valuation: null; the record seals all the same. A record sealed before 0.9 carries no block, and a reader values it from its own lines and the payload in force on its day. The price block beside it is the comparison line at the utility's rate.

On the hour's record (examples: the sample hour's Lower Colorado line and the hour's own sum):

FieldTypeUnitWhat it statesExample
hour.water.basins[].valuation.within_ceiling_gallonsnumbergallonsThe line's gallons within its ceiling for the hour, to the tenth.75287.9
hour.water.basins[].valuation.over_ceiling_gallonsnumbergallonsIts gallons above its ceiling, to the tenth.0.0
hour.water.basins[].valuation.dollarsnumberdollarsThe two parts valued, to the cent.75.09
hour.water.basins[].valuation.dollars_per_mwhnumberdollars per MWhThose dollars over the hour's MWh, to four places.0.0027
hour.water.basins[].valuation.base_referenceobjectThe reference the gallons within the ceiling are valued at.
hour.water.basins[].valuation.base_reference.namestringIts name."Bureau of Reclamation, Lower Colorado River Basin System Conservation and Efficiency Program (Bucket 1), cost per acre-foot by agreement start year"
hour.water.basins[].valuation.base_reference.dollars_per_acre_footnumberdollars per acre-footIts figure in force on the hour's UTC day.325.0
hour.water.basins[].valuation.scarcity_stepobjectThe reference the gallons above the ceiling are valued at.
hour.water.basins[].valuation.scarcity_step.namestringIts name."Metropolitan Water District of Southern California, full service untreated volumetric cost per acre-foot, as adopted"
hour.water.basins[].valuation.scarcity_step.dollars_per_acre_footnumberdollars per acre-footIts figure in force on the hour's UTC day.984.0
hour.water.basins[].valuation.gallons_per_acre_footnumbergallons per acre-footThe conversion the payload states.325851
hour.water.basins[].valuation.versionstringThe valuation payload's version."valuation-1"
hour.water.valuation.dollarsnumberdollarsThe sum of the hour's own lines' dollars, to the cent.1010.02
hour.water.valuation.dollars_per_mwhnumberdollars per MWhThat sum over the hour's MWh, to four places.0.0366
hour.water.valuation.versionstringThe payload's version."valuation-1"

On a facility's and a building's record, each over its own energy (examples: the sample building's groundwater and municipal line and its own sum; the facility of one building prints the same figures):

FieldTypeUnitWhat it statesExample
facility_hour.embedded_water.basins[].valuation, building_hour.embedded_water.basins[].valuationobject or nullThe line's valuation; null on a group with no ceiling.
facility_hour.embedded_water.basins[].valuation.within_ceiling_gallons, building_hour.embedded_water.basins[].valuation.within_ceiling_gallonsnumbergallonsThe line's gallons less its gallons over the prescription, to the tenth.622.5
facility_hour.embedded_water.basins[].valuation.over_ceiling_gallons, building_hour.embedded_water.basins[].valuation.over_ceiling_gallonsnumbergallonsThe line's gallons over the prescription, to the tenth.0.0
facility_hour.embedded_water.basins[].valuation.dollars, building_hour.embedded_water.basins[].valuation.dollarsnumberdollarsThe two parts valued, to the cent.0.62
facility_hour.embedded_water.basins[].valuation.dollars_per_mwh, building_hour.embedded_water.basins[].valuation.dollars_per_mwhnumberdollars per MWhThose dollars over the block's energy, to four places.0.0124
facility_hour.embedded_water.basins[].valuation.base_reference, building_hour.embedded_water.basins[].valuation.base_referenceobjectThe base reference.
facility_hour.embedded_water.basins[].valuation.base_reference.name, building_hour.embedded_water.basins[].valuation.base_reference.namestringIts name."Bureau of Reclamation, …"
facility_hour.embedded_water.basins[].valuation.base_reference.dollars_per_acre_foot, building_hour.embedded_water.basins[].valuation.base_reference.dollars_per_acre_footnumberdollars per acre-footIts figure in force on the hour's UTC day.325.0
facility_hour.embedded_water.basins[].valuation.scarcity_step, building_hour.embedded_water.basins[].valuation.scarcity_stepobjectThe scarcity step.
facility_hour.embedded_water.basins[].valuation.scarcity_step.name, building_hour.embedded_water.basins[].valuation.scarcity_step.namestringIts name."Metropolitan Water District of Southern California, …"
facility_hour.embedded_water.basins[].valuation.scarcity_step.dollars_per_acre_foot, building_hour.embedded_water.basins[].valuation.scarcity_step.dollars_per_acre_footnumberdollars per acre-footIts figure in force on the hour's UTC day.984.0
facility_hour.embedded_water.basins[].valuation.gallons_per_acre_foot, building_hour.embedded_water.basins[].valuation.gallons_per_acre_footnumbergallons per acre-footThe conversion the payload states.325851
facility_hour.embedded_water.basins[].valuation.version, building_hour.embedded_water.basins[].valuation.versionstringThe valuation payload's version."valuation-1"
facility_hour.embedded_water.valuation, building_hour.embedded_water.valuationobject or nullThe record's own sum of its lines' dollars; null while no ratified payload is in force for the hour's UTC day.
facility_hour.embedded_water.valuation.dollars, building_hour.embedded_water.valuation.dollarsnumberdollarsThe sum, to the cent.1.84
facility_hour.embedded_water.valuation.dollars_per_mwh, building_hour.embedded_water.valuation.dollars_per_mwhnumberdollars per MWhThat sum over the block's energy, to four places.0.0368
facility_hour.embedded_water.valuation.version, building_hour.embedded_water.valuation.versionstringThe payload's version."valuation-1"

On a plant's hour (examples: Dearborn's hour ending 2025-08-05T18 on the fixture grid hour, valued at 2025's figures):

FieldTypeUnitWhat it statesExample
plant_hour.water.valuationobject or nullThe plant's gallons valued; null with no grid hour named, on a group with no ceiling on that hour, on an hour of no generation, and while no ratified payload is in force for the hour's UTC day.
plant_hour.water.valuation.within_ceiling_gallonsnumbergallonsThe plant's gallons less its part over the ceiling, to the tenth.62941.4
plant_hour.water.valuation.over_ceiling_gallonsnumbergallonsThe plant's gallons times the grid hour line's share above its ceiling, rounded half up to the tenth.29110.4
plant_hour.water.valuation.dollarsnumberdollarsThe two parts valued, to the cent.158.74
plant_hour.water.valuation.dollars_per_mwhnumberdollars per MWhThose dollars over the plant's net MWh, to four places.0.1991
plant_hour.water.valuation.base_referenceobjectThe base reference.
plant_hour.water.valuation.base_reference.namestringIts name."Bureau of Reclamation, …"
plant_hour.water.valuation.base_reference.dollars_per_acre_footnumberdollars per acre-footIts figure in force on the hour's UTC day.400.0
plant_hour.water.valuation.scarcity_stepobjectThe scarcity step.
plant_hour.water.valuation.scarcity_step.namestringIts name."Metropolitan Water District of Southern California, …"
plant_hour.water.valuation.scarcity_step.dollars_per_acre_footnumberdollars per acre-footIts figure in force on the hour's UTC day.912.0
plant_hour.water.valuation.gallons_per_acre_footnumbergallons per acre-footThe conversion the payload states.325851
plant_hour.water.valuation.versionstringThe valuation payload's version."valuation-1"

Facility Record

One site, one hour (kind facility_hour), led by the gridwater its buildings drew. Example: measurement/agents/testdata/sample_facility_hour.json.

FieldTypeUnitWhat it statesExample
facility_hourobjectThe facility's body.
facility_hour.record_idstringThe record's id: facility_<facility_id>_<period>."facility_bay-inland_2026-06-29T23"
facility_hour.levelstringThe level of the hierarchy."facility"
facility_hour.facility_idstringThe site's id."bay-inland"
facility_hour.namestringThe site's name."Bay Inland"
facility_hour.facility_kindstringWhat the site is."data center campus"
facility_hour.placestringWhere the site stands."East Bay, CA"
facility_hour.jurisdictionstringThe grid the site draws from."CAISO"
facility_hour.periodstringUTCThe hour ending."2026-06-29T23"
facility_hour.markstringMINTED when every building at the site that produces compute is MINTED; RECORDED otherwise, a site with no compute included."MINTED"
facility_hour.originstringsimulated on a modeled site; real on a named site."simulated"
facility_hour.load_basisstringHow the site's energy is known."modeled"
facility_hour.sealed_atstringUTCWhen the record was sealed."2026-09-21T18:45:44Z"
facility_hour.electricity_hourobjectA link to the grid hour the site's water reads.
facility_hour.electricity_hour.record_idstringThe hour's record id."hour_CAISO_2026-06-29T23"
facility_hour.electricity_hour.record_hashstringhexThe hour's seal, a link."091981c2b471…"
facility_hour.electricity_hour.markstringThe hour's mark."MINTED"
facility_hour.embedded_waterobjectThe site's gridwater for the hour, from the hour's sealed figures.
facility_hour.embedded_water.termstringThe quantity's name."gridwater"
facility_hour.embedded_water.energy_mwhnumberMWhThe energy the site drew, to four places: the sum of its buildings'.50.0
facility_hour.embedded_water.hour_gal_per_mwhnumbergallons per MWhThe hour's gallons per MWh as the hour's record prints it.64.17
facility_hour.embedded_water.gallonsnumbergallonsThe energy times the hour's gallons per MWh, to the tenth.3208.5
facility_hour.embedded_water.basins[]arrayOne line for each of the hour's basin lines.
facility_hour.embedded_water.basins[].groupstringThe basin group's id."groundwater_municipal"
facility_hour.embedded_water.basins[].labelstringThe group's name."Groundwater and municipal"
facility_hour.embedded_water.basins[].gallonsnumbergallonsThe energy times the group's gallons per MWh, to the tenth.622.5
facility_hour.embedded_water.basins[].over_prescription_gallonsnumber or nullgallonsThe energy times the group's gallons per MWh above its ceiling, never below zero; null with no ceiling.0.0
facility_hour.embedded_water.over_prescription_gallonsnumbergallonsThe sum of the lines' gallons over the prescription.0.0
facility_hour.embedded_water.basins[].valuationobject or nullFrom Standard 0.9, the line's valuation over the site's energy (Valuation Block, On Every Record); null on a group with no ceiling.
facility_hour.embedded_water.valuationobject or nullFrom Standard 0.9, the record's own sum of its lines' dollars, valued on the site's own energy (Valuation Block).
facility_hour.buildings[]arrayEach building's record at the site, as a link.
facility_hour.buildings[].building_idstringThe building's id."bay-inland-1"
facility_hour.buildings[].record_idstringIts record's id."building_bay-inland-1_2026-06-29T23"
facility_hour.buildings[].record_hashstringhexIts record's seal, a link."2b431c3fd5dd…"
facility_hour.buildings[].markstringIts record's mark."MINTED"

A site whose place has a water rate on file carries a facility_hour.price block of the building's shape below, with one priced line for its gridwater.

Building Record

One building at a site, one hour (kind building_hour). Example: measurement/agents/testdata/sample_building_hour.json.

FieldTypeUnitWhat it statesExample
building_hourobjectThe building's body.
building_hour.record_idstringThe record's id: building_<building_id>_<period>."building_bay-inland-1_2026-06-29T23"
building_hour.levelstringThe level of the hierarchy."building"
building_hour.building_idstringThe building's id."bay-inland-1"
building_hour.namestringThe building's name."Bay Inland, building 1"
building_hour.facility_idstringThe site the building stands at."bay-inland"
building_hour.produces_computebooleanTrue for a building that runs compute; only such a building carries building_hour.compute.true
building_hour.jurisdictionstringThe grid the building draws from."CAISO"
building_hour.periodstringUTCThe hour ending."2026-06-29T23"
building_hour.markstringMINTED when its electricity hour is MINTED, its cooling water is strictly under the building prescription, and the grid is off peak; RECORDED otherwise, and always without compute."MINTED"
building_hour.originstringsimulated on a modeled site; real on a named site."simulated"
building_hour.load_basisstringHow the building's energy is known."modeled"
building_hour.sealed_atstringUTCWhen the record was sealed."2026-09-21T18:45:44Z"
building_hour.electricity_hourobjectA link to the grid hour.
building_hour.electricity_hour.record_idstringThe hour's record id."hour_CAISO_2026-06-29T23"
building_hour.electricity_hour.record_hashstringhexThe hour's seal, a link."091981c2b471…"
building_hour.electricity_hour.markstringThe hour's mark."MINTED"
building_hour.embedded_waterobjectThe building's gridwater for the hour, from the hour's sealed figures.
building_hour.embedded_water.termstringThe quantity's name."gridwater"
building_hour.embedded_water.energy_mwhnumberMWhThe energy the building drew, to four places.50.0
building_hour.embedded_water.hour_gal_per_mwhnumbergallons per MWhThe hour's gallons per MWh.64.17
building_hour.embedded_water.gallonsnumbergallonsThe energy times the hour's gallons per MWh, to the tenth.3208.5
building_hour.embedded_water.basins[]arrayOne line for each of the hour's basin lines.
building_hour.embedded_water.basins[].groupstringThe basin group's id."desert_basins"
building_hour.embedded_water.basins[].labelstringThe group's name."Desert basins"
building_hour.embedded_water.basins[].gallonsnumbergallonsThe energy times the group's gallons per MWh, to the tenth.482.5
building_hour.embedded_water.basins[].over_prescription_gallonsnumber or nullgallonsThe energy times the group's gallons per MWh above its ceiling, never below zero; null with no ceiling.0.0
building_hour.embedded_water.over_prescription_gallonsnumbergallonsThe sum of the lines' gallons over the prescription.0.0
building_hour.embedded_water.basins[].valuationobject or nullFrom Standard 0.9, the line's valuation over the building's energy (Valuation Block, On Every Record); null on a group with no ceiling.
building_hour.embedded_water.valuationobject or nullFrom Standard 0.9, the record's own sum of its lines' dollars (Valuation Block). The compute block's cooling water carries no valuation.
building_hour.computeobjectThe building's compute hour.
building_hour.compute.it_energy_mwhnumberMWhThe energy its compute drew, to four places.50.0
building_hour.compute.cooling_waterobjectThe water the building's own cooling consumed.
building_hour.compute.cooling_water.wue_l_per_kwhnumberliters per kWhThe building's water use effectiveness.0.35
building_hour.compute.cooling_water.gallonsnumbergallonsThe energy times the effectiveness, in gallons, to the tenth.4623.0
building_hour.compute.cooling_water.cooling_typestringThe building's cooling."closed-loop"
building_hour.compute.cooling_water.basisstringHow the effectiveness is known."modeled"
building_hour.compute.building_prescriptionobjectThe building prescription in force.
building_hour.compute.building_prescription.ceiling_l_per_kwhnumberliters per kWhIts ceiling.1.8
building_hour.compute.building_prescription.sourcestringWhere the ceiling comes from."interim default"
building_hour.compute.building_prescription.boundarystringThe test: strictly under."strict_under"
building_hour.compute.building_prescription.resultstringunder or at or over."under"
building_hour.compute.grid_peakobjectThe grid's demand in the hour.
building_hour.compute.grid_peak.at_peakbooleanTrue when the grid is at peak.false
building_hour.compute.grid_peak.demand_gwnumberGWThe grid's demand.27.578
building_hour.compute.grid_peak.peak_band_gwnumberGWThe grid's peak band.34.59
building_hour.compute.reasons[]array of stringsThe building's mark in three sentences: the electricity hour, the cooling water, the peak."the grid is off peak"

A building whose place has a water rate on file carries a price block, the comparison line beside its valuation, and so does its facility's record (facility_hour.price, with its gridwater line alone). Example: measurement/agents/testdata/sample_building_hour_ford_field.json, Ford Field's hour ending 2026-09-22T04, sealed before Standard 0.9.

FieldTypeUnitWhat it statesExample
building_hour.priceobjectThe comparison line: the building's water at the published rate of the utility that serves its place.
building_hour.price.figurestringWhat the block is: from Standard 0.9 comparison line at the utility's rate; a block sealed before 0.9 reads valuation."valuation"
building_hour.price.place_keystringThe place in the water rate table."detroit-mi"
building_hour.price.utilitystringThe utility whose schedule values the water."Detroit Water and Sewerage Department"
building_hour.price.linestringThe schedule's line as printed."Water Volume Usage Tier 2 (greater than 6 CCF*) $5.121"
building_hour.price.printed_ratenumberdollars per the schedule's unitThe rate as the schedule prints it.5.121
building_hour.price.printed_unitstringThe schedule's unit."CCF"
building_hour.price.gallons_per_unitnumbergallonsGallons in one of the schedule's units.748.052
building_hour.price.usd_per_gallonnumberdollars per gallonThe rate per gallon, sealed for recomputation.0.0068457808
building_hour.price.effective_fromstringThe date the schedule took effect."2026-07-01"
building_hour.price.table_versionstringThe rate table."water-rates-r3"
building_hour.price.basisstringutility serving the place or nearest published rate."utility serving the place"
building_hour.price.lines[]arrayOne line for each water quantity the record states: its gridwater, and its cooling water on a building with compute. No line or block holds a total.
building_hour.price.lines[].whatstringThe quantity the line values: gridwater or cooling water."gridwater"
building_hour.price.lines[].gallonsnumbergallonsThe quantity in gallons.860.3
building_hour.price.lines[].schedule_quantitynumberthe schedule's unitThe quantity in the schedule's unit, to three places.1.15
building_hour.price.lines[].schedule_unitstringThe schedule's unit."CCF"
building_hour.price.lines[].dollarsnumberdollarsThe schedule quantity times the printed rate, to the cent.5.89
building_hour.price.lines[].over_prescription_gallonsnumbergallonsOn the gridwater line, its gallons over the prescription.351.2
building_hour.price.lines[].over_prescription_schedule_quantitynumberthe schedule's unitThose gallons in the schedule's unit, to three places.0.469
building_hour.price.lines[].over_prescription_dollarsnumberdollarsThat quantity times the printed rate, to the cent.2.4

A Building Record's Rows

A Building Record carries each of the building's hourly records as one row of records.csv, each column's unit in its name. Three columns carry the record's valuation, and the local rate's columns after them read its price block, the comparison line. summary.json states the span's value at the index as the sum of the rows' index_dollars. The examples are the sample building's hour as its row prints it.

ColumnTypeUnitWhat it statesExample
index_dollarsnumberdollarsThe record's valuation, building_hour.embedded_water.valuation.dollars. A record sealed before Standard 0.9 carries no block, and its row carries the same figure computed from the record's lines and the payload in force on the UTC day of its period. Blank where no payload is in force on that day.1.84
index_within_ceiling_gallonsnumbergallonsThe gallons the valuation values within the ceilings: the sum of the graded lines' within_ceiling_gallons.1836
index_over_ceiling_gallonsnumbergallonsThe gallons it values above them: the sum of the graded lines' over_ceiling_gallons.0

Plant Record

One named power plant, one hour (kind plant_hour). Example: leave-behind/sample_plant_record.json, Fermi's hour ending 2026-10-24T06, sealed under Standard 0.9 from the NRC's daily level; the fields the EPA feed states (gross load, the net-to-gross ratios, the classes, the unit columns) take their examples from the Dearborn fixture hour, measurement/agents/testdata/sample_plant_hour_dearborn.json.

FieldTypeUnitWhat it statesExample
plant_hourobjectThe plant's body.
plant_hour.record_idstringThe record's id: plant_<plant_code>_<period>."plant_1729_2026-10-24T06"
plant_hour.levelstringThe level of the hierarchy."facility"
plant_hour.facility_idstringThe site's id: eia-<plant_code>."eia-1729"
plant_hour.facility_kindstringWhat the site is."power plant"
plant_hour.namestringThe plant's name as EIA-860 lists it."Fermi"
plant_hour.plant_codeintegerThe plant's EIA plant code.1729
plant_hour.owners[]arrayThe plant's owners of record as EIA-860 lists them.
plant_hour.owners[].namestringThe owner's name."DTE Electric Company"
plant_hour.owners[].sourcestringThe EIA-860 schedule that names the owner."EIA-860 Schedule 2 (2___Plant), utility of record; …"
plant_hour.owners[].generatorsobjectpercentThe owner's share of each operable generator, keyed by the generator's EIA-860 id.{"GT 1": 100.0, "GT2": 100.0, …}
plant_hour.placestringThe plant's county and state."Wayne County, MI"
plant_hour.jurisdictionstringThe meter's grid for the plant's balancing authority."MISO-CENTRAL"
plant_hour.balancing_authoritystringThe balancing authority as EIA-860 lists it."MISO"
plant_hour.periodstringUTCThe hour ending."2026-10-24T06"
plant_hour.markstringRECORDED: a plant's record carries no other mark."RECORDED"
plant_hour.originstringreal: the plant's inputs are federal filings."real"
plant_hour.sealed_atstringUTCWhen the record was sealed."2026-09-20T12:00:00Z"
plant_hour.lag_hoursnumberhoursHours from the hour's close to sealed_at, to the tenth.57.6
plant_hour.electricity_hourobjectFrom Standard 0.9, a link to the sealed grid hour of the same period on the plant's grid, whose line for the plant's basin group splits the plant's gallons at the ceiling; a plant's hour is written only once that hour is sealed.
plant_hour.electricity_hour.record_idstringThe grid hour's record id."hour_MISO-CENTRAL_2026-10-24T06"
plant_hour.electricity_hour.record_hashstringhexThe grid hour's seal, a link."244cc58f3c74…"
plant_hour.electricity_hour.markstringThe grid hour's mark."RECORDED"
plant_hour.generationobjectThe hour's generation as the federal feed states it.
plant_hour.generation.net_mwhnumberMWhThe hour's net generation: the classes' net MWh summed (the EPA feed), or the day's level times the reactor's capacity (the NRC feed).1141
plant_hour.generation.gross_mwhnumberMWhThe hour's gross load from EPA's hourly file.474.0
plant_hour.generation.feedstringThe federal feed: EPA's hourly emissions file, or the NRC's power reactor status report for a nuclear plant."NRC power reactor status report, daily percent of full power"
plant_hour.generation.basisstringHow the net MWh is read from the feed."the day's percent of full power times the unit's EIA-860 net summer capacity, …"
plant_hour.generation.net_to_grossobjectThe ratios that turn each class's activity into net MWh.
plant_hour.generation.net_to_gross.yearintegerThe year the ratios are read over.2024
plant_hour.generation.net_to_gross.basisstringHow the ratios are set."each class's EIA-923 net generation for the year over the class's own EPA activity …"
plant_hour.generation.net_to_gross.class_ratios[]arrayOne ratio for each class of the plant's units.
plant_hour.generation.net_to_gross.class_ratios[].kindstringThe class: steam, combined_cycle, or simple_cycle."steam"
plant_hour.generation.net_to_gross.class_ratios[].rationumberMWh per unit of activityThe class's ratio.0.43043223
plant_hour.generation.units_gross_mwhobjectMWhEach EPA unit's gross load in the hour, keyed by the unit's EPA id.{"BL1100": 0.0, "GT2100": 160.0, …}
plant_hour.generation.units_steam_klbobjectthousand pounds of steamEach EPA unit's steam load in the hour, keyed by the unit's EPA id; only a plant whose units raise steam carries it.{"BL1100": 261.0, …}
plant_hour.generation.epa_datestringThe date of EPA's row, as EPA stamps it."2025-08-05"
plant_hour.generation.epa_hourintegerThe hour of EPA's row, the hour beginning on Eastern Standard Time.12
plant_hour.generation.time_conventionstringHow the feed's stamp maps to the record's period."the NRC reports one power level per calendar day at the plant, read on Eastern Standard Time; …"
plant_hour.generation.unitstringThe reactor the NRC's level is reported for (a nuclear plant)."Fermi 2"
plant_hour.generation.report_datestringThe local calendar day the NRC's level is reported for (a nuclear plant)."2026-10-24"
plant_hour.generation.percent_powernumberpercent of full powerThe NRC's level for the day, held flat across the day's 24 hours (a nuclear plant).100
plant_hour.generation.net_summer_capacity_mwnumberMWThe reactor's EIA-860 net summer capacity, which the level is taken of (a nuclear plant).1141
plant_hour.waterobjectThe water the hour's generation consumed at the plant.
plant_hour.water.gallonsnumbergallonsThe hour's gallons, to the tenth: the classes' gallons summed, or the net MWh times the plant's cooling-typed factor where the feed states one level.766752
plant_hour.water.gal_per_mwhnumbergallons per MWhThe gallons over the net MWh, to four places.672
plant_hour.water.cooling_typestringThe plant's cooling."tower"
plant_hour.water.water_sourcestringThe plant's declared water source."Lake Erie"
plant_hour.water.basin_groupstringThe basin group the source places the plant in."great_lakes"
plant_hour.water.basisstringHow the water is modeled."modeled: the hour's net generation times the plant's cooling-typed consumption factor"
plant_hour.water.water_factor_table_versionstringThe water factor table."wf-2026-06-13"
plant_hour.water.fuelstringThe plant's fuel as the register classes it, where the water is one factor for the plant."nuclear"
plant_hour.water.classes[]arrayOne line for each class of the plant's units.
plant_hour.water.classes[].kindstringThe class."steam"
plant_hour.water.classes[].units[]array of stringsThe class's EPA unit ids."BL1100"
plant_hour.water.classes[].activitynumberthe class's activity unitThe class's activity in the hour.761.0
plant_hour.water.classes[].activity_unitstringMWh gross or thousand lb steam."thousand lb steam"
plant_hour.water.classes[].rationumberThe class's net-to-gross ratio.0.43043223
plant_hour.water.classes[].net_mwhnumberMWhThe activity times the ratio, to four places.327.5589
plant_hour.water.classes[].gal_per_mwhnumbergallons per MWhThe class's own consumption factor.184.2256
plant_hour.water.classes[].gallonsnumbergallonsThe net MWh times the factor, to the tenth.60344.7
plant_hour.water.valuationobject or nullFrom Standard 0.9, the plant's gallons valued, split by the grid hour's line for its basin group (Valuation Block, On Every Record).
plant_hour.modeled[]array of stringsEach modeled figure, in a plain sentence."the water is modeled: …"
plant_hour.register_versionstringThe named-sites register the plant's entry comes from."named-sites-r2"
plant_hour.priceobjectThe comparison line: the plant's water at the published rate of the utility that serves its place.
plant_hour.price.figurestringWhat the block is: from Standard 0.9 comparison line at the utility's rate; a block sealed before 0.9 reads valuation."comparison line at the utility's rate"
plant_hour.price.place_keystringThe place in the water rate table."frenchtown-township-mi"
plant_hour.price.utilitystringThe utility whose schedule values the water."Frenchtown Charter Township"
plant_hour.price.linestringThe schedule's line as printed."Effective January 1, 2026 the rates to be charged for water service shall be …"
plant_hour.price.printed_ratenumberdollars per the schedule's unitThe rate as the schedule prints it.4.12
plant_hour.price.printed_unitstringThe schedule's unit."CCF"
plant_hour.price.gallons_per_unitnumbergallonsGallons in one of the schedule's units.748.052
plant_hour.price.usd_per_gallonnumberdollars per gallonThe rate per gallon, sealed for recomputation.0.0055076385
plant_hour.price.effective_fromstringThe date the schedule took effect."2026-01-01"
plant_hour.price.table_versionstringThe rate table."water-rates-r3"
plant_hour.price.basisstringutility serving the place or nearest published rate."utility serving the place"
plant_hour.price.lines[]arrayOne line for each water quantity the record states; no line or block holds a total.
plant_hour.price.lines[].whatstringThe quantity the line values."plant cooling water"
plant_hour.price.lines[].gallonsnumbergallonsThe quantity in gallons.766752
plant_hour.price.lines[].schedule_quantitynumberthe schedule's unitThe quantity in the schedule's unit, to three places.1024.998
plant_hour.price.lines[].schedule_unitstringThe schedule's unit."CCF"
plant_hour.price.lines[].dollarsnumberdollarsThe schedule quantity times the printed rate, to the cent.4222.99

A place valued at the nearest published rate adds nearest_system, site_latitude, site_longitude, and distance_km to its price block, and a place with no schedule on file for the hour carries an empty lines list and a reason.

Correction Record

A new sealed record naming a record it corrects (kind correction). No sealed record is edited or deleted. Example: measurement/agents/testdata/sample_correction_record.json.

FieldTypeUnitWhat it statesExample
correctionobjectThe correction's body.
correction.record_idstringThe record's id: correction_<corrected record_id>_<sealed_at without its dashes and colons>."correction_plant_1733_2025-08-04T22_20260920T120000Z"
correction.correctsobjectThe record corrected.
correction.corrects.record_idstringIts id."plant_1733_2025-08-04T22"
correction.corrects.record_hashstringhexIts seal, a link."8d0cdd073099…"
correction.corrects.kindstringIts kind."plant_hour"
correction.corrects.periodstringUTCIts period."2025-08-04T22"
correction.corrects.sealed_atstringUTCWhen it was sealed."2026-09-20T12:00:00Z"
correction.reasonstringWhy the record is corrected."the hour's generation was restated after EPA published a revised row for unit 2"
correction.notestring or nullA note beside the reason.null
correction.jurisdictionstringThe corrected record's grid."MISO-CENTRAL"
correction.periodstringUTCThe corrected record's period."2025-08-04T22"
correction.markstringRECORDED."RECORDED"
correction.originstringThe corrected record's origin, simulated where it carries none."real"
correction.sealed_atstringUTCWhen the correction was sealed."2026-09-20T12:00:00Z"

API Keys

The API's hours, index, and sites routes (/api/hours/, /api/index/, and /api/sites/ on aquadrio.com) answer a request with no key at the public tier and a request with a key at the standard tier. A key travels in the request header x-api-key.

TierHeaderRequests a minuteCalls a month
publicnone240 from one address, across the hours, index, and sites routesno cap
standardx-api-key600 for the key's subscription50,000 for the key's subscription, counted per UTC month
  • A key reads aq_ and then its payload and its signature, joined by a dot. It names the Stripe subscription that bought it, its tier, and its expiry, and it works while that subscription reads active in Stripe.
  • A key that fails its signature, has expired, names a tier the API does not sell, or belongs to a subscription that no longer reads active answers 401.
  • A request past the key's requests for the minute, or past its calls for the month, answers 429 with retry-after, the seconds to wait: to the end of the minute, or to the start of the next UTC month.
  • The month's calls are counted in the web host's memory, so a deploy starts every count afresh.
  • The web host reads each subscription's status from Stripe once an hour; in an hour when Stripe does not answer, a key passes on its signature.

Notice

The Notice mails a subscriber when what the subscriber watches crosses its prescription: one basin group on one grid, or one building on one grid. Each crossing is an event in its grid's list of events, which names the sealed index day record it reads.

  • A basin group's event is recorded by the index pass when it seals a day record whose line for the group reads at or over. The pass records events for the days it seals and for no other day. The event's period is the day, and its figure is the line's pct_of_prescription to the tenth, as 221.9% of prescription.
  • A building's event is taken by the daily send from its grid's sealed day records: the building's MWh a day times each graded group's gallons above its ceiling for one MWh of the day, summed over the days the grid has sealed in the month of its newest sealed day. A group's gallons above its ceiling for one MWh are the line's valuation.over_ceiling_gallons over the record's index.demand_mwh; a line with no ceiling adds nothing. A sum above zero is the building's event for the month, recorded once, and its figure is the sum to the tenth, as 4,800.0 gallons over the prescription this month. Its record_id names the newest sealed day the sum reaches.
  • One event stands for each grid, kind, subject, and period: the first one recorded.
  • The send runs once a day. It mails each event recorded in the last 48 hours that is not yet marked sent and reports a day no more than eight days old to every subscriber of the event's kind and subject whose subscription reads active in Stripe, then marks the event sent once every one of its mails has gone. An event whose mail failed is mailed again by the next day's send.
  • Each mail names the subject and the grid, the day, the figure, and the sealed day record's address on the API, https://aquadrio.com/api/index/<day>?j=<grid>.
  • Stripe holds the subscriptions. Every change of a subscription's status reaches the grid's list of subscribers through Stripe's webhook, and the daily send reads every subscription from Stripe before it mails.

Notice Events

FieldTypeUnitWhat it statesExample
idintegerThe event's number in its grid's list.1
jurisdictionstringThe grid."MISO-CENTRAL"
kindstringbasin for a basin group's day, building for a building's month."basin"
subjectstringThe basin group's id (Basin Groups), or the building's key: the id of its Stripe subscription."mississippi"
labelstringThe group's label as the record prints it, or the building's name."Mississippi"
periodstringUTCThe day, YYYY-MM-DD, of a basin group's event; the month, YYYY-MM, of a building's."2026-09-18"
figurestringThe figure the mail prints."221.9% of prescription"
record_idstringThe sealed index day record the event reads: the day itself, or the newest sealed day of the building's month."index_day_MISO-CENTRAL_2026-09-18"
recorded_atstringUTCWhen the event was recorded, to the second."2026-10-23T06:52:07Z"
sent_atstring or nullUTCWhen the send marked the event mailed; null until then.null

Notice Subscribers

FieldTypeUnitWhat it statesExample
idintegerThe subscriber's number in its grid's list.1
jurisdictionstringThe grid the subscriber watches."MISO-CENTRAL"
kindstringbasin or building."basin"
subjectstringThe basin group's id, or the building's key."mississippi"
emailstringWhere the mails go."watcher@example.com"
labelstringThe group's label, or the building's name."Mississippi"
load_mwh_per_daynumber or nullMWhA building's load times 24; null for a basin group.null
stripe_subscription_idstringThe Stripe subscription the subscriber holds, one row for each."sub_1QkXb2L3m9N0pQrS"
statusstringThe subscription's status as Stripe states it; the Notice mails a subscriber whose status reads active."active"
updated_atstringUTCWhen the row last changed, to the second."2026-10-22T07:00:00Z"