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.2.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.2-py3-none-any.whl (71.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tinyercot-0.2.2.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.2.tar.gz
Algorithm Hash digest
SHA256 5c35938b518a0e8aefc3668b204aa395a3f8f1ce07da75ddfe7233adf3323d79
MD5 ea7a64c803ca7867bde4a02b83f1cf92
BLAKE2b-256 26f6d6ad465539465f05fd0d11ac75cb50b29a1d253e2ada659df867bdd98083

See more details on using hashes here.

Provenance

The following attestation bundles were made for tinyercot-0.2.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: tinyercot-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 71.9 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7eb02df00479b955c42622b1186602ff90857fd7378041f26e18766e62cd8972
MD5 600e37f8c726a31a6d5d1abfde21600e
BLAKE2b-256 4a3071131cae175d06c4baa31d20b871b73f6c9aca9a6fe3852356bb3715589e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tinyercot-0.2.2-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