---
title: "Texas TDU Delivery Rates"
method: POST
path: "/api/v1/get-tdu-delivery-rates"
tags: ["data-feed"]
---

# Texas TDU Delivery Rates

`POST /api/v1/get-tdu-delivery-rates`

## Request

- Base URL: `https://meterplan.com`
- URL: `https://meterplan.com/api/v1/get-tdu-delivery-rates`
- Auth: none declared
- TypeScript: <https://skmtc.dev/meterplan/apis/meter-energy-public-api/docs/api/v1/get-tdu-delivery-rates/post.ts> (a function with typed inputs; its response is checked against the schema)

Get current TDU delivery rates for one or all six Texas utilities (Oncor, CenterPoint, AEP Texas Central, AEP Texas North, TNMP, Lubbock Power & Light). Returns per-kWh delivery rate and fixed monthly base fee for each utility — these charges appear on every Texas electricity bill regardless of which retailer the customer chose. Backed by Light API rate sheets.

Every Texas electricity bill has two parts:
1. **Energy charges** from your retailer (Meter, TXU, Reliant, etc.)
2. **Delivery charges** from your utility company / TDU (Oncor, CenterPoint, etc.)

The delivery side is regulated by the Public Utility Commission of Texas
(PUCT) and is the same regardless of which retailer the customer picks.
Most plan-comparison and bill-modeling tools need these numbers — without
them, "I save $X on my bill" estimates are off by $30-50/month.

This tool returns:
- Variable rate in cents per kilowatt-hour (kWh) — applied to every kWh you import from the grid
- Fixed monthly base fee in dollars — charged regardless of usage

Pass a single utility code or omit to get all six. Rates are pulled from
Light's plan rate sheets on each call (no caching), so the values reflect
the current PUCT-approved tariffs.

**Why this tool exists**: Light API isn't publicly accessible. Any agent
modeling a Texas electricity bill needs these numbers — without them, the
math is off by the cost of the delivery component.

## Request body

- object
  - `utilityCode` 'ONCOR' | 'CNP' | 'AEP_CENTRAL' | 'AEP_NORTH' | 'TNMP' | 'LPPL': Optional utility code to filter to a single TDU. Omit to return rates for all six. Use `get_utility_for_zip` if you have a ZIP and need the code.

## Response `200`

Tool ran successfully.

- object
  - `fetchedAt` string, required: ISO 8601 timestamp when the rates were fetched from Light.
  - `rates` object[], required: Per-TDU delivery rates. One entry per utility, ordered ONCOR → CNP → AEP_CENTRAL → AEP_NORTH → TNMP → LPPL. Filtered to the requested utility if `utilityCode` was provided.
    - `utilityCode` string, required: Canonical TDU code (ONCOR, CNP, AEP_CENTRAL, AEP_NORTH, TNMP, LPPL).
    - `utilityDisplayName` string, required: Full TDU display name.
    - `utilityShortName` string, required: Common short name.
    - `representativeZipcode` string, required: ZIP code used to fetch the rate sheet. Rates apply to the entire TDU territory; we just need one ZIP per TDU to ask Light for them.
    - `deliveryRateCentsPerKwh` number, nullable, required: TDU variable delivery rate in cents per kilowatt-hour (kWh). Applied to every kWh imported from the grid. Null if Light didn't return a rate.
    - `deliveryBaseFeeDollarsPerMonth` number, nullable, required: TDU fixed monthly base fee in dollars. Charged regardless of usage. Null if Light didn't return a fee.
    - `source` string, required: Where the rates came from. Currently always 'light_api_plan_rate_sheet'.

## Other responses

- `400`: Request body was missing, malformed JSON, or failed input schema validation.
- `422`: Input was valid but the tool could not complete the request. `message` is safe to show the user.
- `500`: Tool execution failed or produced an output that violated the schema.

## Changes

- **2026-10-21** `2b73e36f9afd`: 2 warning, 3 info
  - added the new `tool_error` enum value to the `error` response property for the response status `400`
  - added the new `tool_error` enum value to the `error` response property for the response status `500`
  - added the non-success response with the status `422`
  - added the optional property `error_code` to the response with the `400` status
  - …1 more

[Operation history](https://skmtc.dev/meterplan/apis/meter-energy-public-api/changes/api/v1/get-tdu-delivery-rates/post.md)

---

[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.dev/meterplan/apis/meter-energy-public-api/revisions/2b73e36f9afd?raw)
