---
title: "Utility rate plans for a ZIP"
method: GET
path: "/api/v1/energy/rate-plans"
tags: ["energy"]
---

# Utility rate plans for a ZIP

`GET /api/v1/energy/rate-plans`

## Request

- Base URL: `https://wattgap.com`
- URL: `https://wattgap.com/api/v1/energy/rate-plans`
- Auth: API key in header `X-WattGap-Key`

List electric rate plans for the utility that serves a 5-digit US ZIP, including average rate and time-of-use fields when known. Requires X-WattGap-Key.

## Query parameters

- `zip` string, required

## Response `200`

Utility rate plans. OpenAPI expresses structural and scalar bounds; runtime-only invariants additionally require confidence_tier to equal provenance.confidence, data_sources to have exact ordered equality with provenance.source, each rebate total to equal the nearest-cent additive total of program amounts (ungrouped rows add; mutually exclusive groups contribute their maximum, not the sum), data.zip to equal meta.zip whenever the endpoint data includes a ZIP, and each energy response's serialized data and meta sections to stay within 524272 encoded bytes apiece.

- RatePlansResponse
  - `data` object, required
    - `rate_plans` RatePlan[], required
      - `label` string, required
      - `utility` string, required
      - `rate_id` string, required
      - `sector` string, required
      - `description` string, required
      - `source_url` union, required
        - ''
        - string
      - `rate_type` 'flat' | 'tiered' | 'tou', required
      - `fixed_monthly_charge` number, required
      - `avg_rate_per_kwh` number, required
      - `peak_rate` number
      - `off_peak_rate` number
      - `peak_hours` string
      - `is_default` boolean, required
    - `catalog` RateCatalogEvidence, nullable, required
      - `catalog_mode` 'openei_api' | 'fallback', required
      - `provider` 'openei_urdb' | 'wattgap_fallback', required
      - `fallback_reason` 'missing_key' | 'upstream_error' | 'empty_or_unusable'
  - `meta` EnergyApiMeta, required
    - `zip` string, required
    - `generated_at` string, required
    - `api_version` 'v1', required
    - `confidence_tier` 'high' | 'medium' | 'low', required
    - `data_sources` string[], required
    - `provenance` ProvenanceEnvelope, required
      - `source` string[], required
      - `verified_at` string, nullable, required
      - `confidence` 'high' | 'medium' | 'low', required
      - `confidence_base` 'high' | 'medium' | 'low', required
      - `age_days` number, nullable, required
      - `stale` boolean, required
      - `reason` 'fresh' | 'aging' | 'stale' | 'unverifiable' | 'check_failed', required
      - `as_of` string, required

## Other responses

- `400`: Invalid request (for example, malformed ZIP)
- `401`: Missing or invalid X-WattGap-Key. Rate-limit headers are omitted because no key was accepted.
- `429`: Rate limit exceeded
- `500`: Provider or response-schema failure

---

[API](https://skmtc.dev/wattgap/apis/wattgap-energy-intelligence-api.md) · [All operations](https://skmtc.dev/wattgap/apis/wattgap-energy-intelligence-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wattgap/apis/wattgap-energy-intelligence-api/revisions/9e79fdd6bcc2?raw)
