# Asset reports

> The daily report for one UTC day: aFRR activations, dispatch overrides, unavailabilities, alarms and settled aFRR capacity revenue. The performance timeline buckets activation metrics and settled capacity revenue over a window of up to 90 days.

API reference

The daily report for one UTC day: aFRR activations, dispatch overrides, unavailabilities, alarms and settled aFRR capacity revenue. The performance timeline buckets activation metrics and settled capacity revenue over a window of up to 90 days.

2 endpoints

· GET · /v1/assets/{asset\_id}/reports/daily

### Daily operational report for an asset

report.read

**Required scopes:** `report.read`

Return everything this asset did on one UTC calendar day.

-   `activations`: every aFRR dispatch event with fill rate and totals.
-   `dispatch_overrides`: limit and immediate-dispatch changes recorded that day.
-   `unavailabilities` and `alarms`: what was declared and what fired.
-   `earnings.afrr.capacity_revenue_eur`: settled aFRR capacity revenue for the day, read from the latest settlement blocks (preliminary or final). `null` means no settlement result exists yet, not zero. Energy revenue is `null` pending the settlement contract; per-activation capacity revenue is never attributed.

`date` defaults to today (UTC). Today's report is partial by definition.

Path parameters

asset\_id · REQUIRED

string · The ID of the asset

Query parameters

date

string<date>

Example value

cURL:

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

Python:

```python
import ·  httpx

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

TypeScript:

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

Example response · 200

```json
{ · 
   · "asset_id" · : ·   · "<string>" · , · 
   · "date" · : ·   · "<string>" · , · 
   · "activations" · : ·   · { · 
     · "count" · : ·   · 0 · , · 
     · "fill_rate_pct" · : ·   · 0 · , · 
     · "total_requested" · : ·   · 0 · , · 
     · "total_dispatched" · : ·   · 0 · , · 
     · "filtered_count" · : ·   · 0 · , · 
     · "events" · : ·   · [ · 
       · { · 
         · "activation_id" · : ·   · "<string>" · , · 
         · "dispatch_slot_utc" · : ·   · "2026-10-22T20:30:00Z" · , · 
         · "dispatch_category" · : ·   · "<string>" · , · 
         · "planned_set_power" · : ·   · 0 · , · 
         · "set_power" · : ·   · 0 · , · 
         · "accepted" · : ·   · 0 · , · 
         · "outcome" · : ·   · "<string>" · , · 
         · "filter_reason" · : ·   · "<string>" · 
       · } · 
     · ] · 
   · }, · 
   · "dispatch_overrides" · : ·   · [ · 
     · { · 
       · "event_type" · : ·   · "<string>" · , · 
       · "event_id" · : ·   · "<string>" · , · 
       · "created_at_utc" · : ·   · "2026-10-22T20:30:00Z" · , · 
       · "action" · : ·   · "<string>" · , · 
       · "outcome" · : ·   · "<string>" · , · 
       · "details" · : ·   · "<string>" · 
     · } · 
   · ], · 
   · "unavailabilities" · : ·   · [ · 
     · { · 
       · "event_id" · : ·   · "<string>" · , · 
       · "start_at_utc" · : ·   · "2026-10-22T20:30:00Z" · , · 
       · "end_at_utc" · : ·   · "2026-10-22T20:30:00Z" · , · 
       · "action" · : ·   · "<string>" · , · 
       · "outcome" · : ·   · "<string>" · 
     · } · 
   · ], · 
   · "alarms" · : ·   · { · 
     · "count" · : ·   · 0 · , · 
     · "events" · : ·   · [ · 
       · { · 
         · "event_id" · : ·   · "<string>" · , · 
         · "alarm_id" · : ·   · "<string>" · , · 
         · "severity" · : ·   · "<string>" · , · 
         · "action" · : ·   · "<string>" · , · 
         · "opened_at_utc" · : ·   · "2026-10-22T20:30:00Z" · , · 
         · "resolved_at_utc" · : ·   · "2026-10-22T20:30:00Z" · 
       · } · 
     · ] · 
   · }, · 
   · "earnings" · : ·   · { · 
     · "total_revenue_eur" · : ·   · 0 · , · 
     · "afrr" · : ·   · { · 
       · "capacity_revenue_eur" · : ·   · 0 · , · 
       · "energy_revenue_eur" · : ·   · 0 · , · 
       · "by_activation" · : ·   · [ · 
         · { · 
           · "activation_id" · : ·   · "<string>" · , · 
           · "dispatch_slot_utc" · : ·   · "2026-10-22T20:30:00Z" · , · 
           · "dispatch_category" · : ·   · "<string>" · , · 
           · "accepted" · : ·   · 0 · , · 
           · "capacity_price" · : ·   · 0 · , · 
           · "capacity_revenue_eur" · : ·   · 0 · , · 
           · "energy_price" · : ·   · 0 · , · 
           · "energy_revenue_eur" · : ·   · 0 · 
         · } · 
       · ] · 
     · }, · 
     · "fcr" · : ·   · null · 
   · } · 
 · }
```

Can raise

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

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

 · GET · /v1/assets/{asset\_id}/reports/performance

### Performance timeline with settled capacity revenue for an asset

report.read

**Required scopes:** `report.read`

Return activation performance bucketed by `granularity` for `[start_time, end_time)`.

Each period carries activation counts, planned vs dispatched power, fill rate and the settled aFRR capacity revenue of the settlement blocks starting in that period. Periods with settled revenue but no activations are included, so idle awarded blocks are not hidden. Revenue is `null` where no settlement result exists.

Defaults to the last 24 hours; maximum window is 90 days.

Path parameters

asset\_id · REQUIRED

string · The ID of the asset

Query parameters

start\_time

string<date-time> · Start time for filtering results

end\_time

string<date-time> · End time for filtering results

granularity

enum · `fifteen_minutes` · `hourly` · `daily`

Example value

cURL:

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

Python:

```python
import ·  httpx

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

TypeScript:

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

Example response · 200

```json
{ · 
   · "asset_id" · : ·   · "<string>" · , · 
   · "granularity" · : ·   · "fifteen_minutes" · , · 
   · "periods" · : ·   · [ · 
     · { · 
       · "period_start" · : ·   · "2026-10-22T20:30:00Z" · , · 
       · "granularity" · : ·   · "fifteen_minutes" · , · 
       · "activation_count" · : ·   · 0 · , · 
       · "total_planned" · : ·   · 0 · , · 
       · "total_dispatched" · : ·   · 0 · , · 
       · "avg_accepted" · : ·   · 0 · , · 
       · "fill_rate_pct" · : ·   · 0 · , · 
       · "filtered_count" · : ·   · 0 · , · 
       · "afrr_capacity_revenue_eur" · : ·   · 0 · , · 
       · "afrr_energy_revenue_eur" · : ·   · 0 · , · 
       · "fcr_pos_capacity_revenue_eur" · : ·   · 0 · , · 
       · "fcr_neg_capacity_revenue_eur" · : ·   · 0 · 
     · } · 
   · ] · 
 · }
```

Can raise

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

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