Parameters
All parameters use camelCase in the API JSON. The request body has two top-level objects:
json
{
"params": { ... }, // What to simulate (physical & economic)
"run": { ... } // How to simulate (strategy & control)
}Physical & Economic Parameters (params)
Project
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
title | string | yes | — | Project name |
description | string | yes | — | Project description |
startProject | string | yes | — | Start date (YYYY-MM-DD or ISO 8601) |
projectLifeYears | int | no | 25 | Project lifetime in years (1-50) |
Battery (BESS)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
bessCapacity | float | yes | — | Energy capacity (MWh) |
bessPower | float | yes | — | Power rating (MW) |
bessMaximumSOC | float | yes | — | Maximum state of charge (0-100%) |
bessMinimumSOC | float | yes | — | Minimum state of charge (0-100%) |
bessRoundTripEfficiency | float | yes | — | Round-trip efficiency (e.g. 90 for 90%) |
bessAvailability | float | no | 98 | System availability (0-100%) |
bessLifetimeCycles | int | no | 8000 | Equivalent full cycles before replacement |
bessDegradationPerYear | float | no | 0.01 | Calendar degradation per year (0.01 = 1%) |
bessDegradationPerCycle | float | no | 0.003 | Capacity fade per equivalent full cycle |
bessRTEDegradationPerCycle | float | no | 0 | RTE fade per cycle |
bessRampRatePercent | float | no | 0 | Ramp rate limit (0-100% of power per period) |
Note
bessRoundTripEfficiency is entered as a percentage (e.g. 90) and converted internally to decimal (0.9). One-way efficiency is calculated as √RTE — charge and discharge efficiency are symmetric.
Grid
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
gridChargingCapacity | float | yes | — | Max grid charge power (MW) |
gridDischargingCapacity | float | yes | — | Max grid discharge power (MW) |
gridTarif | string | yes | — | Tariff type identifier |
gridStandingChargeTransport | float | yes | — | Annual transport standing charge (EUR) |
gridTransportedEnergy | float | yes | — | Energy transport tariff (EUR/MWh) |
gridContractedTransportPower | float | no | — | Contracted transport power (MW) |
gridMaxTransportedPower | float | no | — | Maximum transported power (MW) |
gridYearlyTariffIncrease | float | no | 0.02 | Annual tariff escalation (0.02 = 2%) |
gridChargingCapacityByMonth | float[12] | no | — | Monthly charge limits (MW) |
gridChargingCapacityByHour | float[24] | no | — | Hourly charge limits (MW) |
Solar (optional)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
solarInstalledCapacity | float | no | 0 | DC installed capacity (MW) |
solarPeakPower | float | no | 0 | Maximum AC output (MW) |
solarAvailability | float | no | 98 | System availability (0-100%) |
solarDegradation | float | no | 0.005 | Annual degradation (0.005 = 0.5%/year) |
solarSubsidy | float | no | 0 | Subsidy payment (EUR/MWh) |
solarShutdownConsecutiveHours | int | no | 6 | Negative price hours before subsidy withheld |
Wind (optional)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
windInstalledCapacity | float | no | 0 | Installed capacity (MW) |
windPeakPower | float | no | 0 | Maximum AC output (MW) |
windAvailability | float | no | 98 | System availability (0-100%) |
windDegradation | float | no | 0.005 | Annual degradation (0.005 = 0.5%/year) |
windSubsidy | float | no | 0 | Subsidy payment (EUR/MWh) |
windShutdownConsecutiveHours | int | no | 6 | Negative price hours before subsidy withheld |
Economics
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
economicsInflation | float | yes | — | Annual inflation rate (0.02 = 2%) |
economicsDiscountRate | float | yes | — | NPV discount rate (0.05 = 5%) |
economicsEquity | float | no | 0.3 | Equity fraction (0-1) |
economicsLoanDuration | int | no | 10 | Loan duration in years |
economicsInterestRate | float | no | 0.04 | Annual interest rate |
economicsOptimizerFee | float | no | 0 | Annual optimizer fee (EUR) |
economicsGvos | float | no | 0 | Green certificate value |
Trading Constraints (optional)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
tradingMaxCyclesPerDay | float | no | — | Maximum daily equivalent full cycles |
tradingMinSpreadEurMwh | float | no | 0 | Minimum price spread to trade (EUR/MWh) |
tradingEnablePropTrading | bool | no | true | Enable proprietary trading mode |
CAPEX (optional)
Array of capital expenditure items:
json
"capex": [
{
"id": 1,
"type": "capexBESS",
"title": "Battery system",
"value": 500000,
"unit": "EUR",
"linkedTo": "bessCapacity"
}
]| Field | Type | Description |
|---|---|---|
id | int | Unique identifier |
type | string | capexBESS, capexPV, or capexWind |
title | string | Item description |
value | float | Cost value |
unit | string | Unit (EUR, EUR/MWh, etc.) |
linkedTo | string | Parameter name for scaling (e.g. bessCapacity) |
When linkedTo is set, total cost = value × params[linkedTo].
OPEX (optional)
Same structure as CAPEX. Types: opexBESS, opexPV, opexWind, opexOM. Applied annually with inflation escalation.
Run Configuration (run)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
scenario_id | int | no | default | Market data scenario to use |
profile_id | string | no | — | Solar production profile UUID |
wind_profile_id | string | no | — | Wind production profile UUID |
simulation_years | int | no | 1 | Years to simulate (1-30) |
strategy | string | no | rolling_lp | Strategy: lp, rolling_lp, sequential_lp |
enabled_markets | string[] | no | ["day_ahead"] | Markets to trade |
foresight_days | int | no | 3 | LP lookahead window (1-30 days) |
execute_days | int | no | foresight_days | Days executed per LP solve |
yearly_summary | bool | no | false | Include per-year breakdowns |
parallel_years | bool | no | false | Run years in parallel |
Price Scaling
| Parameter | Type | Description |
|---|---|---|
price_scaling_percentile | float | Global percentile clipping (e.g. 5.0 clips top/bottom 5%) |
price_scaling_percentiles_per_market | dict | Per-market overrides |
Energy markets use percentile clipping. Capacity markets (aFRR, FCR) use multiplier scaling.
json
{
"run": {
"price_scaling_percentile": 5.0,
"price_scaling_percentiles_per_market": {
"day_ahead": 5.0,
"afrr": 0.8,
"fcr": 0.9
}
}
}Capacity Allocation
| Parameter | Type | Default | Description |
|---|---|---|---|
max_capacity_allocation | float | 1.0 | Max battery power fraction for capacity markets |
max_fcr_allocation | float | — | FCR-specific limit (0-1) |
max_afrr_allocation | float | — | aFRR-specific limit (0-1) |
afrr_block_hours | int | 4 | aFRR block duration (4 or 24 hours) |
Output Control
| Parameter | Type | Default | Description |
|---|---|---|---|
max_output_points | int | — | Downsample timeseries output |
Example Configurations
Minimal Configuration (Day-Ahead only)
json
{
"params": {
"title": "Basic BESS",
"description": "Simple day-ahead arbitrage",
"startProject": "2024-01-01",
"bessCapacity": 10.0,
"bessPower": 5.0,
"bessMaximumSOC": 90,
"bessMinimumSOC": 10,
"bessRoundTripEfficiency": 90,
"gridChargingCapacity": 10.0,
"gridDischargingCapacity": 10.0,
"gridTarif": "HT/LT",
"gridStandingChargeTransport": 5000,
"gridTransportedEnergy": 50,
"economicsInflation": 0.02,
"economicsDiscountRate": 0.05
},
"run": {
"scenario_id": 1,
"strategy": "rolling_lp",
"enabled_markets": ["day_ahead"]
}
}Multi-Market with aFRR & FCR
json
{
"params": {
"title": "Multi-Market BESS",
"description": "5 MW / 10 MWh with capacity markets",
"startProject": "2024-01-01",
"projectLifeYears": 15,
"bessCapacity": 10.0,
"bessPower": 5.0,
"bessMaximumSOC": 95,
"bessMinimumSOC": 5,
"bessRoundTripEfficiency": 92,
"bessLifetimeCycles": 10000,
"gridChargingCapacity": 5.0,
"gridDischargingCapacity": 5.0,
"gridTarif": "HT/LT",
"gridStandingChargeTransport": 5000,
"gridTransportedEnergy": 50,
"economicsInflation": 0.02,
"economicsDiscountRate": 0.06
},
"run": {
"scenario_id": 1,
"simulation_years": 3,
"strategy": "rolling_lp",
"enabled_markets": ["day_ahead", "intraday", "afrr", "fcr"],
"foresight_days": 3,
"execute_days": 1,
"max_capacity_allocation": 0.5,
"max_afrr_allocation": 0.3,
"max_fcr_allocation": 0.2,
"afrr_block_hours": 4,
"yearly_summary": true
}
}BESS + Solar Co-location
json
{
"params": {
"title": "Solar + BESS",
"description": "Co-located 10 MWp solar with 5 MWh battery",
"startProject": "2024-01-01",
"bessCapacity": 5.0,
"bessPower": 2.5,
"bessMaximumSOC": 90,
"bessMinimumSOC": 10,
"bessRoundTripEfficiency": 90,
"solarInstalledCapacity": 10.0,
"solarPeakPower": 8.0,
"solarSubsidy": 65,
"solarShutdownConsecutiveHours": 6,
"gridChargingCapacity": 10.0,
"gridDischargingCapacity": 10.0,
"gridTarif": "HT/LT",
"gridStandingChargeTransport": 5000,
"gridTransportedEnergy": 50,
"economicsInflation": 0.02,
"economicsDiscountRate": 0.05
},
"run": {
"scenario_id": 1,
"profile_id": "abc-123-uuid",
"simulation_years": 5,
"strategy": "rolling_lp",
"enabled_markets": ["day_ahead"],
"yearly_summary": true
}
}