EBXv1

API reference

Changelog

What changed between API versions, and what changed inside the version you are on.

v1STABLE2026-09-09

First public version of the EBX API, spanning asset onboarding through market participation to reporting and settlement, and the baseline for this changelog. No changes are listed, there is no earlier version to compare against.

Changes to v1

2026-10-147 BREAKING

The settlement response has a new shape; update any client that reads it. Every block carries all eight products, fcr, afrrc_pos, afrrc_neg, afrre_pos, afrre_neg, backup_fcr, backup_afrr_pos and backup_afrr_neg, each as revenue, collateralization, penalty and net, where net is revenue less the two costs and every line multiplies out to its amount; this replaces the 4-hour and 15-minute aFRR capacity keys and the separate backup entries. Capacity revenue is paid on delivered volume, as bid_mw, accepted_mw, delivered_mw, hours and price_per_mw_h in place of capacity_mw, price_per_mw and total, and aFRR energy revenue splits into market and shadow lines that add up to it. Organisation and asset sums move under totals, each block gains ltu_mw, and status is now optional: omit it for the latest state of every block.

BREAKINGGET/v1/assets/{asset_id}/tso-poolPATCH/v1/assets/{asset_id}/tso-pool

GET and PATCH /v1/assets/{asset_id}/tso-pool, added on 2026-10-05, are withdrawn, and tso.read and tso.write can no longer be granted to integrations. An asset's FCR and aFRR pool membership is managed by EBX: remove any call to these endpoints, and ask EBX to move an asset into or out of a pool. fcr_enabled, afrr_enabled and tso_connected stay deprecated and ignored on create and update.

Nothing changes on the wire. product on aFRR backup-market defaults and bid overrides is now published as pos or neg: na, which these endpoints already refused, is gone, and with it the CollateralizationProduct schema. When you regenerate a client, replace references to CollateralizationProduct.

2026-10-055 BREAKING
BREAKINGAlarms7 endpoints

rule_id can now carry three more rules, DISPATCH-015, DISPATCH-016 and DISPATCH-017; GET /v1/alarm-rules describes each one. rule_id is also now typed as a known rule or any other string, so a rule added later reaches a client generated from the spec as a plain string instead of failing validation. If you match rule_id against a fixed list, add these three, or handle a rule you do not recognise instead of failing on it.

Nothing changes on the wire. The schema names announced on 2026-09-28 have landed: UnavailabilitySchema has its name back, and the energy-limit, power-limit and scheduled-dispatch items lose their module paths to become EnergyLimitSchema, PowerLimitSchema and PowerEventResponseSchema. Planned state uses PlannedStateEnergyLimitSchema, PlannedStatePowerLimitSchema, PlannedStatePowerEventResponseSchema and UnavailabilitySchema, and the daily report's unavailabilities are DailyReportUnavailabilitySchema. Regenerate once, and replace any reference to an api__routes__schemas__… name.

BREAKINGOnboarding10 endpoints

Nothing changes on the wire. The discussion thread on an RfI field or a DPL row was published as two identical schemas, DiscussionThread-Input and DiscussionThread-Output, and is now one, DiscussionThread. When you regenerate a client, replace references to either old name.

2026-09-284 BREAKING
BREAKINGAlarms7 endpoints

rule_id can now carry seven more rules. CAPACITY-004 and POOL-012 flag an accepted aFRR capacity award that accepted aFRR energy bids do not cover, for an asset and for a TSO pool; FCR-005 flags FCR active beyond its award; POOL-008 to POOL-011 check what EBX reports to the TSO for a pool. If you match rule_id against a fixed list, add these, or handle a rule you do not recognise instead of failing on it.

calendar.read and calendar.write are no longer scopes. Sending either when you create a user or an integration, or set a user's scopes, is now rejected with 422; responses no longer list them, and a token that still carries them keeps working until it expires.

An onboarding's history can now carry two more event types: cod_changed, recorded each time the planned CoD moves, and onboarding_aborted, recorded when an onboarding is aborted, with the reason as its note. If you match event_type against a fixed list, add both, or handle a type you do not recognise.

changelog.md ↗

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