# Restriction requests

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

API reference

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\_id · REQUIRED

string

Request body · required

start\_time · REQUIRED

string<date-time> · Start time of the requested interval

end\_time

string<date-time> · Optional end time of the requested interval

reason · REQUIRED

enum · `maintenance` · `fault` · `grid_event` · `commercial` · `other` · Reason a restriction (unavailability, power limit, energy limit) is being requested.

reason\_description

string · Free-text description of the reason

action

string · default create

kind

string · default power\_limit

upper\_limit\_mw

number · Upper power limit in MW

lower\_limit\_mw

number · Lower power limit in MW

Example value

cURL:

```bash
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}'
```

Python:

```python
import ·  httpx

r = httpx.post(
     · "https://api.ebx.energy/v1/assets/DE_BESS_01/restriction_requests" · , · 
    headers= · { · "Authorization" · : ·  f · "Bearer {token}" · }, · 
    json= · { · 
         · "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 · , · 
     · }, · 
)
print(r.json())
```

TypeScript:

```typescript
const ·  res =  · await ·  fetch( · "https://api.ebx.energy/v1/assets/DE_BESS_01/restriction_requests" · , ·   · { · 
   · method · : ·   · "POST" · , · 
   · headers · : ·   · { · 
    Authorization · : ·   · `Bearer ${token}` · , · 
     · "Content-Type" · : ·   · "application/json" · , · 
   · }, · 
   · body · : ·  JSON.stringify( · { · "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 · } · ) · , · 
 · } · );
 · const ·  data =  · await ·  res.json();
```

Example response · 201

```json
{ · 
   · "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

-   400 · malformed request
-   401 · no valid token
-   403 · scope missing
-   404 · unknown or not visible
-   409 · state conflict
-   422 · validation failed
-   429 · rate limited

[ALL CODES →](https://docs.ebx.energy/reference/errors.md)

 · GET · /v1/restriction\_requests

### List Restriction Requests

restrictions.review

List restriction requests visible to the caller's organizations.

Query parameters

asset\_id

string · Filter by asset

status

enum · `pending` · `approved` · `rejected` · `cancelled` · `expired` · Filter by request status

kind

enum · `power_limit` · `energy_limit` · `unavailability` · Filter by restriction kind

Example value

cURL:

```bash
curl ·   · "https://api.ebx.energy/v1/restriction_requests" ·  \
   · -H ·   · "Authorization: Bearer $EBX_TOKEN"
```

Python:

```python
import ·  httpx

r = httpx.get(
     · "https://api.ebx.energy/v1/restriction_requests" · , · 
    headers= · { · "Authorization" · : ·  f · "Bearer {token}" · }, · 
)
print(r.json())
```

TypeScript:

```typescript
const ·  res =  · await ·  fetch( · "https://api.ebx.energy/v1/restriction_requests" · , ·   · { · 
   · method · : ·   · "GET" · , · 
   · headers · : ·   · { · 
    Authorization · : ·   · `Bearer ${token}` · , · 
   · }, · 
 · } · );
 · const ·  data =  · await ·  res.json();
