EBXv1

API reference

Assets

The assets your token can see. Assets with an active virtual segmentation are followed by their virtual assets.

5 endpoints
GET/v1/assets

List Assets

asset.read

List assets visible to the caller.

ebx admins get all assets across all organisations; other users are scoped to their own organisation(s). Assets with an active virtual segmentation are followed by their synthesized virtual assets.

This endpoint takes no parameters.

Example value
curl "https://api.ebx.energy/v1/assets" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "assets": [
    {
      "asset_id": "<string>",
      "asset_name": "<string>",
      "asset_type": "standalone",
      "description": "<string>",
      "location": "<string>",
      "organisation_id": "<string>",
      "optimizer_org_id": "<string>",
      "optimizer_org_name": "<string>",
      "charge_efficiency": 0,
      "discharge_efficiency": 0,
      "country": "<string>",
      "tso": "<string>",
      "max_pos_ramp_rate_mw_per_sec": 0,
      "min_neg_ramp_rate_mw_per_sec": 0,
      "usable_energy_capacity_mwh": 0,
      "usable_power_capacity_mw": 0,
      "afrr_prequalified_capacity_pos_mw": 0,
      "afrr_prequalified_capacity_neg_mw": 0,
      "fcr_prequalified_capacity_mw": 0,
      "tso_pool_id": 0,
      "ioa_middle": 0,
      "latitude": 0,
      "longitude": 0,
      "disable_pq_capacity_check": false,
      "strict_validation": false,
      "tso_connected": true,
      "fcr_enabled": false,
      "afrr_enabled": false,
      "wholesale_enabled": false,
      "control_enabled": false,
      "pv_active": false,
      "grid_connection_power_mw": 0,
      "bess_priority": false,
      "poc_export_limit_mw": 0,
      "grid_import_zero": false,
      "grid_import_allowed": true,
      "bess_control_enabled": false,
      "pv_control_enabled": false,
      "asset_operational_status": "onboarding",
      "operational_status_reason": "<string>",
      "maintenance_until": "2026-09-10T13:30:00Z",
      "asset_integration_type": "full_control",
      "production_critical": false,
      "is_virtual": false,
      "parent_asset_id": "<string>"
    }
  ]
}
Can raise
  • 401no valid token
  • 403scope missing
  • 429rate limited
ALL CODES →
POST/v1/assets

Create Asset

asset.write

Create a new asset (organisation_id required in request body).

Request body · required

