EBXv1

API reference

Restriction requests

Restriction requests for your organisation. Submission, review and approval each require their own scope.

6 endpoints
POST/v1/assets/{asset_id}/restriction_requests

Submit Restriction Request

asset.write

Submit a new approval request for an asset restriction.

Path parameters

asset_idREQUIRED
string

Request body · required

start_timeREQUIRED
string<date-time>Start time of the requested interval
end_time
string<date-time>Optional end time of the requested interval
reasonREQUIRED
enummaintenancefaultgrid_eventcommercialotherReason a restriction (unavailability, power limit, energy limit) is being requested.
reason_description
stringFree-text description of the reason
action
stringdefault create
kind
stringdefault power_limit
upper_limit_mw
numberUpper power limit in MW
lower_limit_mw
numberLower power limit in MW
Example value
curl -X POST "https://api.ebx.energy/v1/assets/DE_BESS_01/restriction_requests" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"start_time":"2026-09-10T13:30:00Z","end_time":"2026-09-10T13:30:00Z","reason":"maintenance","reason_description":"<string>","action":"create","kind":"power_limit","upper_limit_mw":0,"lower_limit_mw":0}'
Example response201
{
  "id": "00000000-0000-0000-0000-000000000000",
  "asset_id": "<string>",
  "organization_id": "<string>",
  "kind": "power_limit",
  "action": "create",
  "status": "pending",
  "start_time": "2026-09-10T13:30:00Z",
  "end_time": "2026-09-10T13:30:00Z",
  "upper_limit_mw": 0,
  "lower_limit_mw": 0,
  "upper_limit_mwh": 0,
  "lower_limit_mwh": 0,
  "reason": "maintenance",
  "reason_description": "<string>",
  "target_start_time": "2026-09-10T13:30:00Z",
  "target_end_time": "2026-09-10T13:30:00Z",
  "requested_by": "<string>",
  "requested_at": "2026-09-10T13:30:00Z",
  "decided_by": "<string>",
  "decided_at": "2026-09-10T13:30:00Z",
  "decision_note": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/restriction_requests

List Restriction Requests

restrictions.review

List restriction requests visible to the caller's organizations.

Query parameters

asset_id
stringFilter by asset
status
enumpendingapprovedrejectedcancelledexpiredFilter by request status
kind
enumpower_limitenergy_limitunavailabilityFilter by restriction kind
Example value
curl "https://api.ebx.energy/v1/restriction_requests" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "requests": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "asset_id": "<string>",
      "organization_id": "<string>",
      "kind": "power_limit",
      "action": "create",
      "status": "pending",
      "start_time": "2026-09-10T13:30:00Z",
      "end_time": "2026-09-10T13:30:00Z",
      "upper_limit_mw": 0,
      "lower_limit_mw": 0,
      "upper_limit_mwh": 0,
      "lower_limit_mwh": 0,
      "reason": "maintenance",
      "reason_description": "<string>",
      "target_start_time": "2026-09-10T13:30:00Z",
      "target_end_time": "2026-09-10T13:30:00Z",
      "requested_by": "<string>",
      "requested_at": "2026-09-10T13:30:00Z",
      "decided_by": "<string>",
      "decided_at": "2026-09-10T13:30:00Z",
      "decision_note": "<string>"
    }
  ]
}
Can raise
  • 401no valid token
  • 403scope missing
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/restriction_requests/{request_id}

Get Restriction Request

restrictions.review

Path parameters

request_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "00000000-0000-0000-0000-000000000000",
  "asset_id": "<string>",
  "organization_id": "<string>",
  "kind": "power_limit",
  "action": "create",
  "status": "pending",
  "start_time": "2026-09-10T13:30:00Z",
  "end_time": "2026-09-10T13:30:00Z",
  "upper_limit_mw": 0,
  "lower_limit_mw": 0,
  "upper_limit_mwh": 0,
  "lower_limit_mwh": 0,
  "reason": "maintenance",
  "reason_description": "<string>",
  "target_start_time": "2026-09-10T13:30:00Z",
  "target_end_time": "2026-09-10T13:30:00Z",
  "requested_by": "<string>",
  "requested_at": "2026-09-10T13:30:00Z",
  "decided_by": "<string>",
  "decided_at": "2026-09-10T13:30:00Z",
  "decision_note": "<string>"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/restriction_requests/{request_id}/approve