```

Example response · 200

```json
{ · 
   · "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

-   401 · no valid token
-   403 · scope missing
-   422 · validation failed
-   429 · rate limited

[ALL CODES →](https://docs.ebx.energy/reference/errors.md)· GET · /v1/restriction\_requests/{request\_id}

### Get Restriction Request

restrictions.review

Path parameters

request\_id · REQUIRED

string<uuid>

Example value

cURL:

```bash
curl ·   · "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000" ·  \
   · -H ·   · "Authorization: Bearer $EBX_TOKEN"
```

Python:

```python
import ·  httpx

r = httpx.get(
     · "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000" · , · 
    headers= · { · "Authorization" · : ·  f · "Bearer {token}" · }, · 
)
print(r.json())
```

TypeScript:

```typescript
const ·  res =  · await ·  fetch( · "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000" · , ·   · { · 
   · method · : ·   · "GET" · , · 
   · headers · : ·   · { · 
    Authorization · : ·   · `Bearer ${token}` · , · 
   · }, · 
 · } · );
 · const ·  data =  · await ·  res.json();
```

Example response · 200

```json
{ · 
   · "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

-   401 · no valid token
-   403 · scope missing
-   404 · unknown or not visible
-   429 · rate limited

[ALL CODES →](https://docs.ebx.energy/reference/errors.md)

· 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\_id · REQUIRED

string<uuid>

Request body · required

note

string · Optional note shown back to the requester

Example value

cURL:

```bash
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>"}'
```

Python:

```python
import ·  httpx

r = httpx.post(
     · "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000/approve" · , · 
    headers= · { · "Authorization" · : ·  f · "Bearer {token}" · }, · 
    json= · { · 
         · "note" · : ·   · "<string>" · , · 
     · }, · 
)
print(r.json())
```

TypeScript:

```typescript
const ·  res =  · await ·  fetch( · "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000/approve" · , ·   · { · 
   · method · : ·   · "POST" · , · 
   · headers · : ·   · { · 
    Authorization · : ·   · `Bearer ${token}` · , · 
     · "Content-Type" · : ·   · "application/json" · , · 
   · }, · 
   · body · : ·  JSON.stringify( · { · "note" · : · "<string>" · } · ) · , · 
 · } · );
 · const ·  data =  · await ·  res.json();
```

Example response · 200

```json
{ · 
   · "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

-   400 · malformed request
-   401 · no valid token
-   403 · scope missing
-   404 · unknown or not visible
-   409 · state conflict
-   422 · validation failed
-   429 · rate limited

[ALL CODES →](https://docs.ebx.energy/reference/errors.md)

· 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\_id · REQUIRED

string<uuid>

Request body · required

note

string · Optional note shown back to the requester

Example value

cURL:

```bash
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>"}'
```

Python:

```python
import ·  httpx

r = httpx.post(
     · "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000/cancel" · , · 
    headers= · { · "Authorization" · : ·  f · "Bearer {token}" · }, · 
    json= · { · 
         · "note" · : ·   · "<string>" · , · 
     · }, · 
)
print(r.json())
```

TypeScript:

```typescript
const ·  res =  · await ·  fetch( · "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000/cancel" · , ·   · { · 
   · method · : ·   · "POST" · , · 
   · headers · : ·   · { · 
    Authorization · : ·   · `Bearer ${token}` · , · 
     · "Content-Type" · : ·   · "application/json" · , · 
   · }, · 
   · body · : ·  JSON.stringify( · { · "note" · : · "<string>" · } · ) · , · 
 · } · );
 · const ·  data =  · await ·  res.json();
```

Example response · 200

```json
{ · 
   · "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

-   400 · malformed request
-   401 · no valid token
-   403 · scope missing
-   404 · unknown or not visible
-   409 · state conflict
-   422 · validation failed
-   429 · rate limited

[ALL CODES →](https://docs.ebx.energy/reference/errors.md)

· POST · /v1/restriction\_requests/{request\_id}/reject

### Reject Restriction Request

restrictions.approve

Reject a pending request.

Path parameters

request\_id · REQUIRED

string<uuid>

Request body · required

note

string · Optional note shown back to the requester

Example value

cURL:

```bash
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>"}'
```

Python:

```python
import ·  httpx

r = httpx.post(
     · "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000/reject" · , · 
    headers= · { · "Authorization" · : ·  f · "Bearer {token}" · }, · 
    json= · { · 
         · "note" · : ·   · "<string>" · , · 
     · }, · 
)
print(r.json())
```

TypeScript:

```typescript
const ·  res =  · await ·  fetch( · "https://api.ebx.energy/v1/restriction_requests/00000000-0000-0000-0000-000000000000/reject" · , ·   · { · 
   · method · : ·   · "POST" · , · 
   · headers · : ·   · { · 
    Authorization · : ·   · `Bearer ${token}` · , · 
     · "Content-Type" · : ·   · "application/json" · , · 
   · }, · 
   · body · : ·  JSON.stringify( · { · "note" · : · "<string>" · } · ) · , · 
 · } · );
 · const ·  data =  · await ·  res.json();
```

Example response · 200

```json
{ · 
   · "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

-   400 · malformed request
-   401 · no valid token
-   403 · scope missing
-   404 · unknown or not visible
-   409 · state conflict
-   422 · validation failed
-   429 · rate limited

[ALL CODES →](https://docs.ebx.energy/reference/errors.md)
