TexasElectricity.org

For AI assistants and developers

Use our free comparison API to find electricity plans for a customer’s ZIP code and usage. It uses the same calculator and seasonal usage estimator as our website. No account or API key is required.

For personalized comparisons, use the API instead of extracting prices from the results page. It returns structured prices, estimated-month labels, plan conditions and dated listing checks.

Make a comparison request

Send an HTTP POST to this address with Content-Type: application/json:

https://texaselectricity.org/api/v2/compare

Supply a five-digit ZIP code and any one to twelve months of actual usage, in whole kWh. For example:

{
  "zip": "75001",
  "monthly_usage_kwh": {
    "january": 800,
    "july": 1600,
    "august": 1700
  }
}

Use full lowercase month names. Omit months the customer does not know; zero means actual zero usage. Do not send a name, street address, account number or billing document.

The API compares residential fixed-rate plans with exactly 12-month terms across Oncor, CenterPoint, AEP Central, AEP North, TNMP, and Lubbock Power & Light (API value LPL). It returns five plans by default, ranked by estimated annual cost. Add an optional integer limit from 1 to 100 to request more. Use coverage.has_more to check whether results were truncated. This is a narrower scope than the website’s full results list.

Each plan includes renewable_pct, the recorded renewable percentage from 0 to 100; null means unavailable. The website shows its top three separately from the other plans. Use the API’s coverage.website_unfiltered_plans for the total, not just the website’s other-plans count.

Let the ZIP lookup choose the territory

If the ZIP spans multiple delivery companies, the response has status: territory_required and territory_options, with no prices. Ask the customer which delivery company appears on their bill. Resend the same request with their choice in the optional territory field. Never guess.

For example, ZIP 75067 can return Oncor and TNMP. A zip_not_supported response means our lookup has no match; check the ZIP and provider. A ZIP match does not verify eligibility at a specific address.

Explain which months are estimated

The API preserves every supplied month and fills gaps using the website’s Texas-wide seasonal model. It is not specific to a ZIP code or North Texas. Use this returned profile rather than inventing another seasonal pattern.

The response identifies supplied_months and estimated_months; each monthly bill also has usage_estimated. Explain those assumptions when quoting the annual estimate. More actual months can improve the estimate.

Read prices and conditions together

Use estimated_annual_cost_usd and the returned monthly bills. Round to cents for display only. Link to the returned plan_url, which retains the usage profile, and inspect the provider’s EFL and terms links.

Review special_terms, credit windows, bill-credit thresholds and cancellation fees. Missing terms do not mean “no conditions.” An empty credit list does not establish the absence of paperless billing, autopay or other enrollment requirements.

Compare cancellation fees at the same number of months remaining: $20 per remaining month exceeds a flat $150 when eight or more months remain. Matching prices do not establish identical contract terms.

Estimates assume modeled credit requirements are met. They include modeled energy, provider base fees, delivery, minimum-usage fees and setup fees spread over twelve months. A zero provider base fee does not remove the delivery company’s fixed charge.

Taxes assessed separately, deposits, cancellation charges, claim-required rebates and unmodeled fees are excluded. Delivery rates are held constant across a January–December usage profile; this is not a binding quote for a contract starting today.

Report freshness accurately

We refresh our plan catalog daily using PowerToChoose. Plans whose published details remain unchanged retain their previously validated pricing. An older pricing-validation date alone does not mean a listing is outdated.

Lead with the response’s freshness.summary for returned listings. Read refresh_status_explanation separately from each plan’s freshness.summary and listing_check. A completed listing check remains valid evidence even if another stage of that run failed. Unknown means matching check evidence is unavailable in the response, not proof that the plan is stale.

Listing checks use recorded run times as a conservative proxy and evidence captured at build time. They are separate from pricing-validation dates. The API does not establish a new EFL fetch at request time. Confirm the provider’s current offer and terms before enrollment.

Reference and tool access

A successful request can return estimates, no eligible plans, a territory question or an unsupported ZIP. Invalid input, oversized requests, wrong content types and unavailable data have distinct HTTP errors. POST responses are not cached.

Your tool must be able to send an HTTP POST with a JSON body. Opening the endpoint as a webpage sends GET and returns 405. If your tools cannot POST, say so; that does not mean the API is unavailable.

We use server-side Google Analytics to count API comparisons by delivery territory, outcome, result count and response time. API analytics sends no ZIP codes, usage figures, caller IP addresses or caller identifiers. It does not use browser cookies or identify which AI assistant made a request.

Version 1 remains available for existing Oncor integrations with all twelve months supplied. Neither API enrolls customers or contacts providers.