Pricing correctly
Energy pricing is the easiest thing to get subtly wrong, and a wrong rate can mislead a customer and create liability. This guide is the one to read closely.
The fields
Each plan returns:
price— a single$/kWhrate at themonthlyUsageyou requested (default 1,000). It is seasonalized by default (see below).rates[]— an array at 500 / 1,000 / 2,000 kWh, each with:advertisedPriceUsdPerKwhallInRateUsdPerKwhavgMonthlyBillUsd
Display the all-in rate (allInRateUsdPerKwh) — or the seasonalized top-level price — as the number a customer compares on. Never rank plans on the advertised rate.
Advertised vs. all-in — and why it's market-specific
Both rates are per kWh, but what they include depends on the state:
Texas
Both rates include TDU delivery charges.
advertisedPriceUsdPerKwh— the effective rate at a static, standard usage (a flat 500 / 1,000 / 2,000 kWh every month — the benchmark levels suppliers advertise).allInRateUsdPerKwh— the actual bill on the customer's usage, seasonalized (spread across the months of the year).
Every other state (PA, OH, IL, NJ, …)
Neither rate includes TDU delivery — the utility bills delivery separately.
advertisedPriceUsdPerKwh— the variable supply rate per kWh only (excludes any fixed monthly fee).allInRateUsdPerKwh— the supply rate plus the fixed monthly fee (amortized per kWh), still excluding TDU.
Outside Texas, the all-in rate is NOT the customer's total bill. It's the supply-side cost; the utility's delivery charge is separate and billed by the utility. Make that clear in your UI if you serve non-Texas markets.
The two rates are equal on a plain flat-rate plan and diverge on usage-dependent plans (bill credits, fixed monthly fees). That divergence is the whole reason all-in exists.
Why all-in exists
Plan structures are tricky — bill-credit plans especially. A plan might advertise a low energy rate but only deliver it if usage clears a threshold each month. The all-in rate computes the real bill so a shopper compares an honest number where a bare advertised figure would mislead.
Seasonalization and priceType
- The default
priceisSEASONALIZED: given an average monthly usage, it spreads that usage across the year's seasonal shape and returns the overall average price. This matters for bill-credit/tiered plans, where some months clear a threshold and others don't. - Pass
priceType: "FLAT"to price at the exactmonthlyUsageinstead (every month at that usage). priceTypeonly recognizes the value"FLAT"; any other value behaves like the default. It changes only the top-levelprice, notrates[], and does not filter which plans return.
# seasonalized (default)
residentialPlans(zipCode: "77002", monthlyUsage: 1000) { price }
# flat at exactly 1000 kWh
residentialPlans(zipCode: "77002", monthlyUsage: 1000, priceType: "FLAT") { price }
Fee breakdown
feeBreakdown[] itemizes what's behind the rate — ENERGY_CHARGE, UTILITY_PASS_THRU (TDU, in Texas), BASE_CHARGE, BILL_CREDIT, etc., each with an amount and an applicability (PER_KWH, MONTHLY, CREDIT_MONTHLY_ABOVE_USAGE, …). Use it to explain a plan, not to recompute the rate — trust allInRateUsdPerKwh and avgMonthlyBillUsd for the headline numbers.
Checklist
- Display
allInRateUsdPerKwh(or the seasonalizedprice) with a per-kWh unit. - Outside Texas, note that delivery is billed separately by the utility.
- Don't round or reformat in a way that changes the value.
- Never display the advertised rate as the price to compare on.