Retrieve residential incentive programs

Returns upfront rebates and ongoing (DR/VPP) programs available to a residential customer at a given location, across all electrification-relevant technologies (solar, battery, EV, heat pump, water heater, insulation, appliance, etc.).

The response includes:

  • upfront[] — at-purchase rebates and tax credits, ordered by confidence + provider preference + max amount
  • ongoing[] — recurring/performance programs (demand response, VPP, time-of-use bonuses)
  • totals — estimated dollar values when system_cost and/or system_size_kw are provided
  • meta — debug info: which aggregators expanded the result, confidence floor used

Aggregator expansion: when the customer's utility belongs to one or more aggregators (Mass Save, TVA EnergyRight, Energize CT, etc.), programs administered by those aggregators are automatically included. Same routing applies to ongoing programs (aggregator_id, installer_service_eids scoping for installer-VPPs like Sunrun-SCE).

Confidence filtering: by default only HIGH records surface. Pass min_confidence: 'MEDIUM' (or lower) to opt in to less-certain records. Confidence reflects whether the record is authority-confirmed (HIGH) versus hint-only from third-party databases like DSIRE (MEDIUM). The VERIFIED tier was historically present but consolidated into HIGH in May 2026 — VERIFIED is still accepted as a valid min_confidence for backwards compatibility but produces the same set as HIGH.

Why a record matched (provider_type): in location mode a record is returned for the resolved utility_eid when

  • utility — the record belongs to that utility (eid match). provider is the customer's utility.
  • aggregator — the eid is on the roster of the aggregator that runs the program (Mass Save, Efficiency Vermont, Energize CT, TVA EnergyRight, CCAs …). The aggregators used are listed in meta.aggregators_expanded. provider is the aggregator, not the customer's utility.
  • state / iso — statewide program in state.
  • local — county/city program in state, scoped by county (see zipcode / county_fips / county).
  • installer — installer-run program (e.g. a VPP) in state, optionally limited to the utilities it serves.
  • non-profit — non-profit program administrator. This is a routing type, not a statement about tax status: Mass Save and Efficiency Vermont are legally non-profits but are typed aggregator.
  • federal — always returned.

Eligibility filtering is server-side. Send the household's situation (house_type, occupancy, construction, income_status, ami_pct, targets, is_rural, is_dac) and records it cannot claim are removed — there is no need to re-implement this client-side. Rules:

  • Silent = permissive. A null / [] eligibility field means the program does not constrain that axis — not "unknown, exclude". Such records match any household value.
  • AND-narrowing. A record must pass every axis you send. Sending more fields only ever removes records the household genuinely can't get.
  • Demographic targeting is opt-in. Without targets, senior/veteran/… programs are returned to everyone; with targets, class-restricted programs the household doesn't match are dropped.
  • The applied filter is echoed in meta.eligibility_filter.

Which text field to show:

  • summary (upfront and ongoing) — one-line headline of the program.
  • amount.tier_notes — the step schedule the headline amount flattens (size / efficiency / income tiers). Show it under the amount when present.
  • eligibility.description — the conditions to qualify, in the authority's words.
  • evidence_quote — verbatim text from the source page that proves the amount. Render it behind a "where does this come from?" affordance next to the url, never as body prose.

Deprecated fields (still returned, will be removed after notice): eligibility.efficiency_requirement (use equipment.certifications / equipment.min_specs), eligibility.enrollment_required (use equipment.pairing_requirements), amount.max_per_unit, and ongoing[].eligibility.audience.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Body Params
string
required

Two-letter US state code (required)

string

Street address. Used together with city/state/zipcode to resolve the customer's electric utility (and therefore eligible utility-specific programs).

string
string

5-digit zip code. Also scopes county/city (provider_type: local) programs when neither
county_fips nor county is sent: the ZIP resolves to its county FIPS (every county it
touches) and only local programs covering one of those counties are returned. With none of
the three, local programs are returned statewide with scope_note set.

