API reference
Unavailability
Scheduled unavailability windows for an asset.
4 endpoints
GET/v1/assets/{asset_id}/unavailability
Get Asset Unavailability
asset.read
List unavailability intervals for an asset.
Time filtering is overlap-based and uses half-open window semantics. With both start_time and end_time, the endpoint returns intervals that overlap [start_time, end_time).
Boundary behavior:
- an interval ending exactly at
start_timeis excluded - an interval starting exactly at
end_timeis excluded - open-ended intervals are included whenever they remain active after
start_time
Path parameters
- asset_idREQUIRED
- string
Query parameters
- sort_by
- enum
start_timeend_timeDeprecated and ignored; results are always ordered by start_time. - sort_order
- enum
ascdescOrder to sort the results by, either 'asc' or 'desc' - start_time
- string<date-time>Return unavailability intervals whose end_time is absent or strictly after this timestamp. With end_time, the API matches intervals overlapping the half-open window [start_time, end_time).
- end_time
- string<date-time>Return unavailability intervals whose start_time is strictly before this timestamp. With start_time, the API matches intervals overlapping the half-open window [start_time, end_time).
Example value
curl "https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability" \
-H "Authorization: Bearer $EBX_TOKEN"import httpx
r = httpx.get(
"https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability",
headers={"Authorization": f"Bearer {token}"},
)
print(r.json())const res = await fetch("https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability", {
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
});
const data = await res.json();Example response200
{
"unavailabilities": [
{
"start_time": "2026-09-10T13:30:00Z",
"end_time": "2026-09-10T13:30:00Z",
"reason": "maintenance",
"reason_description": "<string>"
}
]
}Can raise
- 401no valid token
- 403scope missing
- 404unknown or not visible
- 422validation failed
- 429rate limited
POST/v1/assets/{asset_id}/unavailability
Schedule Asset Unavailability
asset.writerestrictions.write_direct
Create a new unavailability interval for an asset.
Path parameters
- asset_idREQUIRED
- string
Request body · required
- start_time
- string<date-time>Start time of the unavailability interval in UTC ISO 8601 format
- end_time
- string<date-time>Optional end time of the unavailability interval in UTC ISO 8601 format
- availability_status
- stringdefault unavailableUnavailability records always use the status 'unavailable'
- reasonREQUIRED
- enum
maintenancefaultgrid_eventcommercialotherReason a restriction (unavailability, power limit, energy limit) is being requested. - reason_description
- stringOptional description of the unavailability reason
Example value
curl -X POST "https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability" \
-H "Authorization: Bearer $EBX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"availability_status":"unavailable","end_time":"2025-01-01T18:00:00Z","reason":"maintenance","reason_description":"Scheduled inverter maintenance","start_time":"2025-01-01T08:00:00Z"}'import httpx
r = httpx.post(
"https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability",
headers={"Authorization": f"Bearer {token}"},
json={
"availability_status": "unavailable",
"end_time": "2025-01-01T18:00:00Z",
"reason": "maintenance",
"reason_description": "Scheduled inverter maintenance",
"start_time": "2025-01-01T08:00:00Z",
},
)
print(r.json())const res = await fetch("https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability", {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({"availability_status":"unavailable","end_time":"2025-01-01T18:00:00Z","reason":"maintenance","reason_description":"Scheduled inverter maintenance","start_time":"2025-01-01T08:00:00Z"}),
});
const data = await res.json();Example response201
{
"unavailabilities": [
{
"start_time": "2026-09-10T13:30:00Z",
"end_time": "2026-09-10T13:30:00Z",
"reason": "maintenance",
"reason_description": "<string>"
}
]
}Can raise
- 400malformed request
- 401no valid token
- 403scope missing
- 404unknown or not visible
- 409state conflict
- 422validation failed
- 429rate limited
PATCH/v1/assets/{asset_id}/unavailability
Shorten Asset Unavailability
asset.writerestrictions.write_direct
Shorten or immediately end an existing unavailability interval.
Path parameters
- asset_idREQUIRED
- string
Query parameters
- start_timeREQUIRED
- string<date-time>Exact start_time of the interval to modify
- end_time
- string<date-time>Deprecated and ignored; intervals are identified by start_time alone.
Request body · required
- new_end_time
- string<date-time>Scheduled replacement end_time in UTC; mutually exclusive with end_now=true
- end_now
- booleandefault falseEnd a started interval at server time, without the scheduled-shortening lead time. Safe to retry.
Example value
curl -X PATCH "https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability?start_time=2025-01-03T10:00:00Z" \
-H "Authorization: Bearer $EBX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"new_end_time":"2025-01-01T18:15:00Z","end_now":false}'import httpx
r = httpx.patch(
"https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability?start_time=2025-01-03T10:00:00Z",
headers={"Authorization": f"Bearer {token}"},
json={
"new_end_time": "2025-01-01T18:15:00Z",
"end_now": False,
},
)
print(r.json())const res = await fetch("https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability?start_time=2025-01-03T10:00:00Z", {
method: "PATCH",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({"new_end_time":"2025-01-01T18:15:00Z","end_now":false}),
});
const data = await res.json();Example response200
{
"unavailabilities": [
{
"start_time": "2026-09-10T13:30:00Z",
"end_time": "2026-09-10T13:30:00Z",
"reason": "maintenance",
"reason_description": "<string>"
}
]
}Can raise
- 400malformed request
- 401no valid token
- 403scope missing
- 404unknown or not visible
- 409state conflict
- 422validation failed
- 429rate limited
DELETE/v1/assets/{asset_id}/unavailability
Delete Asset Unavailability
asset.writerestrictions.write_direct
Delete an exact future unavailability interval.
Path parameters
- asset_idREQUIRED
- string
Query parameters
- start_timeREQUIRED
- string<date-time>Exact start_time of the interval to modify
- end_time
- string<date-time>Deprecated and ignored; intervals are identified by start_time alone.
Example value
curl -X DELETE "https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability?start_time=2025-01-03T10:00:00Z" \
-H "Authorization: Bearer $EBX_TOKEN"import httpx
r = httpx.delete(
"https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability?start_time=2025-01-03T10:00:00Z",
headers={"Authorization": f"Bearer {token}"},
)
print(r.status_code)const res = await fetch("https://api.ebx.energy/v1/assets/DE_BESS_01/unavailability?start_time=2025-01-03T10:00:00Z", {
method: "DELETE",
headers: {
Authorization: `Bearer ${token}`,
},
});Returns 204 with no body.
Can raise
- 400malformed request
- 401no valid token
- 403scope missing
- 404unknown or not visible
- 409state conflict
- 422validation failed
- 429rate limited