---
title: "Get Smart Meter Texas Data"
method: POST
path: "/api/v1/get-smt-data"
tags: ["bill-analysis"]
---

# Get Smart Meter Texas Data

`POST /api/v1/get-smt-data`

## Request

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

Check on or fetch a Smart Meter Texas usage pull started with request_smt_data, by its requestId. Returns the status and, once complete, up to 12 months of grid import and solar export totals by month, peak demand, and a CSV download of the full 15-minute data. Aurora Solar, OpenSolar, and Solargraf import files are also returned for installers who ask for one; don't offer them otherwise. For a Texas homeowner looking at their own meter's usage, or an installer working with a customer's.

Second half of the two-step Smart Meter Texas flow. `request_smt_data`
starts the pull and usually returns the data within about 20 seconds; when
it comes back `pending`, call this tool with the same `requestId` after
`checkAfterSeconds`.

- Monthly totals, averages, and peak demand are always included once the
  pull is complete.
- Set `includeIntervals: true` for the raw 15-minute readings (the most
  recent 3,000, about a month). The download links always carry the full
  year.
- `months` limits the returned data to the most recent N calendar months.

Read-only: it never starts a new Smart Meter Texas request.

## Request body

- object
  - `requestId` string, uuid, required: The requestId returned by request_smt_data (a UUID). Use it to check on a pull that came back pending, or to fetch the data again later.
  - `includeIntervals` boolean: When true, also return the raw 15-minute readings (the most recent 3,000 at most, about 31 days). Leave false for monthly totals only; the CSV download always carries the full year.
  - `months` integer: Limit the returned monthly totals, averages, and intervals to the most recent N calendar months (1-12). Omit for all available data, up to 12 months.

## Response `200`

Tool ran successfully.

- object
  - `status` 'needs_clarification' | 'pending' | 'complete' | 'error', required: needs_clarification: the address matched more than one meter and nothing was started; ask the user which of candidates is theirs, then call request_smt_data with that esiId. pending: Smart Meter Texas is still working; call get_smt_data with requestId after checkAfterSeconds. complete: usage data is included. error: see errorMessage.
  - `requestId` string, nullable, required: Identifier for this pull. Pass it to get_smt_data. Null only when status is needs_clarification.
  - `reused` boolean, required: True when this result comes from a pull for the same meter in the last 24 hours (or one already in progress) instead of a new Smart Meter Texas request.
  - `step` string, required: Current processing step, in plain words.
  - `checkAfterSeconds` number: Present when status is pending: wait about this long before calling get_smt_data.
  - `esiId` string, nullable, required: ESI ID of the meter.
  - `utility` string, nullable, required: Utility (TDU) that serves the meter, such as Oncor or CenterPoint, when known.
  - `serviceAddress` string, nullable, required: Service address on file for this pull, when known.
  - `dataStart` string, nullable, required: First reading, local Central Time (YYYY-MM-DDTHH:MM:00).
  - `dataEnd` string, nullable, required: Last reading, local Central Time (YYYY-MM-DDTHH:MM:00).
  - `readingCount` number, required: Number of 15-minute readings covered.
  - `monthlyAggregates` object[], required: Per-month totals, oldest first.
    - `month` string, required: Calendar month, YYYY-MM.
    - `totalImportsKwh` number, required: Electricity drawn from the grid this month, in kWh.
    - `totalExportsKwh` number, required: Electricity sent back to the grid this month (solar exports), in kWh.
    - `netKwh` number, required: Imports minus exports, in kWh. Negative when the home exported more than it used from the grid.
    - `peakDemandKw` number, required: Highest 15-minute grid import this month, converted to kW.
    - `daysOfData` number, required: Number of days this month with at least one reading.
  - `avgMonthlyImportKwh` number, nullable, required: Average grid import per month, in kWh.
  - `avgMonthlyExportKwh` number, nullable, required: Average grid export (solar sent back) per month, in kWh.
  - `peakDemandKw` number, nullable, required: Highest 15-minute grid import across the data, in kW.
  - `hasSolarExports` boolean, nullable, required: True when the meter recorded any exports to the grid.
  - `intervals` object[]: Raw 15-minute readings, oldest first. Only when includeIntervals is true; capped at the most recent 3,000.
    - `timestamp` string, required: Interval start, local Central Time wall clock (YYYY-MM-DDTHH:MM:00).
    - `importKwh` number, required: Grid import during the 15 minutes, in kWh.
    - `exportKwh` number, required: Grid export during the 15 minutes, in kWh.
  - `intervalsTruncated` boolean: True when intervals were capped at 3,000. Use the download links for the full year.
  - `exports` object: Download links for the full year of data. Present when status is complete. Offer csv by default; mention aurora, opensolar, or solargraf only when the user asks for a solar design tool import.
    - `csv` string, required: Standard CSV download (DateTime, Consumption_kWh, Generation_kWh).
    - `aurora` string, required: Aurora Solar paste-in file: one consumption value per 15-minute interval. Share only when the user asks for an Aurora file.
    - `opensolar` string, required: OpenSolar CSV import file. Share only when the user asks for an OpenSolar file.
    - `solargraf` string, required: Solargraf CSV import file. Share only when the user asks for a Solargraf file.
  - `errorCode` string: Machine-readable failure reason when status is error, such as smt_agreement_failed or no_data.
  - `errorMessage` string: What went wrong and what to do next, when status is error.
  - `candidates` object[]: Present when status is needs_clarification: the meters found at the given address. Show them to the user and let them choose; never pick one for them.
    - `esiId` string, required: ESI ID of this meter. Pass it as esiId to request_smt_data once the user confirms.
    - `formatted` string, required: Full address of this service point, including any unit.
    - `utility` string, nullable, required: Utility (TDU) serving this meter, when known.
  - `summary` string, required: One-paragraph plain-language summary of the result.

## 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`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/meterplan/apis/meter-energy-public-api/changes/api/v1/get-smt-data/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)
