EWE TRADING - PowerHub (1.0.0)

Download OpenAPI specification:

Short-Term Power Scheduling & Nomination

Authentication

When accessing the API programmatically, please use OAuth2 with the provided CLIENT_ID and CLIENT_SECRET.

Token URL

TEST: https://auth-token.dev.powerhub.ewe.de/oauth2/token

PRODUCTION: https://auth-token.powerhub.ewe.de/oauth2/token

Example:

POST /token
Host: https://auth-token.powerhub.ewe.de/oauth2/token
Authorization: Basic BASE64(CLIENT_ID:CLIENT_SECRET)
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials

Usage

When requesting an API resource, use the received ACCESS_TOKEN with the Bearer prefix.

Example:

GET /resource
Host: https://api.powerhub.ewe.de
Authorization: Bearer ACCESS_TOKEN

Nominations

Nomination types

Type Period fields Notes
Schedule volume Day-ahead and intraday (EPEX_INTRADAY)
Order volume, price Day-ahead only
Merit-Order orders[] Day-ahead only; price-volume curve per period

Every nomination carries a contract_id (provided by EWE) and a nominations list of quarter-hour periods.

Periods & delivery day

Every period is defined by begin and end and has a fixed length of 15 minutes. A nomination must cover the full delivery day from 00:00:00 CET to 00:00:00 CET of the delivery day.

Day type Period count
Standard 96
DST spring-forward 92
DST fall-back 100

Intraday nominations (EPEX_INTRADAY) are exempt partial-day coverage is permitted.

Timestamps

Timestamp format is a isoformat UTC ISO 8601 string, e.g. "2024-10-01T00:00:00.000Z"

Volumes & prices

Property Unit Notes
Volume MW Positive: EWE buys from customer; Negative: EWE sells to customer
Price EUR/MWh Required for Order and Merit-Order periods

Merit-Order price-volume curve rules

Rule Detail
Sort order orders must be sorted by price ascending
Price range [-600, 4000] EUR/MWh
Boundary entries Explicit entries at exactly -600 and 4000 are mandatory (EEX/EPEX requirement)
Sell volume monotony Positive volumes must be non-decreasing with rising price
Buy volume monotony Absolute value of negative volumes must be non-increasing with rising price

Intraday (Schedule only)

Contracts with market type EPEX_INTRADAY follow different deadline rules:

Rule Value
Daily deadline None - rolling lead time applies instead
Default lead time 30 minutes
Full day required No partial-day nominations permitted
Earliest nominatable QH current quarter-hour start + 15 min + lead_time_minutes

Data Models

Schedule

Field Type Description
contract_id string Contract identifier provided by EWE
nominations SchedulePeriod[] List of quarter-hour periods

SchedulePeriod

Field Type Description
begin datetime Period start - UTC ISO 8601
end datetime Period end - UTC ISO 8601
volume float Power in MW

Order

Field Type Description
contract_id string Contract identifier provided by EWE
nominations OrderPeriod[] List of quarter-hour periods

OrderPeriod

Field Type Description
begin datetime Period start - UTC ISO 8601
end datetime Period end - UTC ISO 8601
volume float Power in MW
price float Price in EUR/MWh

Merit-Order

Field Type Description
contract_id string Contract identifier provided by EWE
nominations MeritOrderPeriod[] List of quarter-hour periods

MeritOrderPeriod

Field Type Description
begin datetime Period start - UTC ISO 8601
end datetime Period end - UTC ISO 8601
orders MeritOrderLimit[] Price-volume curve - must include entries at -600 and 4000

MeritOrderLimit

Field Type Description
volume float Power in MW at this price level
price float Price in EUR/MWh - null is not permitted

Validation Errors

All validation errors return HTTP 422 with a JSON body:

{ "message": "<error description>" }

Contract is not active

The contract is administratively disabled and cannot accept nominations regardless of content.

Contract is not active and cannot be nominated.

Invalid contract period

Every contract has a configured validity period (valid_from / valid_to). Nominations outside this period are rejected.

Invalid contract period - valid from {date}
Invalid contract period - valid to {date}

Contracts without a valid_to have unlimited validity.

Nomination deadline passed

Every contract has a configured deadline tied to the market auction. Submissions after the deadline are rejected.

Nomination deadline passed: {now} > {deadline}

There are two deadline modes, configured per contract:

  • Day-before (dayafter: false): deadline is at HH:MM CET of the day before the delivery day
  • Day-after (dayafter: true): deadline is at HH:MM CET of the next regular working day after the delivery day (German public holidays and weekends considered; maximum: delivery day +3)

For intraday contracts, a separate error is returned:

Nomination deadline passed, must be at least {n} minutes before delivery

Nomination must begin/end at time

Every nomination must contain a full delivery day starting at 00:00:00 CET and ending at 00:00:00 CET of the following day.

Nomination must begin at time 00:00:00 (CET), got: {time}
Nomination must end at time 00:00:00 (CET), got: {time}

This check does not apply to intraday nominations (EPEX_INTRADAY).

Invalid Nomination period

Every nomination period must have a length of exactly 15 minutes.

Invalid Nomination period (must be quarterhour): {begin} - {end}

Nomination periods not continuous

All periods must be gapless and non-overlapping. The end of each period must equal the begin of the next.

Nomination periods not continuous: {t1} - {t2}

Merit-Order: invalid orders

The following errors apply exclusively to Merit-Order nominations:

Invalid Nomination: Every order must have a price (price=None is not allowed).
Invalid Nomination: Prices must be ascending.
Invalid Nomination: Prices must be between -600 and 4000, got min: {x}, max: {y}.
Invalid Nomination: Prices must include both -600 and 4000 as boundaries.
Invalid Nomination: Sell volume must not decrease with increasing price.
Invalid Nomination: Buy volume must not increase with increasing price.

Nomination

Send Nomination Schedule

Request Body schema: application/json
required
contract_id
required
string (Contract Id)
required
Array of objects (Nominations)

Responses

Request samples

Content type
application/json
{
  • "contract_id": "string",
  • "nominations": [
    ]
}

Response samples

Content type
application/json
null

Send Nomination Order

Request Body schema: application/json
required
contract_id
required
string (Contract Id)
required
Array of objects (Nominations)

Responses

Request samples

Content type
application/json
{
  • "contract_id": "string",
  • "nominations": [
    ]
}

Response samples

Content type
application/json
null

Send Nomination Meritorder

Request Body schema: application/json
required
contract_id
required
string (Contract Id)
required
Array of objects (Nominations)

Responses

Request samples

Content type
application/json
{
  • "contract_id": "string",
  • "nominations": [
    ]
}

Response samples

Content type
application/json
null