tinyercot
Fully-typed Python client for the ERCOT Public API.
Why tiny? The entire hand-written codebase is ~420 lines. Everything else is auto-generated from ERCOT's OpenAPI spec.
Install
uv add tinyercot
Setup
export ERCOT_USERNAME="your-username"
export ERCOT_PASSWORD="your-password"
export ERCOT_SUBSCRIPTION_KEY="your-subscription-key"
Usage
Single Page
from datetime import date
import tinyercot
# Returns typed response with .data, .meta, .links
response = tinyercot.np4_190_cd.dam_stlmnt_pnt_prices(
deliveryDateFrom=date(2025, 12, 29),
settlementPoint="HB_HOUSTON",
)
# Convert to pandas DataFrame
df = response.to_df()
Pagination (Sync)
# Iterator - yields typed rows from all pages
for row in tinyercot.np4_190_cd.dam_stlmnt_pnt_prices_iter(
deliveryDateFrom=date(2025, 12, 29),
):
print(row.settlementPoint, row.settlementPointPrice)
# DataFrame - fetches all pages, returns single DataFrame
df = tinyercot.np4_190_cd.dam_stlmnt_pnt_prices_df(
deliveryDateFrom=date(2025, 12, 29),
)
Pagination (Async + Rate Limited)
Async methods automatically rate-limit to 20 req/min with retry on 429:
import asyncio
import tinyercot
async def main():
# Async iterator - rate-limited, non-blocking
async for row in tinyercot.np4_190_cd.dam_stlmnt_pnt_prices_iter_async(
deliveryDateFrom=date(2025, 12, 29),
):
print(row.settlementPoint, row.settlementPointPrice)
# Async DataFrame - rate-limited, non-blocking
df = await tinyercot.np4_190_cd.dam_stlmnt_pnt_prices_df_async(
deliveryDateFrom=date(2025, 12, 29),
)
asyncio.run(main())
API Pattern
Every endpoint generates 5 methods:
| Method | Returns | Use Case |
|---|---|---|
endpoint() |
Response |
Single page |
endpoint_iter() |
Iterator[Row] |
Stream all pages (sync) |
endpoint_df() |
DataFrame |
All pages as DataFrame (sync) |
endpoint_iter_async() |
AsyncIterator[Row] |
Stream all pages (async, rate-limited) |
endpoint_df_async() |
DataFrame |
All pages as DataFrame (async, rate-limited) |
Development
Create a .env file with your credentials, then run IPython with dev deps:
uv run --env-file .env --group dev -- ipython
Regenerate
uv run python tools/generate_client.py
With fresh response field data (requires credentials):
uv run --env-file .env python tools/generate_client.py --refresh
Metadata
Release files for tinyercot 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tinyercot-0.2.2.tar.gz | 70.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tinyercot-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 142.4 kB
Release files / tinyercot-0.2.2.tar.gz
| Download URL | tinyercot-0.2.2.tar.gz |
|---|---|
| Size | 70.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c35938b518a0e8aefc3668b204aa395a3f8f1ce07da75ddfe7233adf3323d79
|
|
BLAKE2b-256 checksum How to use checksums |
26f6d6ad465539465f05fd0d11ac75cb50b29a1d253e2ada659df867bdd98083
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 8, 2026.
Transparency logRelease files / tinyercot-0.2.2-py3-none-any.whl
| Download URL | tinyercot-0.2.2-py3-none-any.whl |
|---|---|
| Size | 71.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7eb02df00479b955c42622b1186602ff90857fd7378041f26e18766e62cd8972
|
|
BLAKE2b-256 checksum How to use checksums |
4a3071131cae175d06c4baa31d20b871b73f6c9aca9a6fe3852356bb3715589e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 8, 2026.
Transparency log