Canonical IRI:
http://naesb.org/espiTags:energy,metering,green-button,espi,naesbNamespace:http://naesb.org/espi#Source XSD:https://www.naesb.org/espi.xsdPart of the DEG Specification
JSON-LD context and RDF vocabulary for Green Button / ESPI (Energy Services Provider Interface) types, as defined by NAESB REQ.21 and IEEE 2030.5.
This schema provides the core metering and billing types used by the Meter Data VC and Billing Summary VC energy credentials. All enumeration codes match the ESPI/NAESB numeric codes exactly.
| File | Description |
|---|---|
| v1.0/attributes.yaml | OpenAPI 3.0 schema definitions for all ESPI types (generated from espi.xsd) |
| v1.0/context.jsonld | JSON-LD context mapping ESPI types and properties to http://naesb.org/espi# IRIs |
| v1.0/vocab.jsonld | RDF vocabulary (RDFS classes and properties) with skos:exactMatch links to ESPI XSD types |
| Resource | URL |
|---|---|
| Namespace IRI | http://naesb.org/espi# |
| Source XSD | https://www.naesb.org/espi.xsd |
| JSON-LD context | https://schema.nfh.global/espiGreenButton/v1.0/context.jsonld |
| RDF vocabulary | https://schema.nfh.global/espiGreenButton/v1.0/vocab.jsonld |
| Green Button docs | utilityapi.com/docs/greenbutton/xml |
| Type | ESPI Source | Description |
|---|---|---|
IntervalBlock |
espi:IntervalBlock |
Time sequence container for meter readings |
IntervalReading |
espi:IntervalReading |
Single metered value with time period, cost, and quality |
ReadingType |
espi:ReadingType |
Metadata: commodity, UOM, flow direction, accumulation, phase, etc. |
DateTimeInterval |
espi:DateTimeInterval |
Start timestamp (ISO 8601) + duration in seconds |
ServiceCategory |
espi:ServiceCategory |
Service type: 0=electricity, 1=gas, 2=water, … |
UsageSummary |
espi:UsageSummary |
Billing period summary with bills, charges, and consumption |
SummaryMeasurement |
espi:SummaryMeasurement |
Aggregated value with UOM and power-of-ten multiplier |
ReadingQuality |
espi:ReadingQuality |
Quality code for a reading (0=valid, 17=validated, …) |
LineItem |
espi:LineItem |
Charge or credit line item within a billing period |
| Code | Description |
|---|---|
| 0 | Electricity |
| 1 | Gas |
| 2 | Water |
| 4 | Heat |
| Code | Description |
|---|---|
| 0 | Valid / verified |
| 7 | Manually edited |
| 8 | Estimated using reference day |
| 9 | Estimated using linear interpolation |
| 10 | Questionable (failed checks) |
| 11 | Derived (calculated) |
| 12 | Projected (forecast) |
| 13 | Mixed quality |
| 14 | Raw (unvalidated) |
| 15 | Normalized for weather |
| 16 | Other |
| 17 | Validated |
| 18 | Verified |
| 19 | Billing approved |
| Code | Symbol | Description |
|---|---|---|
| 5 | A | Ampere (current) |
| 29 | V | Volt (potential) |
| 33 | Hz | Hertz (frequency) |
| 38 | W | Watt (real power) |
| 42 | m3 | Cubic metre (volume) |
| 61 | VA | Volt-Ampere (apparent power) |
| 63 | VAr | Volt-Ampere reactive |
| 72 | Wh | Watt-hour (real energy) |
| Code | Description |
|---|---|
| 0 | Not applicable |
| 1 | Electricity (secondary metered) |
| 2 | Electricity (primary metered) |
| 7 | Natural gas |
| 9 | Potable water |
| Code | Description |
|---|---|
| 0 | Not applicable |
| 1 | Forward (delivered to customer) |
| 4 | Net |
| 19 | Reverse (received from customer) |
| 20 | Total |
| Code | Description |
|---|---|
| 0 | Not applicable |
| 1 | Bulk quantity |
| 2 | Continuous cumulative |
| 3 | Cumulative |
| 4 | Delta data (interval difference) |
| 6 | Indicating |
| 9 | Summation |
| 12 | Instantaneous |
| Code | Description |
|---|---|
| 1 | Energy generation fee |
| 2 | Energy delivery fee |
| 3 | Energy usage fee |
| 4 | Administrative fee |
| 5 | Tax |
| 6 | Energy generation credit |
| 7 | Energy delivery credit |
| 8 | Administrative credit |
| 9 | Payment |
| 10 | Information |
| Code | Currency |
|---|---|
| 0 | Other |
| 36 | AUD |
| 124 | CAD |
| 156 | CNY |
| 208 | DKK |
| 356 | INR |
| 392 | JPY |
| 578 | NOK |
| 643 | RUB |
| 752 | SEK |
| 756 | CHF |
| 826 | GBP |
| 840 | USD |
| 978 | EUR |
All monetary values (cost, billLastPeriod, costAdditionalLastPeriod, amount, unitCost) accept both integer and float:
Integer mode (ESPI native): value is in hundred-thousandths (1e-5) of the currency unit.
Example: cost: 281300 with currency: 840 (USD) → 281300 × 10⁻⁵ = $2.813
Float mode (exact): value is the direct currency amount. A decimal point signals this mode.
Example: cost: 2.813 with currency: "USD" → $2.813
Note: JSON has a single
numbertype — there is no schema-level way to enforce integer vs float. The distinction is a serialization convention: if the value contains a decimal point, it is treated as exact; otherwise as hundred-thousandths. JSON parsers may normalize281300.0to281300, so implementations SHOULD prefer integer mode for ESPI compatibility.
Timestamps use ISO 8601 format with optional timezone offset:
"2025-07-14T18:30:00Z" (UTC)"2025-07-15T00:00:00+05:30" (Asia/Kolkata)Duration is always in seconds (integer).