Skip to main content

Tiny fully-typed ERCOT API

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tinyercot-0.2.1.tar.gz (70.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tinyercot-0.2.1-py3-none-any.whl (71.8 kB view details)

Uploaded Python 3

File details

Details for the file tinyercot-0.2.1.tar.gz.

File metadata

  • Download URL: tinyercot-0.2.1.tar.gz
  • Upload date:
  • Size: 70.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tinyercot-0.2.1.tar.gz
Algorithm Hash digest
SHA256 e1ae2467fa8f16bed2464a46f068be930b8135ad0d1eca1b6f36038db48ce0c5
MD5 2119ae17e5d59a835041a6383eb841c1
BLAKE2b-256 f01f7da09885826fdb6bef968c3c504e2965b011dbfcc82040df28829c7761da

See more details on using hashes here.

Provenance

The following attestation bundles were made for tinyercot-0.2.1.tar.gz:

Publisher: publish.yml on kvkenyon/tinyercot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tinyercot-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: tinyercot-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 71.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tinyercot-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9205dee4ce3e7fbed858317256d938e44563596c8f121bf09662b3e9f07ad162
MD5 20a4ebcf548f85048b6b121675190ef4
BLAKE2b-256 4e5167c63e9d8e4b41be01af59caae575b927242f970a1c3f733bc8cd9e7614b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tinyercot-0.2.1-py3-none-any.whl:

Publisher: publish.yml on kvkenyon/tinyercot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page