Skip to main content

Overview

Electricity is a first-class service type on Offergrid. Rather than a free-form JSON blob, electricity offers carry a single, structured electricity object grouped into four sections — rate, term, plan, and disclosures — that models a deregulated retail electricity plan the way a Texas Electricity Facts Label (EFL) does.
This page is the narrative guide. The field-by-field reference is published in the API Reference as the ElectricityContractWrite, ElectricityContract, and ElectricityCharge schema components.

Identifying an electricity offer

Every offer response carries a top-level serviceType discriminator that mirrors category — check either field:
Electricity offers additionally include the grouped electricity object. Other service types (internet, other) get their own top-level key.

The electricity contract

All four sections and all fields are optional on write, except the publish requirement. Send only what you have; unspecified fields are left untouched on update.
  • typefixed, variable, or indexed.
  • charges — the ordered provider (REP) + utility (TDU) charge lines that define pricing. This is the source of truth — see The charge breakdown.
  • avgPriceAt1000Kwh — the EFL “average price at 1000 kWh” comparison number, in ¢/kWh (all-in).
  • estimatedMonthlyAt1000Kwh — read-only dollar headline, derived from charges (ignored on write).
  • lengthno_contract, month_to_month, months_12, months_24, or months_36.
  • earlyTerminationFee — cancellation fee in dollars.
  • earlyTerminationFeeNotes — free-text detail, e.g. “Prorated by months remaining”.
  • renewablePercentage — 0–100.
  • freeNightsWeekends — boolean.
  • noDeposit — boolean.
  • electricityFactsLabel — the EFL: url, versionId, and the three benchmark prices (avgPrice500kwh, avgPrice1000kwh, avgPrice2000kwh) plus renewablePercent.
  • puctCertNumber / puctCertifiedName — your PUCT REP certification.
  • termsOfServiceUrl / yourRightsUrl — the Terms of Service and Your Rights as a Customer documents.

Creating an electricity offer

The response is the created offer with serviceType: "electricity", the projected electricity object (now including the derived rate.estimatedMonthlyAt1000Kwh), and the standard offer fields.

Updating an electricity offer

Send only the sections you’re changing. The electricity object is merged onto the stored offer, so unrelated data is preserved:
PATCH /provider/offers/{id}
This changes only the early termination fee and renewable percentage; the existing rate, charges, and disclosures are untouched, and the derived headline is recomputed.
The electricity object is the only way to set an electricity offer’s pricing, term, plan, and disclosures — there is no flat/free-form alternative field to fall back to.

The charge breakdown (rate.charges)

A deregulated retail electricity bill has two legally distinct parts (Texas PUCT Rule 25.475 / the EFL): charges set by the provider (REP) and pass-through delivery charges set by the local utility (TDU, e.g. Oncor). rate.charges is an ordered list of charge lines that captures both, plus usage-tiered charges and threshold bill credits. Each charge line: Usage bands:
  • perKwh bills only the kWh inside the band — "12¢ for the first 500 kWh" is { "minUsageKwh": 0, "maxUsageKwh": 500 }; "15¢ above 500 kWh" is { "minUsageKwh": 500 }.
  • fixed / credit applies only when total usage falls inside the band — e.g. "$125 credit if usage ≥ 1000 kWh" is a credit with { "minUsageKwh": 1000 }.

Bill estimate math

Offergrid folds charges into an itemized bill at any usage level. Line amounts are rounded to cents individually; subtotals and totals are sums of the rounded lines, so a breakdown always reconciles. Worked example at 1000 kWh for the create payload above:
  • Provider subtotal = $125.00
  • Utility subtotal = $46.39
  • Total = $171.39
  • Effective all-in rate = 171.39 × 100 ÷ 1000 = 17.139 ¢/kWh (the EFL metric)
rate.estimatedMonthlyAt1000Kwh in the response is this total at 1000 kWh.

Publishing requirements

POST /provider/offers/{id}/publish validates the offer. For electricity, the one contract-specific rule is:
rate.charges must include at least one provider perKwh energy charge.
If it doesn’t, publish returns 400 with structured validationErrors pointing at electricityDetails.charges. General offer requirements — name, SKU, description, at least one market, etc. — also apply.

Derived and read-only fields

  • rate.estimatedMonthlyAt1000Kwh is computed from rate.charges. It is output-only — setting it on a write has no effect.
  • Offergrid mirrors this figure into the generic monthlyPrice column so electricity offers sort and filter alongside fixed-price offers.

Storage

Electricity offer data lives in a dedicated typed relation — there is no free-form JSON blob involved. charges is the only accepted rate representation in the electricity contract; you never have to branch on a flat legacy rate format. Read everything electricity-related from .electricity.

Quick reference

Next steps

Creating Offers

The general offer create/publish flow

Service Categories

Fields for internet, electricity, and the other category

API Integration

Automate offer sync and order processing

API Reference

The ElectricityContract schema, field by field