---
title: "Home energy profile for a ZIP"
method: GET
path: "/api/v1/energy/profile"
tags: ["energy"]
---

# Home energy profile for a ZIP

`GET /api/v1/energy/profile`

## Request

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

Return the provenance-stamped home energy profile for a 5-digit US ZIP: serving utility, climate, rebate potential, and confidence. Requires X-WattGap-Key. The diagnostic answer does not change by key or payer.

## Query parameters

- `zip` string, required

## Response `200`

Home energy profile. 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.

- ProfileResponse
  - `data` object, required
    - `zip` string, required
    - `state` string, required
    - `utility` string, required
    - `rebate_program_count` integer, required
    - `total_potential_rebates` number, required
    - `ground_truth_available` boolean, required
    - `rate_plan_count` integer, required
  - `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)
