Skip to main content

obsyd (Python client)

A pandas client for the OBSYD public data API — a free a free European power desk over the official European power record (ENTSO-E, Energy-Charts CC BY 4.0, GIE). 37 bidding zones, day-ahead prices at the market's real 15-minute resolution, load/residual load, generation mix, cross-border flows. Descriptive, not a forecast. AGPL-3.0. No API key.

Install

pip install obsyd            # + pip install obsyd[parquet] for bulk pulls

Use

from obsyd import Obsyd

ob = Obsyd()  # or Obsyd("https://your-self-host")

# One series, one zone → DataFrame (tz-aware UTC index)
df = ob.series("price.dayahead", "DE_LU", start="2024-01-01", resolution="daily")
df["value"].plot()

# The last week of prices across every zone — a single request
wide = ob.snapshot("price.dayahead", hours=168)

# 15-minute auction resolution (SDAC trades quarter-hours since Oct 2025)
qh = ob.series("price.dayahead.qh", "DE_LU", start="2026-07-01")

# Generation mix, capacity, named units
mix = ob.genmix("ES", resolution="daily")
cap = ob.capacity("DE_LU")

# One series over many zones (polite pacing built in)
res = ob.series_multi("residual.actual", ["DE_LU", "FR", "ES"], start="2026-01-01")

# What exists: series keys, zones, coverage window, freshness
ob.catalog(); ob.zones(); ob.status()

Methods

Method Returns Notes
series(series, zone, start, end, resolution, format) DataFrame hourly/daily; daily carries hours (24 = settled day); format="parquet" for bulk
series_multi(series, zones, ...) wide DataFrame one column per zone, 0.5 s pause between requests
snapshot(series, hours≤744, ...) wide DataFrame every enabled zone, one request
genmix(zone, start, end, resolution) wide DataFrame one column per fuel, mean MW
capacity(zone, year) / units(zone) DataFrame read df.attrs["note"] on units before summing
zones() / catalog() / meta() / status() dict reference endpoints, not rate-limited

df.attrs carries series/zone/unit/attribution where known.

Errors — the client raises, it never returns silently-empty frames

  • ObsydNoData — the API has nothing for this query (.reason holds the server's explanation, e.g. unknown series or empty coverage window).
  • ObsydRateLimited — 429 after built-in retries (public API ≈ 120 req/min/IP; the client retries 429/5xx with exponential backoff, max_retries=3).
  • ObsydBadRequest / ObsydServerError — 400 / 5xx with the server's detail.
  • ValueError — unknown zone key, with close-match suggestions (guards against a server-side silent fallback to the default zone).

Requests are sent with a obsyd-python/<version> User-Agent.

Examples

Executable notebooks in examples/: quarter-hour prices, solar capture rates & negative-price hours, cross-border flows.

Full API reference: docs/API.md or the interactive docs at https://obsyd.dev/api/docs.

Development

pip install -e ".[dev]"
python -m pytest -q          # mocked, hermetic
python -m pytest -m live     # smoke against obsyd.dev (before releases)

Releases: bump __version__ in obsyd.py, merge, push tag client-vX.Y.Z — GitHub Actions builds and publishes to PyPI via Trusted Publishing.

Metadata

Release files for obsyd 0.2.1

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

Source distribution (sdist)

Source distribution for obsyd 0.2.1
File Size Uploaded Provenance
obsyd-0.2.1.tar.gz 21.6 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for obsyd 0.2.1
File Interpreter ABI Platform
obsyd-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 41.3 kB

Release files / obsyd-0.2.1.tar.gz

Download URL obsyd-0.2.1.tar.gz
Size 21.6 kB
Tags Source
SHA-256 checksum
How to use checksums
5571e70667864309cf55ed8190cc3efe2279dfdefa05f3275deaac4dff2e7bff
BLAKE2b-256 checksum
How to use checksums
511d67aeeed323771abf9567709629174c997b7d692f2e09125cfb9a91abc867
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

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 Jul 22, 2026.

Transparency log

Release files / obsyd-0.2.1-py3-none-any.whl

Download URL obsyd-0.2.1-py3-none-any.whl
Size 19.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2b101fdfc98468caf94f51f4617939cb1ae9824d9676bebf93eae0f8dcc8a7a2
BLAKE2b-256 checksum
How to use checksums
ae67c64c816e0ea2945974090b93829c1ff3a43c72e1dbed84149fe2eb9695ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

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 Jul 22, 2026.

Transparency log

Security for obsyd 0.2.1

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for obsyd-0.2.1.tar.gz

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 Jul 22, 2026.

Transparency log

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.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files Full provenance

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