> ## Documentation Index
> Fetch the complete documentation index at: https://docs.energy.nlead.ch/llms.txt
> Use this file to discover all available pages before exploring further.

# Dashboard Data

> Forecast, schedule, allocation and reBAP of a day or a month as one JSON object or as a ready chart, for your own screens

Two read-only endpoints give everything a screen needs to draw a delivery
day, or a whole month, in one call. They answer to a **dashboard key**,
which n:lead issues separately. That key opens these two endpoints and
nothing else, so it can sit on an office screen or in a BI tool.

| Endpoint | Returns |
| - | - |
| `GET /v1/dashboard/days/{YYYY-MM-DD}` | One delivery day |
| `GET /v1/dashboard/months/{YYYY-MM}` | Every day of the month that is covered, one quarter-hour after the other, with each day's totals |

Days are covered from 120 days back to the forecast horizon (four days
ahead). A month runs from its first covered day (`from`) to its last
(`to`), so the current month ends at the horizon.

```bash theme={null}
curl -H "X-API-Key: $NLEAD_DASHBOARD_KEY" \
  "$NLEAD_BASE_URL/v1/dashboard/days/2026-10-20"
```

## What the series are

Every series is a list of **quarter-hour means in MW** with six decimals
(to the watt), aligned with `interval_starts_utc`. The schedule is on the
TSOs' 1 kW grid, as it was sent. A day has 96
quarter-hours, 92 on the spring clock change and 100 on the autumn one.
`null` means the value is not there yet. It never means zero.

| Block | Series | Meaning |
| - | - | - |
| `forecast` | `consumption_mw`, `production_mw` | The forecast the day ran on: yours, or the one n:lead generated or backed up (`forecast_source`) |
| `schedule` | `consumption_mw`, `production_mw`, `net_mw` | What was last sent to the TSOs. `net_mw` is consumption minus production, moved by what the TSO confirmed (`source`: `sent`, `confirmed`, `confirmed_final`). `status` is `accepted`, `not_accepted` or `not_sent` |
| `allocation` | `consumption_mw`, `production_mw`, `net_mw` | The market's sum time series for the balancing group: what was actually allocated to it. `status` is `preliminary` (daily values, from the next day on), `settlement` (the month's settlement values), `partial` or `none` |
| `rebap` | `eur_mwh`, `source` | The imbalance price (reBAP) per quarter-hour, one price for all of Germany. `source` says whether it is published (`published_biko`, `published_netztransparenz`) or estimated until then (`estimated_calculated`, `estimated_tso_estimator`, `estimated_forecast`) |

`forecast`, `schedule` and `allocation` come for Germany (`germany`) and
per control area (`control_areas`, with `control_area` set to `TenneT`,
`50Hertz`, `Amprion` or `TransnetBW`). Each block also has `totals_mwh`,
the energy of each series. Germany's allocation has a value only where
every control area has its own.

**Signs.** Consumption and production are both positive. A positive
`net_mw` is net consumption. Allocation `net_mw` minus schedule `net_mw` is
the imbalance: positive is short (more consumed than scheduled), negative
is long.

## Timing

* **Forecast** and **schedule** are there from the day before delivery.
* **Allocation** arrives the day after delivery as preliminary values.
  It is replaced by the settlement values when the month is settled.
* **reBAP** is estimated until it is published, mostly in the course of the
  following month.

The data is read once and shared for **5 minutes**, so polling more often
returns the same object. The first call for a month reads every day and
can take up to a minute; after that it is fast. Every five minutes for
the current day and every 15 minutes for the month is plenty for a screen.

## Charts and a wall screen

If nobody should have to build the graphics, the bridge draws them. The
same data comes as **SVG** pictures, which stay sharp at any screen size:

| Endpoint | Picture |
| - | - |
| `GET /v1/dashboard/charts/days/{YYYY-MM-DD}.svg` | The day: net forecast, schedule and allocation per quarter-hour, the reBAP below (estimated values paler), the day's energies |
| `GET /v1/dashboard/charts/months/{YYYY-MM}.svg` | The month: per day the net energy scheduled and allocated, the forecast as a mark, the day's mean reBAP below |
| `GET /v1/dashboard/screen` | A page with yesterday, today and the month that reloads itself every five minutes |

Options: `area` (`germany` by default, or `TenneT`, `50Hertz`, `Amprion`,
`TransnetBW`), `theme` (`dark` by default, or `light`) and `lang` (`de` by
default, or `en`). A small portfolio is shown in kW, a larger one in MW.

An `<img>` tag or a screen's browser cannot send a header, so these three
also take the key in the URL:

```
https://api.energy.nlead.ch/v1/dashboard/screen?key=<dashboard key>&lang=en
```

Open that in the screen's browser in full-screen or kiosk mode. Only a
dashboard key is accepted in a URL. Use a key of its own for each screen,
so that one can be withdrawn without touching the others. The JSON
endpoints still need the key in the `X-API-Key` header.

## Errors

| Status | Meaning |
| - | - |
| `401` / `403` | Missing or wrong key, or a key without the dashboard scope |
| `422` | A day or month outside the covered range |
| `429` | Rate limit; retry after `Retry-After` seconds |
| `503` | The market data could not be read just now; try again later |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.