---
title: "Retail electricity price by state and sector (EIA-861)"
method: GET
path: "/api/v2/energy/retail-price"
tags: ["Energy"]
---

# Retail electricity price by state and sector (EIA-861)

`GET /api/v2/energy/retail-price`

Average retail price of electricity (cents per kilowatthour), plus revenue, sales and customer counts, by US state (or Census region, or US national total) and consumer sector (residential, commercial, industrial, transportation), monthly from 2001 (U.S. EIA Form EIA-861). Survey-based statistics, preliminary and subject to revision; not an intraday or wholesale price (grid operating data is on /grid).

## Query parameters

- `state` string — EIA stateid: 2-letter US state code (CO, TX, ...), a Census region/division code, or US for the national total.
- `sector` 'RES' | 'COM' | 'IND' | 'TRA' | 'OTH' | 'ALL'
- `frequency` 'monthly' | 'quarterly' | 'annual'
- `start` string, nullable — Lower bound on period (YYYY-MM monthly, YYYY-Q[1-4] quarterly, YYYY annual).
- `end` string, nullable — Upper bound on period.
- `limit` integer — Maximum observations returned, newest first.

## Response `200`

Successful Response

- EnvelopeRetailPriceFeed
  - `data` RetailPriceFeed, required
    - `query` RetailPriceQuery, required
      - `state` string, required — EIA stateid facet: 2-letter US state code, a Census region/division code, or US (national total).
      - `sector` string, required — EIA sectorid facet: RES | COM | IND | TRA | OTH | ALL.
      - `frequency` string, required — monthly | quarterly | annual.
      - `start` string, nullable — Lower bound on period (YYYY-MM / YYYY-Q[1-4] / YYYY).
      - `end` string, nullable — Upper bound on period.
      - `limit` integer, required
    - `state` string, required — State/region code echoed back.
    - `state_name` string, nullable
    - `sector` string, required
    - `sector_name` string, nullable
    - `frequency` string, required
    - `units` RetailPriceUnits, required
      - `price` string, nullable
      - `revenue` string, nullable
      - `sales` string, nullable
      - `customers` string, nullable
    - `count` integer, required — Number of observations returned.
    - `series` RetailPriceObservation[], required
      - `period` string, nullable — Reporting period: EIA monthly YYYY-MM, quarterly YYYY-Q[1-4], or annual YYYY.
      - `price` number, nullable — Average retail price (cents per kilowatthour); null if the source omitted it.
      - `revenue` number, nullable — Retail revenue (million dollars).
      - `sales` number, nullable — Retail sales (million kilowatthours).
      - `customers` number, nullable — Number of ultimate customers.
    - `attribution` GridAttributionSet, required
      - `sources` GridSourceAttribution[] — Every sovereign source that contributed to this response.
        - `registry_key` string, required
        - `source_name` string, required
        - `licence` string, required
        - `citation` string, required
        - `disclaimer` string, required
      - `effective_reexport` string, required — Most-restrictive re-export verdict across the sources.
    - `disclaimer` string, required
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `422` — Validation Error
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

[API](https://skmtc.net/sugra/apis/sugra-api.md) · [All operations](https://skmtc.net/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sugra/sugra-api/versions/d3e3d9c28132/schema)