5-digit county FIPS code (or list) the address is in. Preferred way to scope county/city
programs — exact, no lookup. Codes outside state are ignored; if none remain, local programs
fall back to statewide with scope_note. Takes precedence over county and zipcode.

string
length ≤ 80

County name, resolved within state against the Census county table. "Fairfax County",
"Fairfax Co." and "Fairfax city" match exactly; a bare "Fairfax" matches every jurisdiction
with that base — the county AND the independent city (inclusive, like a ZIP spanning two
counties). NYC borough names are accepted. Unrecognised names fall back to statewide with
scope_note. Precedence: below county_fips, above zipcode.

string

The unique identifier for the address.

integer

Utility ID. Short-circuits the address→utility resolver when known.
US utilities use the EIA utility ID. Non-US utilities use a WattBuy-reserved
numeric block that cannot collide with an EIA id (Canada = 124000001+).
TX TDSP customers should use the TDSP's DOE/EIA number (Oncor 44372, CenterPoint 8901, AEP TX Central 3278, AEP TX North 20404, TNMP 40051).

boolean
Defaults to false

State mode. Returns every incentive applicable anywhere in state — all utility, aggregator,
state/local and federal programs labeled with the state (plus territory-wide programs of
utilities operating in it) — ignoring address/zipcode/utility_eid. For building reusable
per-state quote templates before an address is known. Group records by utility_eid
(null = statewide/federal). utility in the response is null and meta.mode is state.
All other filters apply unchanged.

incentive_types
array of strings

Filter to specific tech categories. Defaults to all 16 valid types.

incentive_types
fuel_types
array of strings
Defaults to electric,agnostic,dual_fuel,electrification,fuel_agnostic

Filter by equipment fuel type. Defaults to the electrification set (excludes gas).
Pass gas explicitly to include gas-only equipment programs.

fuel_types
Allowed:
string
enum
Defaults to HIGH

Minimum confidence tier. Defaults to HIGH (returns only authority-confirmed records).
Set to MEDIUM to include DSIRE/AFDC/EnergyStar hint-level data; lower tiers expose increasingly uncertain records.

Allowed:
number

Total installed cost of the system. Used to estimate dollar values for pct_of_cost and tax_credit programs.

number

System size in kW. Used to estimate dollar values for per_unit programs with unit kW or W.

Eligibility filter. The household's building type, in WattBuy's house_type vocabulary (display
string such as "Single Family Residential" / "Condo/Co-op" / "Multi-Family (2-4 Unit)", use_code
integer, or lowercase alias) or directly as single_family | multifamily | condo | manufactured_home.
Drops records whose eligibility.housing_types excludes it (condo also accepts multifamily-scoped
programs). Unrecognised values apply no constraint.

string
enum

Eligibility filter. renter drops owner_occupancy: required; owner drops renter_only and
rental_property_only.

Allowed:
string
enum

Eligibility filter. new drops construction_eligibility existing_only; existing drops new_only.

Allowed:
string
enum

Eligibility filter, applied to upfront AND ongoing records. market_rate drops records with
eligibility.income_eligibility: income_qualified_only (a program's market-rate or both_tiers
record still surfaces). income_qualified keeps everything and makes totals.upfront_estimated
pick the income-qualified record where a program has both.

Allowed:
number
0 to 300

Eligibility filter. Household income as a % of Area Median Income; drops records whose eligibility.ami_max_pct is below it.

targets
array of strings

Eligibility filter (opt-in). The demographic classes the household belongs to. When sent, records
with a non-empty eligibility.demographic_targeting that shares none of these are dropped. When
omitted, nothing is filtered on this axis.

targets
Allowed:
boolean

Eligibility filter. false drops geographic_targeting rural_only. true (or omitted) drops nothing.

boolean

Eligibility filter. false drops geographic_targeting dac_only (disadvantaged-community programs). true (or omitted) drops nothing.

boolean
deprecated

Deprecated — use income_status. true selects the income-qualified track for totals.upfront_estimated; it does not filter records.

Responses

500

Internal server error

Language
Credentials
Header
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json