---
title: "Texas ESI ID Lookup by Address"
method: POST
path: "/api/v1/lookup-esi-id"
tags: ["data-feed"]
---

# Texas ESI ID Lookup by Address

`POST /api/v1/lookup-esi-id`

Find the Texas Electric Service Identifier (ESI ID) for any residential address. Required for solar enrollment, plan switching, Smart Meter Texas data access, and TDU coordination. Returns ESI ID, formatted address, serving utility (Oncor / CenterPoint / AEP / TNMP / LPPL), and a confidence indicator. Backed by Light API's address-search endpoint (private API made public via this tool).

Every Texas residential meter has a 17-22 digit Electric Service Identifier
(ESI ID). It's the primary key for everything in the deregulated electric
market: enrollment, plan switching, billing, Smart Meter Texas data access,
and any TDU coordination.

Customers usually find their ESI ID printed on their electricity bill.
Solar installers, energy advisors, and AI agents that don't have a bill
in hand need to look it up by address — that's what this tool does.

The lookup is fuzzy: pass a partial address (street + city OR street + ZIP)
and the tool returns up to N matches with full address normalization.
Each match includes the ESI ID and the serving utility.

**PII note**: Addresses returned by Light contain real residential service
points. The tool returns the data but does NOT log raw addresses or ESI
IDs in our application logs (PostHog event captures only the count of
matches, not the matches themselves). Agents should treat results as
sensitive and confirm with the end user before acting on them.

**Why this tool exists**: Light API's address-search isn't publicly
accessible. Other Texas energy retailers run "ESI ID lookup" SEO landing
pages because the demand is so high — this tool is the API equivalent.

## Request body

- object
  - `query` string, required — Address query. Most reliable: full street address + city OR street address + 5-digit ZIP. Examples: '123 Main St, Austin 78701' or '5500 Greenville Ave Dallas TX'. Light's matcher is fuzzy and tolerates apartment numbers, abbreviations, and minor typos.
  - `maxResults` integer — Maximum number of address matches to return. Defaults to 10. Lower this if you want to force the agent to be more specific in its query.

## Response `200`

Tool ran successfully.

- object
  - `query` string, required — Echo of the original query.
  - `matchCount` number, required — Total matches Light returned (before maxResults truncation).
  - `matches` object[], required — Address matches with ESI IDs. Empty array if Light returned no matches.
    - `esiId` string, nullable, required — Texas Electric Service Identifier (17-22 digits). Null if Light has the address but no ESI ID on file (rare — usually means new construction).
    - `street` string, required — Normalized street address line, e.g., '5500 GREENVILLE AVE'.
    - `city` string, required — City name.
    - `state` string, required — Two-letter state code. Always 'TX' for matches.
    - `postalCode` string, required — 5-digit ZIP code.
    - `formattedAddress` string, required — Full one-line address suitable for display. Format: 'STREET, CITY, ST ZIP'.
    - `utility` string, required — Serving TDU name (Oncor, CenterPoint, AEP Central, AEP North, TNMP, Lubbock P&L).

## Other responses

- `400` — Request body was missing, malformed JSON, or failed input schema validation.
- `500` — Tool execution failed or produced an output that violated the schema.

---

[API](https://skmtc.dev/meterplan/apis/meter-energy-public-api.md) · [All operations](https://skmtc.dev/meterplan/apis/meter-energy-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/meterplan/meter-energy-public-api/revisions/ebf1846a188d/schema)
