EBXv1

API reference

Market - Day-ahead

Endpoints tagged “Market - Day-ahead” in the API specification.

3 endpoints
POST/v1/assets/{asset_id}/markets/day_ahead/bids

Submit day-ahead bids

market.write

Required scopes: market.write

Submit the complete set of day-ahead auction bids for an asset and delivery day.

The set replaces any earlier set for the same day. Bids are accepted until 11:40 Europe/Berlin on the day before delivery, and only for the next delivery day. Each bid covers one quarter-hour.

A set is checked as a whole. If any rule fails, nothing is stored and the response is 422 with BID_SET_REJECTED and one entry per violation. The earlier set stays live.

Send an idempotency_key so a retry after a timeout or a 503 cannot submit twice: the same key returns the original outcome.

Errors (detail.error):

  • GATE_CLOSED, DELIVERY_DAY_NOT_OPEN (409): outside the submission window
  • IDEMPOTENCY_CONFLICT (409): the key was used with a different set
  • DAY_AHEAD_NOT_CONFIGURED (409): the asset is not set up for day-ahead trading
  • BID_SET_REJECTED (422): the set breaks one or more rules, including the trading limit
  • MARKET_SERVICE_UNAVAILABLE (503): the outcome is unknown; retry with the same idempotency_key

Path parameters

asset_idREQUIRED
string

Query parameters

validate_only
booleandefault falseRun every check and store nothing

Request body · required

delivery_dayREQUIRED
string<date>Delivery day (Europe/Berlin), which must be tomorrow
idempotency_key
stringOptional. Repeating a request with the same key returns the original outcome; the same key with a different set is rejected
bidsREQUIRED
array[object]1 to 100 bids, at most one per quarter-hour
Example value
curl -X POST "https://api.ebx.energy/v1/assets/DE_BESS_01/markets/day_ahead/bids" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"delivery_day":"2026-10-23","idempotency_key":"<string>","bids":[{"start_time":"2026-01-01T00:00:00Z","side":"BUY","price_eur_per_mwh":50.1,"quantity_mw":2}]}'
Example response200
{
  "submission_id": "00000000-0000-0000-0000-000000000000",
  "asset_id": "<string>",
  "delivery_day": "2026-01-01",
  "submitted_at": "2026-10-22T20:30:00Z",
  "gate_closes_at": "2026-10-22T20:30:00Z",
  "exposure_eur": 0,
  "exposure_limit_eur": 0,
  "bids": [
    {
      "start_time": "2026-10-22T20:30:00Z",
      "side": "BUY",
      "price_eur_per_mwh": 0,
      "quantity_mw": 0
    }
  ],
  "forwarding": {
    "forwarded_submission_id": "00000000-0000-0000-0000-000000000000",
    "forwarded_at": "2026-10-22T20:30:00Z",
    "in_sync": false,
    "last_attempt": {
      "at": "2026-10-22T20:30:00Z",
      "outcome": "<string>",
      "kind": "<string>"
    }
  },
  "latest_attempt": {
    "submission_id": "00000000-0000-0000-0000-000000000000",
    "status": "<string>",
    "submitted_at": "2026-10-22T20:30:00Z",
    "violations": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/assets/{asset_id}/markets/day_ahead/bids/{delivery_day}

Get day-ahead bids

market.read

Required scopes: market.read

Get the day-ahead bid set in force for an asset and delivery day.

forwarding shows whether this set has been sent on to the market, and latest_attempt the most recent submission, including a rejected one. Returns 404 with BID_SET_NOT_FOUND when no set has been accepted for the day.

Path parameters

asset_idREQUIRED
string
delivery_dayREQUIRED
string<date>
Example value
curl "https://api.ebx.energy/v1/assets/DE_BESS_01/markets/day_ahead/bids/2026-01-01" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "submission_id": "00000000-0000-0000-0000-000000000000",
  "asset_id": "<string>",
  "delivery_day": "2026-01-01",
  "submitted_at": "2026-10-22T20:30:00Z",
  "gate_closes_at": "2026-10-22T20:30:00Z",
  "exposure_eur": 0,
  "exposure_limit_eur": 0,
  "bids": [
    {
      "start_time": "2026-10-22T20:30:00Z",
      "side": "BUY",
      "price_eur_per_mwh": 0,
      "quantity_mw": 0
    }
  ],
  "forwarding": {
    "forwarded_submission_id": "00000000-0000-0000-0000-000000000000",
    "forwarded_at": "2026-10-22T20:30:00Z",
    "in_sync": false,
    "last_attempt": {
      "at": "2026-10-22T20:30:00Z",
      "outcome": "<string>",
      "kind": "<string>"
    }
  },
  "latest_attempt": {
    "submission_id": "00000000-0000-0000-0000-000000000000",
    "status": "<string>",
    "submitted_at": "2026-10-22T20:30:00Z",
    "violations": [
      "<string>"
    ]
  }
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
GET/v1/assets/{asset_id}/markets/day_ahead/results/{delivery_day}

Get day-ahead results

market.read

Required scopes: market.read

Get the day-ahead auction results for an asset and delivery day.

Results usually arrive in the early afternoon of the day before delivery. Each bid of the set last sent to the market gets one entry: CLEARED, PARTIALLY_CLEARED (part cleared at the clearing price, the rest rejected), NOT_CLEARED, or UNKNOWN while no result has arrived.

Path parameters

asset_idREQUIRED
string
delivery_dayREQUIRED
string<date>
Example value
curl "https://api.ebx.energy/v1/assets/DE_BESS_01/markets/day_ahead/results/2026-01-01" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "asset_id": "<string>",
  "delivery_day": "2026-01-01",
  "submission_id": "00000000-0000-0000-0000-000000000000",
  "status": "<string>",
  "results": [
    {
      "start_time": "2026-10-22T20:30:00Z",
      "side": "BUY",
      "submitted_price_eur_per_mwh": 0,
      "submitted_quantity_mw": 0,
      "cleared_price_eur_per_mwh": 0,
      "cleared_quantity_mw": 0,
      "rejected_quantity_mw": 0,
      "status": "<string>",
      "anomaly": "<string>"
    }
  ]
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →

Send feedback

This goes straight to the docs team on Slack, with the page you are on. It is not attributed to you, so say who you are if you would like an answer.

0/2000