Skip to main content

Async/sync Python client for the 24.energa.pl self-care portal

Project description

energa-api

Python client library for the 24.energa.pl self-care portal. Reverse-engineered from browser traffic. Supports both async and sync usage.

Features

  • Authentication via OIDC Authorization Code + PKCE (Keycloak)
  • Automatic token refresh
  • List clients and accounts
  • Fetch account balance
  • List invoices (with date range and pagination)
  • Download invoice PDFs

Installation

From PyPI

pip install energa24-api

From source (with uv)

git clone https://github.com/vincentto13/energa24-api
cd energa-api
uv sync

Configuration

Copy .env.example and fill in your credentials:

cp .env.example .env
# edit .env

Usage

Async

from energa import EnergaClient

async with EnergaClient("user@example.com", "password") as client:
    for account in client.accounts:
        balance = await client.get_balance(account.account_number)
        print(balance.balance, "PLN")

        invoices = await client.get_invoices(account.account_number)
        for inv in invoices:
            print(inv.invoice_number, inv.amount, "PLN")

        # Download a PDF
        pdf = await client.download_invoice(account.account_number, inv.dms_id)

Sync

from energa import EnergaClientSync

with EnergaClientSync("user@example.com", "password") as client:
    balance = client.get_balance(account_number)
    invoices = client.get_invoices(account_number)
    pdf = client.download_invoice(account_number, dms_id)

Development

MCP server — local setup with Claude Code

1. Install the MCP extra

uv sync --extra mcp

2. Export your credentials

export ENERGA_USERNAME=you@example.com
export ENERGA_PASSWORD=your-password

Or persist them in ~/.bashrc / ~/.zshrc so they're always available.

3. Verify the server starts

uv run python -m energa.mcp_server

The process should start and wait for MCP input on stdin (no output is normal — that's correct stdio behaviour). Press Ctrl+C to stop.

4. Connect Claude Code

The repo includes a .mcp.json that points Claude Code at the server automatically. Open Claude Code from this project directory — it will pick up .mcp.json and prompt you to approve the server on first use.

Check the connection inside a Claude Code session:

/mcp

You should see energa listed as connected with 4 tools.

Running the smoke test (live API)

ENERGA_USERNAME=you@example.com ENERGA_PASSWORD=secret uv run scripts/smoke_test.py

Or with a .env file:

uv run --env-file .env scripts/smoke_test.py

Running the test suite

uv run --group dev pytest

MCP Server

The library ships an MCP server that exposes your Energa account as tools for Claude and other MCP-compatible AI assistants.

Install

pip install energa24-api[mcp]

Available tools

Tool Description
list_accounts List all accounts and meters (cached, no network request)
get_balance Get current balance for an account
get_invoices List invoices with optional date range and pagination
download_invoice Download a PDF invoice — saves to a temp file and returns the path

Run standalone

ENERGA_USERNAME=you@example.com ENERGA_PASSWORD=secret uv run python -m energa.mcp_server

Claude Desktop configuration

Add to ~/config/claude/claude_desktop_config.json:

{
  "mcpServers": {
    "energa": {
      "command": "uv",
      "args": ["run", "--project", "/path/to/energa-api", "python", "-m", "energa.mcp_server"],
      "env": {
        "ENERGA_USERNAME": "you@example.com",
        "ENERGA_PASSWORD": "your-password"
      }
    }
  }
}

Note: The access token expires after 5 minutes and is refreshed automatically. The refresh token expires after 30 minutes of inactivity — if that happens, restart the server.

Example prompts

Ask Claude naturally:

  • "What's my Energa balance?"
  • "Show me my last 3 invoices"
  • "List all my electricity accounts and their meter addresses"
  • "Download the latest invoice for account 1234567890"
  • "Do I have any unpaid invoices?"

Acknowledgements

This library was built with the help of Claude (Anthropic's AI assistant). Claude assisted with reverse-engineering the authentication flow from browser HAR captures, designing the library architecture, implementing the async/sync client, and writing the test suite.

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

energa24_api-0.2.1.tar.gz (96.5 kB view details)

Uploaded Source

Built Distribution

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

energa24_api-0.2.1-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for energa24_api-0.2.1.tar.gz
Algorithm Hash digest
SHA256 7621f6a6978cd465726c1d050e171acae05445d9d06852cb896e5d698e54d27e
MD5 d3136a037c12746b87d7778f145c063d
BLAKE2b-256 e314102d51a2145c5a94c5171b0463ce013ab95c849bc910437594ea22205c58

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on vincentto13/energa24-api

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

File details

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

File metadata

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

File hashes

Hashes for energa24_api-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c36bcd09e717dbf3f62df991ba80772b27ab6962a554e4514ba60d8dfc31ffb5
MD5 22eff3011777deee761521b15e35a825
BLAKE2b-256 33920dbe239bdd2cae12b2773db301c5786b7dea3ad5c57d3e15f198084e1d0f

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on vincentto13/energa24-api

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