Approve Restriction Request

restrictions.approve

Approve a pending request and apply its change to live state.

Re-runs validation against the live tables; if validation fails, the request stays PENDING and an error is returned.

Path parameters

request_idREQUIRED
string<uuid>

Request body · required

note
stringOptional note shown back to the requester
Example value
curl -X POST "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000/approve" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"<string>"}'
Example response200
{
  "id": "00000000-0000-0000-0000-000000000000",
  "asset_id": "<string>",
  "organization_id": "<string>",
  "kind": "power_limit",
  "action": "create",
  "status": "pending",
  "start_time": "2026-09-10T13:30:00Z",
  "end_time": "2026-09-10T13:30:00Z",
  "upper_limit_mw": 0,
  "lower_limit_mw": 0,
  "upper_limit_mwh": 0,
  "lower_limit_mwh": 0,
  "reason": "maintenance",
  "reason_description": "<string>",
  "target_start_time": "2026-09-10T13:30:00Z",
  "target_end_time": "2026-09-10T13:30:00Z",
  "requested_by": "<string>",
  "requested_at": "2026-09-10T13:30:00Z",
  "decided_by": "<string>",
  "decided_at": "2026-09-10T13:30:00Z",
  "decision_note": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/restriction_requests/{request_id}/cancel

Cancel Restriction Request

asset.write

Cancel a still-pending request. Allowed for the original requester or an EBX admin.

Path parameters

request_idREQUIRED
string<uuid>

Request body · required

note
stringOptional note shown back to the requester
Example value
curl -X POST "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000/cancel" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"<string>"}'
Example response200
{
  "id": "00000000-0000-0000-0000-000000000000",
  "asset_id": "<string>",
  "organization_id": "<string>",
  "kind": "power_limit",
  "action": "create",
  "status": "pending",
  "start_time": "2026-09-10T13:30:00Z",
  "end_time": "2026-09-10T13:30:00Z",
  "upper_limit_mw": 0,
  "lower_limit_mw": 0,
  "upper_limit_mwh": 0,
  "lower_limit_mwh": 0,
  "reason": "maintenance",
  "reason_description": "<string>",
  "target_start_time": "2026-09-10T13:30:00Z",
  "target_end_time": "2026-09-10T13:30:00Z",
  "requested_by": "<string>",
  "requested_at": "2026-09-10T13:30:00Z",
  "decided_by": "<string>",
  "decided_at": "2026-09-10T13:30:00Z",
  "decision_note": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/restriction_requests/{request_id}/reject

Reject Restriction Request

restrictions.approve

Reject a pending request.

Path parameters

request_idREQUIRED
string<uuid>

Request body · required

note
stringOptional note shown back to the requester
Example value
curl -X POST "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000/reject" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"<string>"}'
Example response200
{
  "id": "00000000-0000-0000-0000-000000000000",
  "asset_id": "<string>",
  "organization_id": "<string>",
  "kind": "power_limit",
  "action": "create",
  "status": "pending",
  "start_time": "2026-09-10T13:30:00Z",
  "end_time": "2026-09-10T13:30:00Z",
  "upper_limit_mw": 0,
  "lower_limit_mw": 0,
  "upper_limit_mwh": 0,
  "lower_limit_mwh": 0,
  "reason": "maintenance",
  "reason_description": "<string>",
  "target_start_time": "2026-09-10T13:30:00Z",
  "target_end_time": "2026-09-10T13:30:00Z",
  "requested_by": "<string>",
  "requested_at": "2026-09-10T13:30:00Z",
  "decided_by": "<string>",
  "decided_at": "2026-09-10T13:30:00Z",
  "decision_note": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 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