Skip to content

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

ParameterTypeRequiredDefaultDescription
titlestringyesProject name
descriptionstringyesProject description
startProjectstringyesStart date (YYYY-MM-DD or ISO 8601)
projectLifeYearsintno25Project lifetime in years (1-50)

Battery (BESS)

ParameterTypeRequiredDefaultDescription
bessCapacityfloatyesEnergy capacity (MWh)
bessPowerfloatyesPower rating (MW)
bessMaximumSOCfloatyesMaximum state of charge (0-100%)
bessMinimumSOCfloatyesMinimum state of charge (0-100%)
bessRoundTripEfficiencyfloatyesRound-trip efficiency (e.g. 90 for 90%)
bessAvailabilityfloatno98System availability (0-100%)
bessLifetimeCyclesintno8000Equivalent full cycles before replacement
bessDegradationPerYearfloatno0.01Calendar degradation per year (0.01 = 1%)
bessDegradationPerCyclefloatno0.003Capacity fade per equivalent full cycle
bessRTEDegradationPerCyclefloatno0RTE fade per cycle
bessRampRatePercentfloatno0Ramp 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

ParameterTypeRequiredDefaultDescription
gridChargingCapacityfloatyesMax grid charge power (MW)
gridDischargingCapacityfloatyesMax grid discharge power (MW)
gridTarifstringyesTariff type identifier
gridStandingChargeTransportfloatyesAnnual transport standing charge (EUR)
gridTransportedEnergyfloatyesEnergy transport tariff (EUR/MWh)
gridContractedTransportPowerfloatnoContracted transport power (MW)
gridMaxTransportedPowerfloatnoMaximum transported power (MW)
gridYearlyTariffIncreasefloatno0.02Annual tariff escalation (0.02 = 2%)
gridChargingCapacityByMonthfloat[12]noMonthly charge limits (MW)
gridChargingCapacityByHourfloat[24]noHourly charge limits (MW)

Solar (optional)

ParameterTypeRequiredDefaultDescription
solarInstalledCapacityfloatno0DC installed capacity (MW)
solarPeakPowerfloatno0Maximum AC output (MW)
solarAvailabilityfloatno98System availability (0-100%)
solarDegradationfloatno0.005Annual degradation (0.005 = 0.5%/year)
solarSubsidyfloatno0Subsidy payment (EUR/MWh)
solarShutdownConsecutiveHoursintno6Negative price hours before subsidy withheld

Wind (optional)

ParameterTypeRequiredDefaultDescription
windInstalledCapacityfloatno0Installed capacity (MW)
windPeakPowerfloatno0Maximum AC output (MW)
windAvailabilityfloatno98System availability (0-100%)
windDegradationfloatno0.005Annual degradation (0.005 = 0.5%/year)
windSubsidyfloatno0Subsidy payment (EUR/MWh)
windShutdownConsecutiveHoursintno6Negative price hours before subsidy withheld

Economics

ParameterTypeRequiredDefaultDescription
economicsInflationfloatyesAnnual inflation rate (0.02 = 2%)
economicsDiscountRatefloatyesNPV discount rate (0.05 = 5%)
economicsEquityfloatno0.3Equity fraction (0-1)
economicsLoanDurationintno10Loan duration in years
economicsInterestRatefloatno0.04Annual interest rate
economicsOptimizerFeefloatno0Annual optimizer fee (EUR)
economicsGvosfloatno0Green certificate value

Trading Constraints (optional)

ParameterTypeRequiredDefaultDescription
tradingMaxCyclesPerDayfloatnoMaximum daily equivalent full cycles
tradingMinSpreadEurMwhfloatno0Minimum price spread to trade (EUR/MWh)
tradingEnablePropTradingboolnotrueEnable 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"
  }
]
FieldTypeDescription
idintUnique identifier
typestringcapexBESS, capexPV, or capexWind
titlestringItem description
valuefloatCost value
unitstringUnit (EUR, EUR/MWh, etc.)
linkedTostringParameter 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)

ParameterTypeRequiredDefaultDescription
scenario_idintnodefaultMarket data scenario to use
profile_idstringnoSolar production profile UUID
wind_profile_idstringnoWind production profile UUID
simulation_yearsintno1Years to simulate (1-30)
strategystringnorolling_lpStrategy: lp, rolling_lp, sequential_lp
enabled_marketsstring[]no["day_ahead"]Markets to trade
foresight_daysintno3LP lookahead window (1-30 days)
execute_daysintnoforesight_daysDays executed per LP solve
yearly_summaryboolnofalseInclude per-year breakdowns
parallel_yearsboolnofalseRun years in parallel

Price Scaling

ParameterTypeDescription
price_scaling_percentilefloatGlobal percentile clipping (e.g. 5.0 clips top/bottom 5%)
price_scaling_percentiles_per_marketdictPer-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

ParameterTypeDefaultDescription
max_capacity_allocationfloat1.0Max battery power fraction for capacity markets
max_fcr_allocationfloatFCR-specific limit (0-1)
max_afrr_allocationfloataFRR-specific limit (0-1)
afrr_block_hoursint4aFRR block duration (4 or 24 hours)

Output Control

ParameterTypeDefaultDescription
max_output_pointsintDownsample 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
  }
}