asset_idREQUIRED
stringUnique identifier for the asset
asset_nameREQUIRED
stringName of the asset
asset_typeREQUIRED
enumstandalonegreen_colocationgrey_colocation
description
stringDescription of the asset
locationREQUIRED
stringLocation of the asset
organisation_id
stringOrganisation ID the asset belongs to
optimizer_org_id
stringOrganization that optimizes/trades this asset; must be a registered organization
charge_efficiency
numberCharge efficiency of the asset
discharge_efficiency
numberDischarge efficiency of the asset
country
stringCountry where the asset is located
tso
stringTransmission System Operator for the asset
max_pos_ramp_rate_mw_per_sec
numberMaximum positive ramp rate in MW/s
min_neg_ramp_rate_mw_per_sec
numberMinimum negative ramp rate in MW/s (positive value representing the magnitude)
usable_energy_capacity_mwh
numberUsable energy capacity in MWh
usable_power_capacity_mw
numberUsable power capacity in MW
afrr_prequalified_capacity_pos_mw
numberdefault 0Prequalified positive aFRR capacity magnitude in MW
afrr_prequalified_capacity_neg_mw
numberdefault 0Prequalified negative aFRR capacity magnitude in MW
fcr_prequalified_capacity_mw
numberdefault 0Prequalified symmetric FCR capacity magnitude in MW
tso_pool_id
integerExternally assigned TSO pool ID for the asset
ioa_middle
integerIEC-104 IOA middle octet identifying the asset within its TSO pool
latitude
numberLatitude of the asset location
longitude
numberLongitude of the asset location
disable_pq_capacity_check
booleandefault falseWhen true, PTU capacity exceeded rejections are ignored for this asset
strict_validation
booleandefault falseWhen true, plausibility violations are rejected with 409; when false they are returned in warnings
tso_connected
booleandefault trueWhether the asset is connected to the TSO control link
fcr_enabled
booleandefault falseWhether the asset is enabled for FCR market participation
afrr_enabled
booleandefault falseWhether the asset is enabled for aFRR market participation
wholesale_enabled
booleandefault falseWhether the asset is enabled for wholesale market participation
control_enabled
booleandefault falseWhether the asset-adapter is allowed to send Modbus write commands
pv_active
booleandefault falseWhether the asset has PV (solar) datapoints to read
grid_connection_power_mw
numberGrid connection point power limit in MW
bess_priority
booleanWhether the BESS has priority over the co-located producer at the grid connection
poc_export_limit_mw
numberExport limit at the point of connection in MW; when null, grid_connection_power_mw applies. Not yet active — accepted but not persisted.
grid_import_zero
booleanDeprecated: use grid_import_allowed (this is its inverse). Forbids grid import at the point of connection.
grid_import_allowed
booleanWhether importing at the point of connection is permitted. False for green co-location. Null leaves it unset (treated as permitted).
bess_control_enabled
booleanWhether EBX may command the battery. Null falls back to control_enabled.
pv_control_enabled
booleanWhether EBX may command the PV plane. Null is treated as not permitted.
asset_integration_type
enumfull_controlmonitoring_only
asset_operational_status
enumonboardingonboarding_testinglivemaintenanceoffboarded
operational_status_reason
stringReason for the current operational lifecycle status
maintenance_until
string<date-time>Expected end timestamp for maintenance status
Example value
curl -X POST "https://api.ebx.energy/v1/assets" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"asset_id":"<string>","asset_name":"<string>","asset_type":"standalone","description":"<string>","location":"<string>","organisation_id":"<string>","optimizer_org_id":"<string>","charge_efficiency":0,"discharge_efficiency":0,"country":"<string>","tso":"<string>","max_pos_ramp_rate_mw_per_sec":0,"min_neg_ramp_rate_mw_per_sec":0,"usable_energy_capacity_mwh":0,"usable_power_capacity_mw":0,"afrr_prequalified_capacity_pos_mw":0,"afrr_prequalified_capacity_neg_mw":0,"fcr_prequalified_capacity_mw":0,"tso_pool_id":0,"ioa_middle":0,"latitude":0,"longitude":0,"disable_pq_capacity_check":false,"strict_validation":false,"tso_connected":true,"fcr_enabled":false,"afrr_enabled":false,"wholesale_enabled":false,"control_enabled":false,"pv_active":false,"grid_connection_power_mw":0,"bess_priority":false,"poc_export_limit_mw":0,"grid_import_zero":false,"grid_import_allowed":false,"bess_control_enabled":false,"pv_control_enabled":false,"asset_integration_type":"full_control","asset_operational_status":"onboarding","operational_status_reason":"<string>","maintenance_until":"2026-09-10T13:30:00Z"}'
Example response201
{
  "asset_id": "<string>",
  "asset_name": "<string>",
  "asset_type": "standalone",
  "description": "<string>",
  "location": "<string>",
  "organisation_id": "<string>",
  "optimizer_org_id": "<string>",
  "optimizer_org_name": "<string>",
  "charge_efficiency": 0,
  "discharge_efficiency": 0,
  "country": "<string>",
  "tso": "<string>",
  "max_pos_ramp_rate_mw_per_sec": 0,
  "min_neg_ramp_rate_mw_per_sec": 0,
  "usable_energy_capacity_mwh": 0,
  "usable_power_capacity_mw": 0,
  "afrr_prequalified_capacity_pos_mw": 0,
  "afrr_prequalified_capacity_neg_mw": 0,
  "fcr_prequalified_capacity_mw": 0,
  "tso_pool_id": 0,
  "ioa_middle": 0,
  "latitude": 0,
  "longitude": 0,
  "disable_pq_capacity_check": false,
  "strict_validation": false,
  "tso_connected": true,
  "fcr_enabled": false,
  "afrr_enabled": false,
  "wholesale_enabled": false,
  "control_enabled": false,
  "pv_active": false,
  "grid_connection_power_mw": 0,
  "bess_priority": false,
  "poc_export_limit_mw": 0,
  "grid_import_zero": false,
  "grid_import_allowed": true,
  "bess_control_enabled": false,
  "pv_control_enabled": false,
  "asset_operational_status": "onboarding",
  "operational_status_reason": "<string>",
  "maintenance_until": "2026-09-10T13:30:00Z",
  "asset_integration_type": "full_control",
  "production_critical": false,
  "is_virtual": false,
  "parent_asset_id": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/assets/{asset_id}

Get Asset

asset.read

Get a specific asset by ID, verifying org access.

Virtual asset ids resolve against their parent's active segmentation.

Path parameters

asset_idREQUIRED
string
Example value
curl "https://api.ebx.energy/v1/assets/DE_BESS_01" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "asset_id": "<string>",
  "asset_name": "<string>",
  "asset_type": "standalone",
  "description": "<string>",
  "location": "<string>",
  "organisation_id": "<string>",
  "optimizer_org_id": "<string>",
  "optimizer_org_name": "<string>",
  "charge_efficiency": 0,
  "discharge_efficiency": 0,
  "country": "<string>",
  "tso": "<string>",
  "max_pos_ramp_rate_mw_per_sec": 0,
  "min_neg_ramp_rate_mw_per_sec": 0,
  "usable_energy_capacity_mwh": 0,
  "usable_power_capacity_mw": 0,
  "afrr_prequalified_capacity_pos_mw": 0,
  "afrr_prequalified_capacity_neg_mw": 0,
  "fcr_prequalified_capacity_mw": 0,
  "tso_pool_id": 0,
  "ioa_middle": 0,
  "latitude": 0,
  "longitude": 0,
  "disable_pq_capacity_check": false,
  "strict_validation": false,
  "tso_connected": true,
  "fcr_enabled": false,
  "afrr_enabled": false,
  "wholesale_enabled": false,
  "control_enabled": false,
  "pv_active": false,
  "grid_connection_power_mw": 0,
  "bess_priority": false,
  "poc_export_limit_mw": 0,
  "grid_import_zero": false,
  "grid_import_allowed": true,
  "bess_control_enabled": false,
  "pv_control_enabled": false,
  "asset_operational_status": "onboarding",
  "operational_status_reason": "<string>",
  "maintenance_until": "2026-09-10T13:30:00Z",
  "asset_integration_type": "full_control",
  "production_critical": false,
  "is_virtual": false,
  "parent_asset_id": "<string>"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
PUT/v1/assets/{asset_id}

Update Asset

asset.write

Partially update an asset.

Only fields present in the request body are changed; omitted fields keep their current values. An explicit null clears nullable fields and is rejected (422) for non-nullable ones.

Path parameters

asset_idREQUIRED
string

Request body · required

asset_name
stringName of the asset
asset_type
enumstandalonegreen_colocationgrey_colocation
description
stringDescription of the asset
location
stringLocation of the asset
organisation_id
stringOrganisation ID the asset belongs to (must match the existing value; cannot be cleared)
optimizer_org_id
stringOrganization that optimizes/trades this asset; explicit null clears it
charge_efficiency
numberCharge efficiency of the asset
discharge_efficiency
numberDischarge efficiency of the asset
country
stringCountry where the asset is located
tso
stringTransmission System Operator for the asset
max_pos_ramp_rate_mw_per_sec
numberMaximum positive ramp rate in MW/s
min_neg_ramp_rate_mw_per_sec
numberMinimum negative ramp rate in MW/s (positive value representing the magnitude)
usable_energy_capacity_mwh
numberUsable energy capacity in MWh
usable_power_capacity_mw
numberUsable power capacity in MW
afrr_prequalified_capacity_pos_mw
numberPrequalified positive aFRR capacity magnitude in MW
afrr_prequalified_capacity_neg_mw
numberPrequalified negative aFRR capacity magnitude in MW
fcr_prequalified_capacity_mw
numberPrequalified symmetric FCR capacity magnitude in MW
tso_pool_id
integerExternally assigned TSO pool ID for the asset
ioa_middle
integerIEC-104 IOA middle octet identifying the asset within its TSO pool
latitude
numberLatitude of the asset location
longitude
numberLongitude of the asset location
disable_pq_capacity_check
booleanWhen true, PTU capacity exceeded rejections are ignored for this asset
strict_validation
booleanWhen true, plausibility violations are rejected with 409; when false they are returned in warnings
tso_connected
booleanWhether the asset is connected to the TSO control link
fcr_enabled
booleanWhether the asset is enabled for FCR market participation
afrr_enabled
booleanWhether the asset is enabled for aFRR market participation
wholesale_enabled
booleanWhether the asset is enabled for wholesale market participation
control_enabled
booleanWhether the asset-adapter is allowed to send Modbus write commands
pv_active
booleanWhether the asset has PV (solar) datapoints to read
grid_connection_power_mw
numberGrid connection point power limit in MW
bess_priority
booleanWhether the BESS has priority over the co-located producer at the grid connection
poc_export_limit_mw
numberExport limit at the point of connection in MW; when null, grid_connection_power_mw applies. Not yet active — accepted but not persisted.
grid_import_zero
booleanDeprecated: use grid_import_allowed (this is its inverse). Forbids grid import at the point of connection.
grid_import_allowed
booleanWhether importing at the point of connection is permitted. False for green co-location.
bess_control_enabled
booleanWhether EBX may command the battery. Null falls back to control_enabled.
pv_control_enabled
booleanWhether EBX may command the PV plane. Null is treated as not permitted.
asset_integration_type
enumfull_controlmonitoring_only
asset_operational_status
enumonboardingonboarding_testinglivemaintenanceoffboarded
operational_status_reason
stringReason for the current operational lifecycle status
maintenance_until
string<date-time>Expected end timestamp for maintenance status
Example value
curl -X PUT "https://api.ebx.energy/v1/assets/DE_BESS_01" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"asset_name":"<string>","asset_type":"standalone","description":"<string>","location":"<string>","organisation_id":"<string>","optimizer_org_id":"<string>","charge_efficiency":0,"discharge_efficiency":0,"country":"<string>","tso":"<string>","max_pos_ramp_rate_mw_per_sec":0,"min_neg_ramp_rate_mw_per_sec":0,"usable_energy_capacity_mwh":0,"usable_power_capacity_mw":0,"afrr_prequalified_capacity_pos_mw":0,"afrr_prequalified_capacity_neg_mw":0,"fcr_prequalified_capacity_mw":0,"tso_pool_id":0,"ioa_middle":0,"latitude":0,"longitude":0,"disable_pq_capacity_check":false,"strict_validation":false,"tso_connected":false,"fcr_enabled":false,"afrr_enabled":false,"wholesale_enabled":false,"control_enabled":false,"pv_active":false,"grid_connection_power_mw":0,"bess_priority":false,"poc_export_limit_mw":0,"grid_import_zero":false,"grid_import_allowed":false,"bess_control_enabled":false,"pv_control_enabled":false,"asset_integration_type":"full_control","asset_operational_status":"onboarding","operational_status_reason":"<string>","maintenance_until":"2026-09-10T13:30:00Z"}'
Example response200
{
  "asset_id": "<string>",
  "asset_name": "<string>",
  "asset_type": "standalone",
  "description": "<string>",
  "location": "<string>",
  "organisation_id": "<string>",
  "optimizer_org_id": "<string>",
  "optimizer_org_name": "<string>",
  "charge_efficiency": 0,
  "discharge_efficiency": 0,
  "country": "<string>",
  "tso": "<string>",
  "max_pos_ramp_rate_mw_per_sec": 0,
  "min_neg_ramp_rate_mw_per_sec": 0,
  "usable_energy_capacity_mwh": 0,
  "usable_power_capacity_mw": 0,
  "afrr_prequalified_capacity_pos_mw": 0,
  "afrr_prequalified_capacity_neg_mw": 0,
  "fcr_prequalified_capacity_mw": 0,
  "tso_pool_id": 0,
  "ioa_middle": 0,
  "latitude": 0,
  "longitude": 0,
  "disable_pq_capacity_check": false,
  "strict_validation": false,
  "tso_connected": true,
  "fcr_enabled": false,
  "afrr_enabled": false,
  "wholesale_enabled": false,
  "control_enabled": false,
  "pv_active": false,
  "grid_connection_power_mw": 0,
  "bess_priority": false,
  "poc_export_limit_mw": 0,
  "grid_import_zero": false,
  "grid_import_allowed": true,
  "bess_control_enabled": false,
  "pv_control_enabled": false,
  "asset_operational_status": "onboarding",
  "operational_status_reason": "<string>",
  "maintenance_until": "2026-09-10T13:30:00Z",
  "asset_integration_type": "full_control",
  "production_critical": false,
  "is_virtual": false,
  "parent_asset_id": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
DELETE/v1/assets/{asset_id}

Delete Asset

asset.write

Delete an asset.

Path parameters

asset_idREQUIRED
string
Example value
curl -X DELETE "https://api.ebx.energy/v1/assets/DE_BESS_01" \
  -H "Authorization: Bearer $EBX_TOKEN"

Returns 204 with no body.

Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 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