Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Netz OÖ eService API

A Python wrapper for the unofficial Netz Oberösterreich eService portal API.

Getting started

pip install netzooe_eservice_api

Usage

import asyncio
from typing import Any

from netzooe_eservice_api.api import NetzOOEeServiceAPI

from aiohttp import ClientSession


async def main():
    async with ClientSession() as session:
        client: NetzOOEeServiceAPI = NetzOOEeServiceAPI(
            username="test",
            password="test",
            session=session,
        )

        # Get dashboard data
        dashboard: dict[str, Any] = await client.dashboard()

        for dashboard_contract_accounts in dashboard["contractAccounts"]:
            # Get contract accounts data
            contract_accounts: dict[str, Any] = await client.contract_accounts(
                business_partner_number=dashboard_contract_accounts["businessPartnerNumber"],
                contract_account_number=dashboard_contract_accounts["contractAccountNumber"],
            )

        # Get a short overview of the active contract accounts, e.g. the meter point administration numbers
        dashboard_headers: list[dict[str, Any]] = await client.dashboard_headers(active_only=True)

        for dashboard_header in dashboard_headers:
            for contract in dashboard_header["contracts"]:
                print(contract["meterPointAdministrationNumber"])


asyncio.run(main())

Endpoints

All methods of NetzOOEeServiceAPI are asynchronous. The client logs in automatically on the first request and logs in again once if the session has expired. The data methods return the raw JSON response of the portal.

Session

Method Portal endpoint Description
login() POST /service/j_security_check, then GET /service/v1.0/session Logs in and gets a new XSRF token. Optional, the client logs in automatically.
logout() GET /service/logout Logs out and resets the XSRF token. A session created by the client is closed, a passed session is never closed.

Data

Method Portal endpoint Returns
dashboard() GET /service/v1.0/dashboard Dashboard data, e.g. business partners and contract accounts
dashboard_headers(branch=None, *, active_only=None) GET /service/v1.0/dashboard/headers Short overview of the contract accounts with their contracts and points of delivery
contract_accounts(business_partner_number, contract_account_number) GET /service/v1.0/contract-accounts/{businessPartnerNumber}/{contractAccountNumber} Data of a contract account
consents(status=None) GET /service/v1.0/consents Data sharing consents
consent_requests(status=None) GET /service/v1.0/consent-requests Data sharing consent requests, e.g. of energy communities
consumptions_profiles(branch=None, *, active_only=None) GET /service/v1.0/consumptions/profiles Consumption profiles of all points of delivery
consumptions_profile(pods, dimension=ConsumptionsDimension.ENERGY) POST /service/v1.0/consumptions/profile/active Measured values of one or more points of delivery in a time range

Parameters

Parameter Type Description
branch ConsumptionsProfilesBranch, a list of members or None Only returns entries of these branches (ELECTRICITY, GAS). None returns all.
active_only bool or None True only returns active contract accounts or points of delivery. None returns all.
status of consents() ConsentsStatus, a list of members or None REQUESTED, QR_CODE_SENT, ACTIVE, ACTIVE_UNCHANGEABLE, TIMEOUT, REVOKED, CONCLUDED. None returns all.
status of consent_requests() ConsentRequestsStatus, a list of members or None INITIAL, SENT, CONFIRMED, REJECTED, TIMEOUT. None returns all.
business_partner_number, contract_account_number str Numbers from dashboard().
pods list[Pod] Points of delivery and the time range to request, see Consumption profile.
dimension ConsumptionsDimension ENERGY (default), POWER or VOLUME.

Consumption profile

consumptions_profile() takes a list of Pod dictionaries. The values for profile_type and best_available_granularity can be taken from consumptions_profiles().

Key Type Description
contract_account_number str Contract account number of the point of delivery
energy_community_id str (optional) ID of the energy community, only sent if it is set
profile_type ProfileType or str Profile type, e.g. ProfileType.ACTIVE_CURRENT
best_available_granularity Granularity or str Granularity, e.g. Granularity.QUARTER_OF_AN_HOUR
meter_point_administration_number str Meter point administration number (Zählpunktnummer)
date_from str Start of the time range
date_to str End of the time range
from netzooe_eservice_api import ConsumptionsDimension
from netzooe_eservice_api import Granularity
from netzooe_eservice_api import Pod
from netzooe_eservice_api import ProfileType

profile: list[dict[str, Any]] = await client.consumptions_profile(
    pods=[
        Pod(
            contract_account_number="123456789012",
            profile_type=ProfileType.ACTIVE_CURRENT,
            best_available_granularity=Granularity.QUARTER_OF_AN_HOUR,
            meter_point_administration_number="AT0031000000000000000000000000000",
            date_from="2026-01-01",
            date_to="2026-01-31",
        ),
    ],
    dimension=ConsumptionsDimension.ENERGY,
)

Errors

All errors are subclasses of APIError:

Exception Raised when
AuthenticationError The credentials were rejected (HTTP 401), also after a new login
InvalidJsonError The response is not valid JSON, e.g. the maintenance page ("Wartungsseite")
APIError Any other HTTP or connection error. status holds the HTTP status, detail the original message

Changelog

The changelog lives in the CHANGELOG.md document. The format is based on Keep a Changelog.

Get Involved

The Netz OÖ eService portal API is an open-source project and contributions are welcome. You can:

  • Report issues or request new features
  • Improve documentation
  • Contribute code
  • Support the project by starring it on GitHub ⭐

I'm happy about your contributions to the project! You can get started by reading the CONTRIBUTING.md.

coverage-badge

CI Typing: strict Code style: Ruff

Metadata

Release files for netzooe-eservice-api 1.2.0b5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for netzooe-eservice-api 1.2.0b5
File Size Uploaded Provenance
netzooe_eservice_api-1.2.0b5.tar.gz 124.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for netzooe-eservice-api 1.2.0b5
File Interpreter ABI Platform
netzooe_eservice_api-1.2.0b5-py3-none-any.whl Python 3 none any Details

Total release size: 141.6 kB

Release files / netzooe_eservice_api-1.2.0b5.tar.gz

Download URL netzooe_eservice_api-1.2.0b5.tar.gz
Size 124.9 kB
Tags Source
SHA-256 checksum
How to use checksums
5e14c0ad4c65c1c8c981624bccbf2f029c1fd0be71d6ffe2f9f30ba97cb10004
BLAKE2b-256 checksum
How to use checksums
3232f7516c437ada97d78b4794eac86ffaaff9785382bda798ed8365172febc7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / netzooe_eservice_api-1.2.0b5-py3-none-any.whl

Download URL netzooe_eservice_api-1.2.0b5-py3-none-any.whl
Size 16.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
50e0d53ca67a80c24afde5a8b84cb3166671a6807c08df51342f8e7827e6c4ea
BLAKE2b-256 checksum
How to use checksums
8b1439e9a7bd67a79d8975feca786f4412ff14f119014dc2d3198c709150a531
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for netzooe-eservice-api 1.2.0b5

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page