# Sympheny Documentation
> Documentation for the Sympheny web application, REST API, Python SDK, and AI integrations.
---
# Sympheny documentation
Sympheny helps you design and optimize multi-energy systems. Work with it through any of these four surfaces.
- :material-web:{ .lg .middle } __Web Application__
---
Model and optimize multi-energy systems in the browser — projects, scenarios, and results.
[:octicons-arrow-right-24: Open the guides](web-app/index.md)
- :material-api:{ .lg .middle } __REST API__
---
The HTTP API behind Sympheny: authentication, endpoints, and schemas.
[:octicons-arrow-right-24: Browse the API](api/index.md)
- :material-language-python:{ .lg .middle } __Python SDK__
---
`sympheny-toolbox` — a typed Python client with matching sync and async APIs.
[:octicons-arrow-right-24: Get started](sdk/index.md)
- :material-robot-outline:{ .lg .middle } __Use with AI__
---
Bring Sympheny into AI assistants and agents — the MCP server and machine-readable docs.
[:octicons-arrow-right-24: Learn more](ai/index.md)
---
# Web Application
Documentation for the Sympheny web application — from your first login to interpreting optimization results.
- [Getting started](getting-started/index.md) — what Sympheny is, signing up, and a quick-start walkthrough.
- [How-to guides](how-to/index.md) — task-oriented guides for the web app: projects, analyses, scenario modeling, execution, results, and the database center.
- [Concepts](concepts/index.md) — the optimization model's building blocks: hubs, energy carriers, demands, technologies, and the underlying financial concepts.
- [Parameters](concepts/parameters/index.md) — definitions of every input and output parameter.
- [What's new](whats-new/index.md) — release notes for the web application.
- [Troubleshooting and FAQs](troubleshooting/index.md) — common issues and how to get support.
Working programmatically instead? See the [REST API](../api/index.md) or the [Python SDK](../sdk/index.md).
---
# Getting started
## What is Sympheny?
Sympheny is a toolset for integrated energy system planning, suitable for scales ranging from buildings to cities. You can model energy systems with basic site details, quickly evaluate various supply options, and identify the most suitable ones. Its dashboards provide in-depth insights into the technology and performance of each solution. You can also run multiple scenarios simultaneously, to understand the impact of factors like energy prices and site configurations.

## What makes it unique?
Sympheny supports you from initial data gathering to execution and detailed results, identifying optimal energy supply solutions with speed and precision. Advanced optimization algorithms analyze thousands of potential solutions, pinpointing the best options based on the planner's objectives. These algorithms solve energy balances for every hour of the year, considering complex site-specific supply and demand dynamics, interactions between various energy vectors, and the detailed techno-economic specifications of available technologies.
## What can Sympheny be used for?
The Sympheny web app can be used to identify the optimal energy supply solution for a given site or to assess the expected performance of user-defined supply solutions. You can use it to:
- **Optimize production technologies:** Determine the most suitable energy production technologies for a site, how they should be dimensioned, and whether to use a centralized, decentralized, or hybrid solution for heating and/or cooling.
- **Optimize renewables integration:** Assess the potential to cover on-site energy demands with on-site renewable energy sources (e.g., solar, groundwater heat) and identify the optimal mix of renewable resources and technologies for a site.
- **Optimize energy storage:** Identify the most suitable storage technologies for a site, evaluate the cost-effectiveness of batteries, and consider options for seasonal (e.g., geothermal) and hydrogen storage.
- **Optimize thermal networks:** Determine if a thermal network is viable, identify the most efficient network type (e.g., low-temperature, high-temperature), decide which buildings or sectors to connect, and choose the appropriate production technologies for heating or cooling the network.
- **Optimize grid interactions:** Decide which energy vectors to import based on cost and CO2 intensity, evaluate the possibility of operating the site autonomously from the electricity grid, and analyze peak electricity withdrawals and feed-ins.
Sympheny allows for the combination of these optimizations and more, providing a comprehensive tool for energy system planning.
## What can't Sympheny be used for?
- Building-level high-resolution optimization of sites larger than 15-20 buildings. Larger sites may require aggregation of buildings into nodes/hubs.
- Detailed hydraulic optimization of thermal networks or detailed optimization of electrical networks.
- Optimizing the control or operational management of energy systems.
- Sympheny is best suited for engineering problems in early phases of planning (SIA 1 and 2), but it can still be used as a digital twin, carried over to later planning stages.
## Where should I start?
The recommended starting point is the Example case, which is installed in every user's account upon first sign-in. From there, follow the steps below to sign in and complete your first walkthrough. Once you're familiar with the basics, explore the [how-to guides](../how-to/index.md) to learn the various features of the software and how to use them effectively.
1. [Sign up and log in](sign-up-and-login.md)
2. [Follow the quick start walkthrough](quickstart.md)
For programmatic access, see the [REST API documentation](../../api/index.md).
## What if I run into problems?
You can reach out to us for support via the Help button located at the bottom-right corner of our website, or drop us an email at [support@sympheny.com](mailto:support@sympheny.com). Additionally, feel free to check out our [Troubleshooting and FAQs](../troubleshooting/index.md) sections for handy solutions.
---
# Sign up and log in
## Sign up
Upon signing up, you'll receive a confirmation email with a verification link. Click the link, set your password, and then log in to Sympheny.
## Log in
When you log in for the first time, you'll need to accept Sympheny's General Terms and Conditions. It's mandatory to accept these terms to use the web app.
## Log in with MFA (multi-factor authentication)
For added security, you can enable multi-factor authentication (MFA) to log in to your Sympheny account:
1. Enter your email and password as usual.
2. Scan the QR code using an authenticator app on your phone.
3. Enter the code provided by the authenticator app to complete the login process.

If you'd like to enable MFA or have any questions, feel free to contact us for assistance.
## What's next?
Once you're signed in, follow the [quick start walkthrough](quickstart.md) to build your first scenario, or explore [web app usage](../how-to/index.md) for more detailed instructions.
---
# Web app quick start
In this example, you simulate a **data center**. The goal is to walk you through your first steps in the Sympheny web app, covering the mandatory features and some *optional* ones along the way. In the following steps you:
- Create a scenario to size a solar PV installation.
- Evaluate the cost and performance of a 100 kWh battery.
## Create a project
Specify the location by searching for an address.

## Create a scenario
Analyses can be used as an archive: create different scenarios to compare against each other. Click a scenario to work with it.
Optional, while creating the project:
- Send a copy of, or share, the project with other Sympheny users.
- Upload an image to illustrate your project, using a small resolution.

## General
You can change the currency; press **Save** after changing it. Add a stage — multiple stages can be used to plan an optimal energy system over decades, although this adds complexity to the modeling process. To get started on a project, simulate a single stage. An interest rate of 0% will help you interpret the results as a new user.

## Hubs
Click **Add new** to add a hub. Multiple hubs are used to simulate energy networks, such as district heating. More hubs add complexity, so to get started, simulate a single hub.
Optional, while adding a hub:
- Research the hub's location by address.
- Change the map overlay.
- Draw an outline of the building or group of buildings to illustrate and locate them. You can activate add-ons for extracting geodata from the map.

You can skip ahead to **Supply Technologies**, where energy carriers will be defined automatically.

## Supply technologies
Add a technology from the database.

Select a large solar field, since the price per kW will be lower. Once selected, information on the source is available.

Click **Yes** to add the energy carriers.

You can edit all of the parameters of a technology from the database. Check **Primary Mode** — every technology needs at least one primary mode. Multi-mode technologies can, for example, represent a reversible heat pump.

The efficiency of this default solar PV is 18%, relative to the solar irradiance caught by the panels. Leave the sizing as **Optimize**, so Sympheny fixes the optimal size to reach the objective, usually minimum ROI.

Unit commitment parameters are advanced parameters used for specific industrial equipment. You can edit parameters related to investment cost, maintenance, and embedded emissions.

Now that the technologies and associated energy carriers are created, head back to the **Energy Carriers** step.

## Energy carriers
You can edit or create more energy carriers to distinguish all of the different energy flows. This example uses the defaults.

## Energy demands
In all sections, a map view represents hubs and networks. Close it to view the technology diagram below. This diagram is dynamic — for now, only the solar panels appear.

Create a new **Energy Demand**. Select the energy carrier; you can edit the name. Try generating a profile for a data center using the available profiles.

Even if there is no profile called "datacenter," you can explore the available building profiles and see if Industry Warehouse fits the project's needs.

In this case, you have the annual electricity consumption, and can specify 1.2 GWh/year.

Information on the source of the profile is displayed.

Save and close to add the profile.

This button lets you view the profile you generated.

This is the resulting hourly profile. You can see large drops in consumption over weekends. You can download and edit the profile and re-upload it. You can also use the Sympheny peak shaving function.

To upload a custom profile, edit the energy demand.

Select upload profile. The info button describes the format, and downloading the profile also reveals the format template.

An hourly profile is an XLSX file with 8760 values in kW.

The uploaded profile better represents the electricity demand of a data center.

## On-site resources
In this section you generate the hourly profile of the irradiance hitting the solar panels.

Select the energy carrier; you can edit the name. Set 10,000 m² of available solar-panel surface and generate the profile from a location–inclination–orientation combination in the database. This is the *maximum* available surface — Sympheny chooses the optimal size relative to the electricity consumption, price, and resale value. You can also generate the hourly solar profile for any location–orientation–inclination combination using the **Add from map** workflow.

This example uses Geneva, roof-mounted, at 15° facing east.

This is the resulting hourly solar-irradiance profile, per m².

The energy diagram updates to include the on-site resource.

## Imports and exports
You still need to add the electric grid. Otherwise there is a deficit of electricity at night, and a daytime surplus may limit the size of the solar field.

Add the option to purchase electricity from the grid and set the electricity price.

Adding a capacity price and a CO₂-emissions value per kWh is optional but recommended.

Also add an export, with a revenue of 0.08 EUR/kWh.


## Review the energy diagram
Before executing the model, review the energy diagram. Confirm that every technology and link is fully connected, with no dead ends.

## Execute the scenario
Give the execution a name. The **Updated** indicator means the scenario has changed since it was last executed. By default Sympheny generates two solutions: Solution 1 minimizes total cost (operating + maintenance + annualized investment costs); Solution 2 minimizes CO₂ emissions.

Execution takes a few seconds. Open the interactive dashboard to review the results. You can also explore the input file (all parameters) and the output files (all results) — both are Excel files.

## Review the results
First, select **All stages** to view the Pareto front.

The Pareto front shows Solutions 1 and 2, with the total cost and emissions of each.

Select Solution 1, the stage, and the hub to view the detailed solution.

The Sankey diagram shows every energy flow in kWh. As with all diagrams, you can filter its content and download the data and images. A Sankey is also available for each month.

The energy diagram shows the capacity of each technology — here the optimal PV field is 1,760 kW of electric output — along with each technology's investment. Use the navigation bar at the top to return to the scenarios.

## Evaluate a 100 kWh battery
Copy the scenario you just created to add one with a battery.


In the new scenario every parameter is preserved, so you only need to add a battery.


Set the battery to **Must install** and specify a capacity of 100 kWh. Sympheny respects this constraint while optimizing the battery's operation and the size of the solar field.

Storage technologies expose a different set of parameters.

Once the battery is added, execute the scenario with the same objectives and view the results.

Under **All stages**, the cost and emissions are slightly better with the battery.

In the detailed results you can see the battery's hourly state of charge — this view is zoomed in on a single month.

---
# How-to guides
The Sympheny web app organizes energy planning into a structured workflow. Projects are broken down into analyses, and each analysis is further divided into scenarios.

## Hierarchical structure
This hierarchical structure mirrors typical energy planning workflows:
- **[Projects](managing-projects.md)** represent individual sites where you develop an optimal energy supply system.
- **[Analyses](managing-analyses.md)** consist of multiple iterations that progressively refine the energy supply system design for a specific site.
- **[Scenarios](modeling-scenarios/index.md)** let you explore different potential futures, such as energy price conditions or demand assumptions, or compare alternative design variants.
## Executing scenarios
During optimization, you can run a single scenario or execute all scenarios within an analysis at once. On the [Execution](executing-scenarios.md) page, you can choose from a variety of objective functions and execution parameters.
## Scenario results
After execution, you can access the input data and output files behind the optimal design and operation of your energy systems. An interactive dashboard also provides result visualizations for all scenarios. See [Scenario Results](scenario-results.md) for details.
## Database Center
The [Database Center](database-center/index.md) gives you an overview of all your data. It also lets you download or upload databases from other sources directly to the web app.
## EnyTool
[EnyTool](enytool/index.md) connects the web app to partner tools and datasets across the Sympheny ecosystem, including synthetic demand modelling with the [RAMP tool suite](enytool/ramp-tool-suite.md).
## EnyFlow
[EnyFlow](enyflow/index.md) is a Jupyter Notebook environment for building custom workflows, analyses, and visualizations on top of the Sympheny API.
---
# Managing projects
This guide shows you how to create, edit, copy, share, delete, and manage your projects in Sympheny.

## Navigate your projects page
When you log in, you land on your Projects page. This page shows a geolocation view of all your existing projects. A sample project named "Example Case" is available to demonstrate project functionality.
## Create a new project
1. Click the **Add project**  button.
2. Assign a name and geolocation for your project.
3. Click **Save**.
## Manage existing projects

Most project management actions start by clicking the three dots on the project you want to work with. This opens a menu with the following options:
- **Edit project**
- **Copy project**
- **Delete project**
- **Send project copy**
- **Reinitialise project**
- **Share project**
## Send a project copy
To send a project copy to another Sympheny user:
1. Choose **Send project copy** from the menu.
2. Enter the recipient's email address.
3. Click **Send** to deliver the project copy.
!!! note
The recipient receives a copy of the project's current state. Any changes you make afterward are not reflected in their copy.
## Share a project
Sharing grants other users access to your Sympheny projects. To share a project:
1. Choose **Share project** from the menu.
2. Choose **Add secondary owner**. You can add multiple users.
3. For each user, set an access level: **Read-only** (view the project but not modify it) or **Edit** (full control).
4. A project locks after a user starts working in it. It unlocks automatically after 10 minutes of inactivity, or you can click the unlock button next to the project's name on the Analysis page.

## Reinitialize a project
This option is available only for the example projects provided by Sympheny. Click such a project, then select **Reinitialise project** to restore it to its original state.
---
# Managing analyses
The Analyses page is where you manage your analyses and their associated scenarios within a project.

## Create a new analysis
1. Click the **Add analysis**  button.
2. Assign a name.
3. Click **Add**.
## Manage an existing analysis
- You can rename, copy, or delete existing analyses as needed.
- As with analyses, you create a new scenario by clicking the **Add scenario**  button and assigning a name.
- You can rename, copy, or delete existing scenarios within an analysis.
---
# Modeling scenarios

## Modeling steps
Modeling a scenario is a guided process. The scenario page walks you through a series of tabs, each dedicated to a specific element of your model, so you can build your scenario step by step:
1. [General](general-step.md)
2. [Hubs](hubs-step.md)
3. [Energy carriers](energy-carriers-step.md)
4. [Energy demands](energy-demands-step.md)
5. [On-site resources](on-site-resources-step.md)
6. [Imports & exports](imports-exports-step.md)
7. [Conversion technologies](conversion-technology-step.md)
8. [Storage technologies](storage-technologies-step.md)
9. [Network links](network-links-step.md)
## GIS map

Use the interactive GIS map to explore the hub network. After you select the hubs that interest you, the map shows GIS information for every hub, along with the buildings connected to it.
## Energy hub diagram

The energy hub diagram of your potential system appears at the bottom of each tab. It's empty when you start a new project, and updates automatically as you add components to your model. Use the drop-down menu at the top to move between the energy hub diagrams for each of your scenario's hubs and stages.
The colors of the technologies in the energy hub diagram are determined by the primary output energy carrier of the technology. You can define these colors in the [Energy carriers step](energy-carriers-step.md).
!!! tip
The direction of the arrows in the energy hub diagram matches the direction of energy flows. A reversed energy demand (for example, a cooling demand) is shown as an arrow flowing away from the box representing that demand. Storages are the only technologies with bidirectional flows.
---
# General step
## Currency
The currency shown in cost parameters and results. When you select a currency other than CHF, an [exchange rate](https://exchangeratesapi.io/) from CHF is applied to all economic data in the technology databases. All economic data in the databases, including user-defined data, is stored in CHF. For more information, see [General parameters](../../concepts/parameters/general.md).

Economic data already included in the scenario is **not** converted; only the economic data inside databases is converted.
## Stages
Include the scenario's stages, along with their durations and economic parameters. For more information, see [Stages](../../concepts/stages.md).

---
# Hubs step
In this step, you specify a list of the hubs that make up your site. Each hub must have a unique name, which identifies it in subsequent steps and in the results. For more information, see [Hubs](../../concepts/hubs.md).

## Add a hub with the GIS add-on
[Watch: adding a hub with the GIS add-on](https://www.youtube.com/watch?v=w-XKBjAswL0&t=28s&ab_channel=UrbanSympheny)
---
# Energy carriers step
This step lets you choose the types of energy your model considers. Each energy carrier needs a name, type, subtype, and color. For more information, see [Energy carriers](../../concepts/energy-carriers.md).

!!! note
Choosing the type and subtype doesn't affect any data directly — it only determines the default color used to represent that energy carrier in your model's visuals.
You can always return to this step to add more energy carriers later. If you try to add, for example, a supply technology that isn't in your list of energy carriers, Sympheny asks if you'd like to add the missing energy carrier to the list.
---
# Energy demands step
In this step, you define all energy demands included in your scenario. Each demand must have a unique name and an energy carrier, and must be linked to at least one hub and one stage. For more information, see [Energy demands](../../concepts/energy-demands.md).

## Add new
You have several options for creating energy demand profiles:
- **Generate Profile**: automatically generate a profile based on building use types, standard norms, and your organization's internal database.
- **Upload Profile**: upload a custom profile file directly.
- **Select Saved**: choose an existing profile from your personal database.

!!! tip
Integrate via the API to upload or modify multiple profiles in a single operation. If your license includes API access, contact support to get a template, code samples, and guidance.
## Generate profile
Generate standard hourly energy demand profiles for buildings of different types. After clicking **Generate Profile**, a dialog opens where you specify the parameters of the profile. The process has three steps:

1. **Database**: select the database to use — either Sympheny's database or your organization's database. For more information on databases, see [Database Center](../database-center/index.md).
2. **Profile type**: select a combination of demand type and building use to define the shape of the profile. This profile is normalized, meaning its total sum is 1 kWh/year.

3. **Energy use**: the normalized profile is multiplied by the annual energy demand in kWh/year. Enter this value directly as **Total Annual Demand**, or select a **Building Age or Standard** to get an estimated **Energy Intensity** in kWh/year/m², and specify the **Energy Reference Area** in m².

4. **Summary**: review a statistical summary of the demand profile, including the source of the data used to generate it. For more detail on how profiles are generated and a list of available profiles, see the [demand profiles methodology](../../concepts/demand-profiles-methodology.md).
## Upload profile
You can specify an energy demand profile in an XLSX file and upload it. The profile must be in kWh, for every hour of the year from January 1 to December 31. The maximum file size is 2 MB. The file must contain a single sheet with 2 columns, no header, and exactly 8760 rows. Replace any empty values with 0. The 1st column contains the index (incrementing integers from 1 to 8760); the 2nd column contains the hourly energy demand values in kWh.
Download and edit this template (or any Sympheny demand profile) to make sure your format matches: [template profile XLSX](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/example-energy-demand-profile.xlsx)

!!! tip
Make sure your custom profile matches a Sympheny year. A Sympheny year starts at 00:00 on a Monday, January 1, and ends at 23:00 on December 31. 2018 is a good reference year, since it starts on a Monday and isn't a leap year.
## Select saved
When you upload or generate a profile, you can save it for future use. Use **Select Saved** to load an energy profile you saved previously.
## Visualization of demand data
Once a demand is added and connected, a box representing it appears on the energy hub diagram. You can download the added demand profile as an Excel file. For each energy demand in the scenario, you can visualize hourly energy demand profiles and load duration curves.


---
# On-site resources step

**On-site resources** are renewable resources with intermittent (temporally varying) availability. In Sympheny, you can quickly generate **solar irradiance** and **wind** profiles of 8760 timesteps using different methods.
**On-site resources** are functionally identical to **imports**, but with fewer available parameters. For resources with constant availability, like geothermal energy or air used in a heat pump, create an **import** with a fixed **Maximum Capacity (kW)** and no **Energy Price (CHF/kWh)**, instead of an on-site resource.
Energy produced from on-site resources can be curtailed. **Curtailment** occurs when the available on-site resource leads to higher energy production than required by demand and export (see diagram below) at any given time.

## Creating on-site resources
Sympheny offers several workflows to create on-site resources:
- **Add new > Generate profile > Available Resource Area (m²)**: generate a solar profile using the Sympheny database — easy for creating profiles across multiple hubs.
- **Add new > Upload profile > Available Peak Load (kWp)**: upload your own normalized profile — easy for creating profiles across multiple hubs.
- **Add new > Upload profile > Generic Availability (kWh/h)**: upload your own profile.
- **Add from map > Solar Resource > Optimize slope and azimuth**: explore the optimal orientation of solar panels relative to the demand profile.
- **Add from map > Solar Resource > Custom slope and azimuth**: accurately estimate the solar profile for a specific location, surface, and orientation.
- **Add from map > Solar Resource > Weighted sum aggregation**: generate an average solar profile from multiple surfaces on the map.
- **Add from map > Wind Resource**: generate a wind power production profile using terrain parameters.
## Add new
Add a new on-site resource to your scenario. This resource is free and can be used whenever it's available. In the toolbox, select an **Energy Carrier** matching the resource type. A **Name** is generated based on the energy carrier and existing profiles, and can be edited. The **Hub** and **Stage** where the resource is available are selected automatically and can be edited.

## Available Resource Area (m²)
When sizing a new solar PV field, the only available information may be the **Available Resource Area (m²)** and location. Select **Generate Profile**, click **Generate profile**, select the **Database**, **Location**, **Type**, and **Slope**, then click **Next**. Sympheny generates a solar irradiance profile for a 1 m² surface area.

The **Available Resource Area (m²)** is the maximum available irradiance profile. The optimization result determines the optimal size of solar technology to install. Since curtailment may occur, the installed capacity isn't always equal to the maximal operational capacity.

## Available Peak Load (kWp)
When the hourly profile is measured or simulated with a third-party tool, use the **Upload profile** function to bring it into Sympheny. In this workflow, the maximum value of the uploaded profile should equal 1 kW. Total energy available depends on the **Available Peak Load (kWp)**. The profile can be the output of the technology (for example, PV production or wind turbine production), provided the technology's efficiency is 100%. In that case, the kW-peak (kWp) refers to the maximum capacity of the technology that uses this on-site resource.
!!! tip
To upload a profile, select or drag and drop an XLSX file with the correct format. The file must contain a single sheet with 2 columns, no header, and exactly 8760 rows. The 1st column must contain incrementing numbers from 1 to 8760. The 2nd column must contain the hourly profile values, for every hour of the year from 00:00 on January 1 to 23:00 on December 31. Make sure the units are correct. The maximum file size is 2 MB. Uploaded profiles can be saved for later use. [Template profile XLSX](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/example-energy-demand-profile.xlsx)
For example, the hourly resource profile of **Windpower** indicates the availability of wind-sourced electricity in kW per unit of peak load (kW/kWp). In this case, a conversion efficiency is already factored into the hourly resource profile, and the conversion efficiency of the wind turbine technology should be 100%.

The use of the on-site resource is determined by the optimal capacity of the technologies that use that resource.

## Generic Availability (kWh/h)
This workflow is more flexible than the previous two. For example, use it to create an intermittent industrial waste heat profile. In this workflow, the uploaded profile should be in kWh for each hour of the year.

!!! tip
You can download irradiation profiles from external databases like [PVGIS](https://re.jrc.ec.europa.eu/pvg_tools/en/#MR) — just make sure the units are consistent with the Sympheny workflow.
## Add from map
Add a new on-site resource to your scenario from the map.

## Solar Resource > Optimize slope and azimuth
Click **Select Surface from Map** to select a surface, like the outline of a hub, and get the surface area (m²) and geographic location of the geometry. The optimizer defines the optimal **Slope** and **Azimuth**.

## Solar Resource > Custom slope and azimuth
Click **Select Surface from Map** to select a surface, like the outline of a hub, and get the surface area (m²) and geographic location of the geometry. Specify the **Slope** and **Azimuth**.
Possible settings:
- **Slope 0°**: flat
- **Slope 90°**: vertical
- **Azimuth 0°**: south
- **Azimuth -90°**: east
- **Azimuth 90°**: west
- **Azimuth 180° / -180°**: north

## Solar Resource > Weighted sum aggregation
Calculate an aggregated solar profile, normalized in kW/m², for all selected surfaces. The calculation accounts for the slope and azimuth of each roof element. The generated profiles are aggregated using a weighted average for each surface, with surface areas serving as weights.
## Wind Resource
Set **Surface (m²)**, **Terrain Type**, **Roughness Length (m)**, and **Height (m)** to generate a wind resource profile based on those parameters.
- **Surface (m²)** should be the number of wind turbines multiplied by the total swept area per turbine.
- **Terrain Type** describes the surrounding landscape.
- **Roughness Length (m)** is based on the terrain type.
- **Height (m)** is the height of the middle of the turbine.
The maximum theoretical efficiency of a wind turbine technology using this resource profile (in kWh-wind) is 59.3%. For more information, see [Wind profile power law](https://en.wikipedia.org/wiki/Wind_profile_power_law).

---
# Imports & exports step
In this step, you define the energy your scenario can purchase from outside the
system (imports, such as grid electricity or natural gas) and the energy it can
sell or send out (exports). For background, see the
[Imports](../../concepts/imports.md) and [Exports](../../concepts/exports.md)
concept pages.
!!! info "Coming soon"
A step-by-step guide for this tab is in preparation.
---
# Conversion technology step
There are two ways to add conversion technology candidates to your scenario: **Add from Database** and **Create Custom**. For more information, see [Conversion technologies](../../concepts/conversion-technologies.md).

## Add from Database
In the dialog that appears, follow these steps:
1. Select the database to load your data from. In most cases, the options are:
1. Sympheny Global database
2. Organization database (linked to your organization)
3. My User database (linked to your personal account)
2. Choose a technology category.
3. Select the specific technology you want to load into your scenario. Clicking a technology displays a summary of its key parameters (see figure below).

4. Click **Select**. A window opens where you can view and further edit the technology model, with parameters from the database pre-filled into the corresponding fields.
5. Assign the technology to one or more hubs and stages in the **Optimization Options** section. This defines where and when the technology can be installed. Click **Add** at the bottom of the dialog to add the technology candidate to your scenario — it appears in the energy hub diagram at the bottom of the page.

!!! tip
You can also build a customized technology database for the Sympheny web app. See [Database Center](../database-center/index.md).
## Create Custom
Clicking **Create Custom** opens a dialog where you assign parameters for the specific technology. It's the same window as step 4 of **Add from Database**, but the fields aren't pre-filled with any values.
---
# Storage technologies step
In this step, you define the storage technology candidates the optimizer can
install — systems that store an energy carrier for later use, such as batteries
or thermal storage. For background, see the
[Storage technologies](../../concepts/storage-technologies.md) concept page.
!!! info "Coming soon"
A step-by-step guide for this tab is in preparation.
---
# Network links step
In this step, you define the network link candidates that let energy flow
between the hubs of your scenario — for example, a district heating pipe or an
electrical connection. For background, see the
[Network technologies](../../concepts/network-technologies.md) and
[Intra-hub networks](../../concepts/intra-hub-networks.md) concept pages.
!!! info "Coming soon"
A step-by-step guide for this tab is in preparation.
---
# Executing scenarios
Once a scenario is fully [modeled](modeling-scenarios/index.md), you execute it
to run the optimization and produce results, which are covered in
[Scenario results](scenario-results.md).
!!! info "Coming soon"
A step-by-step guide for executing scenarios is in preparation.
---
# Scenario results
After [executing a scenario](executing-scenarios.md), you can explore the
optimization results in the results dashboard and download them as files. The
meaning of each output value is described in
[Output parameters](../concepts/parameters/output-parameters.md).
!!! info "Coming soon"
A step-by-step guide for the results dashboard is in preparation.
---
# Database Center
The Database Center gives you an overview of all your data. Saved data can be called from the scenario editor across all scenarios. Through the Database Center, you can also [download databases](download-databases.md) or [upload databases](upload-databases.md) to the web app from other sources.
## Overview of the databases
In the Sympheny Database Center (the database icon at the bottom left of your screen), you have access to up to two databases:

- **My User Database**: your own private database, available to you across all your scenarios. You can maintain this database directly.
- **Organization Database**: the database specific to your organization, named after your organization. Only accounts from your organization can access this data — see the roles and permissions table below.
## Roles & permissions
The account type and license determine which rights are available to which users.
| Access | Organization Database | My User Database |
| --- | --- | --- |
| Download | Organization users | Individual user |
| Upload / Delete | Organization admin users | Individual user |
---
# Upload databases
## Direct upload from Scenario Editor
### Conversion and storage technologies
While editing a scenario, you can upload single items to My User Database directly from the scenario editor (in Setup) by checking **Save the technology for future use?**.

### Energy demand profiles
This process is streamlined:
1. In the [Excel template](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/energy-demands-user-db-template.xlsx), enter profile names in Sheet 1.
2. In Sheet 2, add the corresponding profile under the columns with the same column names as in Sheet 1.
#### Use demand profiles from My User Database
To use the data, click **Select Saved** when adding a new demand in step 4.

## Upload from Database Center
To upload data to your databases, first prepare your data in the correct format. The parameters available depend on the type of data you want to upload. The databases you're allowed to modify depend on your [roles and permissions](index.md#roles-permissions) within your organization.
### Conversion and storage technologies
1. Select the database (My User Database or Organization Database) you want to add or replace data for.
2. Select the type of data (Energy Demands, On-site Resources, or a category of Technology).
3. Drop or select your file, then click upload.
By default, uploaded data is added to the existing database. To add new data without replacing the current content, keep **Append existing data** checked. To replace the entire database with the new data, uncheck **Append existing data** — this overwrites the existing database entirely.

### Energy carriers naming conventions
Energy carriers (EC) must follow the exact nomenclature given in the table below.
After adding a specific technology from the scenario editor, you can change the energy carriers to any other EC available in that scenario.
| Energy carrier name | Nomenclature for templates |
| --- | --- |
| Cooling -20 - -10°C | COOLING_1 |
| Cooling -10 - 0°C | COOLING_2 |
| Cooling 0 - 10°C | COOLING_3 |
| Cooling 10 - 20°C | COOLING_4 |
| Ice | ICE |
| Electricity | ELECTRICITY |
| Electricity Renewable | ELECTRICITY_RENEWABLE |
| Biogas | BIOGAS |
| Gas | GAS |
| Hydrogen | HYDROGEN |
| Hydrogen Pressurized | HYDROGEN_PRESSURIZED |
| Oil | OIL |
| Coal | COAL |
| Wood Chips | WOOD_CHIPS |
| Wood Pellets | WOOD_PELLETS |
| Heat 0-10 °C | HEAT_1 |
| Heat 10-20 °C | HEAT_2 |
| Heat 20-30 °C | HEAT_3 |
| Heat 30-40 °C | HEAT_4 |
| Heat 40-50 °C | HEAT_5 |
| Heat 50-60 °C | HEAT_6 |
| Heat 60-70 °C | HEAT_7 |
| Heat 70-80 °C | HEAT_8 |
| Heat 80-90 °C | HEAT_9 |
| Heat Ambient | HEAT_AMBIENT |
| Steam Low Pressure | STEAM_LOW_PRESSURE |
| Biomass | BIOMASS |
| Geothermal | GEOTHERMAL |
| Hydro | HYDRO |
| Process Waste Heat | PROCESS_WASTE_HEAT |
| Solar Facade | SOLAR_FACADE |
| Solar Parapet | SOLAR_PARAPET |
| Solar Roof | SOLAR_ROOF |
| Tidal | TIDAL |
| Wind | WIND |
### Energy demands: usage and naming convention
To upload energy demand profiles, fill in an Excel file with two sheets. There are currently two cases, depending on whether you're uploading to My User Database (see "Use demand profiles from My User Database" above) or to your Organization Database.
#### Upload to Organization Database
This method is preferred for batch upload.
1. In the [Excel template](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/energy-demands-org-db-template.xlsx), enter information about each profile in Sheet 1: Building Use, Demand Type, Building Age or Standard, and Specific Energy Demand. Follow the [naming convention](#naming-convention) below. The Specific Energy Demand (kWh/m²/a) for each combination of Building Use, Demand Type, and Building Age or Standard lets you scale the profiles to each scenario's requirements via the scenario editor.
2. In Sheet 2, add the corresponding profiles under the columns with the same column names as in Sheet 1, normalized to 1 kWh. Make sure the naming in row 1 of Sheet 2 matches the naming in column A of Sheet 1.
##### Naming convention
Upload your demands under one of the four demand types listed below, using this nomenclature:
| Demand names | Demand types |
| --- | --- |
| Electricity | ELECTRICITY |
| Space Heating | SPACE_HEATING |
| Hot Water | HOT_WATER |
| Cooling | COOLING |
Building use type must be one of the following:
| Building use types |
| --- |
| RESIDENCE_MFH |
| RESIDENCE_SFH |
| ADMINISTRATION |
| OFFICES |
| SCHOOLS |
| RETAIL |
| RESTAURANT |
| ASSEMBLY |
| HOSPITALS |
| INDUSTRY |
| WAREHOUSE |
| SPORTS_CENTER |
| INDOOR_POOL |
| HOTEL |
Building age or standard must use the following nomenclature:
| Building age or standard |
| --- |
| OTHERS |
| SIA_2024_EXISTING_MFH |
| SIA_2024_STANDARD_MFH |
| SIA_2024_TARGET_MFH |
| SIA_2024_EXISTING_SFH |
| SIA_2024_STANDARD_SFH |
| SIA_2024_TARGET_SFH |
| SIA_2024_STANDARD_INDOOR_SWIMMING_POOL |
| SIA_2024_TARGET_INDOOR_SWIMMING_POOL |
| SIA_2024_EXISTING_SINGLE_GROUP_OFFICE |
| SIA_2024_STANDARD_SINGLE_GROUP_OFFICE |
| SIA_2024_TARGET_SINGLE_GROUP_OFFICE |
| SIA_2024_EXISTING_OPEN_PLAN_OFFICE |
| SIA_2024_STANDARD_OPEN_PLAN_OFFICE |
| SIA_2024_TARGET_OPEN_PLAN_OFFICE |
| SIA_2024_EXISTING_MEETING_ROOM |
| SIA_2024_STANDARD_MEETING_ROOM |
| SIA_2024_TARGET_MEETING_ROOM |
| SIA_2024_EXISTING_COUNTER_HALL |
| SIA_2024_STANDARD_COUNTER_HALL |
| SIA_2024_TARGET_COUNTER_HALL |
| SIA_2024_EXISTING_CLASS_ROOM |
| SIA_2024_STANDARD_CLASS_ROOM |
| SIA_2024_TARGET_CLASS_ROOM |
| SIA_2024_EXISTING_TEACHERS_LOUNGE |
| SIA_2024_STANDARD_TEACHERS_LOUNGE |
| SIA_2024_TARGET_TEACHERS_LOUNGE |
| SIA_2024_EXISTING_LIBRARY |
| SIA_2024_STANDARD_LIBRARY |
| SIA_2024_TARGET_LIBRARY |
| SIA_2024_EXISTING_AUDITORIUM |
| SIA_2024_STANDARD_AUDITORIUM |
| SIA_2024_TARGET_AUDITORIUM |
| SIA_2024_EXISTING_SCHOOL_SUBJECT_ROOM |
| SIA_2024_STANDARD_SCHOOL_SUBJECT_ROOM |
| SIA_2024_TARGET_SCHOOL_SUBJECT_ROOM |
| SIA_2024_EXISTING_FOOD_SALE_STORE |
| SIA_2024_STANDARD_FOOD_SALE_STORE |
| SIA_2024_TARGET_FOOD_SALE_STORE |
| SIA_2024_EXISTING_SPECIALTY_STORE |
| SIA_2024_STANDARD_SPECIALTY_STORE |
| SIA_2024_TARGET_SPECIALTY_STORE |
| SIA_2024_EXISTING_SALES_FURNITURE_DIY_GARDEN |
| SIA_2024_STANDARD_SALES_FURNITURE_DIY_GARDEN |
| SIA_2024_TARGET_SALES_FURNITURE_DIY_GARDEN |
| SIA_2024_EXISTING_PATIENT_ROOM |
| SIA_2024_STANDARD_PATIENT_ROOM |
| SIA_2024_TARGET_PATIENT_ROOM |
| SIA_2024_EXISTING_WARD_ROOM |
| SIA_2024_STANDARD_WARD_ROOM |
| SIA_2024_TARGET_WARD_ROOM |
| SIA_2024_EXISTING_TREATMENT_ROOM |
| SIA_2024_STANDARD_TREATMENT_ROOM |
| SIA_2024_TARGET_TREATMENT_ROOM |
| MINERGIE_NEW_CONSTRUCTION |
| MINERGIE_P_NEW_CONSTRUCTION |
| MINERGIE_P_RENOVATION |
| MINERGIE_RENOVATION |
| SIA_2024_EXISTING_GYMNASIUM |
| SIA_2024_STANDARD_GYMNASIUM |
| SIA_2024_TARGET_GYMNASIUM |
| SIA_2024_EXISTING_FITNESS_ROOM |
| SIA_2024_STANDARD_FITNESS_ROOM |
| SIA_2024_TARGET_FITNESS_ROOM |
| SIA_2024_EXISTING_INDOOR_SWIMMING_POOL |
| SIA_2024_EXISTING_HOTEL_ROOM |
| SIA_2024_STANDARD_HOTEL_ROOM |
| SIA_2024_TARGET_HOTEL_ROOM |
| SIA_2024_EXISTING_WAREHOUSE |
| SIA_2024_STANDARD_WAREHOUSE |
| SIA_2024_TARGET_WAREHOUSE |
| SIA_2024_EXISTING_LOBBY |
| SIA_2024_STANDARD_LOBBY |
| SIA_2024_TARGET_LOBBY |
| AGE_1970_1980 |
| AGE_1980_1995 |
| AGE_1995_2005 |
| AGE_2005_2015 |
| AGE_UNDER_1970 |
| AGE_OVER_2015 |
| MINERGIE_A |
#### Use demand profiles from My User Database
To use your profile, click **Generate Profile** when adding a new demand in step 4, then click your organization database (in this example, "Sympheny database"):

### Currency
The cost database is maintained in CHF.
#### Through the scenario editor
When you save a technology to the database while working in another currency (for example, EUR), the data is converted to CHF using the exchange rate in the scenario. When that database entry is used again in the future, it's converted from CHF back to the current EUR value using the exchange rate of the new scenario.
For example, working with EUR and an exchange rate of 1.1 (1 CHF = 1.1 EUR):
- You save a technology from the scenario editor with a value of 1,100 EUR.
- In the database, this technology is saved as 1,100 EUR × (1 / 1.1) CHF/EUR = 1,000 CHF.
- In a later scenario with an exchange rate of 1.2 (1 CHF = 1.2 EUR), this technology, when selected from the database, is entered as 1,000 CHF × 1.2 = 1,200 EUR.
#### Through the upload from Database Center
When you upload data through the Excel upload, the data is in CHF.
## Templates
Download the templates for the upload here:
### Conversion technologies
[Conversion technologies template (XLSX)](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/conversion-technologies-template.xlsx)
Last updated: 2024-11-04
### Storage technologies
[Storage technologies template (XLSX)](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/storage-technologies-template.xlsx)
Last updated: 2024-11-04
### Network technologies
[Network technologies template (XLSX)](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/network-technologies-template.xlsx)
Last updated: 2024-11-04
### Energy demands
#### My User Database
[Energy demands template — My User Database (XLSX)](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/energy-demands-user-db-template.xlsx)
Last updated: 2024-11-04
#### Organization Database
[Energy demands template — Organization Database (XLSX)](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/energy-demands-org-db-template.xlsx)
Last updated: 2024-11-04
---
# Download databases
Downloading your database is useful when you want an overview of all your data, or need to do some post-processing or adjusting.
## Steps
To download your data:
1. Navigate to the database and the type of data you want to download (for example, Energy Demands, On-site Resources, or a category of Technologies).
2. On the right side of your screen, click the **Download** button.
3. Scroll to the bottom of the page and click the download arrow.
4. Open the downloaded file in Excel.
!!! tip
The format of the downloaded Excel file matches the format required for uploading databases.


---
# EnyTool
Sympheny EnyTool is a software package that provides direct access to services and data from the Sympheny ecosystem. It connects with tools and datasets developed by:
- Sympheny partners
- Research projects
- Open-source tools and public data platforms
This integration lets planners, researchers, and decision-makers access consistent, high-quality data and services for building, district, and city-scale energy planning.
EnyTool acts as a gateway, linking simulation, optimization, and data layers across partners such as GeoImpact, Esri, Gilytics, Empa, Planeto, Ramp, JRC Solar, and [geo.admin.ch](https://www.geo.admin.ch/) (GWR).
## Ecosystem overview
| Partner / source | Type | Main contribution / service | Example use in EnyTool | Website |
| --- | --- | --- | --- | --- |
| Esri | Commercial partner | GIS and spatial analytics (ArcGIS platform) | Mapping, geospatial data integration | [esri.com](https://www.esri.com/) |
| GeoImpact | Partner / data provider | Swiss building energy & geospatial database | Access building data, retrofit potential, local energy insights | [geoimpact.ch](https://www.geoimpact.ch/) |
| Gilytics | Partner / infrastructure planning | Cloud GIS for infrastructure routing & siting | Network routing, cable/pipe siting in energy scenarios | [gilytics.com](https://gilytics.com/) |
| Empa | R&D partner | Research & development in digital twins, energy systems | Integration of R&D data models (for example, Digicities, GOES) | [empa.ch](https://www.empa.ch/) |
| Planeto SA | Partner / software platform | District heating & cooling network design | Scenario generation for thermal networks | [planeto-energy.ch](https://planeto-energy.ch/) |
| Ramp | Open-source tool | Synthetic multi-energy demand generation | Generate demand profiles where measured data is missing | [rampdemand.org](https://rampdemand.org/) |
| Ramp Mobility | Open-source extension | Mobility & EV demand modelling | Integrate EV loads and transport demand | [rampdemand.org/mobility](https://rampdemand.org/) |
| JRC Solar (PVGIS) | Open data / research | Solar irradiation & PV potential data | Assess renewable generation potential | [joint-research-centre.ec.europa.eu](https://joint-research-centre.ec.europa.eu/) |
| GeoAdmin (GWR data) | Open government data | Swiss federal geo & building data | Geospatial base data for Swiss projects | [data.geo.admin.ch](https://data.geo.admin.ch/) |
## EnyTool resource architecture
EnyTool integrates external services through standardized API connections and data connectors. These resources fall into three categories:
### Data resources
- **GeoImpact**: building energy and geospatial data (Switzerland)
- **GeoAdmin / GWR**: official geodata, cadastral and building registers
- **JRC Solar**: European solar potential datasets
### Modelling & simulation tools
- **Ramp / Ramp Mobility**: energy and mobility demand generation. See [RAMP tool suite](ramp-tool-suite.md).
- **Planeto**: district heating & cooling network simulation
- **Gilytics**: energy infrastructure routing and optimization
### Research & GIS frameworks
- **Esri (ArcGIS)**: mapping and geospatial layer integration
- **Empa**: research collaboration (for example, Digicities, GOES) for digital twin data exchange
## Use cases
| Use case | Involved services | Description |
| --- | --- | --- |
| Building energy retrofit planning | GeoImpact, GeoAdmin, Ramp | Combine building data with synthetic energy demand to identify retrofit potential |
| District heating network design | Planeto, GeoImpact, GeoAdmin | Use building data and network simulation to optimize district systems |
| Mobility integration in energy planning | Ramp Mobility, Gilytics | Model EV charging demand and assess grid or infrastructure impact |
| Solar potential assessment | JRC Solar, Esri | Use PVGIS data with spatial layers for renewable potential mapping |
| Digital twin research integration | Empa (Digicities, GOES) | Apply Empa-developed semantic and digital twin data models |
---
# RAMP tool suite
The RAMP tool suite specializes in synthetic demand modelling for cases where measured datasets are unavailable or incomplete. It generates stochastic load profiles (domestic, hot water, EV, and more).
**RAMP Mobility** is a dedicated sister repository focused on electric mobility demand modelling. It provides demand profiles for EV fleets and integrates them into energy system optimization. The complete RAMP Mobility documentation is available on [GitHub](https://github.com/RAMP-project/RAMP-mobility/blob/master/docs/getting_started.md).
## In EnyTool
- RAMP (base) generates demand profiles for buildings, districts, and micro-grids within EnyTool workflows.
- RAMP Mobility is integrated: you can model EV-based loads and mobility-related demand growth, and include them in scenario planning or network sizing.
Key benefits:
- Enables richer modelling for sites without measured loads.
- Supports future-proofing by including EV loads and mobility transitions.
- Plugs into district/building energy models in EnyTool to assess flexibility, grid impact, and network sizing.
## Generate an electric mobility demand profile
To generate an electric mobility demand profile, you configure the following parameters:
- **Total Users**: the number of EVs to simulate.
- **Charging Station Capacity [kW]**: the installed capacity of available chargers. 11 kW or 22 kW are standard values for domestic charging stations; 66 kW or 120 kW may be available at public (fast-charging) stations.
- **Charging Station Probability [%]**: the probability that users charge their car at that type of charging station.
You must create at least two types of charging stations.
1. Select **Ramp Mobility**.

2. Add parameters. The charging station probabilities must sum to 100%.

3. After a couple of minutes, three profiles are generated.

Before clicking **Submit**, three profiles are available to download:
- The **mobility profile** (W) is the energy used by all EVs as they drive.
- The **usage profile** (number of EVs) is the number of EVs driving at any given time.
- The **charging profile** (kWh) is the electricity provided by all charging stations to the EV fleet.
Click **Submit** to add the charging profile as a demand.
## Reference
The RAMP-mobility tool was developed in collaboration with:
- A. Mangipinto, F. Lombardi, F. Sanvito, M. Pavičević, S. Quoilin, E. Colombo, "Impact of mass-scale deployment of electric vehicles and benefits of smart charging across all European countries," Applied Energy, 2022, [doi.org/10.1016/j.apenergy.2022.118676](https://doi.org/10.1016/j.apenergy.2022.118676).
- A. Mangipinto, F. Lombardi, F. Sanvito, S. Quoilin, M. Pavičević, E. Colombo, "RAMP-mobility: time series of electric vehicle consumption and charging strategies for all European countries," EMP-E, 2020, [doi.org/10.13140/RG.2.2.29560.26880](https://doi.org/10.13140/RG.2.2.29560.26880).
- F. Lombardi, S. Balderrama, S. Quoilin, E. Colombo, "Generating high-resolution multi-energy load profiles for remote areas with an open-source stochastic model," Energy, 2019, [doi.org/10.1016/j.energy.2019.04.097](https://doi.org/10.1016/j.energy.2019.04.097).
---
# Sympheny EnyFlow
Sympheny EnyFlow is a Jupyter Notebook environment that combines energy
planning, advanced problem-solving, and visualization while directly leveraging
the Sympheny web application and its API. You work in notebooks — in Google
Colab or in the Sympheny EnyFlow Jupyter framework — and call Sympheny to load
projects, run optimizations, and retrieve results.
EnyFlow lets you:
- Connect to Sympheny via the API.
- Build custom workflows and analyses in notebooks.
- Automate and document advanced planning and optimization tasks.
- Visualize and share results interactively.

## Key features and advantages
**Advanced problem solving.** Combine Sympheny's optimization with your own
models to analyze multi-energy systems, optimize resource allocation and
operation, evaluate renewable-integration strategies, and design and assess
sustainable energy scenarios.
**Data visualization.** Create interactive charts, tables, maps, and dashboards
to explore energy data, interpret optimization results, and communicate findings
to stakeholders.
**Customized workflow integration.** Bring your own algorithms, models,
simulation tools, data-processing pipelines, and optimization routines into the
same notebook, alongside calls to the Sympheny API — adapting EnyFlow to your
use cases while keeping your existing intellectual property.
**Comprehensive energy planning support.** Support a broad range of tasks, such
as load and demand forecasting, demand-response and flexibility analysis,
renewable-integration studies, infrastructure and network planning, and scenario
comparison and sensitivity analysis.
**Collaboration and reproducibility.** Because EnyFlow is notebook-based, each
analysis is documented as code, text, and results together. Share notebooks with
your team via Git, shared drives, or Colab links, and reproduce results reliably
by rerunning a notebook with the same inputs.
**Efficiency and scalability.** Run EnyFlow locally or in the cloud (for example
via the Sympheny interface in SageMaker, via Colab, or another Jupyter service)
to scale up to larger problems and use more powerful hardware.


## Using the Sympheny API with EnyFlow
Whether you work in Google Colab or in the Sympheny EnyFlow Jupyter framework,
the general pattern is the same:
1. Get your Sympheny API credentials — see
[Authentication](../../../api/authentication.md) for the token flow.
2. Configure your notebook (Colab or Jupyter).
3. Call the Sympheny API to load projects, run optimizations, and retrieve
results.
4. Analyze and visualize the results using EnyFlow tools.
For the full list of endpoints, request and response shapes, and examples, see
the [REST API reference](../../../api/index.md). If you prefer typed Python over
raw HTTP calls, the [Python SDK](../../../sdk/index.md) wraps the same API and
works well inside a notebook.
---
# Optimization model
Sympheny models an energy system as a network of hubs connected by energy flows. The
optimizer decides which technologies to install, how to operate them, and how energy
moves between hubs and over time, to meet demand at the lowest cost (or another
objective you choose) across one or more stages.
This section explains the concepts you'll configure when building a scenario, and the
methodology behind the optimizer.
## Core building blocks
- [Stages](stages.md) — the phases of investment and operation in a project's lifetime.
- [Hubs](hubs.md) — the geographic areas or sites in your project.
- [Energy carriers](energy-carriers.md) — the substances or media that carry energy
through the system.
- [Energy demands](energy-demands.md) — the energy use that the system must satisfy.
- [Imports](imports.md) — energy purchased from outside the system.
- [Exports](exports.md) — energy sold or sent outside the system.
- [On-site resources](on-site-resources.md) — intermittent renewable resources
available on site.
- [Conversion technologies](conversion-technologies.md) — systems that transform one
energy carrier into another.
- [Storage technologies](storage-technologies.md) — systems that store energy for
later use.
- [Technology packages](technology-packages.md) — bundles of technologies considered
together.
- [Network technologies](network-technologies.md) — connections that move energy
between hubs.
- [Intra-hub networks](intra-hub-networks.md) — connections that move energy within a
hub.
## Methodology
- [Clustered profiles](clustered-profiles.md) — how Sympheny reduces solving time by
clustering hourly profiles into typical days.
- [Demand profiles methodology](demand-profiles-methodology.md) — how Sympheny's
built-in demand profiles are generated.
- [Discounted cash flow analysis](discounted-cash-flow-analysis.md) — how Sympheny
converts future cash flows into present value.
- [Capital recovery factor](capital-recovery-factor.md) — how Sympheny converts total
cost into an equivalent annual cost.
## Reference
- [Glossary](glossary.md) — definitions of terms used throughout the model.
- [Parameters](parameters/index.md) — the full list of input and output parameters for
each concept.
---
# Stages

Technologies go through stages for installation, use, and potential reuse. Each stage
has its own associated costs and demands. You define which stages each technology can
be in. Technologies can be installed at the start of a stage and reused or salvaged at
its end. The design and operation stay the same within a stage, which lets you optimize
long-term projects with multiple phases of investment. For parameters, see
[Stages parameters](parameters/stages.md).
!!! note
Sympheny uses discounted cash flow (DCF) analysis to convert the total cost
(represented by the net present cost, NPC) into an annual cost. See
[Discounted cash flow analysis](discounted-cash-flow-analysis.md) for details.
---
# Hubs

Sympheny lets you define different geographic areas or sites within your project as
hubs. A hub can be an individual building or a group of buildings treated as a single
unit. You specify the energy demands and exports for each hub, then explore ways to
supply that energy using imports, on-site resources, conversion technologies, and
storage technologies. Hubs can also be connected through a network technology, so you
can model how energy flows between them. For parameters, see
[Hubs parameters](parameters/hubs.md).
---
# Energy carriers
An energy carrier is any substance or medium that contains energy and can be
converted, stored, or delivered — a gaseous or solid fuel, an electric charge, thermal
energy, solar irradiance, and so on. You provide the energy carriers that are used
throughout the rest of the model. For parameters, see
[Energy carrier parameters](parameters/energy-carriers.md).
For every stage, hub, energy carrier, and time step, the following energy balance is
applied:

Where *t* is the time step.
---
# Energy demands
Energy demands represent energy use. For example, a building uses heat for heating and
hot water, electricity for appliances and mobility, and cold for cooling. An energy
demand can also represent an industrial process or the district heating network of an
entire region. Energy demands shape the results, since every demand must be satisfied
at every time step. For parameters, see
[Energy demands parameters](parameters/energy-demands.md).
An energy demand is a profile that specifies the energy consumption for every hour of a
year — 8,760 hours, in kWh.
Make sure your custom profiles align with Sympheny's calendar year, which starts at
00:00 on Monday, January 1st and ends at 23:00 on December 31st. The year 2018 is a
good reference, since it begins on a Monday and is not a leap year.
!!! tip
All profiles are clustered — a proven method for reducing solving time without
affecting the results. Hourly profiles in the results may therefore not match the
original energy demand profiles exactly. See
[Clustered profiles](clustered-profiles.md).
---
# Imports
Imports are energy purchased from outside the system, such as grid electricity
or natural gas, at a price you define. Imports are configured together with
exports in the [Imports & exports step](../how-to/modeling-scenarios/imports-exports-step.md)
of the scenario editor. For resources with intermittent availability, see
[On-site resources](on-site-resources.md), which also explains when to model a
constantly available resource as an import instead.
!!! info "Coming soon"
A full concept page for imports is in preparation.
---
# Exports
Exports are energy sold or sent outside the system — for example, feeding
electricity back into the grid. Exports are configured together with imports in
the [Imports & exports step](../how-to/modeling-scenarios/imports-exports-step.md)
of the scenario editor.
!!! info "Coming soon"
A full concept page for exports is in preparation.
---
# On-site resources

On-site resources are renewable resources with intermittent (temporally varying)
availability. In Sympheny, you can quickly generate solar irradiance profiles and wind
profiles of 8,760 time steps using several methods.
On-site resources are functionally identical to imports, with fewer available
parameters. For resources with constant availability, like geothermal energy or air
used in a heat pump, create an **import** with a fixed **maximum capacity (kW)** and
without an **energy price (CHF/kWh)**, instead of creating an on-site resource.
Energy produced from on-site resources can be curtailed. Curtailment occurs when the
available on-site resource leads to higher energy production than required by demand
and export (see the diagram below) at any given time.

## Creating on-site resources
Sympheny offers several workflows for creating on-site resources:
- **Add new > Generate profile > Available resource area (m2)** — generate a solar
profile using the Sympheny database; easy to create profiles for multiple hubs.
- **Add new > Upload profile > Available peak load (kWp)** — upload your own normalized
profile; easy to create profiles for multiple hubs.
- **Add new > Upload profile > Generic availability (kWh/h)** — upload your own
profile.
- **Add from map > Solar resource > Optimize slope and azimuth** — explore the optimal
orientation of solar panels relative to the demand profile.
- **Add from map > Solar resource > Custom slope and azimuth** — accurately estimate
the solar profile for a specific location, surface, and orientation.
- **Add from map > Solar resource > Weighted sum aggregation** — generate an average
solar profile from multiple surfaces on the map.
- **Add from map > Wind resource** — generate a wind power production profile using
terrain parameters.
## Add new
Add a new on-site resource to your scenario. This resource is free and can be exploited
whenever it is available. In the toolbox, select an **energy carrier** corresponding to
the resource type. A **name** is generated based on the energy carrier and existing
profiles, and can be edited. The **hub** and **stage** where the resource is available
are selected automatically and can be edited.

## Available resource area (m2)
When sizing a new solar PV field, the only available information may be the available
resource area (m2) and the location. Select **Generate profile**, click
**Generate profile**, then select the **database**, **location**, **type**, and
**slope**, and click Next. Sympheny generates a solar irradiance profile for a 1 m2
surface area.

The available resource area (m2) is the maximum available irradiance profile. The
optimization result determines the optimal size of the solar technology to install. As
curtailment may happen, the installed capacity is not always equal to the maximal
operational capacity.

## Available peak load (kWp)
When the hourly profile is measured or simulated using a third-party tool, you can use
it in Sympheny with the **Upload profile** function. In this workflow, the maximum
value of the uploaded profile should equal 1 kW. The total energy available depends on
the **available peak load (kWp)**. The profile can be the output of the technology
(for example, PV production or wind turbine production), provided the technology's
efficiency is 100%. In that case, the kW-peak (kWp) refers to the maximum capacity of
the technology that uses this on-site resource.
!!! tip
To upload a profile, select or drag and drop an .xlsx file with the correct format.
The file must consist of a single sheet with 2 columns, no header, and exactly
8,760 rows. The first column must contain incrementing numbers from 1 to 8,760. The
second column must contain the values for the hourly profile, for every hour of
the year from 00:00 on January 1st to 23:00 on December 31st. Make sure the units
are correct. The maximum file size is 2 MB. Uploaded profiles can be saved for
later use.
[Download the template profile (XLSX)](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/templates/example-energy-demand-profile.xlsx)
For example, the hourly resource profile of **wind power** indicates the availability
of wind-sourced electricity in kW per unit of peak load (kW/kWp). In this case, a
conversion efficiency is already factored into the hourly resource profile, so the
conversion efficiency of the wind turbine technology should be 100%.

The use of the on-site resource is determined by the optimal capacity of the
technologies that utilize that resource.

## Generic availability (kWh/h)
This workflow is more flexible than the previous two. For example, you can use it to
create an intermittent industrial waste heat profile. In this workflow, the uploaded
profile should be in kWh for each hour of the year.

!!! tip
You can download irradiation profiles from external databases such as
[PVGIS](https://re.jrc.ec.europa.eu/pvg_tools/en/#MR) — just make sure the units
are consistent with the Sympheny workflow.
## Add from map
Add a new on-site resource to your scenario from the map.

## Solar resource > Optimize slope and azimuth
Click **Select surface from map** to select a surface, like the outline of a hub, to
get the surface area (m2) of the geometry and its geographic location. The optimizer
defines the optimal slope and azimuth.

## Solar resource > Custom slope and azimuth
Click **Select surface from map** to select a surface, like the outline of a hub, to
get the surface area (m2) of the geometry and its geographic location. Specify the
slope and azimuth.
Possible settings:
- **Slope 0°**: flat
- **Slope 90°**: vertical
- **Azimuth 0°**: south
- **Azimuth -90°**: east
- **Azimuth 90°**: west
- **Azimuth 180° / -180°**: north

## Solar resource > Weighted sum aggregation
Calculate an aggregated solar profile, normalized in kW/m2, for all selected surfaces.
The calculation accounts for the slope and azimuth of each roof element. The generated
profiles are aggregated using a weighted average for each surface, with surface areas
as weights.
## Wind resource
Set **surface (m2)**, **terrain type**, **roughness length (m)**, and **height (m)** to
generate a wind resource profile based on those parameters.
- **Surface (m2)** should be the number of wind turbines multiplied by the total swept
area per turbine.
- **Terrain type** determines the terrain classification.
- **Roughness length (m)** is based on the terrain type.
- **Height (m)** is the height of the middle of the turbine.
The maximum theoretical efficiency of the wind turbine technology, using this resource
profile in kWh-wind, is 59.3%. For more information, see
[Wind profile power law](https://en.wikipedia.org/wiki/Wind_profile_power_law).

---
# Conversion technologies

Conversion technologies are systems that transform one or more energy carriers into
different types — for example, a gas boiler converting natural gas to heat. Each
technology is defined by:
- **Technical parameters**: efficiencies and technical limits.
- **Financial and environmental parameters**: investment costs (CAPEX), operational
costs (OPEX), and embodied emissions.
For parameters, see
[Conversion technology parameters](parameters/conversion-technologies.md).
## Technology modes
A mode represents a specific operational regime with its own set of inputs, outputs,
and efficiencies. A single technology can have multiple modes to reflect different
seasonal or functional behaviors.
- **Example**: a reversible heat pump has a heating mode and a cooling mode, each with
a distinct coefficient of performance (COP).
- **Configuration**: technical parameters are applied at the mode level, to allow for
this granular operational modeling.
## Primary vs. non-primary modes
To ensure costs accurately reflect physical hardware requirements, modes are
categorized:
- **Primary mode**: a mode whose sizing must be reflected in cost and CO2 emissions.
The technology's costs are derived from the capacity requirements of these modes.
- **Non-primary mode**: a "bonus" mode. Its capacity does not increase the technology's
investment or operational costs, or its CO2 emissions — it represents secondary use
of existing hardware.
## Mode capacity
The capacity of a specific mode is the maximum hourly sum of all primary outputs
recorded for that mode.
You can choose between two sizing behaviors:
- **Optimize mode capacity**: optionally enter a minimum and/or maximum installed
capacity; the optimal capacity is selected within this range. If a minimum capacity
is specified and the default option

is selected, the installed capacity can be 0 or greater than the minimum.
- **Specify mode capacity**: installed capacity is held at a fixed value. Operating
capacity (which does not influence investment costs) may be equal to or lower than
installed capacity.
## Technology capacity
The technology capacity represents the installed capacity of the unit and is used for
cost and CO2 calculations. It equals the maximum total primary output summed across all
primary modes at any single point in time.
### Example calculation
- **Mode A peak (primary)**: 100 kW at hour 5.
- **Mode B peak (primary)**: peak of 200 kW at hour 10.
- **Peak of the sum of primary modes**: at hour 8, modes A and B produce a combined
250 kW.
**Result**: the technology capacity is 250 kW.
## Mode efficiency
The efficiency of a mode indicates energy dissipation within systems. The sum of output
efficiencies represents the mode's total efficiency:
- A total efficiency of 100% means useful energy is conserved within the system.
- A total efficiency below 100% indicates useful energy is lost in the system — for
example, heat losses in the technology, which are not modeled as a "waste heat" flow.
- A total efficiency above 100% indicates useful energy is created within the system —
for example, useful heat extracted from the environment, which is not modeled as an
"ambient air" flow.
### Example: heat pump
The efficiency of a standard input (with two inputs) is set as follows:
| Input EC | Input share | Output EC | Output efficiency [%] |
| -------------- | ----------- | --------- | ---------------------- |
| Electricity | 100 | HT heat | **100** |
| Ambient heat | 200 | | |
The calculation is:
**Output EC(i) = Sum of inputs × efficiency output(i)**
**HT heat = (100 + 200) × 100% = 300**
In this case, 100 units of electricity and 200 units of ambient heat produce 300 units
of HT heat. This corresponds to a yearly COP of 3.
In the app, the numbers are entered as follows:

### Example: chiller
For chillers, there are two ways to model cooling energy. The first method treats
cooling energy as a service, meaning the energy is generated and supplied. For example,
when modeling a chiller with an energy efficiency ratio (EER) of 2, the process is as
follows:
| Input EC | Input share | Output EC | Output efficiency [%] |
| ----------- | ----------- | --------- | ---------------------- |
| Electricity | 100 | HT heat | 300% |
| | | Cooling | 200% |
This means that an input of 100 units of electricity produces 200 units of cooling
(based on an EER of 2) and 300 units of heating (assuming the electricity is fully
dissipated as heat).
100 units of electricity give, in this case, 300 units of HT heat and 200 units of
cooling, from which an EER of 2 is calculated. Here, the cumulative output efficiency
is greater than 100%, which reflects the "creation" of energy — because cooling energy
is treated as an additional service.
In the app, the numbers are entered as follows:

### Alternative method: chiller
There's also an alternative method where cooling energy is treated as an extraction of
energy demand. To use this method, set the cooling demand to "reversed." In this case,
the chiller can be modeled as a heat pump with an EER of 2 (or a COP of 3).
| Input EC | Input share | Output EC | Output efficiency [%] |
| ----------- | ----------- | --------- | ---------------------- |
| Electricity | 100 | HT heat | 100% |
| Cooling | 200 | | |
In the app, the numbers are entered as follows:

For this method, it's crucial that the **reverse** box is ticked for the cooling
demand in the Energy Demands step — this treats cooling as an extraction of heat.

## Simultaneity of operation
Different modes can operate simultaneously. To prevent this, leave the **simultaneous**
checkbox unchecked, indicating the mode cannot run with others. This may increase
optimization time.

Alternatively, a less computationally intensive option is to define a different
[seasonal or hourly operation](#seasonal-and-hourly-parameters) for each mode.
Some advanced parameters are not available to all plan tiers, but can be added through
add-on options. Contact customer support for a demo and to discuss customizing these
options to your needs.
## Seasonal and hourly parameters
You can enter time-varying efficiencies, either as monthly or hourly values. To do so,
select **Time varying** instead of **Fixed** for the output EC efficiency.

### The case of heat pumps
For heat pumps, if you want to apply a time-varying COP, modify the input EC share
rather than the output efficiency — the input EC share is what defines the COP
(= heat HT / electricity). See the example below:

| | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Electricity | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
| Heat ambient | 100 | 150 | 150 | 200 | 200 | 250 | 250 | 250 | 200 | 150 | 100 | 100 |
| HT heat | 100% (stays fixed) | | | | | | | | | | | |
| COP | 2 | 2.5 | 2.5 | 3 | 3 | 3.5 | 3.5 | 3.5 | 3 | 2.5 | 2 | 2 |

---
# Storage technologies
Storage technologies are systems that store an energy carrier for later use —
for example, batteries or thermal storage tanks. Like
[conversion technologies](conversion-technologies.md), each candidate is defined
by technical, financial, and environmental parameters, and the optimizer decides
whether and at what capacity to install it. Storage candidates are added in the
[Storage technologies step](../how-to/modeling-scenarios/storage-technologies-step.md)
of the scenario editor.
!!! info "Coming soon"
A full concept page for storage technologies is in preparation.
---
# Technology packages
Technology packages are bundles of technologies that the optimizer considers
together. They build on the individual
[conversion](conversion-technologies.md) and
[storage](storage-technologies.md) technology candidates defined in your
scenario.
!!! info "Coming soon"
A full concept page for technology packages is in preparation.
---
# Network technologies

Network technologies are connections that move energy between
[hubs](hubs.md) — for example, a district heating pipe or an electrical link.
Network link candidates are added in the
[Network links step](../how-to/modeling-scenarios/network-links-step.md) of the
scenario editor. For connections that move energy within a single hub, see
[Intra-hub networks](intra-hub-networks.md).
!!! info "Coming soon"
A full concept page for network technologies is in preparation.
---
# Intra-hub networks
Intra-hub networks are connections that move energy within a single
[hub](hubs.md), in contrast to [network technologies](network-technologies.md),
which connect different hubs. Network link candidates are added in the
[Network links step](../how-to/modeling-scenarios/network-links-step.md) of the
scenario editor.
!!! info "Coming soon"
A full concept page for intra-hub networks is in preparation.
---
# Clustered profiles
## What are clustered profiles?
In the optimization process, machine-learning-generated clustered profiles are used to
improve performance. These profiles are created by grouping similar daily patterns
from all hourly input data in Sympheny, including energy demand, on-site resources, and
hourly tariffs. A reduced number of representative days (typical days) is selected, but
the model still operates in hourly time steps, so variations within each day are
preserved. The clustered profiles let Sympheny reconstruct the full annual profile from
these representative days.
!!! note
These profiles remain consistent across all solutions within a given scenario.
Clustering is performed for each [stage](stages.md), meaning all profiles used in
a stage are clustered together.
## How are typical days generated?
The Sympheny engine selects a specific number of typical days based on the overall
hourly profiles provided and the chosen temporal resolution. These typical days are
selected from the 365 possible days in a year, based on patterns identified across the
combined profiles.

The clustered profiles are created from the selected typical days, which are repeated
throughout the year. For instance, if 20 typical days are chosen, each of these days,
comprising 24 hours, is used to represent the entire year, filling in the 365 days.
Each typical day is linked to specific data across all profiles, so the original days
are not mixed and matched — a typical day consistently represents the same day across
all profiles, rather than different days for different profiles. Each typical day
consists of 24 hours multiplied by the number of profiles.
For example, in a system with two demand profiles (heating and electricity), if a
typical day represents days 5, 8, 12, 23, 36, and 45 for the heating profile, it also
represents those same days for the electricity profile.
## Temporal resolution
The number of typical days selected is determined by the temporal resolution chosen in
the execution step.

The following settings define three resolution levels, each specifying the range of
typical days allowed and the corresponding error limits for load duration and total
sum:
- **Low**:
- Minimum days: 5
- Maximum days: 50
- Max load duration error: 15%
- Max sum error: 2%
- **Medium**:
- Minimum days: 15
- Maximum days: 100
- Max load duration error: 7.5%
- Max sum error: 1%
- **High**:
- Minimum days: 30
- Maximum days: 200
- Max load duration error: 3%
- Max sum error: 0.5%
The clustering process also ensures that the non-zero maximum and minimum values of
each profile are preserved, and maintains the linear combination of the profiles — the
peaks of two or more profiles occurring at the same time step are conserved.
## Clustered profiles metrics
The clustered profiles exhibit a similar load duration curve to the original profiles,
while ensuring both the sum and peaks of the profiles are preserved. In the results
folder, the `Output.xlsx` file, which you can download once the optimization is
complete, contains a sheet titled `Clustered Profiles-[Scenario Name].xlsx` with the
following metrics:
- **Number of typical time steps**: the total number of time steps, calculated as
24 × typical days.
- **Max load duration error (%)**: the maximum load duration error across all profiles.
- **Max sum error (%)**: the maximum sum error across all profiles.
The error function used to calculate these metrics is the symmetric mean absolute
percentage error (SMAPE) for each profile, from which the maximum error percentage is
derived.
---
# Sympheny demand profiles methodology
The demand profiles in Sympheny are based on different sources depending on the
building use. They are stored in three levels, each contributing to the overall shape
of the demand profile:
- **Demand type** refers to the energy carrier. Space heating and cooling depend on a
normalized weather profile, while the other profiles are stochastic — they depend on
the time of use of different appliances.
- **Building use** affects the shape of the profile. For example, an office building is
generally closed on weekends and less occupied in summer, while a hospital operates
at high capacity throughout the year.
- **Building age or standard** is used to derive an energy intensity (kWh/m2/year), to
estimate annual demand in kWh from the energy reference area (m2). The SIA standards
include values of peak load in kW. When you select SIA standards, profiles are
slightly reshaped to match the annual demand in kWh and the peak load in kW.
In the database, all profiles are normalized for annual energy demand, meaning the sum
of annual energy demand is 1 kWh. The profile is then "scaled" — multiplied by the
actual energy demand.
The demand profiles in Sympheny are based on different sources depending on the
building use:
- [Fraunhofer-Gesellschaft](https://www.fraunhofer.de/en.html), a German applied
research institute, provided data for:
- Administration / office
- Hospitals
- Multi-family house
- Retail
- Schools
- Single-family house
- Open-source data provided by
[Rutgers, The State University of New Jersey](https://data.mendeley.com/datasets/rfnp2d3kjp/1)
provided profile data for:
- Hotel
- Indoor swimming pool
- Industry 2-shift fabricated metals
- Industry warehouse
- Swiss building standards SIA 380 and SIA 2024 provided additional data for the
remaining profiles:
- Assembly
- Industry
- Sports center
- Warehouse
## Fraunhofer-Gesellschaft profiles
The Fraunhofer-Gesellschaft residential profiles (multi-family house, MFH, and
single-family house, SFH) were generated using the
[SynPro tool](https://synpro-lastprofile.de/) in 2020. The four non-residential
profiles were generated using their
[synGHD tool](https://www.ise.fraunhofer.de/de/forschungsprojekte/synghd.html) in 2020.
All profiles were generated using
[weather data for Zürich, 2018](https://prod-eu-north-1-sympheny-public.s3.eu-north-1.amazonaws.com/docs/data/weather-data-zurich-2018.csv).
### Residential profiles
#### Multi-family house (MFH)
The simulation is based on a renovated building constructed up until 1978, with a
typical use of a small multi-family dwelling (up to 10 units). U-values for walls,
windows, and roof are 0.3 W/m2·K, 0.5 W/m2·K, and 0.2 W/m2·K, respectively.
The following parameters are used:
- Window-to-wall ratio: 0.23
- Area-to-volume ratio: 0.43
- Set-points:
- Heating: 20°C
- Cooling: 24°C
#### Single-family house (SFH)
The simulation is based on a one-occupant renovated building constructed up until 1978.
U-values for walls, windows, and roof are 0.3 W/m2·K, 0.5 W/m2·K, and 0.2 W/m2·K,
respectively.
The following parameters are used:
- Window-to-wall ratio: 0.19
- Area-to-volume ratio: 0.92
- Set-points:
- Heating: 20°C
- Cooling: 24°C
### Non-residential profiles
The simulation is based on the following building age classes:
- Offices: 2002 until today.
- Hospitals, restaurants, schools, and shops: until 1978, renovated.
The following parameters are used:
- Set-points:
- Heating: 20°C
- Cooling: 26°C
---
# Glossary
Short definitions of the terms used throughout the Sympheny optimization model.
Each term links to its concept page — read those for the full explanation and
parameters.
| Term | Definition | Read more |
| --- | --- | --- |
| Hub | A geographic area or site in your project — an individual building or a group of buildings treated as a single unit — for which you define demands, supply options, and connections. | [Hubs](hubs.md) |
| Energy carrier | Any substance or medium that contains energy and can be converted, stored, or delivered — a fuel, electricity, thermal energy, solar irradiance, and so on. | [Energy carriers](energy-carriers.md) |
| Energy demand | An hourly profile (8,760 values, in kWh) of energy use that the system must satisfy at every time step. | [Energy demands](energy-demands.md) |
| Stage | A phase of investment and operation in a project's lifetime; technologies can be installed at a stage's start and reused or salvaged at its end. | [Stages](stages.md) |
| Import | Energy purchased from outside the system, such as grid electricity or natural gas. | [Imports](imports.md) |
| Export | Energy sold or sent outside the system. | [Exports](exports.md) |
| On-site resource | A renewable resource with intermittent availability — such as solar irradiance or wind — described by an hourly profile. | [On-site resources](on-site-resources.md) |
| Conversion technology | A system that transforms one or more energy carriers into different ones — for example, a gas boiler converting natural gas to heat. | [Conversion technologies](conversion-technologies.md) |
| Storage technology | A system that stores energy for later use. | [Storage technologies](storage-technologies.md) |
| Network technology | A connection that moves energy between hubs. | [Network technologies](network-technologies.md) |
| Technology package | A bundle of technologies considered together in the optimization. | [Technology packages](technology-packages.md) |
| Intra-hub network | A connection that moves energy within a single hub. | [Intra-hub networks](intra-hub-networks.md) |
| Clustered profiles | Machine-learning-generated representative days that stand in for the full year of hourly input data, reducing solving time while preserving hourly variation within each day. | [Clustered profiles](clustered-profiles.md) |
| Discounted cash flow (DCF) analysis | The method Sympheny uses to convert expected future cash flows into present value, accounting for the cost of capital, loan structures, and risk premiums. | [Discounted cash flow analysis](discounted-cash-flow-analysis.md) |
| Capital recovery factor (CRF) | The factor Sympheny uses to convert a present cost into an equivalent annual cost, making investments with different lifespans comparable. | [Capital recovery factor](capital-recovery-factor.md) |
For the full list of input and output parameters for each concept, see
[Parameters](parameters/index.md).
---
# Discounted cash flow analysis
Sympheny uses discounted cash flow (DCF) analysis to determine the present value of
expected future cash flows. This approach is crucial for long-term energy projects, as
it accounts for financing factors such as the cost of capital, loan structures, and
risk premiums — ensuring that both initial investments and future cash flows are
properly evaluated.
**Interest rate:**
- **Interest rate as financing cost**: when you take out a loan (especially an
amortized one, with regular payments), the interest rate directly reflects the cost
of borrowing that money — it's what the lender charges you.
- **Discounting future cash flows**: the interest rate can also be used to calculate
the present value of money expected in the future (a process called discounting). In
this case, it reflects the opportunity cost of capital — the return you might earn
if you invested the money elsewhere. A risk premium is added to this rate to cover
risks such as price fluctuations or project-specific uncertainties.
- **Dual use**: in practice, the interest rate is often used both as the cost of
financing and as part of the discount rate. The effective discount rate can be
constructed by combining the cost of financing with an additional risk premium.
**Inflation rate:**
The inflation rate is the expected annual percentage increase in the general price
level of goods and services. It indicates the decline in the purchasing power of money
over time and plays a critical role in long-term financial analysis, since it affects
both the costs and revenues of future cash flows in real terms.
The assumption is that the rate of inflation is the same for all costs.
**Discount rate:**
This rate converts future cash flows into their present value, reflecting the
opportunity cost of capital and associated risks. The discount rate is derived by
adjusting the nominal interest rate for inflation, producing a real rate that excludes
inflation effects.

The discount rate also plays a key role in converting one-time costs into an equivalent
annual cost (EAC). This is done using the
[capital recovery factor (CRF)](capital-recovery-factor.md).
**Weighted average cost of capital (WACC):**
In energy planning, the WACC is often used as the discount rate in DCF analysis. When
cash flows are expressed in real terms (with inflation already accounted for), you
might set WACC as the interest rate with inflation assumed to be zero, which results in
the discount rate aligning with the interest rate.
In Sympheny, you define these parameters along with other inputs in the Stage
Parameters step. See [Stages parameters](parameters/stages.md) for details.
---
# Capital recovery factor
In Sympheny, the net present cost (NPC) is used to calculate the present value of all
cash flows over a project's lifetime, taking into account the time value of money. NPC
represents the discounted sum of all costs and revenues for every component in each
stage.

The equivalent annual cost (EAC) converts investments with different lifespans or cash
flow patterns into uniform annual payments, making it easy to compare projects.
To determine the EAC, start by calculating the capital recovery factor (CRF):

Where *i* is the [discount rate](discounted-cash-flow-analysis.md), and *n* is the
number of years in a stage.
Finally, the EAC is calculated using the CRF, which transforms the total NPC into an
equal annual cost over the project's duration:

---
# Parameters
Reference definitions for every parameter used to build and read a Sympheny scenario.
- [Input parameters](input-parameters.md) — the data you provide in the input Excel file, organized by worksheet:
- [General parameters](general.md)
- [Stages parameters](stages.md)
- [Hubs parameters](hubs.md)
- [Energy carriers parameters](energy-carriers.md)
- [Conversion technology parameters](conversion-technologies.md)
- [Energy demands parameters](energy-demands.md)
- [Output parameters](output-parameters.md) — the results Sympheny produces after solving a scenario.
---
# Input parameters
Sympheny lets you consolidate all your input data into a single Excel file. This file is organized into separate worksheets, with each worksheet representing a specific component of your scenario model:
- [General parameters](general.md)
- [Stages parameters](stages.md)
- [Hubs parameters](hubs.md)
- [Energy carriers parameters](energy-carriers.md)
- [Conversion technology parameters](conversion-technologies.md)
- [Energy demands parameters](energy-demands.md)
!!! note
Any parameter without a default value is required.
---
# General parameters
| Parameter | Definition | Unit | Default |
| --- | --- | --- | --- |
| Currency | The currency specified is used to interpret the cost parameters in the input file. It does not influence the model itself; it is solely for parsing the input file and ensuring accurate representation of cost units in the web application and results. | – | CHF |
| Exchange Rate | The exchange rate from CHF is applied to all economic data in the technology databases. | – | 1 |
---
# Stages parameters
| Parameter | Definition | Unit | Default |
| --- | --- | --- | --- |
| Stage Name | The name of the stage; each name must be unique. | – | – |
| Stage Length | The duration of the stage in years. | Years | – |
| Order | The chronological order of the stage. | – | – |
| Interest Rate | The interest rate reflects the percentage paid for borrowing money through an amortized loan. It can also be used to discount future cash flows and reflects the opportunity cost of capital. This rate is used along with the inflation rate to calculate the [discount rate](../discounted-cash-flow-analysis.md). | Percentage | 0 |
| Inflation Rate | The inflation rate indicates the expected annual increase in prices, which is used along with the interest rate to calculate the [discount rate](../discounted-cash-flow-analysis.md). | Percentage | 0 |
---
# Hubs parameters
| Parameter | Definition | Unit | Default |
| --- | --- | --- | --- |
| Hub Name | The name of the hub; each name must be unique. | – | – |
---
# Energy carriers parameters
| Parameter | Definition | Unit | Default |
| --- | --- | --- | --- |
| Energy Carrier Name | The name of the energy carrier; each name must be unique. | – | – |
| Energy Carrier Type | The type of the energy carrier. Only used to determine the default color. | – | – |
| Energy Carrier Subtype | The sub type of the energy carrier. Only used to determine the default color. | – | – |
| Energy Carrier Color | The HEX color code of the energy carrier. Only used for the energy hub diagram and results dashboard. | – | – |
---
# Conversion technology parameters
| Parameter | Definition | Unit | Default |
| --- | --- | --- | --- |
| Technology Name | The name of the technology; must be unique within the scenario. | – | – |
| Virtual Technology | A virtual technology is a technology used purely for accounting purposes in the optimization. It converts one energy carrier to another at zero cost and with 100% efficiency. If set to true, the efficiency, costs, and other values are automatically fixed to these values. | – | – |
| Stages | List of stages where the installation and operation of this technology are permitted. | – | – |
| Hubs | List of hubs where the installation and operation of this technology are permitted. | – | – |
| Installation Options | These options are mutually exclusive, meaning only one can be selected at a time. Options: Can be installed, Must be installed, Must be installed in at least one hub. | – | Can be installed |
| Primary Modes | At least one primary mode must be selected. The primary modes of a technology define which modes are used to calculate costs that depend on capacity. | – | – |
| Seasonal & Hourly Operation | Specifies the allowed seasons for the technology's operation. If hourly operation is selected, you can upload a profile with values ranging from 100% to 0%, indicating the max allowable operation per hour as a percentage of installed capacity. | % (profile values) | – |
| Input Energy Carriers | The input energy carriers of a technology mode; you can select multiple. | – | – |
| Output Energy Carriers | The output energy carriers of a technology mode; you can select multiple. | – | – |
| Input EC Share | For multi-input technologies, defines the ratio between inputs, representing the share of energy contributed by each energy carrier (EC). Values are absolute and can exceed 100. | – | – |
| Output EC Efficiency | The conversion efficiency for producing a specific energy carrier in a mode relative to total inputs. | % | – |
| Primary Output | Each technology mode must have a primary output energy carrier defining the mode's capacity for capacity-dependent cost calculations. | – | – |
| Technology Capacity | Select whether to optimize capacity or specify capacity manually. | – | – |
| Capacity | The pre-defined fixed capacity of the technology mode, determined by primary output energy carriers; visible only if Specify Capacity is selected. | kW | – |
| Maximum Capacity | The maximum allowable capacity of the technology mode, determined by primary output energy carriers; visible only if the Optimize option is selected. | kW | – |
| Minimum Capacity | The minimum allowable capacity of the technology mode, determined by primary output energy carriers; visible only if the Optimize option is selected. | kW | – |
| Maximum Annual Output | The maximum allowable annual energy output of the technology mode, determined by primary output energy carriers. | kWh/year | – |
| Minimum Annual Output | The minimum allowable annual energy output of the technology mode, determined by primary output energy carriers. | kWh/year | – |
| Curtailment Limitation | The percentage of maximum power capacity that cannot be curtailed. For example, 100% means no curtailment is possible. | % | 100% |
| Peak Power | Ratio of maximum operational power to installed capacity, allowing operation at higher or lower power levels without changing installed capacity or costs. | kWmax/kW | 1 |
| Minimum Part Load | If greater than 0%, indicates the technology's lower operational capacity limit as a percentage of installed capacity. | % | – |
| Minimum Up Time | Constrains the mode to remain operational for a minimum number of hours once started. | Hours | – |
| Minimum Down Time | Constrains the mode to remain non-operational for a minimum number of hours once shut down. | Hours | – |
| Simultaneous Operation | If False, prevents this mode from operating simultaneously with other modes within this technology. | – | True |
| Lifetime | The technical lifetime of the technology in years, used for calculating replacement costs and salvage value. | Years | – |
| Fixed Investment Cost | Fixed investment costs incurred upon installation regardless of size. | Currency | – |
| Variable Investment Cost | Variable investment costs per kW of installed capacity, determined by primary output energy carriers of primary modes. | Currency/kW | – |
| Fixed O&M Cost | Fixed operation and maintenance costs incurred annually. | Currency/year | – |
| Variable O&M Cost | Variable operation and maintenance costs incurred annually, based on: percentage of total investment, per installed kW, or per total production. | %/year, Currency/kW/year, Currency/kWh/year | – |
| Fixed Replacement Cost | Fixed replacement costs incurred when the technology is replaced at end of technical lifetime, regardless of size. | Currency/year | – |
| Variable Replacement Cost | Variable replacement costs incurred when the technology is replaced at end of lifetime, based on percentage of total investment or per installed kW. | %, Currency/kW | – |
| Fixed Salvage Value | Fixed salvage value incurred when the technology is salvaged at end of an investment stage, regardless of size. | Currency/year | – |
| Variable Salvage Value | Variable salvage value incurred when the technology is salvaged at end of an investment stage, based on percentage of total investment or per installed kW. | %, Currency/kW | – |
| Fixed Embodied CO2 | Fixed embodied CO2 emitted when the technology is installed, regardless of size. | kg-CO2 | – |
| Variable Embodied CO2 | Variable embodied CO2 emitted, based on installed kW or total production. | kg-CO2/kW, kg-CO2/kWh/year | – |
| Variable Captured CO2 | CO2 captured during operation, expressed per kWh of total input energy carrier of primary modes. | kg-CO2/kWh/year | – |
Certain **advanced parameters** are not available to all plan users, but can be added through our add-on options. Contact our customer support team for a demo and to discuss how we could customize these options to your needs.
---
# Energy demands parameters
| Parameter | Definition | Unit | Default |
| --- | --- | --- | --- |
| Energy Demand Name | The unique name used to identify the energy demand within the scenario. | – | – |
| Hubs | List of hubs where the energy demand occurs. Each demand must be linked to at least one hub. | – | – |
| Stages | List of stages during which the demand is active. Each demand must be assigned to at least one stage. | – | – |
| Energy Carrier | The energy carrier of the energy demand. | – | – |
| Energy Price | The price of the energy used to meet the demand. A positive value represents a revenue, while a negative value represents a cost. | CHF/kWh | – |
| Profile Name | The name of the hourly profile that defines the energy demand. | – | – |
| Reverse | Indicates whether the demand is considered to be negative, i.e., whether the system consumes energy rather than produces it. | – | False |
---
# Output parameters
Output parameters are the values Sympheny reports after an optimization run —
the counterpart of the [input parameters](input-parameters.md) you configure
when modeling. They appear in the results dashboard and in the downloadable
result files (see [Scenario results](../../how-to/scenario-results.md)).
!!! info "Coming soon"
A full output parameters reference is in preparation.
---
# What's new
Release notes for the Sympheny web application, newest first.
- [November 2025](2025-november.md)
- [April 2024](2024-april.md)
- [March 2023](2023-march.md)
- [January 2023](2023-january.md)
- [November 2022](2022-november.md)
- [September 2022](2022-september.md)
- [June 2022](2022-june.md)
- [May 2022](2022-may.md)
- [April 2022](2022-april.md)
- [March 2022](2022-march.md)
- [November 2021](2021-november.md)
---
# November 2025
**Sympheny: energy-model faster. See more. Share better.**
Sympheny deployed a set of upgrades that make it easier to prepare data, run focused optimizations, and communicate results — at building, site, and district scales.
## What's new at a glance
- **Download GIS data (now with building-level detail).** Export the spatial layers you create in Sympheny — complete with per-building attributes — for downstream GIS, CAD, or reporting workflows.


- **Single-objective runs.** Run scenarios against one chosen objective (e.g., cost or CO₂) when you want a fast, focused answer.

- **Global OpenStreetMap queries.** Pull international OSM layers directly in Sympheny to accelerate site setup anywhere in the world.

- **Network visualization + KPIs (Dashboard v3).** See optimized networks on the map and track headline KPIs (e.g., cost, CO₂, capacities) at a glance.

- **EnyMap (light mode).** Create scenarios from a simple Excel input file — perfect for rapid "what-if" variants without full model authoring.
- **EnyTool.** A companion toolkit for power users to automate data prep and batch scenario runs. See [EnyTool](../how-to/enytool/index.md).

- **Multi-language UI.** Use Sympheny in multiple languages (initially including English, German, French, and Italian), with easy switching per user.

## Benefits
- **Less prep time:** bring in global context fast and export clean GIS for stakeholders.
- **Faster answers:** single-objective runs speed up iteration.
- **Clear storytelling:** network views and KPIs turn results into decisions.
- **Scale your workflow:** EnyMap and EnyTool enable variant generation and automation.
- **Work your way:** collaborate across teams and regions with a multi-language interface.
---
# April 2024
**Exciting news: Sympheny's web app Version 3 is here!**
We are thrilled to announce the release of the latest version of our web application! This release is packed with exciting features and improvements that will enhance your experience and empower you to achieve even more with our platform.
Here are some highlights of what you can expect from this new release:
1. **Enhanced optimization engine**: Sense — energy hub solver engine
2. **New multi-stage interface**
3. **New dashboard interface**
In addition to these new features, we have made several performance enhancements and bug fixes to ensure a smoother and more reliable user experience.
We have prepared detailed documentation and resources to help you familiarize yourself with the new features and get the most out of them. Our customer support team is also available to assist you with any questions or concerns you may have.
**What does it mean to you?**
- Existing projects:
- Your current projects in Version 2 remain available with the known interface.
- To upgrade an existing project into Version 3 to leverage its benefits, you have to actively migrate the project.
- New projects:
- When creating a new project, you can currently choose whether to use the existing version (V2) or the new Version 3 (labelled as beta until 31 May). V2 will only receive bug fixes and no further development. We recommend adopting V3 for its ongoing support and access to all-new functionalities.
- As of 1 June 2024, V3 is the default for any new project.
**Summary of timeline:**
- **29 April 2024**: V2 and V3 are available. You may migrate existing projects to V3 or continue working in the current V2 version.
- **17 June 2024**: V3 becomes the default version for new projects.
- **30 June 2024**: V2 is no longer supported.
**How can I learn more about Sympheny Version 3?**
- In June/July 2024, Sympheny hosted tutorials on the new version and its benefits. Contact us to register for specific trainings.
**So what is new, and does it change the way of modelling?**
- The modelling and parameters remain the same. Additional features available in V3 are listed below.
## User experience
These new features are available for projects in both V2 (previous default version) and V3:
- Download input files for previously executed scenarios
- Compare multiple input files via API
- Satellite map layer
## New optimization engine: Sense (available as Sympheny V3)
The following new features are available for projects in V3:
- **User experience enhancements**
- **Performance boost:** achieve up to 5x faster executions for a smoother user experience
- **Infeasible model insights:** clearer infeasibility messages provide insight into model limitations
- **Enhanced readability:** input and output Excel sheets are now more user-friendly
- **Execution history:** access past executions effortlessly, with options to download or delete
- **Hourly clustered profiles:** hourly profiles clustered from user input data are now available as information
- **Editable energy carriers:** personalize colors for energy carriers, reflected in the results dashboard for easier identification
- **Modeling multi-stages**
- **Long-term planning:** multi-stage technology deployment enables strategic long-term planning
- **Technology reusability:** deployed technologies can be reused across planning stages, optimizing resource utilization and cost-efficiency
- **Cost considerations:** calculate replacement costs and salvage values, enhancing financial planning
- **Optimization objectives**
- Choose from various new objectives including NPV, CAPEX, OPEX, import energy minimization, and more
- **New results dashboard**
- **Usability enhancements:** navigate scenarios seamlessly, download high-resolution graphs, and access specific data effortlessly
- **Interactive energy diagrams:** engage with dynamic energy diagrams for intuitive visualization
- **New modeling features**
- **Imports and exports**
- Allow multiple energy carriers per hub
- Specify hourly max capacities, energy prices, and CO2 intensity
- Support negative energy prices
- **Demands**
- Allow multiple energy carriers per hub
- Define hourly demand sale prices
- Enable reversing demand energy flow (energy extraction demand)
- **On-site resources**
- Allow multiple energy carriers per hub
- **Conversion Technologies**
- Specify multiple primary modes and outputs to make cost calculations and operational limits more flexible
- Set design and operational parameters per mode
- Define hourly efficiency, input shares, and allowed operation as a percentage of capacity
- Specify peak power to allow technologies to operate above or below the design capacity
- **Network Technologies**
- Define maximum and minimum capacities per link
- Specify hourly network losses
- **Storage Technologies**
- Specify hourly standby losses
- Define variable O&M costs per total charging and discharging energy
- **Execution parameters**
- Set maximum execution time per job
- Control resolution of hourly clustered profiles
---
# March 2023
## Database Center
Update or replace all the different types of databases of your organization or your user at once with an Excel file. You can also download all the databases as an Excel file. [Learn more](../how-to/database-center/index.md)
## Share projects with other users
Share your projects with your colleagues or other users so you can collaborate with them easily. [Learn more](../how-to/managing-projects.md)
## API documentation
The documentation of how to use the Sympheny API in your own application is now available from the navigation bar of the Sympheny web app.

## Visualize geoadmin data
Visualize geoadmin data in Switzerland provided by the BAFU, such as CO2 emissions for each of the selected buildings in your site's hubs.

---
# January 2023
## Peak shaving of energy demand profiles
Upload an energy demand profile as an aggregation of several profiles and perform stochastic peak shaving on the demand profile. [Learn more](../how-to/modeling-scenarios/energy-demands-step.md)
## Control granularity (and speed) of the optimization
Choose between three different speeds for the execution of your optimization. The granularity/precision of the optimization results changes depending on the speed selected. [Learn more](../how-to/executing-scenarios.md)

## Hourly efficiencies for Conversion Technologies
Upload an Excel file of different energy efficiencies per hour for your Conversion Technology candidates.
## Updated EV batteries to run overnight
EV batteries can now be plugged in and out overnight, from one day to the next.
## Updated API to execute and get results outside the Sympheny web app
Execute, monitor, and get the results of your energy system optimization externally using your own software/platform instead of using the Sympheny web app.
## Receive example projects in your account
The Sympheny team can send you project examples relevant to your type of project, to help you understand the modelling possibilities for your specific case.
## New plots of total investments in results dashboard
- Total investments per optimal solution
- Total investments per energy hub
- Total investments per energy hub and technology
## Interface language in German
More languages are coming soon.
## Undo & redo actions in your scenario
Return to previous actions while you model your scenario. Only available for some windows; it will be available for all sections soon.
---
# November 2022
## EV Battery charging and discharging
Add Electric Vehicle (EV) Battery smart charging and discharging to your system optimization. These batteries are fixed storage units that can provide daily flexibility to your energy system.
---
# September 2022
## New navigation page for projects
Geolocate and organize all your projects at once on the same map. Order projects easily by name, favorite, or date created. A new sidebar gives access to the main sections of your project: *Design*, *Execution*, and *Results* of your scenario optimizations.
## CO2 Capture Technology candidates
Evaluate Technology candidates in your scenario optimization that are able to capture and/or emit CO2 in their operation. CO2 streams can also be modelled to consider more complex CCS (Carbon Capture and Storage) systems.
## Upload and download geojson layers in/from the map
Add GIS datasets (geojson) with basic geometry, building, and infrastructure information to the map of your scenario. Download the same data (geojson) and the information included for each energy hub of your scenario.
## Add building data (in Excel) to the map
Directly upload your own building data based on the EGID identifier from Excel to the GIS map of Sympheny.
## New API service
Integrate the Sympheny optimization engine and other services in your own software application.

---
# June 2022
## How to model specific technologies
A new section in the user guide is added with detailed explanations of how to model specific Technology candidates, such as:
- Heat Pumps
- Electrical Chiller
- Reversible Heat Pump
- Groundwater Heat Pump
- Geothermal Heat Pump
- Wastewater Heat Pump
- Free Cooling
- Ice Storage
## Sustainability labels
In [scenario results](../how-to/scenario-results.md) you can now find relevant sustainability labels achieved by your optimized energy system. More labels will be added soon.

---
# May 2022
## Draw Network Link candidates in the map
[Watch: drawing Network Link candidates in the map](https://youtu.be/TPEpZiqETcc)
## Interactive maps in Dashboard results
[Watch: interactive maps in Dashboard results](https://youtu.be/WnuIMQoT7-U)
---
# April 2022
## Dynamic tariff for import & export candidates
## Change of currency in a scenario
## Time varying input share for Conversion Technology candidates
## MFA (multi-factor authentication) at log in
To protect your organization against lost or stolen credentials, you can request the use of MFA to log in to your Sympheny account.
## Dynamic CO2 intensity for import & export candidates
---
# March 2022
## GIS definition of your urban site
[Watch: GIS definition of your urban site](https://www.youtube.com/watch?v=w-XKBjAswL0&ab_channel=UrbanSympheny)
## SEP GIS data (add-on)
### How to show the data of selected buildings?
[Watch: showing data of selected buildings](https://www.youtube.com/watch?v=dUMKo3XbN58)
### How many buildings can I query?
Each add-on subscription gives access to a specific number of building queries. The current add-on subscription packages are the following:
- SEP Add-on Small: access to information for 1 to 1,000 buildings
- SEP Add-on Medium: access to information for 1,000 to 50,000 buildings
- SEP Add-on Large: access to information for 1,000 to 50,000 buildings
The amount of remaining building queries according to the selected subscription can be read from the My Profile window.
### What type of data is available?
With the SEP add-on for Sympheny, you can get the data you need directly from the embedded GIS map on the web application. SEP provides data from its catalogue directly in Sympheny, including:
- Building area and building category
- Yearly heating and hot water demand of the building
- Roof geometries of the building
- Facade geometries of the building
- If available: Minergie data, including standard and Minergie energy reference area
## On-site resource candidates
Sympheny's step 4 Solar Resources is now **On-site Resources**. This means you can integrate hourly energy profiles for any type of On-site Resource candidate — be it *Wind*, *Tidal*, *Process waste heat*, or any other user-defined energy carrier.
## Add on-site resources directly from the GIS map
Now you can select the available resource area of your urban site and automatically assign the on-site resource potential profile in kW/m2.
## New plots in results dashboard
- Plot of total cost/income balance with cost breakdown of technologies
- The same plot across the hubs of the system
- Plot of imports vs. exports & demand of the system
- Plot of on-site resources results
## New Help Center (user guide, tutorials, etc.)
With this new portal it's now easier to navigate through all the documentation and resources available about Sympheny software.

---
# November 2021
## Technology packages
Save time by loading predefined sets of technologies into your project with one click. Create your own technology packages and save them for future use.
## Demand profiles generator
Generate hourly energy demand profiles for different types of buildings, directly in the Sympheny web app.
## Bill Gates's Green Premium
See the Green Premium of your optimal solutions, now automatically calculated in your dashboard.
## Project sharing
Send your Sympheny projects to your colleagues, or to any other Sympheny user, with the click of a button.
## Expanded dashboards
Gain more insight into the cost breakdown of your optimal solutions.
## Expanded technology databases
Extended and more easily navigable databases of energy conversion and storage technologies.
## Organization-specific workflows
Need to customize your Sympheny workflow with a tailored module? Now we can do that.
## Time varying efficiencies
Assign a different energy efficiency per month for your Conversion Technology candidates.
## O&M cost as % of total investment costs
Define fixed O&M cost of Conversion, Storage and Network Technologies as a % of the total investment cost.
## Expanded databases for demands and supply technologies
Extended databases for Energy Demands (including SIA 2024 profile scaling), Conversion and Storage Technology candidates.
## And more
- Define capacity costs for your Import/Export Energy Carrier candidates
- Specify storage charging and discharging efficiencies
- Specify up to 3 modes per technology
- Expanded solar irradiation databases
- Receive more specific feedback from our validation engine to help you quickly fix your scenario setup in case of failed execution
---
# Troubleshooting and FAQs
If you run into a problem, start here.
- [FAQs](faqs.md) — answers to common questions about optimization and modeling in Sympheny.
- [Common issues and solutions](common-issues.md) — fixes for issues you may run into.
- [Contact support](contact-support.md) — how to reach the Sympheny team.
---
# FAQs
What does "optimization" exactly mean, and how is it applied in Sympheny? Our senior software development engineer, Youssef Sherif, answers a few questions that might have popped into your mind.
## What are the biggest challenges when planning a complex energy system? And why do we need optimization?
Planning complex energy systems with sector coupling is more challenging than typical centralized energy systems. In terms of modeling, the degrees of freedom have become overwhelming. As a result, only simulating a few sets of system designs (i.e., rule-based search) to determine the optimal system design and operation runs the risk of missing out on optimal solutions. Although one could guarantee optimality by potentially iterating all possible system designs (i.e., brute-force search), such an approach is confined to small-scale systems because the number of possible solutions grows exponentially as the site grows.
To identify optimal solutions, Sympheny's solver uses mathematical optimization. Relative to traditional methods, this approach not only guarantees optimality of results but also effectively handles large-scale systems. Sympheny is a powerful energy system optimization tool that streamlines the process of creating a mathematical model and solving it, letting you focus on designing the best system possible.
## What is mathematical optimization? And how does Sympheny apply it?
Mathematical optimization is a sophisticated analytical tool that lets you describe complex real-world problems in a mathematical model and find a solution that optimizes an objective while adhering to user-defined constraints.
It has a wide range of applications in manufacturing, scheduling, transportation, economics, control engineering, marketing, policy modeling, and more. Sympheny uses mathematical optimization to identify cost-effective and emission-minimizing system designs and operation strategies for new and existing sites.

## What is required to prepare and solve an optimization problem?
An optimization problem or model consists of the following elements:
1. **Variables** (e.g., technology capacity variables, production per time step, binary variables (install or not install a technology))
2. **Constraints and bounds** (e.g., max production per time step, max capacity)
3. **Objective function** (e.g., total cost/profit, total emissions)
A typical optimization problem starts by defining the variables in the model. In the case of Sympheny, the variables are technologies, energy carriers, energy networks, etc. Then, constraints of these variables, such as maximum capacity, seasonal operation, and charging/discharging behaviors, are defined. Finally, the objective functions are set.
Once the optimization problem is defined, it is solved mathematically to find the best set of values for all variables that minimize/maximize the objective function while satisfying all constraints in the model.
## How can I share a project with another user?
You can share any project with another user by opening the options menu on the three-dot button and clicking **Send Project Copy**.

## How can I give priority to the use of a type of electricity (e.g. grid electricity vs. renewable electricity from PV) for a Conversion Technology?

Within a multiple-input system, priority is a variable of the optimization, so the optimization engine chooses whichever input is most favorable for reaching the objectives of the optimization.
For the best solution in terms of minimizing CO2, this means the optimization always favors renewable electricity over grid electricity (assuming the grid electricity has a higher CO2 intensity than the renewable electricity, which is true in most cases — except, for example, if you have very clean electricity from the grid and on-site production with PV and batteries with high grey energy).
For the best solution in terms of minimizing life-cycle cost, this means the optimization favors PV when the price of buying grid electricity is higher than selling renewable electricity: it maximizes the internal use of renewable electricity automatically, and chooses renewable electricity (from your PV) over grid electricity for the Heat Pump.
If installing a PV system is too expensive to be favored by the optimization while being necessary in your system design, you can force-install this technology under the **Optimization Options** tab.
## Can a Heat Pump and a Chiller also be installed as a bivalent system?

Yes — it's possible to use the waste heat of a cooling Technology candidate as an input for another Technology candidate (e.g., a Heat Pump).
## Why is the maximal energy produced by a Technology Candidate higher than the Optimal Capacity given in the results system diagram?
This is because the Optimal Capacity given in the system diagram represents the capacity of the (selected) primary output, while the output given in the results plot "Energy Flow Out" is the combined output.
In the example below, the Chiller candidate is dimensioned to an Optimal Capacity of 420 kW, but the maximal production in the results plot is 800 kWh/h for the combined outputs (Cooling and Waste Heat):


---
# Common issues and solutions
!!! info "Coming soon"
This page is in preparation. In the meantime, check the
[FAQs](faqs.md) for answers to common questions, or
[contact support](contact-support.md).
---
# Contact support
The fastest way to reach us is the [Sympheny support portal](https://urbansympheny.atlassian.net/servicedesk/customer/portal/2) — raise a request there for support questions, bug reports, and feedback.
You can also click the **Help** button in the bottom-right corner of the web app, or email [support@sympheny.com](mailto:support@sympheny.com).
---
# REST API
The Sympheny REST API gives you programmatic access to everything you can do in
the Sympheny web application: create projects and analyses, model energy hubs,
demands, supply technologies and networks, run optimizations, and integrate
Sympheny into your own tools and workflows.
If you work in Python, the [Python SDK](../sdk/index.md) wraps this API with
typed methods and automatic authentication — prefer it over calling the API
directly.
## Base URL
All requests go to a single host:
```
https://eu-north-1-api.sympheny.com
```
The path prefix selects the API area:
| Prefix | Area | What it covers |
| --- | --- | --- |
| `/sympheny-app` | Web application | Projects, analyses, scenarios, hubs, energy carriers, demands, technologies, networks. |
| `/backoffice` | Account | Access tokens and your user profile. |
| `/sense-api` | Solver | Submitting solver jobs, tracking their progress, and your job quota. |
## Authentication
Every endpoint except the token endpoint requires a Bearer token in the
`Authorization` header. See [Authentication](authentication.md) for the
login flow.
## Versioning
Some web application endpoints carry a version segment in the path (`v2`, `v2_1`,
`v2_2`). The [reference](reference/projects.md) documents the current version
of each operation — use the paths exactly as shown there.
## Responses and errors
Web application (`/sympheny-app`) endpoints wrap every response in an envelope:
```json
{
"data": { ... },
"status": { "code": "...", "desc": "...", "message": "..." }
}
```
The payload is in `data`; `status` carries a machine-readable code and a
human-readable message. Account (`/backoffice`) and solver (`/sense-api`)
endpoints return the payload directly and report errors as a JSON object with
a `detail` field.
Errors use conventional HTTP status codes: `400` for invalid input, `401` for
a missing, invalid, or expired token, `403` when the action isn't permitted
for your account, `404` for an unknown resource, `409` for conflicts (for
example a duplicate name), and `422` for request validation failures on
account and solver endpoints.
## Known issues
Some endpoints have surprising behaviors with client-side workarounds. They
are tracked in
[KNOWN_ISSUES.md](https://github.com/urban-sympheny/sympheny-toolbox/blob/main/KNOWN_ISSUES.md)
in the SDK repository.
## Reference
The [API reference](reference/projects.md) documents all operations, grouped
by resource — each page lists the operations' parameters, request and response
schemas, and example requests.
## API Explorer
Prefer trying requests as you read? The
[API Explorer](explorer.html){ target="_blank" rel="noopener" } renders the
same specification interactively with live "try it" support — paste a
[bearer token](authentication.md) and send requests straight from the browser.
It opens in a new tab; this reference stays the canonical documentation.
---
# Authentication
The API authenticates with JWT Bearer tokens. You exchange your Sympheny
account credentials (the email and password you use to log in to the web
application) for an access token, then send that token with every request.
## Get a token
Call
[`POST /backoffice/auth/ext/token`](reference/auth.md#operation-post_oauth_webapp_backoffice_auth_ext_token_post)
with your credentials:
=== "curl"
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/backoffice/auth/ext/token" \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "password": "..."}'
```
=== "Python"
```python
import httpx
response = httpx.post(
"https://eu-north-1-api.sympheny.com/backoffice/auth/ext/token",
json={"email": "you@example.com", "password": "..."},
)
response.raise_for_status()
token = response.json()["access_token"]
```
The response contains the token and its lifetime in seconds:
```json
{
"access_token": "eyJhbGciOi...",
"token_type": "Bearer",
"expires_in": 86400
}
```
The token endpoint is rate-limited against bursts of login attempts, so fetch
a token once and reuse it until expiry rather than logging in per request.
## Use the token
Send the token in the `Authorization` header of every request:
```bash
curl "https://eu-north-1-api.sympheny.com/sympheny-app/projects" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
A missing, invalid, or expired token yields `401 Unauthorized`.
## Token lifetime
Tokens expire `expires_in` seconds after they are issued and cannot be
refreshed — request a new one the same way. Tokens can also be revoked before
their stated expiry, so treat any `401` as a signal to re-authenticate and
retry once.
!!! note
The [Python SDK](../sdk/index.md) does all of this for you: it fetches a
token lazily on the first request, caches it until shortly before expiry,
and retries once with a fresh token on `401`.
## Keep credentials out of code
Read credentials from environment variables or a local file excluded from
version control — never commit them:
```python
import os
email = os.environ["SYMPHENY_EMAIL"]
password = os.environ["SYMPHENY_PASSWORD"]
```
---
# Projects
## View my projects { #operation-viewMyProjects }
```
GET /sympheny-app/projects
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.projects.list()`](../../sdk/reference/projects.md#method-projects-list).
Here you must use version=V2. Also name must be unique
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/projects" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoProjectSummaryResponseDto` |
**Example response** (200)
```json
{
"data": {
"projects": [
{
"projectName": "string",
"projectGuid": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"coverImage": "string",
"projectOwnerEmail": "string",
"secondaryOwners": [
{
"email": "string",
"canEdit": true,
"favorite": true
}
],
"lockUserEmail": "string",
"lock": true,
"lockTime": "2026-01-01T00:00:00Z",
"ownedByCurrentUser": true,
"editableByCurrentUser": true,
"originalDefaultProjectGuid": "string",
"version": "V1",
"favorite": true,
"gisCentroidX": 0.0,
"gisCentroidY": 0.0,
"zoomExtentXmin": 0.0,
"zoomExtentYmin": 0.0,
"zoomExtentXmax": 0.0,
"zoomExtentYmax": 0.0,
"processing": true
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Create new project { #operation-createNewProject }
```
POST /sympheny-app/projects
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.projects.create()`](../../sdk/reference/projects.md#method-projects-create).
Here you must use version=V2. Also name must be unique
**Request body** (`ProjectRequestDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `projectName` | string | yes | |
| `version` | string | yes | One of: `V1`, `V2`. |
| `webhookUrl` | string, nullable | no | |
| `favorite` | boolean, nullable | no | |
| `gisCentroidX` | number, nullable | no | |
| `gisCentroidY` | number, nullable | no | |
| `zoomExtentXmin` | number, nullable | no | |
| `zoomExtentYmin` | number, nullable | no | |
| `zoomExtentXmax` | number, nullable | no | |
| `zoomExtentYmax` | number, nullable | no | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/projects" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"projectName": "string",
"version": "V1",
"webhookUrl": "string",
"favorite": true,
"gisCentroidX": 0.0,
"gisCentroidY": 0.0,
"zoomExtentXmin": 0.0,
"zoomExtentYmin": 0.0,
"zoomExtentXmax": 0.0,
"zoomExtentYmax": 0.0
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoProjectResponseDto` |
**Example response** (201)
```json
{
"data": {
"projectName": "string",
"projectGuid": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"coverImage": "string",
"projectOwnerEmail": "string",
"secondaryOwners": [
{
"email": "string",
"canEdit": true,
"favorite": true
}
],
"lockUserEmail": "string",
"lock": true,
"lockTime": "2026-01-01T00:00:00Z",
"ownedByCurrentUser": true,
"editableByCurrentUser": true,
"originalDefaultProjectGuid": "string",
"version": "V1",
"favorite": true,
"gisCentroidX": 0.0,
"gisCentroidY": 0.0,
"zoomExtentXmin": 0.0,
"zoomExtentYmin": 0.0,
"zoomExtentXmax": 0.0,
"zoomExtentYmax": 0.0,
"processing": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## View project details { #operation-viewProjectDetails }
```
GET /sympheny-app/projects/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.projects.get()`](../../sdk/reference/projects.md#method-projects-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
| `includeAnalyses` | query | boolean | no | Default: `true`. |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/projects/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoProjectDetailResponseDto` |
**Example response** (200)
```json
{
"data": {
"images": [
{
"url": "string",
"guid": "string",
"cover": true
}
],
"projectName": "string",
"projectGuid": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"projectOwner": "string",
"projectOwnerEmail": "string",
"secondaryOwners": [
{
"email": "string",
"canEdit": true,
"favorite": true
}
],
"lockUserEmail": "string",
"lock": true,
"lockTime": "2026-01-01T00:00:00Z",
"ownedByCurrentUser": true,
"editableByCurrentUser": true,
"ownerHistory": [
{
"ownedAt": "2026-01-01T00:00:00Z",
"ownerEmail": "string"
}
],
"analyses": [
{
"analysisGuid": "string",
"analysisName": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"scenarios": [
{
"scenarioGuid": "string",
"scenarioName": "string",
"updated": "2026-01-01T00:00:00Z",
"readyForExecution": true,
"preparingExecutionV2": true,
"masterScenarioGuid": "string",
"projectGuid": "string",
"projectName": "string",
"analysisGuid": "string",
"analysisName": "string",
"enymap": {
"length": null,
"interestRate": null,
"exchangeCurrency": null,
"exchangeRate": null,
"scope": null,
"technologies": null,
"demands": null,
"imports": null,
"exports": null,
"multiHubs": null
},
"variant": true
}
]
}
],
"coverImage": "string",
"originalDefaultProjectGuid": "string",
"version": "V1",
"webhookUrl": "string",
"favorite": true,
"gisCentroidX": 0.0,
"gisCentroidY": 0.0,
"zoomExtentXmin": 0.0,
"zoomExtentYmin": 0.0,
"zoomExtentXmax": 0.0,
"zoomExtentYmax": 0.0
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Delete project { #operation-deleteProject }
```
DELETE /sympheny-app/projects/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.projects.delete()`](../../sdk/reference/projects.md#method-projects-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/projects/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoProjectSummaryResponseDto` |
**Example response** (200)
```json
{
"data": {
"projects": [
{
"projectName": "string",
"projectGuid": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"coverImage": "string",
"projectOwnerEmail": "string",
"secondaryOwners": [
{
"email": "string",
"canEdit": true,
"favorite": true
}
],
"lockUserEmail": "string",
"lock": true,
"lockTime": "2026-01-01T00:00:00Z",
"ownedByCurrentUser": true,
"editableByCurrentUser": true,
"originalDefaultProjectGuid": "string",
"version": "V1",
"favorite": true,
"gisCentroidX": 0.0,
"gisCentroidY": 0.0,
"zoomExtentXmin": 0.0,
"zoomExtentYmin": 0.0,
"zoomExtentXmax": 0.0,
"zoomExtentYmax": 0.0,
"processing": true
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Analyses
## Delete analysis { #operation-deleteAnalysis }
```
DELETE /sympheny-app/analysis/{analysisGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.analyses.delete()`](../../sdk/reference/analyses.md#method-analyses-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `analysisGuid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/analysis/{analysisGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoStatus` |
**Example response** (200)
```json
{
"data": {
"code": "string",
"desc": "string",
"message": "string"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## List 2 { #operation-list_2 }
```
GET /sympheny-app/projects/{guid}/analyses
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.analyses.list()`](../../sdk/reference/analyses.md#method-analyses-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/projects/{guid}/analyses" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `PagedResponseAnalysisResponseDto` |
**Example response** (200)
```json
{
"data": [
{
"analysisGuid": "string",
"analysisName": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"scenarios": [
{
"scenarioGuid": "string",
"scenarioName": "string",
"updated": "2026-01-01T00:00:00Z",
"readyForExecution": true,
"preparingExecutionV2": true,
"masterScenarioGuid": "string",
"projectGuid": "string",
"projectName": "string",
"analysisGuid": "string",
"analysisName": "string",
"enymap": {
"length": 0,
"interestRate": 0.0,
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"scope": "BUILDING_DEVELOPMENTS",
"technologies": [
"PV"
],
"demands": [
"HOT_WATER"
],
"imports": [
"ELECTRICITY"
],
"exports": [
"HEAT_AMBIENT"
],
"multiHubs": true
},
"variant": true
}
]
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
},
"totalElements": 0,
"totalPages": 0,
"hasNext": true
}
```
## Create new analysis { #operation-createNewAnalysis }
```
POST /sympheny-app/projects/{guid}/analyses
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.analyses.create()`](../../sdk/reference/analyses.md#method-analyses-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Request body** (`AnalysisRequestDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `analysisName` | string | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/projects/{guid}/analyses" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"analysisName": "string"
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoAnalysisResponseDto` |
**Example response** (201)
```json
{
"data": {
"analysisGuid": "string",
"analysisName": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"scenarios": [
{
"scenarioGuid": "string",
"scenarioName": "string",
"updated": "2026-01-01T00:00:00Z",
"readyForExecution": true,
"preparingExecutionV2": true,
"masterScenarioGuid": "string",
"projectGuid": "string",
"projectName": "string",
"analysisGuid": "string",
"analysisName": "string",
"enymap": {
"length": 0,
"interestRate": 0.0,
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"scope": "BUILDING_DEVELOPMENTS",
"technologies": [
"PV"
],
"demands": [
"HOT_WATER"
],
"imports": [
"ELECTRICITY"
],
"exports": [
"HEAT_AMBIENT"
],
"multiHubs": true
},
"variant": true
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## View analysis details { #operation-viewAnalysisDetails }
```
GET /sympheny-app/projects/{guid}/analysis/{analysisGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.analyses.get()`](../../sdk/reference/analyses.md#method-analyses-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
| `analysisGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/projects/{guid}/analysis/{analysisGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoAnalysisDetailsResponseDto` |
**Example response** (200)
```json
{
"data": {
"analysisGuid": "string",
"analysisName": "string",
"executionStatus": "IN_SPECIFICATION",
"executionInProgress": true,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"coverImage": "string",
"projectName": "string",
"scenarios": [
{
"scenarioGuid": "string",
"scenarioName": "string",
"updated": "2026-01-01T00:00:00Z",
"readyForExecution": true,
"preparingExecutionV2": true,
"masterScenarioGuid": "string",
"projectGuid": "string",
"projectName": "string",
"analysisGuid": "string",
"analysisName": "string",
"enymap": {
"length": 0,
"interestRate": 0.0,
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"scope": "BUILDING_DEVELOPMENTS",
"technologies": [
"PV"
],
"demands": [
"HOT_WATER"
],
"imports": [
"ELECTRICITY"
],
"exports": [
"HEAT_AMBIENT"
],
"multiHubs": true
},
"variant": true
}
],
"executionOptions": {
"objective1": "string",
"objective2": "string",
"numberOfParetoPoints": 0,
"scenarios": [
"string"
]
},
"results": {
"executionSubmitted": "2026-01-01T00:00:00Z",
"scenarios": [
{
"scenarioName": "string",
"status": "IN_SPECIFICATION",
"statusMessage": "string",
"paretoPointsCompleted": "string",
"inputFilepath": "string",
"outputFilepath": "string"
}
],
"dashboardUrl": "string"
},
"projectGuid": "string"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Scenarios
## List scenarios { #operation-listScenarios }
```
GET /sympheny-app/analysis/{guid}/scenario
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.scenarios.list()`](../../sdk/reference/scenarios.md#method-scenarios-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/analysis/{guid}/scenario" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoListFScenarioResponseDto` |
**Example response** (200)
```json
{
"data": [
{
"scenarioGuid": "string",
"scenarioName": "string",
"updated": "2026-01-01T00:00:00Z",
"readyForExecution": true,
"preparingExecutionV2": true,
"masterScenarioGuid": "string",
"projectGuid": "string",
"projectName": "string",
"analysisGuid": "string",
"analysisName": "string",
"enymap": {
"length": 0,
"interestRate": 0.0,
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"scope": "BUILDING_DEVELOPMENTS",
"technologies": [
"PV"
],
"demands": [
"HOT_WATER"
],
"imports": [
"ELECTRICITY"
],
"exports": [
"HEAT_AMBIENT"
],
"multiHubs": true
},
"variant": true
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Create new scenario { #operation-createNewScenario }
```
POST /sympheny-app/analysis/{guid}/scenario
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.scenarios.create()`](../../sdk/reference/scenarios.md#method-scenarios-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Request body** (`ScenarioRequestDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `scenarioName` | string | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/analysis/{guid}/scenario" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scenarioName": "string"
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoScenarioResponseDto` |
**Example response** (201)
```json
{
"data": {
"scenarioGuid": "string",
"scenarioName": "string",
"updated": "2026-01-01T00:00:00Z",
"readyForExecution": true,
"preparingExecutionV2": true,
"masterScenarioGuid": "string",
"projectGuid": "string",
"projectName": "string",
"analysisGuid": "string",
"analysisName": "string",
"enymap": {
"length": 0,
"interestRate": 0.0,
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"scope": "BUILDING_DEVELOPMENTS",
"technologies": [
"PV"
],
"demands": [
"HOT_WATER"
],
"imports": [
"ELECTRICITY"
],
"exports": [
"HEAT_AMBIENT"
],
"multiHubs": true
},
"variant": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get scenario { #operation-getScenario }
```
GET /sympheny-app/scenario/{scenarioGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.scenarios.get()`](../../sdk/reference/scenarios.md#method-scenarios-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenario/{scenarioGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoScenarioResponseDto` |
**Example response** (200)
```json
{
"data": {
"scenarioGuid": "string",
"scenarioName": "string",
"updated": "2026-01-01T00:00:00Z",
"readyForExecution": true,
"preparingExecutionV2": true,
"masterScenarioGuid": "string",
"projectGuid": "string",
"projectName": "string",
"analysisGuid": "string",
"analysisName": "string",
"enymap": {
"length": 0,
"interestRate": 0.0,
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"scope": "BUILDING_DEVELOPMENTS",
"technologies": [
"PV"
],
"demands": [
"HOT_WATER"
],
"imports": [
"ELECTRICITY"
],
"exports": [
"HEAT_AMBIENT"
],
"multiHubs": true
},
"variant": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Delete scenario { #operation-deleteScenario }
```
DELETE /sympheny-app/scenario/{scenarioGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.scenarios.delete()`](../../sdk/reference/scenarios.md#method-scenarios-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenario/{scenarioGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoStatus` |
**Example response** (200)
```json
{
"data": {
"code": "string",
"desc": "string",
"message": "string"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Copy scenario { #operation-copyScenario }
```
PUT /sympheny-app/scenarios/copy/{scenarioGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.scenarios.copy()`](../../sdk/reference/scenarios.md#method-scenarios-copy).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `analysisDestinationGuid` | query | string | no | |
| `name` | query | string | no | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/copy/{scenarioGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoScenarioResponseDto` |
**Example response** (200)
```json
{
"data": {
"scenarioGuid": "string",
"scenarioName": "string",
"updated": "2026-01-01T00:00:00Z",
"readyForExecution": true,
"preparingExecutionV2": true,
"masterScenarioGuid": "string",
"projectGuid": "string",
"projectName": "string",
"analysisGuid": "string",
"analysisName": "string",
"enymap": {
"length": 0,
"interestRate": 0.0,
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"scope": "BUILDING_DEVELOPMENTS",
"technologies": [
"PV"
],
"demands": [
"HOT_WATER"
],
"imports": [
"ELECTRICITY"
],
"exports": [
"HEAT_AMBIENT"
],
"multiHubs": true
},
"variant": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Rename scenario { #operation-renameScenario }
```
PUT /sympheny-app/scenarios/{scenarioGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.scenarios.rename()`](../../sdk/reference/scenarios.md#method-scenarios-rename).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`ScenarioRequestDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `scenarioName` | string | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scenarioName": "string"
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoScenarioResponseDto` |
**Example response** (200)
```json
{
"data": {
"scenarioGuid": "string",
"scenarioName": "string",
"updated": "2026-01-01T00:00:00Z",
"readyForExecution": true,
"preparingExecutionV2": true,
"masterScenarioGuid": "string",
"projectGuid": "string",
"projectName": "string",
"analysisGuid": "string",
"analysisName": "string",
"enymap": {
"length": 0,
"interestRate": 0.0,
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"scope": "BUILDING_DEVELOPMENTS",
"technologies": [
"PV"
],
"demands": [
"HOT_WATER"
],
"imports": [
"ELECTRICITY"
],
"exports": [
"HEAT_AMBIENT"
],
"multiHubs": true
},
"variant": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Stages
## Get 1 { #operation-get_1 }
```
GET /sympheny-app/scenarios/stages/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.stages.get()`](../../sdk/reference/stages.md#method-stages-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/stages/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoStageResponseDto` |
**Example response** (200)
```json
{
"data": {
"name": "string",
"length": 0,
"interestRate": 0.0,
"inflationRate": 0.0,
"index": 0,
"guid": "00000000-0000-0000-0000-000000000000"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## List { #operation-list }
```
GET /sympheny-app/scenarios/{scenarioGuid}/stages
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.stages.list()`](../../sdk/reference/stages.md#method-stages-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/stages" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoListStageResponseDto` |
**Example response** (200)
```json
{
"data": [
{
"name": "string",
"length": 0,
"interestRate": 0.0,
"inflationRate": 0.0,
"index": 0,
"guid": "00000000-0000-0000-0000-000000000000"
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Create { #operation-create }
```
POST /sympheny-app/scenarios/{scenarioGuid}/stages
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.stages.create()`](../../sdk/reference/stages.md#method-stages-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`StageRequestDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | |
| `length` | integer (int32) | yes | |
| `interestRate` | number, nullable | no | |
| `inflationRate` | number, nullable | no | |
| `index` | integer (int32) | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/stages" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"length": 0,
"interestRate": 0.0,
"inflationRate": 0.0,
"index": 0
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoStageResponseDto` |
**Example response** (201)
```json
{
"data": {
"name": "string",
"length": 0,
"interestRate": 0.0,
"inflationRate": 0.0,
"index": 0,
"guid": "00000000-0000-0000-0000-000000000000"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Update { #operation-update }
```
PUT /sympheny-app/scenarios/{scenarioGuid}/stages/{stageGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.stages.update()`](../../sdk/reference/stages.md#method-stages-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `stageGuid` | path | string (uuid) | yes | |
**Request body** (`StageResponseDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | |
| `length` | integer (int32) | yes | |
| `interestRate` | number, nullable | no | |
| `inflationRate` | number, nullable | no | |
| `index` | integer (int32) | yes | |
| `guid` | string (uuid), nullable | no | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/stages/{stageGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"length": 0,
"interestRate": 0.0,
"inflationRate": 0.0,
"index": 0,
"guid": "00000000-0000-0000-0000-000000000000"
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoStageResponseDto` |
**Example response** (200)
```json
{
"data": {
"name": "string",
"length": 0,
"interestRate": 0.0,
"inflationRate": 0.0,
"index": 0,
"guid": "00000000-0000-0000-0000-000000000000"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Delete { #operation-delete }
```
DELETE /sympheny-app/scenarios/{scenarioGuid}/stages/{stageGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.stages.delete()`](../../sdk/reference/stages.md#method-stages-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `stageGuid` | path | string (uuid) | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/stages/{stageGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | — |
---
# Hubs
## Get hub { #operation-getHub }
```
GET /sympheny-app/scenarios/hubs/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.hubs.get()`](../../sdk/reference/hubs.md#method-hubs-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/hubs/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoHubResponseDto` |
**Example response** (200)
```json
{
"data": {
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Delete hub { #operation-deleteHub }
```
DELETE /sympheny-app/scenarios/hubs/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.hubs.delete()`](../../sdk/reference/hubs.md#method-hubs-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/hubs/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoListHubResponseDto` |
**Example response** (200)
```json
{
"data": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Find all hubs by scenario { #operation-findAllHubsByScenario }
```
GET /sympheny-app/scenarios/{scenarioGuid}/hubs
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.hubs.list()`](../../sdk/reference/hubs.md#method-hubs-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/hubs" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoListFHubResponseDto` |
**Example response** (200)
```json
{
"data": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Create new hub { #operation-createNewHub }
```
POST /sympheny-app/scenarios/{scenarioGuid}/hubs
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.hubs.create()`](../../sdk/reference/hubs.md#method-hubs-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`HubRequestDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hubName` | string | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/hubs" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hubName": "string"
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoHubResponseDto` |
**Example response** (201)
```json
{
"data": {
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Edit hub { #operation-editHub }
```
PUT /sympheny-app/v2/scenarios/hubs/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.hubs.update()`](../../sdk/reference/hubs.md#method-hubs-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Request body** (`HubResponseDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hubGuid` | string | yes | |
| `hubName` | string | yes | |
| `updated` | string (date-time) | yes | |
| `created` | string (date-time) | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/hubs/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoHubResponseDto` |
**Example response** (200)
```json
{
"data": {
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Energy carriers
## Get energy carrier by guid { #operation-getEnergyCarrierByGuid }
```
GET /sympheny-app/carriers/{carrierGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_carriers.get()`](../../sdk/reference/energy_carriers.md#method-energy_carriers-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `carrierGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/carriers/{carrierGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoEnergyCarrierResponseDto` |
**Example response** (200)
```json
{
"data": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Delete energy carrier { #operation-deleteEnergyCarrier }
```
DELETE /sympheny-app/scenarios/carriers/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_carriers.delete()`](../../sdk/reference/energy_carriers.md#method-energy_carriers-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/carriers/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoEnergyCarriersListResponseDto` |
**Example response** (200)
```json
{
"data": {
"energyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Find all energy carriers by scenario { #operation-findAllEnergyCarriersByScenario }
```
GET /sympheny-app/scenarios/{scenarioGuid}/carriers
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_carriers.list()`](../../sdk/reference/energy_carriers.md#method-energy_carriers-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/carriers" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoEnergyCarriersListResponseDto` |
**Example response** (200)
```json
{
"data": {
"energyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Edit energy carrier v2 { #operation-editEnergyCarrierV2 }
```
PUT /sympheny-app/v2/carriers/{carrierGuid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_carriers.update()`](../../sdk/reference/energy_carriers.md#method-energy_carriers-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `carrierGuid` | path | string | yes | |
**Request body** (`EnergyCarrierResponseDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energyCarrierGuid` | string | yes | |
| `typeKey` | string | yes | |
| `typeDisplayName` | string | yes | |
| `subtypeKey` | string | yes | |
| `subtypeDisplayName` | string | yes | |
| `energyCarrierName` | string | yes | |
| `colorHexCode` | string | yes | |
| `fixedInputShare` | number, nullable | no | |
| `outputEfficiency` | number, nullable | no | |
| `customOutputEfficiencyActivated` | boolean | yes | |
| `customInputEfficiencyActivated` | boolean | yes | |
| `customSeasonalityValues` | array of `CustomSeasonalityResponseDto`, nullable | no | |
| `outputEfficiencyProfileId` | integer (int64), nullable | no | |
| `created` | string (date-time) | yes | |
| `primary` | boolean, nullable | no | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2/carriers/{carrierGuid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoEnergyCarrierResponseDto` |
**Example response** (200)
```json
{
"data": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Create new energy carrier v2 { #operation-createNewEnergyCarrierV2 }
```
POST /sympheny-app/v2/scenarios/{scenarioGuid}/carriers
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_carriers.create()`](../../sdk/reference/energy_carriers.md#method-energy_carriers-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`EnergyCarrierRequestDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `subType` | string | yes | One of: `ELECTRICITY`, `ELECTRICITY_RENEWABLE`, `WOOD_CHIPS`, `WOOD_PELLETS`, `COAL`, `OIL`, `GAS`, `BIOGAS`, `HYDROGEN`, `HYDROGEN_PRESSURIZED`, `COOLING_1`, `COOLING_2`, `COOLING_3`, `COOLING_4`, `ICE`, `HEAT_1`, `HEAT_2`, `HEAT_3`, `HEAT_4`, `HEAT_5`, `HEAT_6`, `HEAT_7`, `HEAT_8`, `HEAT_9`, `HEAT_AMBIENT`, `STEAM_LOW_PRESSURE`, `SOLAR_ROOF`, `SOLAR_FACADE`, `SOLAR_PARAPET`, `WIND`, `HYDRO`, `BIOMASS`, `GEOTHERMAL`, `TIDAL`, `PROCESS_WASTE_HEAT`, `CUSTOM`. |
| `energyCarrierName` | string | yes | |
| `colorHexCode` | string, nullable | no | |
| `allowVirtualLoad` | boolean, nullable | no | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/carriers" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"subType": "ELECTRICITY",
"energyCarrierName": "string",
"colorHexCode": "string",
"allowVirtualLoad": true
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoEnergyCarrierResponseDto` |
**Example response** (201)
```json
{
"data": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Energy demands
## Delete energy demand profile { #operation-deleteEnergyDemandProfile }
```
DELETE /sympheny-app/scenarios/energy-demands/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_demands.delete()`](../../sdk/reference/energy_demands.md#method-energy_demands-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/energy-demands/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoEnergyDemandListResponseDto` |
**Example response** (200)
```json
{
"data": {
"energyDemands": [
{
"energyDemandGuid": "string",
"energyCarrierName": "string",
"hubName": "string",
"energyDemandName": "string",
"energyCarrierGuid": "string",
"hubGuid": "string",
"demandSalePrice": 0.0,
"energyDemandUserSavedMetadataGuid": "string",
"energyDemandUserSavedMetadataName": "string",
"energyDemandUserSavedMetadataReferenceArea": 0.0,
"scalingFactor": 0.0,
"energyDemandMetadataGuid": "string",
"energyDemandMetadataName": "string",
"energyDemandMetadataDbOrganization": "string",
"energyDemandMetadataType": "ELECTRICITY",
"energyDemandMetadataBuildingType": "RESIDENCE_MFH",
"energyDemandMetadataBuildingAge": "AGE_UNDER_1970",
"energyDemandMetadataOption": "OPTION_1",
"energyDemandMetadataReferencedAreaM2": 0.0,
"energyDemandMetadataSpecificEnergyDemandValueKWhM2": 0.0,
"energyDemandMetadataTotalAnnualDemand": 0.0,
"multiplicationFactorPreview": 0,
"multiplicationFactor": 0
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get energy demand details by guid v2 { #operation-getEnergyDemandDetailsByGuidV2 }
```
GET /sympheny-app/v2/energy-demands/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_demands.get()`](../../sdk/reference/energy_demands.md#method-energy_demands-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
| `scenarioVariantGuid` | query | string | no | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/energy-demands/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoEnergyDemandDetailResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"energyDemandGuid": "string",
"energyDemandName": "string",
"energyCarrierGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"demandSalePrice": 0.0,
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"demandProfileId": 0,
"demandScalingFactor": 0.0,
"demandSalePriceProfileId": 0,
"demandSalePriceScalingFactor": 0.0,
"energyDemandUserSavedMetadataGuid": "string",
"energyDemandUserSavedMetadataName": "string",
"energyDemandUserSavedMetadataReferenceArea": 0.0,
"scalingFactor": 0.0,
"energyDemandMetadataGuid": "string",
"energyDemandMetadataName": "string",
"energyDemandMetadataDbOrganization": "string",
"energyDemandMetadataType": "ELECTRICITY",
"energyDemandMetadataBuildingType": "RESIDENCE_MFH",
"energyDemandMetadataBuildingAge": "AGE_UNDER_1970",
"energyDemandMetadataOption": "OPTION_1",
"energyDemandMetadataReferencedAreaM2": 0.0,
"energyDemandMetadataSpecificEnergyDemandValueKWhM2": 0.0,
"energyDemandMetadataTotalAnnualDemand": 0.0,
"multiplicationFactorPreview": 0,
"multiplicationFactor": 0,
"reverse": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get all energy demands by scenario v2 { #operation-getAllEnergyDemandsByScenarioV2 }
```
GET /sympheny-app/v2/scenarios/{scenarioGuid}/energy-demands
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_demands.list()`](../../sdk/reference/energy_demands.md#method-energy_demands-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/energy-demands" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoListEnergyDemandResponseDtoV2` |
**Example response** (200)
```json
{
"data": [
{
"energyDemandGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"energyDemandName": "string",
"energyCarrierGuid": "string",
"demandSalePrice": 0.0,
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"demandProfileId": 0,
"demandScalingFactor": 0.0,
"demandSalePriceProfileId": 0,
"demandSalePriceScalingFactor": 0.0,
"energyDemandUserSavedMetadataGuid": "string",
"energyDemandUserSavedMetadataName": "string",
"energyDemandUserSavedMetadataReferenceArea": 0.0,
"scalingFactor": 0.0,
"energyDemandMetadataGuid": "string",
"energyDemandMetadataName": "string",
"energyDemandMetadataDbOrganization": "string",
"energyDemandMetadataType": "ELECTRICITY",
"energyDemandMetadataBuildingType": "RESIDENCE_MFH",
"energyDemandMetadataBuildingAge": "AGE_UNDER_1970",
"energyDemandMetadataOption": "OPTION_1",
"energyDemandMetadataReferencedAreaM2": 0.0,
"energyDemandMetadataSpecificEnergyDemandValueKWhM2": 0.0,
"energyDemandMetadataTotalAnnualDemand": 0.0,
"multiplicationFactorPreview": 0,
"multiplicationFactor": 0,
"reverse": true
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Upload new energy demand profile v2 1 { #operation-uploadNewEnergyDemandProfileV2_1 }
```
POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/energy-demands
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_demands.create()`](../../sdk/reference/energy_demands.md#method-energy_demands-create).
demandProfileId and demandSalePrice must be exclusive
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`EnergyDemandRequestDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hubGuids` | array of string | yes | |
| `energyCarrierGuid` | string | yes | |
| `demandProfileId` | integer (int64) | yes | |
| `demandScalingFactor` | number, nullable | no | |
| `name` | string | yes | |
| `demandSalePrice` | number, nullable | no | |
| `demandSalePriceProfileId` | integer (int64), nullable | no | |
| `demandSalePriceScalingFactor` | number, nullable | no | |
| `stages` | array of string (uuid) | yes | |
| `multiplicationFactor` | integer (int32), nullable | no | |
| `reverse` | boolean, nullable | no | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/{scenarioGuid}/energy-demands" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hubGuids": [
"string"
],
"energyCarrierGuid": "string",
"demandProfileId": 0,
"demandScalingFactor": 0.0,
"name": "string",
"demandSalePrice": 0.0,
"demandSalePriceProfileId": 0,
"demandSalePriceScalingFactor": 0.0,
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"multiplicationFactor": 0,
"reverse": true
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoEnergyDemandResponseDtoV2` |
**Example response** (201)
```json
{
"data": {
"energyDemandGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"energyDemandName": "string",
"energyCarrierGuid": "string",
"demandSalePrice": 0.0,
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"demandProfileId": 0,
"demandScalingFactor": 0.0,
"demandSalePriceProfileId": 0,
"demandSalePriceScalingFactor": 0.0,
"energyDemandUserSavedMetadataGuid": "string",
"energyDemandUserSavedMetadataName": "string",
"energyDemandUserSavedMetadataReferenceArea": 0.0,
"scalingFactor": 0.0,
"energyDemandMetadataGuid": "string",
"energyDemandMetadataName": "string",
"energyDemandMetadataDbOrganization": "string",
"energyDemandMetadataType": "ELECTRICITY",
"energyDemandMetadataBuildingType": "RESIDENCE_MFH",
"energyDemandMetadataBuildingAge": "AGE_UNDER_1970",
"energyDemandMetadataOption": "OPTION_1",
"energyDemandMetadataReferencedAreaM2": 0.0,
"energyDemandMetadataSpecificEnergyDemandValueKWhM2": 0.0,
"energyDemandMetadataTotalAnnualDemand": 0.0,
"multiplicationFactorPreview": 0,
"multiplicationFactor": 0,
"reverse": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Update energy demand v2 2 { #operation-updateEnergyDemandV2_2 }
```
PUT /sympheny-app/v2_2/scenarios/{scenarioGuid}/energy-demands/{demand-guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.energy_demands.update()`](../../sdk/reference/energy_demands.md#method-energy_demands-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `demand-guid` | path | string | yes | |
**Request body** (`EnergyDemandResponseDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energyDemandGuid` | string, nullable | no | |
| `energyCarrierName` | string | yes | |
| `hubs` | array of `HubResponseDto` | yes | |
| `energyDemandName` | string | yes | |
| `energyCarrierGuid` | string | yes | |
| `demandSalePrice` | number, nullable | no | |
| `stages` | array of string (uuid) | yes | |
| `demandProfileId` | integer (int64) | yes | |
| `demandScalingFactor` | number, nullable | no | |
| `demandSalePriceProfileId` | integer (int64), nullable | no | |
| `demandSalePriceScalingFactor` | number, nullable | no | |
| `energyDemandUserSavedMetadataGuid` | string, nullable | no | |
| `energyDemandUserSavedMetadataName` | string, nullable | no | |
| `energyDemandUserSavedMetadataReferenceArea` | number, nullable | no | |
| `scalingFactor` | number, nullable | no | |
| `energyDemandMetadataGuid` | string, nullable | no | |
| `energyDemandMetadataName` | string, nullable | no | |
| `energyDemandMetadataDbOrganization` | string, nullable | no | |
| `energyDemandMetadataType` | string, nullable | no | One of: `ELECTRICITY`, `SPACE_HEATING`, `HOT_WATER`, `COOLING`, `None`. |
| `energyDemandMetadataBuildingType` | string, nullable | no | One of: `RESIDENCE_MFH`, `RESIDENCE_SFH`, `ADMINISTRATION`, `OFFICES`, `SCHOOLS`, `RETAIL`, `RESTAURANT`, `ASSEMBLY`, `HOSPITALS`, `INDUSTRY`, `WAREHOUSE`, `SPORTS_CENTER`, `INDOOR_POOL`, `HOTEL`, `INDUSTRY_1_SHIFT_FABRICATED_METALS`, `INDUSTRY_2_SHIFT_FABRICATED_METALS`, `INDUSTRY_FOOD_PROCESSING`, `INDUSTRY_GENERAL_MANUFACTURER`, `INDUSTRY_PHARMACEUTICAL`, `INDUSTRY_PLASTIC_MANUFACTURER`, `INDUSTRY_SERVICES`, `INDUSTRY_WAREHOUSE`, `None`. |
| `energyDemandMetadataBuildingAge` | string, nullable | no | One of: `AGE_UNDER_1970`, `AGE_1970_1980`, `AGE_1980_1995`, `AGE_1995_2005`, `AGE_2005_2015`, `AGE_OVER_2015`, `SIA_2024_EXISTING_MFH`, `SIA_2024_EXISTING_SFH`, `SIA_2024_EXISTING_HOTEL_ROOM`, `SIA_2024_EXISTING_LOBBY`, `SIA_2024_EXISTING_SINGLE_GROUP_OFFICE`, `SIA_2024_EXISTING_OPEN_PLAN_OFFICE`, `SIA_2024_EXISTING_MEETING_ROOM`, `SIA_2024_EXISTING_COUNTER_HALL`, `SIA_2024_EXISTING_CLASS_ROOM`, `SIA_2024_EXISTING_TEACHERS_LOUNGE`, `SIA_2024_EXISTING_LIBRARY`, `SIA_2024_EXISTING_AUDITORIUM`, `SIA_2024_EXISTING_SCHOOL_SUBJECT_ROOM`, `SIA_2024_EXISTING_FOOD_SALE_STORE`, `SIA_2024_EXISTING_SPECIALTY_STORE`, `SIA_2024_EXISTING_SALES_FURNITURE_DIY_GARDEN`, `SIA_2024_EXISTING_PATIENT_ROOM`, `SIA_2024_EXISTING_WARD_ROOM`, `SIA_2024_EXISTING_TREATMENT_ROOM`, `SIA_2024_EXISTING_WAREHOUSE`, `SIA_2024_EXISTING_GYMNASIUM`, `SIA_2024_EXISTING_FITNESS_ROOM`, `SIA_2024_EXISTING_INDOOR_SWIMMING_POOL`, `SIA_2024_STANDARD_MFH`, `SIA_2024_STANDARD_SFH`, `SIA_2024_STANDARD_HOTEL_ROOM`, `SIA_2024_STANDARD_LOBBY`, `SIA_2024_STANDARD_SINGLE_GROUP_OFFICE`, `SIA_2024_STANDARD_OPEN_PLAN_OFFICE`, `SIA_2024_STANDARD_MEETING_ROOM`, `SIA_2024_STANDARD_COUNTER_HALL`, `SIA_2024_STANDARD_CLASS_ROOM`, `SIA_2024_STANDARD_TEACHERS_LOUNGE`, `SIA_2024_STANDARD_LIBRARY`, `SIA_2024_STANDARD_AUDITORIUM`, `SIA_2024_STANDARD_SCHOOL_SUBJECT_ROOM`, `SIA_2024_STANDARD_FOOD_SALE_STORE`, `SIA_2024_STANDARD_SPECIALTY_STORE`, `SIA_2024_STANDARD_SALES_FURNITURE_DIY_GARDEN`, `SIA_2024_STANDARD_PATIENT_ROOM`, `SIA_2024_STANDARD_WARD_ROOM`, `SIA_2024_STANDARD_TREATMENT_ROOM`, `SIA_2024_STANDARD_WAREHOUSE`, `SIA_2024_STANDARD_GYMNASIUM`, `SIA_2024_STANDARD_FITNESS_ROOM`, `SIA_2024_STANDARD_INDOOR_SWIMMING_POOL`, `SIA_2024_TARGET_MFH`, `SIA_2024_TARGET_SFH`, `SIA_2024_TARGET_HOTEL_ROOM`, `SIA_2024_TARGET_LOBBY`, `SIA_2024_TARGET_SINGLE_GROUP_OFFICE`, `SIA_2024_TARGET_OPEN_PLAN_OFFICE`, `SIA_2024_TARGET_MEETING_ROOM`, `SIA_2024_TARGET_COUNTER_HALL`, `SIA_2024_TARGET_CLASS_ROOM`, `SIA_2024_TARGET_TEACHERS_LOUNGE`, `SIA_2024_TARGET_LIBRARY`, `SIA_2024_TARGET_AUDITORIUM`, `SIA_2024_TARGET_SCHOOL_SUBJECT_ROOM`, `SIA_2024_TARGET_FOOD_SALE_STORE`, `SIA_2024_TARGET_SPECIALTY_STORE`, `SIA_2024_TARGET_SALES_FURNITURE_DIY_GARDEN`, `SIA_2024_TARGET_PATIENT_ROOM`, `SIA_2024_TARGET_WARD_ROOM`, `SIA_2024_TARGET_TREATMENT_ROOM`, `SIA_2024_TARGET_WAREHOUSE`, `SIA_2024_TARGET_GYMNASIUM`, `SIA_2024_TARGET_FITNESS_ROOM`, `SIA_2024_TARGET_INDOOR_SWIMMING_POOL`, `MINERGIE_NEW_CONSTRUCTION`, `MINERGIE_RENOVATION`, `MINERGIE_A`, `MINERGIE_P_NEW_CONSTRUCTION`, `MINERGIE_P_RENOVATION`, `OTHERS`, `None`. |
| `energyDemandMetadataOption` | string, nullable | no | One of: `OPTION_1`, `OPTION_2`, `OPTION_3`, `None`. |
| `energyDemandMetadataReferencedAreaM2` | number, nullable | no | |
| `energyDemandMetadataSpecificEnergyDemandValueKWhM2` | number, nullable | no | |
| `energyDemandMetadataTotalAnnualDemand` | number, nullable | no | |
| `multiplicationFactorPreview` | integer (int32), nullable | no | |
| `multiplicationFactor` | integer (int32), nullable | no | |
| `reverse` | boolean | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2_2/scenarios/{scenarioGuid}/energy-demands/{demand-guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"energyDemandGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"energyDemandName": "string",
"energyCarrierGuid": "string",
"demandSalePrice": 0.0,
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"demandProfileId": 0,
"demandScalingFactor": 0.0,
"demandSalePriceProfileId": 0,
"demandSalePriceScalingFactor": 0.0,
"energyDemandUserSavedMetadataGuid": "string",
"energyDemandUserSavedMetadataName": "string",
"energyDemandUserSavedMetadataReferenceArea": 0.0,
"scalingFactor": 0.0,
"energyDemandMetadataGuid": "string",
"energyDemandMetadataName": "string",
"energyDemandMetadataDbOrganization": "string",
"energyDemandMetadataType": "ELECTRICITY",
"energyDemandMetadataBuildingType": "RESIDENCE_MFH",
"energyDemandMetadataBuildingAge": "AGE_UNDER_1970",
"energyDemandMetadataOption": "OPTION_1",
"energyDemandMetadataReferencedAreaM2": 0.0,
"energyDemandMetadataSpecificEnergyDemandValueKWhM2": 0.0,
"energyDemandMetadataTotalAnnualDemand": 0.0,
"multiplicationFactorPreview": 0,
"multiplicationFactor": 0,
"reverse": true
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoEnergyDemandResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"energyDemandGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"energyDemandName": "string",
"energyCarrierGuid": "string",
"demandSalePrice": 0.0,
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"demandProfileId": 0,
"demandScalingFactor": 0.0,
"demandSalePriceProfileId": 0,
"demandSalePriceScalingFactor": 0.0,
"energyDemandUserSavedMetadataGuid": "string",
"energyDemandUserSavedMetadataName": "string",
"energyDemandUserSavedMetadataReferenceArea": 0.0,
"scalingFactor": 0.0,
"energyDemandMetadataGuid": "string",
"energyDemandMetadataName": "string",
"energyDemandMetadataDbOrganization": "string",
"energyDemandMetadataType": "ELECTRICITY",
"energyDemandMetadataBuildingType": "RESIDENCE_MFH",
"energyDemandMetadataBuildingAge": "AGE_UNDER_1970",
"energyDemandMetadataOption": "OPTION_1",
"energyDemandMetadataReferencedAreaM2": 0.0,
"energyDemandMetadataSpecificEnergyDemandValueKWhM2": 0.0,
"energyDemandMetadataTotalAnnualDemand": 0.0,
"multiplicationFactorPreview": 0,
"multiplicationFactor": 0,
"reverse": true
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Profiles
## List 1 { #operation-list_1 }
```
GET /sympheny-app/scenarios/{scenarioGuid}/profiles
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.profiles.list()`](../../sdk/reference/profiles.md#method-profiles-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/profiles" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoListProfileResponseDto` |
**Example response** (200)
```json
{
"data": [
{
"id": 0,
"name": "string"
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Create json { #operation-createJson }
```
POST /sympheny-app/scenarios/{scenarioGuid}/profiles-json
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.profiles.create()`](../../sdk/reference/profiles.md#method-profiles-create).
requestDto.values list size must be exactly 8760, with period from 1 to 8760, and positive demandValue
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`ProfileJsonRequestDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | |
| `values` | array of `ProfilePeriodValueDto` | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/profiles-json" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"values": [
{
"period": 0,
"demandValue": 0.0
}
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoProfileResponseDto` |
**Example response** (201)
```json
{
"data": {
"id": 0,
"name": "string"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get { #operation-get }
```
GET /sympheny-app/scenarios/{scenarioGuid}/profiles/{profileId}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.profiles.get()`](../../sdk/reference/profiles.md#method-profiles-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `profileId` | path | integer (int64) | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/profiles/{profileId}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoProfileDetailsResponseDto` |
**Example response** (200)
```json
{
"data": {
"id": 0,
"name": "string",
"values": [
{
"period": 0,
"demandValue": 0.0
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Delete 1 { #operation-delete_1 }
```
DELETE /sympheny-app/scenarios/{scenarioGuid}/profiles/{profileId}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.profiles.delete()`](../../sdk/reference/profiles.md#method-profiles-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `profileId` | path | integer (int64) | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/profiles/{profileId}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | — |
## Edit json v2 { #operation-editJsonV2 }
```
PUT /sympheny-app/v2/scenarios/{scenarioGuid}/profiles-json/{profileId}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.profiles.update()`](../../sdk/reference/profiles.md#method-profiles-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `profileId` | path | integer (int64) | yes | |
**Request body** (`ProfileDetailsResponseDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer (int64), nullable | no | |
| `name` | string | yes | |
| `values` | array of `ProfilePeriodValueDto` | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/profiles-json/{profileId}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"id": 0,
"name": "string",
"values": [
{
"period": 0,
"demandValue": 0.0
}
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoProfileDetailsResponseDto` |
**Example response** (200)
```json
{
"data": {
"id": 0,
"name": "string",
"values": [
{
"period": 0,
"demandValue": 0.0
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Solar resources
## Delete solar on site resource { #operation-deleteSolarOnSiteResource }
```
DELETE /sympheny-app/scenarios/solar-on-site-resource/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solar_resources.delete()`](../../sdk/reference/solar_resources.md#method-solar_resources-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/solar-on-site-resource/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoSolarOnSiteResourceListResponseDto` |
**Example response** (200)
```json
{
"data": {
"solarResources": [
{
"solarResourceGuid": "string",
"energyCarrierGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubName": "string",
"hubGuid": "string",
"availableSolarCollectorArea": 0.0,
"availableResourceType": "string",
"technologyDimensioningStdValue": 0.0
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"irradianceProfileType": "GENERATED",
"solarResourceMetadataName": "string",
"solarResourceMetadataDbOrganization": "string",
"solarResourceMetadataGuid": "string",
"solarResourceMetadataLocation": "string",
"solarResourceMetadataType": "string",
"solarResourceMetadataSlope": 0.0,
"solarResourceMetadataOrientation": "string"
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get solar on site resources v2 { #operation-getSolarOnSiteResourcesV2 }
```
GET /sympheny-app/v2/scenarios/solar-on-site-resource/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solar_resources.get()`](../../sdk/reference/solar_resources.md#method-solar_resources-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/solar-on-site-resource/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoSolarOnSiteResourceResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"name": "string",
"solarResourceGuid": "string",
"energyCarrierGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubName": "string",
"hubGuid": "string",
"availableSolarCollectorArea": 0.0,
"availableResourceType": "Area"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"irradianceProfileType": "GENERATED",
"solarResourceMetadataName": "string",
"solarResourceMetadataDbOrganization": "string",
"solarResourceMetadataGuid": "string",
"solarResourceMetadataLocation": "string",
"solarResourceMetadataType": "string",
"solarResourceMetadataSlope": 0.0,
"solarResourceMetadataOrientation": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"profileId": 0
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get all solar on site resources by scenario v2 { #operation-getAllSolarOnSiteResourcesByScenarioV2 }
```
GET /sympheny-app/v2/scenarios/{scenarioGuid}/solar-on-site-resource
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solar_resources.list()`](../../sdk/reference/solar_resources.md#method-solar_resources-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/solar-on-site-resource" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoListSolarOnSiteResourceResponseDtoV2` |
**Example response** (200)
```json
{
"data": [
{
"name": "string",
"solarResourceGuid": "string",
"energyCarrierGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubName": "string",
"hubGuid": "string",
"availableSolarCollectorArea": 0.0,
"availableResourceType": "Area"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"irradianceProfileType": "GENERATED",
"solarResourceMetadataName": "string",
"solarResourceMetadataDbOrganization": "string",
"solarResourceMetadataGuid": "string",
"solarResourceMetadataLocation": "string",
"solarResourceMetadataType": "string",
"solarResourceMetadataSlope": 0.0,
"solarResourceMetadataOrientation": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"profileId": 0
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Upload new solar on site resource v2 1 { #operation-uploadNewSolarOnSiteResourceV2_1 }
```
POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/solar-on-site-resource
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solar_resources.create()`](../../sdk/reference/solar_resources.md#method-solar_resources-create).
energyCarrierGuid must be a carrier with subType in: SOLAR_ROOF,BIOMASS,GEOTHERMAL,HYDRO,PROCESS_WASTE_HEAT,SOLAR_FACADE,SOLAR_PARAPET,TIDAL,WIND
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`SolarOnSiteResourceRequestDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | |
| `energyCarrierGuid` | string | yes | |
| `hubs` | array of `SolarOnSiteResourcesHubRequestDtoV2` | yes | |
| `profileId` | integer (int64) | yes | |
| `stages` | array of string (uuid) | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/{scenarioGuid}/solar-on-site-resource" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"energyCarrierGuid": "string",
"hubs": [
{
"hubGuid": "string",
"availableSolarCollectorArea": 0.0,
"availableResourceType": "Area"
}
],
"profileId": 0,
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoSolarOnSiteResourceResponseDtoV2` |
**Example response** (201)
```json
{
"data": {
"name": "string",
"solarResourceGuid": "string",
"energyCarrierGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubName": "string",
"hubGuid": "string",
"availableSolarCollectorArea": 0.0,
"availableResourceType": "Area"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"irradianceProfileType": "GENERATED",
"solarResourceMetadataName": "string",
"solarResourceMetadataDbOrganization": "string",
"solarResourceMetadataGuid": "string",
"solarResourceMetadataLocation": "string",
"solarResourceMetadataType": "string",
"solarResourceMetadataSlope": 0.0,
"solarResourceMetadataOrientation": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"profileId": 0
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Edit solar on site resource v2 2 { #operation-editSolarOnSiteResourceV2_2 }
```
PUT /sympheny-app/v2_2/scenarios/solar-on-site-resource/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solar_resources.update()`](../../sdk/reference/solar_resources.md#method-solar_resources-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Request body** (`SolarOnSiteResourceResponseDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | |
| `solarResourceGuid` | string, nullable | no | |
| `energyCarrierGuid` | string | yes | |
| `energyCarrierName` | string | yes | |
| `hubs` | array of `HubSolarOnSiteResourceResponseDtoV2` | yes | |
| `created` | string (date-time), nullable | no | |
| `updated` | string (date-time), nullable | no | |
| `irradianceProfileType` | string | yes | One of: `GENERATED`, `UPLOADED`, `SAVED`. |
| `solarResourceMetadataName` | string, nullable | no | |
| `solarResourceMetadataDbOrganization` | string, nullable | no | |
| `solarResourceMetadataGuid` | string, nullable | no | |
| `solarResourceMetadataLocation` | string, nullable | no | |
| `solarResourceMetadataType` | string, nullable | no | |
| `solarResourceMetadataSlope` | number, nullable | no | |
| `solarResourceMetadataOrientation` | string, nullable | no | |
| `stages` | array of string (uuid) | yes | |
| `profileId` | integer (int64) | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2_2/scenarios/solar-on-site-resource/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"solarResourceGuid": "string",
"energyCarrierGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubName": "string",
"hubGuid": "string",
"availableSolarCollectorArea": 0.0,
"availableResourceType": "Area"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"irradianceProfileType": "GENERATED",
"solarResourceMetadataName": "string",
"solarResourceMetadataDbOrganization": "string",
"solarResourceMetadataGuid": "string",
"solarResourceMetadataLocation": "string",
"solarResourceMetadataType": "string",
"solarResourceMetadataSlope": 0.0,
"solarResourceMetadataOrientation": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"profileId": 0
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoSolarOnSiteResourceResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"name": "string",
"solarResourceGuid": "string",
"energyCarrierGuid": "string",
"energyCarrierName": "string",
"hubs": [
{
"hubName": "string",
"hubGuid": "string",
"availableSolarCollectorArea": 0.0,
"availableResourceType": "Area"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"irradianceProfileType": "GENERATED",
"solarResourceMetadataName": "string",
"solarResourceMetadataDbOrganization": "string",
"solarResourceMetadataGuid": "string",
"solarResourceMetadataLocation": "string",
"solarResourceMetadataType": "string",
"solarResourceMetadataSlope": 0.0,
"solarResourceMetadataOrientation": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"profileId": 0
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Conversion technologies
## Get conversion tech details v2 { #operation-getConversionTechDetailsV2 }
```
GET /sympheny-app/v2/scenarios/conversion-technologies/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.conversion_technologies.get()`](../../sdk/reference/conversion_technologies.md#method-conversion_technologies-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/conversion-technologies/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoConversionTechnologyDetailResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"fixedInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"variableOmCostPercent": 0.0,
"variableOmCostYear": 0.0,
"variableOmCost": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableEmbodiedCo2": 0.0,
"variableEmittedCo2": 0.0,
"variableCapturedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"mustBeInstalledInHubs": "canBeInstalled",
"conversionTechnologyGuid": "string",
"processName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"variableInvestmentCost": 0.0,
"lifetime": 0.0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"technologyModes": [
{
"capacity": 0.0,
"minimumAnnualOutput": 0.0,
"maximumAnnualOutput": 0.0,
"curtailmentLimitation": 0.0,
"peakPower": 0.0,
"minPartLoad": 0.0,
"minimumUpTime": 0,
"minimumDownTime": 0,
"technologyModeGuid": "string",
"inputEnergyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"outputEfficiency": 0.0,
"fixedInputShare": 0.0,
"customOutputEfficiencyActivated": true,
"customInputShareActivated": true,
"customSeasonalityValues": [
{
"month": null,
"value": null
}
],
"inputShareProfileId": 0,
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
],
"outputEnergyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"outputEfficiency": 0.0,
"fixedInputShare": 0.0,
"customOutputEfficiencyActivated": true,
"customInputShareActivated": true,
"customSeasonalityValues": [
{
"month": null,
"value": null
}
],
"inputShareProfileId": 0,
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
],
"seasonalOperationName": "string",
"seasonalOperationValue": "string",
"allowedOperationProfileId": 0,
"primary": true,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"simultaneousOperation": true
}
],
"category": "string",
"technologyCategory": "string",
"mutuallyExclusiveGroup": "string",
"notes": "string",
"virtual": true,
"technologyOptional": true,
"partOfTechnologyPackage": true,
"technologyCapacity": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"comesFromDb": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Delete conversion technology v2 { #operation-deleteConversionTechnologyV2 }
```
DELETE /sympheny-app/v2/scenarios/conversion-technologies/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.conversion_technologies.delete()`](../../sdk/reference/conversion_technologies.md#method-conversion_technologies-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/conversion-technologies/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | — |
## Get all conversion technologies by scenario v2 { #operation-getAllConversionTechnologiesByScenarioV2 }
```
GET /sympheny-app/v2/scenarios/{scenarioGuid}/conversion-technologies
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.conversion_technologies.list()`](../../sdk/reference/conversion_technologies.md#method-conversion_technologies-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/conversion-technologies" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoConversionTechnologyListResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"conversionTechnologies": [
{
"conversionTechnologyGuid": "string",
"processName": "string",
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"conversionTechnologyModes": [
{
"capacity": 0.0,
"minimumAnnualOutput": 0.0,
"maximumAnnualOutput": 0.0,
"curtailmentLimitation": 0.0,
"peakPower": 0.0,
"minPartLoad": 0.0,
"minimumUpTime": 0,
"minimumDownTime": 0,
"technologyModeGuid": "string",
"inputEnergyCarriers": [
{
"energyCarrierGuid": null,
"typeKey": null,
"typeDisplayName": null,
"subtypeKey": null,
"subtypeDisplayName": null,
"energyCarrierName": null,
"colorHexCode": null,
"outputEfficiency": null,
"fixedInputShare": null,
"customOutputEfficiencyActivated": null,
"customInputShareActivated": null,
"customSeasonalityValues": null,
"inputShareProfileId": null,
"outputEfficiencyProfileId": null,
"created": null,
"primary": null
}
],
"outputEnergyCarriers": [
{
"energyCarrierGuid": null,
"typeKey": null,
"typeDisplayName": null,
"subtypeKey": null,
"subtypeDisplayName": null,
"energyCarrierName": null,
"colorHexCode": null,
"outputEfficiency": null,
"fixedInputShare": null,
"customOutputEfficiencyActivated": null,
"customInputShareActivated": null,
"customSeasonalityValues": null,
"inputShareProfileId": null,
"outputEfficiencyProfileId": null,
"created": null,
"primary": null
}
],
"seasonalOperationName": "string",
"seasonalOperationValue": "string",
"allowedOperationProfileId": 0,
"primary": true,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"simultaneousOperation": true
}
],
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"virtual": true,
"mustBeInstalledInHubs": "canBeInstalled",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Update conversion technology { #operation-updateConversionTechnology }
```
PUT /sympheny-app/v2_1/scenarios/conversion-technologies/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.conversion_technologies.update()`](../../sdk/reference/conversion_technologies.md#method-conversion_technologies-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Request body** (`ConversionTechnologyDetailResponseDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `fixedInvestmentCost` | number, nullable | no | |
| `fixedOmCostChf` | number, nullable | no | |
| `variableOmCostPercent` | number, nullable | no | |
| `variableOmCostYear` | number, nullable | no | |
| `variableOmCost` | number, nullable | no | |
| `fixedEmbodiedCo2` | number, nullable | no | |
| `variableEmbodiedCo2` | number, nullable | no | |
| `variableEmittedCo2` | number, nullable | no | |
| `variableCapturedCo2` | number, nullable | no | |
| `fixedReplacementCost` | number, nullable | no | |
| `variableReplacementCostPercent` | number, nullable | no | |
| `variableReplacementCostCHF` | number, nullable | no | |
| `fixedSalvageValue` | number, nullable | no | |
| `variableSalvageValuePercent` | number, nullable | no | |
| `variableSalvageValueCHF` | number, nullable | no | |
| `mustBeInstalledInHubs` | string | yes | One of: `canBeInstalled`, `mustBeInstalled`, `mustBeInstalledInAtLeastOneHub`. |
| `conversionTechnologyGuid` | string, nullable | no | |
| `processName` | string | yes | |
| `exchangeCurrency` | string, nullable | no | |
| `exchangeRate` | number, nullable | no | |
| `variableInvestmentCost` | number, nullable | no | |
| `lifetime` | number | yes | |
| `created` | string (date-time), nullable | no | |
| `updated` | string (date-time), nullable | no | |
| `hubs` | array of `HubResponseDto` | yes | |
| `technologyModes` | array of `TechnologyModeResponseDtoV2`, nullable | no | |
| `category` | string, nullable | no | |
| `technologyCategory` | string, nullable | no | |
| `mutuallyExclusiveGroup` | string, nullable | no | |
| `notes` | string, nullable | no | |
| `virtual` | boolean | yes | |
| `technologyOptional` | boolean, nullable | no | |
| `partOfTechnologyPackage` | boolean, nullable | no | |
| `technologyCapacity` | string, nullable | no | |
| `costComponents` | array of `AdvancedCostComponentResponseDto`, nullable | no | |
| `comesFromDb` | string, nullable | no | |
| `stages` | array of string (uuid) | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/conversion-technologies/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fixedInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"variableOmCostPercent": 0.0,
"variableOmCostYear": 0.0,
"variableOmCost": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableEmbodiedCo2": 0.0,
"variableEmittedCo2": 0.0,
"variableCapturedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"mustBeInstalledInHubs": "canBeInstalled",
"conversionTechnologyGuid": "string",
"processName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"variableInvestmentCost": 0.0,
"lifetime": 0.0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"technologyModes": [
{
"capacity": 0.0,
"minimumAnnualOutput": 0.0,
"maximumAnnualOutput": 0.0,
"curtailmentLimitation": 0.0,
"peakPower": 0.0,
"minPartLoad": 0.0,
"minimumUpTime": 0,
"minimumDownTime": 0,
"technologyModeGuid": "string",
"inputEnergyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"outputEfficiency": 0.0,
"fixedInputShare": 0.0,
"customOutputEfficiencyActivated": true,
"customInputShareActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"inputShareProfileId": 0,
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
],
"outputEnergyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"outputEfficiency": 0.0,
"fixedInputShare": 0.0,
"customOutputEfficiencyActivated": true,
"customInputShareActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"inputShareProfileId": 0,
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
],
"seasonalOperationName": "string",
"seasonalOperationValue": "string",
"allowedOperationProfileId": 0,
"primary": true,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"simultaneousOperation": true
}
],
"category": "string",
"technologyCategory": "string",
"mutuallyExclusiveGroup": "string",
"notes": "string",
"virtual": true,
"technologyOptional": true,
"partOfTechnologyPackage": true,
"technologyCapacity": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"comesFromDb": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoConversionTechnologyResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"conversionTechnologyGuid": "string",
"processName": "string",
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"conversionTechnologyModes": [
{
"capacity": 0.0,
"minimumAnnualOutput": 0.0,
"maximumAnnualOutput": 0.0,
"curtailmentLimitation": 0.0,
"peakPower": 0.0,
"minPartLoad": 0.0,
"minimumUpTime": 0,
"minimumDownTime": 0,
"technologyModeGuid": "string",
"inputEnergyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"outputEfficiency": 0.0,
"fixedInputShare": 0.0,
"customOutputEfficiencyActivated": true,
"customInputShareActivated": true,
"customSeasonalityValues": [
{
"month": null,
"value": null
}
],
"inputShareProfileId": 0,
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
],
"outputEnergyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"outputEfficiency": 0.0,
"fixedInputShare": 0.0,
"customOutputEfficiencyActivated": true,
"customInputShareActivated": true,
"customSeasonalityValues": [
{
"month": null,
"value": null
}
],
"inputShareProfileId": 0,
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
],
"seasonalOperationName": "string",
"seasonalOperationValue": "string",
"allowedOperationProfileId": 0,
"primary": true,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"simultaneousOperation": true
}
],
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"virtual": true,
"mustBeInstalledInHubs": "canBeInstalled",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Specify conversion technology v2 2 { #operation-specifyConversionTechnologyV2_2 }
```
POST /sympheny-app/v2_2/scenarios/{scenarioGuid}/conversion-technologies
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.conversion_technologies.create()`](../../sdk/reference/conversion_technologies.md#method-conversion_technologies-create).
Needs at least 1 mode. Each mode needs at least 1 carrier INPUT and 1 carrier OUTPUT. Cannot have same carrier in both INPUT and OUTPUT
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`ConversionTechnologyRequestDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `fixedInvestmentCost` | number, nullable | no | |
| `fixedOmCostChf` | number, nullable | no | |
| `variableOmCostPercent` | number, nullable | no | |
| `variableOmCostYear` | number, nullable | no | |
| `variableOmCost` | number, nullable | no | |
| `fixedEmbodiedCo2` | number, nullable | no | |
| `variableEmbodiedCo2` | number, nullable | no | |
| `variableEmittedCo2` | number, nullable | no | |
| `variableCapturedCo2` | number, nullable | no | |
| `fixedReplacementCost` | number, nullable | no | |
| `variableReplacementCostPercent` | number, nullable | no | |
| `variableReplacementCostCHF` | number, nullable | no | |
| `fixedSalvageValue` | number, nullable | no | |
| `variableSalvageValuePercent` | number, nullable | no | |
| `variableSalvageValueCHF` | number, nullable | no | |
| `mustBeInstalledInHubs` | string | yes | One of: `canBeInstalled`, `mustBeInstalled`, `mustBeInstalledInAtLeastOneHub`. |
| `processName` | string | yes | |
| `variableInvestmentCost` | number, nullable | no | |
| `lifetime` | integer (int32) | yes | |
| `hubGuids` | array of string | yes | |
| `conversionTechnologyModes` | array of `TechnologyModeRequestDtoV2` | yes | |
| `virtual` | boolean | yes | |
| `costComponents` | array of `AdvancedCostComponentRequestDto`, nullable | no | |
| `suggested` | boolean, nullable | no | |
| `technologyCategory` | string, nullable | no | |
| `notes` | string, nullable | no | |
| `source` | string, nullable | no | |
| `comesFromDb` | string, nullable | no | |
| `exchangeCurrency` | string | yes | |
| `exchangeRate` | number | yes | |
| `stages` | array of string (uuid) | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2_2/scenarios/{scenarioGuid}/conversion-technologies" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fixedInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"variableOmCostPercent": 0.0,
"variableOmCostYear": 0.0,
"variableOmCost": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableEmbodiedCo2": 0.0,
"variableEmittedCo2": 0.0,
"variableCapturedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"mustBeInstalledInHubs": "canBeInstalled",
"processName": "string",
"variableInvestmentCost": 0.0,
"lifetime": 0,
"hubGuids": [
"string"
],
"conversionTechnologyModes": [
{
"capacity": 0.0,
"minimumAnnualOutput": 0.0,
"maximumAnnualOutput": 0.0,
"curtailmentLimitation": 0.0,
"peakPower": 0.0,
"minPartLoad": 0.0,
"minimumUpTime": 0,
"minimumDownTime": 0,
"primary": true,
"seasonalOperation": "ALL_SEASONS",
"allowedOperationProfileId": 0,
"energyCarriers": [
{
"energyCarrierGuid": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customInputShareActivated": true,
"customOutputEfficiencyActivated": true,
"inputShareProfileId": 0,
"outputEfficiencyProfileId": 0,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"type": "INPUT",
"primary": true
}
],
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"simultaneousOperation": true
}
],
"virtual": true,
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0
}
],
"suggested": true,
"technologyCategory": "string",
"notes": "string",
"source": "string",
"comesFromDb": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoConversionTechnologyResponseDtoV2` |
**Example response** (201)
```json
{
"data": {
"conversionTechnologyGuid": "string",
"processName": "string",
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"conversionTechnologyModes": [
{
"capacity": 0.0,
"minimumAnnualOutput": 0.0,
"maximumAnnualOutput": 0.0,
"curtailmentLimitation": 0.0,
"peakPower": 0.0,
"minPartLoad": 0.0,
"minimumUpTime": 0,
"minimumDownTime": 0,
"technologyModeGuid": "string",
"inputEnergyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"outputEfficiency": 0.0,
"fixedInputShare": 0.0,
"customOutputEfficiencyActivated": true,
"customInputShareActivated": true,
"customSeasonalityValues": [
{
"month": null,
"value": null
}
],
"inputShareProfileId": 0,
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
],
"outputEnergyCarriers": [
{
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"outputEfficiency": 0.0,
"fixedInputShare": 0.0,
"customOutputEfficiencyActivated": true,
"customInputShareActivated": true,
"customSeasonalityValues": [
{
"month": null,
"value": null
}
],
"inputShareProfileId": 0,
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
}
],
"seasonalOperationName": "string",
"seasonalOperationValue": "string",
"allowedOperationProfileId": 0,
"primary": true,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"simultaneousOperation": true
}
],
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"virtual": true,
"mustBeInstalledInHubs": "canBeInstalled",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Storage technologies
## Delete storage technology { #operation-deleteStorageTechnology }
```
DELETE /sympheny-app/scenarios/storage-technologies/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.storage_technologies.delete()`](../../sdk/reference/storage_technologies.md#method-storage_technologies-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/storage-technologies/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoStorageTechnologyListResponseDto` |
**Example response** (200)
```json
{
"data": {
"storageTechnologies": [
{
"storageTechnologyGuid": "string",
"storageName": "string",
"lifetime": 0.0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": null,
"value": null
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
]
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get storage tech details v2 { #operation-getStorageTechDetailsV2 }
```
GET /sympheny-app/v2/scenarios/storage-technologies/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.storage_technologies.get()`](../../sdk/reference/storage_technologies.md#method-storage_technologies-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/storage-technologies/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoStorageTechnologyDetailResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"variableOmCostPercent": 0.0,
"variableOmEnergyFlowCost": 0.0,
"capacity": 0.0,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"fixedInvestmentCost": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableOmCost": 0.0,
"maximumChargingRate": 0.0,
"maximumDischargingRate": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"mustBeInstalled": "string",
"storageTechnologyGuid": "string",
"storageName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"lifetime": 0,
"standbyLoss": 0.0,
"standByLossProfileId": 0,
"minimumSoc": 0.0,
"storageChargingEfficiency": 0.0,
"storageDischargingEfficiency": 0.0,
"technologyCapacity": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"storageCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"category": "string",
"technologyCategory": "string",
"mutuallyExclusiveGroup": "string",
"notes": "string",
"source": "string",
"technologyOptional": true,
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"comesFromDb": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"evPlugInTime": {
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0
},
"evPlugOutTime": {
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0
},
"evPlugInDurationHours": 0.0,
"drivingDistanceKms": 0.0,
"evSocStartPercent": 0.0,
"evBatterySizeKWh": 0.0,
"maximumSocPercent": 0.0,
"evAverageKWhPerKm": 0.0,
"evPlugInPowerKW": 0.0,
"isEvBattery": true,
"typeOfCharging": "Smart"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get all storage technologies by scenario v2 { #operation-getAllStorageTechnologiesByScenarioV2 }
```
GET /sympheny-app/v2/scenarios/{scenarioGuid}/storage-technologies
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.storage_technologies.list()`](../../sdk/reference/storage_technologies.md#method-storage_technologies-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/storage-technologies" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoStorageTechnologyListResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"storageTechnologies": [
{
"storageTechnologyGuid": "string",
"storageName": "string",
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": null,
"value": null
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"standByLossProfileId": 0
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Specify storage technology v2 1 { #operation-specifyStorageTechnologyV2_1 }
```
POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/storage-technologies
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.storage_technologies.create()`](../../sdk/reference/storage_technologies.md#method-storage_technologies-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`StorageTechnologyRequestDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `variableOmCostPercent` | number, nullable | no | |
| `variableOmEnergyFlowCost` | number, nullable | no | |
| `capacity` | number, nullable | no | |
| `maximumCapacity` | number, nullable | no | |
| `minimumCapacity` | number, nullable | no | |
| `fixedInvestmentCost` | number, nullable | no | |
| `fixedEmbodiedCo2` | number, nullable | no | |
| `variableOmCost` | number, nullable | no | |
| `maximumChargingRate` | number, nullable | no | |
| `maximumDischargingRate` | number, nullable | no | |
| `variableEmbodiedCo2` | number, nullable | no | |
| `fixedReplacementCost` | number, nullable | no | |
| `variableReplacementCostPercent` | number, nullable | no | |
| `variableReplacementCostCHF` | number, nullable | no | |
| `fixedSalvageValue` | number, nullable | no | |
| `variableSalvageValuePercent` | number, nullable | no | |
| `variableSalvageValueCHF` | number, nullable | no | |
| `mustBeInstalled` | string | yes | |
| `storageName` | string | yes | |
| `variableInvestmentCost` | number, nullable | no | |
| `fixedOmCostChf` | number, nullable | no | |
| `lifetime` | integer (int32) | yes | |
| `standbyLoss` | number, nullable | no | |
| `standByLossProfileId` | integer (int64), nullable | no | |
| `minimumSoc` | number, nullable | no | |
| `hubGuids` | array of string | yes | |
| `energyCarrierGuid` | string | yes | |
| `storageChargingEfficiency` | number | yes | |
| `storageDischargingEfficiency` | number | yes | |
| `technologyCapacity` | string | yes | |
| `costComponents` | array of `AdvancedCostComponentRequestDto`, nullable | no | |
| `suggested` | boolean, nullable | no | |
| `technologyCategory` | string, nullable | no | |
| `notes` | string, nullable | no | |
| `source` | string, nullable | no | |
| `comesFromDb` | string, nullable | no | |
| `exchangeCurrency` | string, nullable | no | |
| `exchangeRate` | number, nullable | no | |
| `stages` | array of string (uuid) | yes | |
| `evPlugInTime` | `LocalTime`, nullable | no | |
| `evPlugOutTime` | `LocalTime`, nullable | no | |
| `evPlugInDurationHours` | number, nullable | no | |
| `drivingDistanceKms` | number, nullable | no | |
| `evSocStartPercent` | number, nullable | no | |
| `evBatterySizeKWh` | number, nullable | no | |
| `maximumSocPercent` | number, nullable | no | |
| `evAverageKWhPerKm` | number, nullable | no | |
| `evPlugInPowerKW` | number, nullable | no | |
| `isEvBattery` | boolean, nullable | no | |
| `typeOfCharging` | string, nullable | no | One of: `Smart`, `Dump`, `V2G`, `None`, `None`. |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/{scenarioGuid}/storage-technologies" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"variableOmCostPercent": 0.0,
"variableOmEnergyFlowCost": 0.0,
"capacity": 0.0,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"fixedInvestmentCost": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableOmCost": 0.0,
"maximumChargingRate": 0.0,
"maximumDischargingRate": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"mustBeInstalled": "string",
"storageName": "string",
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"lifetime": 0,
"standbyLoss": 0.0,
"standByLossProfileId": 0,
"minimumSoc": 0.0,
"hubGuids": [
"string"
],
"energyCarrierGuid": "string",
"storageChargingEfficiency": 0.0,
"storageDischargingEfficiency": 0.0,
"technologyCapacity": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0
}
],
"suggested": true,
"technologyCategory": "string",
"notes": "string",
"source": "string",
"comesFromDb": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"evPlugInTime": {
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0
},
"evPlugOutTime": {
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0
},
"evPlugInDurationHours": 0.0,
"drivingDistanceKms": 0.0,
"evSocStartPercent": 0.0,
"evBatterySizeKWh": 0.0,
"maximumSocPercent": 0.0,
"evAverageKWhPerKm": 0.0,
"evPlugInPowerKW": 0.0,
"isEvBattery": true,
"typeOfCharging": "Smart"
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoStorageTechnologyResponseDtoV2` |
**Example response** (201)
```json
{
"data": {
"storageTechnologyGuid": "string",
"storageName": "string",
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"standByLossProfileId": 0
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Update storage technology v2 2 { #operation-updateStorageTechnologyV2_2 }
```
PUT /sympheny-app/v2_2/scenarios/storage-technologies/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.storage_technologies.update()`](../../sdk/reference/storage_technologies.md#method-storage_technologies-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Request body** (`StorageTechnologyDetailResponseDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `variableOmCostPercent` | number, nullable | no | |
| `variableOmEnergyFlowCost` | number, nullable | no | |
| `capacity` | number, nullable | no | |
| `maximumCapacity` | number, nullable | no | |
| `minimumCapacity` | number, nullable | no | |
| `fixedInvestmentCost` | number, nullable | no | |
| `fixedEmbodiedCo2` | number, nullable | no | |
| `variableOmCost` | number, nullable | no | |
| `maximumChargingRate` | number, nullable | no | |
| `maximumDischargingRate` | number, nullable | no | |
| `variableEmbodiedCo2` | number, nullable | no | |
| `fixedReplacementCost` | number, nullable | no | |
| `variableReplacementCostPercent` | number | yes | |
| `variableReplacementCostCHF` | number, nullable | no | |
| `fixedSalvageValue` | number, nullable | no | |
| `variableSalvageValuePercent` | number | yes | |
| `variableSalvageValueCHF` | number, nullable | no | |
| `mustBeInstalled` | string | yes | |
| `storageTechnologyGuid` | string, nullable | no | |
| `storageName` | string | yes | |
| `exchangeCurrency` | string | yes | |
| `exchangeRate` | number | yes | |
| `variableInvestmentCost` | number, nullable | no | |
| `fixedOmCostChf` | number, nullable | no | |
| `lifetime` | integer (int32) | yes | |
| `standbyLoss` | number, nullable | no | |
| `standByLossProfileId` | integer (int64), nullable | no | |
| `minimumSoc` | number, nullable | no | |
| `storageChargingEfficiency` | number | yes | |
| `storageDischargingEfficiency` | number | yes | |
| `technologyCapacity` | string | yes | |
| `created` | string (date-time), nullable | no | |
| `updated` | string (date-time), nullable | no | |
| `storageCarrier` | `EnergyCarrierResponseDto` | yes | |
| `hubs` | array of `HubResponseDto` | yes | |
| `category` | string | yes | |
| `technologyCategory` | string, nullable | no | |
| `mutuallyExclusiveGroup` | string, nullable | no | |
| `notes` | string, nullable | no | |
| `source` | string, nullable | no | |
| `technologyOptional` | boolean, nullable | no | |
| `costComponents` | array of `AdvancedCostComponentResponseDto` | yes | |
| `comesFromDb` | string, nullable | no | |
| `stages` | array of string (uuid) | yes | |
| `evPlugInTime` | `LocalTime`, nullable | no | |
| `evPlugOutTime` | `LocalTime`, nullable | no | |
| `evPlugInDurationHours` | number, nullable | no | |
| `drivingDistanceKms` | number, nullable | no | |
| `evSocStartPercent` | number, nullable | no | |
| `evBatterySizeKWh` | number, nullable | no | |
| `maximumSocPercent` | number, nullable | no | |
| `evAverageKWhPerKm` | number, nullable | no | |
| `evPlugInPowerKW` | number, nullable | no | |
| `isEvBattery` | boolean, nullable | no | |
| `typeOfCharging` | string, nullable | no | One of: `Smart`, `Dump`, `V2G`, `None`, `None`. |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2_2/scenarios/storage-technologies/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"variableOmCostPercent": 0.0,
"variableOmEnergyFlowCost": 0.0,
"capacity": 0.0,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"fixedInvestmentCost": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableOmCost": 0.0,
"maximumChargingRate": 0.0,
"maximumDischargingRate": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"mustBeInstalled": "string",
"storageTechnologyGuid": "string",
"storageName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"lifetime": 0,
"standbyLoss": 0.0,
"standByLossProfileId": 0,
"minimumSoc": 0.0,
"storageChargingEfficiency": 0.0,
"storageDischargingEfficiency": 0.0,
"technologyCapacity": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"storageCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"category": "string",
"technologyCategory": "string",
"mutuallyExclusiveGroup": "string",
"notes": "string",
"source": "string",
"technologyOptional": true,
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"comesFromDb": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"evPlugInTime": {
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0
},
"evPlugOutTime": {
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0
},
"evPlugInDurationHours": 0.0,
"drivingDistanceKms": 0.0,
"evSocStartPercent": 0.0,
"evBatterySizeKWh": 0.0,
"maximumSocPercent": 0.0,
"evAverageKWhPerKm": 0.0,
"evPlugInPowerKW": 0.0,
"isEvBattery": true,
"typeOfCharging": "Smart"
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoStorageTechnologyDetailResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"variableOmCostPercent": 0.0,
"variableOmEnergyFlowCost": 0.0,
"capacity": 0.0,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"fixedInvestmentCost": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableOmCost": 0.0,
"maximumChargingRate": 0.0,
"maximumDischargingRate": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"mustBeInstalled": "string",
"storageTechnologyGuid": "string",
"storageName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"lifetime": 0,
"standbyLoss": 0.0,
"standByLossProfileId": 0,
"minimumSoc": 0.0,
"storageChargingEfficiency": 0.0,
"storageDischargingEfficiency": 0.0,
"technologyCapacity": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"storageCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"category": "string",
"technologyCategory": "string",
"mutuallyExclusiveGroup": "string",
"notes": "string",
"source": "string",
"technologyOptional": true,
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"comesFromDb": "string",
"stages": [
"00000000-0000-0000-0000-000000000000"
],
"evPlugInTime": {
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0
},
"evPlugOutTime": {
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0
},
"evPlugInDurationHours": 0.0,
"drivingDistanceKms": 0.0,
"evSocStartPercent": 0.0,
"evBatterySizeKWh": 0.0,
"maximumSocPercent": 0.0,
"evAverageKWhPerKm": 0.0,
"evPlugInPowerKW": 0.0,
"isEvBattery": true,
"typeOfCharging": "Smart"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Technology packages
## Delete technology package { #operation-deleteTechnologyPackage }
```
DELETE /sympheny-app/scenarios/{scenarioGuid}/technology-packages/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.technology_packages.delete()`](../../sdk/reference/technology_packages.md#method-technology_packages-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `guid` | path | string | yes | |
| `deleteTechs` | query | boolean | no | Default: `false`. |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/technology-packages/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoTechnologyPackageListResponseDto` |
**Example response** (200)
```json
{
"data": {
"technologyPackages": [
{
"name": "string",
"guid": "string",
"conversionTechnologies": [
"string"
],
"storageTechnologies": [
"string"
],
"dbOrganization": "string"
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get all technology packages by scenario v2 { #operation-getAllTechnologyPackagesByScenarioV2 }
```
GET /sympheny-app/v2/scenarios/{scenarioGuid}/technology-packages
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.technology_packages.list()`](../../sdk/reference/technology_packages.md#method-technology_packages-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/technology-packages" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoTechnologyPackageListResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"technologyPackages": [
{
"maximumConversions": 0,
"maximumStorages": 0,
"mustBeInstalled": "canBeInstalled",
"mutuallyExclusiveGroup": "string",
"name": "string",
"guid": "string",
"conversionTechnologies": [
{
"guid": "string",
"name": "string"
}
],
"storageTechnologies": [
{
"guid": "string",
"name": "string"
}
]
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get technology package by guid v2 { #operation-getTechnologyPackageByGuidV2 }
```
GET /sympheny-app/v2/scenarios/{scenarioGuid}/technology-packages/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.technology_packages.get()`](../../sdk/reference/technology_packages.md#method-technology_packages-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/technology-packages/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoTechnologyPackageResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"maximumConversions": 0,
"maximumStorages": 0,
"mustBeInstalled": "canBeInstalled",
"mutuallyExclusiveGroup": "string",
"name": "string",
"guid": "string",
"conversionTechnologies": [
{
"guid": "string",
"name": "string"
}
],
"storageTechnologies": [
{
"guid": "string",
"name": "string"
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Specify technology package v2 1 { #operation-specifyTechnologyPackageV2_1 }
```
POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/technology-packages
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.technology_packages.create()`](../../sdk/reference/technology_packages.md#method-technology_packages-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`TechnologyPackageRequestDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `maximumConversions` | integer (int32), nullable | no | |
| `maximumStorages` | integer (int32), nullable | no | |
| `mustBeInstalled` | string | yes | One of: `canBeInstalled`, `mustBeInstalled`, `mustBeInstalledInAtLeastOneHub`. |
| `mutuallyExclusiveGroup` | string, nullable | no | |
| `name` | string | yes | |
| `conversionTechnologies` | array of string | yes | |
| `storageTechnologies` | array of string | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/{scenarioGuid}/technology-packages" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"maximumConversions": 0,
"maximumStorages": 0,
"mustBeInstalled": "canBeInstalled",
"mutuallyExclusiveGroup": "string",
"name": "string",
"conversionTechnologies": [
"string"
],
"storageTechnologies": [
"string"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoTechnologyPackageResponseDtoV2` |
**Example response** (201)
```json
{
"data": {
"maximumConversions": 0,
"maximumStorages": 0,
"mustBeInstalled": "canBeInstalled",
"mutuallyExclusiveGroup": "string",
"name": "string",
"guid": "string",
"conversionTechnologies": [
{
"guid": "string",
"name": "string"
}
],
"storageTechnologies": [
{
"guid": "string",
"name": "string"
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Update technology package v2 1 { #operation-updateTechnologyPackageV2_1 }
```
PUT /sympheny-app/v2_1/scenarios/{scenarioGuid}/technology-packages/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.technology_packages.update()`](../../sdk/reference/technology_packages.md#method-technology_packages-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `guid` | path | string | yes | |
**Request body** (`TechnologyPackageResponseDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `maximumConversions` | integer (int32), nullable | no | |
| `maximumStorages` | integer (int32), nullable | no | |
| `mustBeInstalled` | string | yes | One of: `canBeInstalled`, `mustBeInstalled`, `mustBeInstalledInAtLeastOneHub`. |
| `mutuallyExclusiveGroup` | string, nullable | no | |
| `name` | string | yes | |
| `guid` | string, nullable | no | |
| `conversionTechnologies` | array of `GuidNameDto` | yes | |
| `storageTechnologies` | array of `GuidNameDto` | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/{scenarioGuid}/technology-packages/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"maximumConversions": 0,
"maximumStorages": 0,
"mustBeInstalled": "canBeInstalled",
"mutuallyExclusiveGroup": "string",
"name": "string",
"guid": "string",
"conversionTechnologies": [
{
"guid": "string",
"name": "string"
}
],
"storageTechnologies": [
{
"guid": "string",
"name": "string"
}
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoTechnologyPackageResponseDtoV2` |
**Example response** (201)
```json
{
"data": {
"maximumConversions": 0,
"maximumStorages": 0,
"mustBeInstalled": "canBeInstalled",
"mutuallyExclusiveGroup": "string",
"name": "string",
"guid": "string",
"conversionTechnologies": [
{
"guid": "string",
"name": "string"
}
],
"storageTechnologies": [
{
"guid": "string",
"name": "string"
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Network technologies
## Delete network technology { #operation-deleteNetworkTechnology }
```
DELETE /sympheny-app/scenarios/network-technologies/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_technologies.delete()`](../../sdk/reference/network_technologies.md#method-network_technologies-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/network-technologies/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoNetworkTechnologyListResponseDto` |
**Example response** (200)
```json
{
"data": {
"networkTechnologies": [
{
"networkTechnologyGuid": "string",
"networkTechnologyName": "string",
"networkLoss": 0.0,
"fixedInvestmentCost": 0.0,
"variableInvestmentCost": 0.0,
"variableOmCostYear": 0.0,
"fixedOmCostChf": 0.0,
"fixedOmCostPercent": 0.0,
"lifetime": 0.0,
"maximumCapacity": 0.0,
"minimumCapacity": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedEmbodiedCo2": 0.0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": null,
"value": null
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"category": "string",
"technologyCategory": "string",
"notes": "string",
"source": "string",
"networkSize": "string",
"comesFromDb": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
]
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get network tech details v2 { #operation-getNetworkTechDetailsV2 }
```
GET /sympheny-app/v2/scenarios/network-technologies/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_technologies.get()`](../../sdk/reference/network_technologies.md#method-network_technologies-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/network-technologies/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoNetworkTechnologyResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"fixedInvestmentCost": 0.0,
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"variableOmCostPercent": 0.0,
"variableOmCostYear": 0.0,
"variableOmCostCHFkWh": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"networkTechnologyGuid": "string",
"networkTechnologyName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"category": "string",
"technologyCategory": "string",
"notes": "string",
"source": "string",
"networkSize": "string",
"comesFromDb": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get all network technologies by scenario v2 { #operation-getAllNetworkTechnologiesByScenarioV2 }
```
GET /sympheny-app/v2/scenarios/{scenarioGuid}/network-technologies
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_technologies.list()`](../../sdk/reference/network_technologies.md#method-network_technologies-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/network-technologies" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoNetworkTechnologyListResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"networkTechnologies": [
{
"fixedInvestmentCost": 0.0,
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"variableOmCostPercent": 0.0,
"variableOmCostYear": 0.0,
"variableOmCostCHFkWh": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"networkTechnologyGuid": "string",
"networkTechnologyName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"category": "string",
"technologyCategory": "string",
"notes": "string",
"source": "string",
"networkSize": "string",
"comesFromDb": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Update network technology v2 1 { #operation-updateNetworkTechnologyV2_1 }
```
PUT /sympheny-app/v2_1/scenarios/network-technologies/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_technologies.update()`](../../sdk/reference/network_technologies.md#method-network_technologies-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Request body** (`NetworkTechnologyResponseDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `fixedInvestmentCost` | number, nullable | no | |
| `variableInvestmentCost` | number, nullable | no | |
| `fixedOmCostChf` | number, nullable | no | |
| `variableOmCostPercent` | number, nullable | no | |
| `variableOmCostYear` | number, nullable | no | |
| `variableOmCostCHFkWh` | number, nullable | no | |
| `fixedEmbodiedCo2` | number, nullable | no | |
| `variableEmbodiedCo2` | number, nullable | no | |
| `fixedReplacementCost` | number, nullable | no | |
| `variableReplacementCostPercent` | number | yes | |
| `variableReplacementCostCHF` | number, nullable | no | |
| `fixedSalvageValue` | number, nullable | no | |
| `variableSalvageValuePercent` | number | yes | |
| `variableSalvageValueCHF` | number, nullable | no | |
| `networkTechnologyGuid` | string, nullable | no | |
| `networkTechnologyName` | string | yes | |
| `exchangeCurrency` | string | yes | |
| `exchangeRate` | number | yes | |
| `lifetime` | integer (int32) | yes | |
| `created` | string (date-time), nullable | no | |
| `updated` | string (date-time), nullable | no | |
| `energyCarrier` | `EnergyCarrierResponseDto` | yes | |
| `category` | string | yes | |
| `technologyCategory` | string, nullable | no | |
| `notes` | string, nullable | no | |
| `source` | string, nullable | no | |
| `networkSize` | string, nullable | no | |
| `comesFromDb` | string, nullable | no | |
| `costComponents` | array of `AdvancedCostComponentResponseDto` | yes | |
| `stages` | array of string (uuid) | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/network-technologies/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fixedInvestmentCost": 0.0,
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"variableOmCostPercent": 0.0,
"variableOmCostYear": 0.0,
"variableOmCostCHFkWh": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"networkTechnologyGuid": "string",
"networkTechnologyName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"category": "string",
"technologyCategory": "string",
"notes": "string",
"source": "string",
"networkSize": "string",
"comesFromDb": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoNetworkTechnologyResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"fixedInvestmentCost": 0.0,
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"variableOmCostPercent": 0.0,
"variableOmCostYear": 0.0,
"variableOmCostCHFkWh": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"networkTechnologyGuid": "string",
"networkTechnologyName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"category": "string",
"technologyCategory": "string",
"notes": "string",
"source": "string",
"networkSize": "string",
"comesFromDb": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Specify network technology v2 1 { #operation-specifyNetworkTechnologyV2_1 }
```
POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/network-technologies
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_technologies.create()`](../../sdk/reference/network_technologies.md#method-network_technologies-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`NetworkTechnologyRequestDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `fixedInvestmentCost` | number, nullable | no | |
| `variableInvestmentCost` | number, nullable | no | |
| `fixedOmCostChf` | number, nullable | no | |
| `variableOmCostPercent` | number, nullable | no | |
| `variableOmCostYear` | number, nullable | no | |
| `variableOmCostCHFkWh` | number, nullable | no | |
| `fixedEmbodiedCo2` | number, nullable | no | |
| `variableEmbodiedCo2` | number, nullable | no | |
| `fixedReplacementCost` | number, nullable | no | |
| `variableReplacementCostPercent` | number, nullable | no | |
| `variableReplacementCostCHF` | number, nullable | no | |
| `fixedSalvageValue` | number, nullable | no | |
| `variableSalvageValuePercent` | number, nullable | no | |
| `variableSalvageValueCHF` | number, nullable | no | |
| `networkTechnologyName` | string | yes | |
| `lifetime` | integer (int32) | yes | |
| `energyCarrierGuid` | string | yes | |
| `costComponents` | array of `AdvancedCostComponentRequestDto`, nullable | no | |
| `suggested` | boolean, nullable | no | |
| `technologyCategory` | string, nullable | no | |
| `networkSize` | string, nullable | no | |
| `notes` | string, nullable | no | |
| `source` | string, nullable | no | |
| `comesFromDb` | string, nullable | no | |
| `exchangeCurrency` | string, nullable | no | |
| `exchangeRate` | number, nullable | no | |
| `stages` | array of string (uuid) | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/{scenarioGuid}/network-technologies" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fixedInvestmentCost": 0.0,
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"variableOmCostPercent": 0.0,
"variableOmCostYear": 0.0,
"variableOmCostCHFkWh": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"networkTechnologyName": "string",
"lifetime": 0,
"energyCarrierGuid": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0
}
],
"suggested": true,
"technologyCategory": "string",
"networkSize": "string",
"notes": "string",
"source": "string",
"comesFromDb": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoNetworkTechnologyResponseDtoV2` |
**Example response** (201)
```json
{
"data": {
"fixedInvestmentCost": 0.0,
"variableInvestmentCost": 0.0,
"fixedOmCostChf": 0.0,
"variableOmCostPercent": 0.0,
"variableOmCostYear": 0.0,
"variableOmCostCHFkWh": 0.0,
"fixedEmbodiedCo2": 0.0,
"variableEmbodiedCo2": 0.0,
"fixedReplacementCost": 0.0,
"variableReplacementCostPercent": 0.0,
"variableReplacementCostCHF": 0.0,
"fixedSalvageValue": 0.0,
"variableSalvageValuePercent": 0.0,
"variableSalvageValueCHF": 0.0,
"networkTechnologyGuid": "string",
"networkTechnologyName": "string",
"exchangeCurrency": "string",
"exchangeRate": 0.0,
"lifetime": 0,
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"category": "string",
"technologyCategory": "string",
"notes": "string",
"source": "string",
"networkSize": "string",
"comesFromDb": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Network links
## Delete network link { #operation-deleteNetworkLink }
```
DELETE /sympheny-app/scenarios/{scenarioGuid}/network-links/{network-link-guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_links.delete()`](../../sdk/reference/network_links.md#method-network_links-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `network-link-guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/network-links/{network-link-guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoNetworkLinkListResponseDto` |
**Example response** (200)
```json
{
"data": {
"networkLinks": [
{
"networkLinkGuid": "string",
"length": 0.0,
"technologyCapacity": "optimize",
"installedCapacity": 0.0,
"uniDirectionalFlow": true,
"mustBeInstalled": true,
"node1Guid": "string",
"node1Name": "string",
"node2Guid": "string",
"node2Name": "string",
"networkTechnologyName": "string",
"networkTechnologyGuid": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z"
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get network link details v2 { #operation-getNetworkLinkDetailsV2 }
```
GET /sympheny-app/v2/network-links/{network-link-guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_links.get()`](../../sdk/reference/network_links.md#method-network_links-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `network-link-guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/network-links/{network-link-guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoNetworkLinkResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"installedCapacity": 0.0,
"maximumCapacity": 0.0,
"networkLinkGuid": "string",
"name": "string",
"length": 0.0,
"technologyCapacity": "optimize",
"uniDirectionalFlow": true,
"mustBeInstalled": true,
"node1Guid": "string",
"node1Name": "string",
"node2Guid": "string",
"node2Name": "string",
"networkTechnologyName": "string",
"networkTechnologyGuid": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"minimumCapacity": 0.0,
"networkLoss": 0.0,
"networkLossProfileId": 0
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get all network links by scenario v2 { #operation-getAllNetworkLinksByScenarioV2 }
```
GET /sympheny-app/v2/scenarios/{scenarioGuid}/network-links
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_links.list()`](../../sdk/reference/network_links.md#method-network_links-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/network-links" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoListNetworkLinkResponseDtoV2` |
**Example response** (200)
```json
{
"data": [
{
"installedCapacity": 0.0,
"maximumCapacity": 0.0,
"networkLinkGuid": "string",
"name": "string",
"length": 0.0,
"technologyCapacity": "optimize",
"uniDirectionalFlow": true,
"mustBeInstalled": true,
"node1Guid": "string",
"node1Name": "string",
"node2Guid": "string",
"node2Name": "string",
"networkTechnologyName": "string",
"networkTechnologyGuid": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"minimumCapacity": 0.0,
"networkLoss": 0.0,
"networkLossProfileId": 0
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Specify network link v2 1 { #operation-specifyNetworkLinkV2_1 }
```
POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/network-links
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_links.create()`](../../sdk/reference/network_links.md#method-network_links-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`NetworkLinkRequestDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `installedCapacity` | number, nullable | no | |
| `maximumCapacity` | number, nullable | no | |
| `name` | string | yes | |
| `length` | number | yes | |
| `technologyCapacity` | string | yes | One of: `optimize`, `specify`. |
| `uniDirectionalFlow` | boolean | yes | |
| `mustBeInstalled` | boolean | yes | |
| `node1Guid` | string | yes | |
| `node2Guid` | string | yes | |
| `networkTechnologyGuid` | string | yes | |
| `costComponents` | array of `AdvancedCostComponentRequestDto`, nullable | no | |
| `minimumCapacity` | number, nullable | no | |
| `networkLoss` | number | yes | |
| `networkLossProfileId` | integer (int64), nullable | no | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/{scenarioGuid}/network-links" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"installedCapacity": 0.0,
"maximumCapacity": 0.0,
"name": "string",
"length": 0.0,
"technologyCapacity": "optimize",
"uniDirectionalFlow": true,
"mustBeInstalled": true,
"node1Guid": "string",
"node2Guid": "string",
"networkTechnologyGuid": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0
}
],
"minimumCapacity": 0.0,
"networkLoss": 0.0,
"networkLossProfileId": 0
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoNetworkLinkResponseDtoV2` |
**Example response** (201)
```json
{
"data": {
"installedCapacity": 0.0,
"maximumCapacity": 0.0,
"networkLinkGuid": "string",
"name": "string",
"length": 0.0,
"technologyCapacity": "optimize",
"uniDirectionalFlow": true,
"mustBeInstalled": true,
"node1Guid": "string",
"node1Name": "string",
"node2Guid": "string",
"node2Name": "string",
"networkTechnologyName": "string",
"networkTechnologyGuid": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"minimumCapacity": 0.0,
"networkLoss": 0.0,
"networkLossProfileId": 0
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Update network link v2 2 { #operation-updateNetworkLinkV2_2 }
```
PUT /sympheny-app/v2_2/scenarios/{scenarioGuid}/network-links/{network-link-guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.network_links.update()`](../../sdk/reference/network_links.md#method-network_links-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
| `network-link-guid` | path | string | yes | |
**Request body** (`NetworkLinkResponseDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `installedCapacity` | number, nullable | no | |
| `maximumCapacity` | number, nullable | no | |
| `networkLinkGuid` | string, nullable | no | |
| `name` | string | yes | |
| `length` | number | yes | |
| `technologyCapacity` | string | yes | One of: `optimize`, `specify`. |
| `uniDirectionalFlow` | boolean | yes | |
| `mustBeInstalled` | boolean | yes | |
| `node1Guid` | string | yes | |
| `node1Name` | string | yes | |
| `node2Guid` | string | yes | |
| `node2Name` | string | yes | |
| `networkTechnologyName` | string | yes | |
| `networkTechnologyGuid` | string | yes | |
| `costComponents` | array of `AdvancedCostComponentResponseDto` | yes | |
| `created` | string (date-time), nullable | no | |
| `updated` | string (date-time), nullable | no | |
| `minimumCapacity` | number, nullable | no | |
| `networkLoss` | number | yes | |
| `networkLossProfileId` | integer (int64), nullable | no | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2_2/scenarios/{scenarioGuid}/network-links/{network-link-guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"installedCapacity": 0.0,
"maximumCapacity": 0.0,
"networkLinkGuid": "string",
"name": "string",
"length": 0.0,
"technologyCapacity": "optimize",
"uniDirectionalFlow": true,
"mustBeInstalled": true,
"node1Guid": "string",
"node1Name": "string",
"node2Guid": "string",
"node2Name": "string",
"networkTechnologyName": "string",
"networkTechnologyGuid": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"minimumCapacity": 0.0,
"networkLoss": 0.0,
"networkLossProfileId": 0
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoNetworkLinkResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"installedCapacity": 0.0,
"maximumCapacity": 0.0,
"networkLinkGuid": "string",
"name": "string",
"length": 0.0,
"technologyCapacity": "optimize",
"uniDirectionalFlow": true,
"mustBeInstalled": true,
"node1Guid": "string",
"node1Name": "string",
"node2Guid": "string",
"node2Name": "string",
"networkTechnologyName": "string",
"networkTechnologyGuid": "string",
"costComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"minimumCapacity": 0.0,
"networkLoss": 0.0,
"networkLossProfileId": 0
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Intra-hub network links
## Get intra hub network link details { #operation-getIntraHubNetworkLinkDetails }
```
GET /sympheny-app/scenarios/intra-hub-network-links/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.intra_hub_network_links.get()`](../../sdk/reference/intra_hub_network_links.md#method-intra_hub_network_links-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/intra-hub-network-links/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoIntraHubNetworkLinkResponseDto` |
**Example response** (200)
```json
{
"data": {
"intraHubNetworkLinkGuid": "string",
"name": "string",
"networkLoss": 0.0,
"fixedEmbodiedCo2": 0.0,
"inputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"outputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"advancedCostComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Delete intra hub network link { #operation-deleteIntraHubNetworkLink }
```
DELETE /sympheny-app/scenarios/intra-hub-network-links/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.intra_hub_network_links.delete()`](../../sdk/reference/intra_hub_network_links.md#method-intra_hub_network_links-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/intra-hub-network-links/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoIntraHubNetworkLinkListResponseDto` |
**Example response** (200)
```json
{
"data": {
"intraHubNetworkLinks": [
{
"intraHubNetworkLinkGuid": "string",
"name": "string",
"networkLoss": 0.0,
"fixedEmbodiedCo2": 0.0,
"inputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"outputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"advancedCostComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get all intra hub network links { #operation-getAllIntraHubNetworkLinks }
```
GET /sympheny-app/scenarios/{scenarioGuid}/intra-hub-network-links
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.intra_hub_network_links.list()`](../../sdk/reference/intra_hub_network_links.md#method-intra_hub_network_links-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/scenarios/{scenarioGuid}/intra-hub-network-links" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoIntraHubNetworkLinkListResponseDto` |
**Example response** (200)
```json
{
"data": {
"intraHubNetworkLinks": [
{
"intraHubNetworkLinkGuid": "string",
"name": "string",
"networkLoss": 0.0,
"fixedEmbodiedCo2": 0.0,
"inputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"outputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"advancedCostComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Update intra hub network link v2 { #operation-updateIntraHubNetworkLinkV2 }
```
PUT /sympheny-app/v2/scenarios/intra-hub-network-links/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.intra_hub_network_links.update()`](../../sdk/reference/intra_hub_network_links.md#method-intra_hub_network_links-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Request body** (`IntraHubNetworkLinkResponseDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `intraHubNetworkLinkGuid` | string, nullable | no | |
| `name` | string | yes | |
| `networkLoss` | number, nullable | no | |
| `fixedEmbodiedCo2` | number, nullable | no | |
| `inputEnergyCarrier` | `EnergyCarrierResponseDto` | yes | |
| `outputEnergyCarrier` | `EnergyCarrierResponseDto` | yes | |
| `hubs` | array of `HubResponseDto` | yes | |
| `advancedCostComponents` | array of `AdvancedCostComponentResponseDto` | yes | |
| `created` | string (date-time), nullable | no | |
| `updated` | string (date-time), nullable | no | |
| `stages` | array of string (uuid) | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/intra-hub-network-links/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"intraHubNetworkLinkGuid": "string",
"name": "string",
"networkLoss": 0.0,
"fixedEmbodiedCo2": 0.0,
"inputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"outputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"advancedCostComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoIntraHubNetworkLinkResponseDto` |
**Example response** (200)
```json
{
"data": {
"intraHubNetworkLinkGuid": "string",
"name": "string",
"networkLoss": 0.0,
"fixedEmbodiedCo2": 0.0,
"inputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"outputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"advancedCostComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Specify intra hub network link v2 { #operation-specifyIntraHubNetworkLinkV2 }
```
POST /sympheny-app/v2/scenarios/{scenarioGuid}/intra-hub-network-links
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.intra_hub_network_links.create()`](../../sdk/reference/intra_hub_network_links.md#method-intra_hub_network_links-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`IntraHubNetworkLinkRequestDto`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | |
| `networkLoss` | number, nullable | no | |
| `fixedEmbodiedCo2` | number, nullable | no | |
| `inputEnergyCarrierGuid` | string | yes | |
| `outputEnergyCarrierGuid` | string | yes | |
| `hubGuids` | array of string | yes | |
| `advancedCostComponents` | array of `AdvancedCostComponentRequestDto`, nullable | no | |
| `stages` | array of string (uuid) | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/intra-hub-network-links" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"networkLoss": 0.0,
"fixedEmbodiedCo2": 0.0,
"inputEnergyCarrierGuid": "string",
"outputEnergyCarrierGuid": "string",
"hubGuids": [
"string"
],
"advancedCostComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0
}
],
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoIntraHubNetworkLinkResponseDto` |
**Example response** (201)
```json
{
"data": {
"intraHubNetworkLinkGuid": "string",
"name": "string",
"networkLoss": 0.0,
"fixedEmbodiedCo2": 0.0,
"inputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"outputEnergyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z"
}
],
"advancedCostComponents": [
{
"name": "string",
"value": 0.0,
"category": "string",
"lifetime": 0.0,
"interestRate": 0.0,
"length": 0.0,
"complexityFactor": 0.0,
"dataPoints": 0.0,
"numberOfPumps": 0.0,
"guid": "string",
"categoryId": "string"
}
],
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Imports and exports (impex)
## Delete impex { #operation-deleteImpex }
```
DELETE /sympheny-app/impex/{type}/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.impex.delete()`](../../sdk/reference/impex.md#method-impex-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `type` | path | string | yes | One of: `IMPORT`, `EXPORT`. |
| `guid` | path | string | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sympheny-app/impex/{type}/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoStatus` |
**Example response** (200)
```json
{
"data": {
"code": "string",
"desc": "string",
"message": "string"
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Get impex by guid v2 { #operation-getImpexByGuidV2 }
```
GET /sympheny-app/v2/impex/{type}/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.impex.get()`](../../sdk/reference/impex.md#method-impex-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `type` | path | string | yes | One of: `IMPORT`, `EXPORT`. |
| `guid` | path | string | yes | |
| `scenarioVariantGuid` | query | string | no | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/impex/{type}/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoImportExportResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"energyPriceCHFkWh": 0.0,
"maxCapacityKW": 0.0,
"totalAnnualEnergyAvailableKWhA": 0.0,
"capacityPriceCHFkWYear": 0.0,
"name": "string",
"hourlyEnergyPriceProfileId": 0,
"capacityPriceCHFkWMonth": 0.0,
"fixedOmPriceCHFYear": 0.0,
"co2IntensityKgCo2kWhCo2CompensationKgCo2kWh": 0.0,
"dynamicCo2ProfileId": 0,
"maximumHourlyEnergyAvailableProfileId": 0,
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"type": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"hubUpdated": "2026-01-01T00:00:00Z",
"hubCreated": "2026-01-01T00:00:00Z",
"impexGuid": "string"
}
],
"guid": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z",
"priceComponents": [
{
"name": "string",
"guid": "string",
"value": 0.0,
"priceCategory": "string",
"priceCategoryId": "ENERGY_DELIVERY",
"priceDimension": "string",
"priceDimensionId": "ENERGY_PRICE_CHF_KWH",
"type": "TIME_OF_USE",
"timeOfUses": [
"string"
]
}
],
"timeOfUses": [
{
"name": "string",
"months": [
"string"
],
"days": [
"string"
],
"startTime": "string",
"endTime": "string"
}
],
"product": "string",
"year": 0,
"notes": "string",
"source": "string",
"suggested": true,
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Find all by scenario v2 { #operation-findAllByScenarioV2 }
```
GET /sympheny-app/v2/scenarios/{scenarioGuid}/impexes
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.impex.list()`](../../sdk/reference/impex.md#method-impex-list).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sympheny-app/v2/scenarios/{scenarioGuid}/impexes" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoListImportExportResponseDtoV2` |
**Example response** (200)
```json
{
"data": [
{
"energyPriceCHFkWh": 0.0,
"maxCapacityKW": 0.0,
"totalAnnualEnergyAvailableKWhA": 0.0,
"capacityPriceCHFkWYear": 0.0,
"name": "string",
"hourlyEnergyPriceProfileId": 0,
"capacityPriceCHFkWMonth": 0.0,
"fixedOmPriceCHFYear": 0.0,
"co2IntensityKgCo2kWhCo2CompensationKgCo2kWh": 0.0,
"dynamicCo2ProfileId": 0,
"maximumHourlyEnergyAvailableProfileId": 0,
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"type": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"hubUpdated": "2026-01-01T00:00:00Z",
"hubCreated": "2026-01-01T00:00:00Z",
"impexGuid": "string"
}
],
"guid": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z",
"priceComponents": [
{
"name": "string",
"guid": "string",
"value": 0.0,
"priceCategory": "string",
"priceCategoryId": "ENERGY_DELIVERY",
"priceDimension": "string",
"priceDimensionId": "ENERGY_PRICE_CHF_KWH",
"type": "TIME_OF_USE",
"timeOfUses": [
"string"
]
}
],
"timeOfUses": [
{
"name": "string",
"months": [
"string"
],
"days": [
"string"
],
"startTime": "string",
"endTime": "string"
}
],
"product": "string",
"year": 0,
"notes": "string",
"source": "string",
"suggested": true,
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}
],
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Create new impex v2 1 { #operation-createNewImpexV2_1 }
```
POST /sympheny-app/v2_1/scenario/{scenarioGuid}/impex
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.impex.create()`](../../sdk/reference/impex.md#method-impex-create).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `scenarioGuid` | path | string | yes | |
**Request body** (`ImportExportRequestDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energyPriceCHFkWh` | number, nullable | no | |
| `maxCapacityKW` | number, nullable | no | |
| `totalAnnualEnergyAvailableKWhA` | number, nullable | no | |
| `capacityPriceCHFkWYear` | number, nullable | no | |
| `name` | string | yes | |
| `hourlyEnergyPriceProfileId` | integer (int64), nullable | no | |
| `capacityPriceCHFkWMonth` | number, nullable | no | |
| `fixedOmPriceCHFYear` | number, nullable | no | |
| `co2IntensityKgCo2kWhCo2CompensationKgCo2kWh` | number, nullable | no | |
| `dynamicCo2ProfileId` | integer (int64), nullable | no | |
| `maximumHourlyEnergyAvailableProfileId` | integer (int64), nullable | no | |
| `energyCarrierGuid` | string | yes | |
| `type` | string | yes | One of: `IMPORT`, `EXPORT`. |
| `hubs` | array of `ImpexHubRequestDto` | yes | |
| `product` | string, nullable | no | |
| `year` | integer (int32), nullable | no | |
| `notes` | string, nullable | no | |
| `source` | string, nullable | no | |
| `suggested` | boolean, nullable | no | |
| `priceComponents` | array of `AdvancedPriceComponentRequestDtoV2`, nullable | no | |
| `timeOfUses` | array of `TimeOfUseRequestDto`, nullable | no | |
| `stages` | array of string (uuid) | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenario/{scenarioGuid}/impex" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"energyPriceCHFkWh": 0.0,
"maxCapacityKW": 0.0,
"totalAnnualEnergyAvailableKWhA": 0.0,
"capacityPriceCHFkWYear": 0.0,
"name": "string",
"hourlyEnergyPriceProfileId": 0,
"capacityPriceCHFkWMonth": 0.0,
"fixedOmPriceCHFYear": 0.0,
"co2IntensityKgCo2kWhCo2CompensationKgCo2kWh": 0.0,
"dynamicCo2ProfileId": 0,
"maximumHourlyEnergyAvailableProfileId": 0,
"energyCarrierGuid": "string",
"type": "IMPORT",
"hubs": [
{
"hubGuid": "string"
}
],
"product": "string",
"year": 0,
"notes": "string",
"source": "string",
"suggested": true,
"priceComponents": [
{
"name": "string",
"value": 0.0,
"priceCategory": "ENERGY_DELIVERY",
"priceDimension": "ENERGY_PRICE_CHF_KWH",
"type": "TIME_OF_USE",
"timeOfUses": [
"string"
],
"priceCategoryId": "ENERGY_DELIVERY",
"priceDimensionId": "ENERGY_PRICE_CHF_KWH"
}
],
"timeOfUses": [
{
"name": "string",
"months": [
"string"
],
"days": [
"string"
],
"startTime": "string",
"endTime": "string"
}
],
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 201 | Created | `ResponseDtoImportExportResponseDtoV2` |
**Example response** (201)
```json
{
"data": {
"energyPriceCHFkWh": 0.0,
"maxCapacityKW": 0.0,
"totalAnnualEnergyAvailableKWhA": 0.0,
"capacityPriceCHFkWYear": 0.0,
"name": "string",
"hourlyEnergyPriceProfileId": 0,
"capacityPriceCHFkWMonth": 0.0,
"fixedOmPriceCHFYear": 0.0,
"co2IntensityKgCo2kWhCo2CompensationKgCo2kWh": 0.0,
"dynamicCo2ProfileId": 0,
"maximumHourlyEnergyAvailableProfileId": 0,
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"type": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"hubUpdated": "2026-01-01T00:00:00Z",
"hubCreated": "2026-01-01T00:00:00Z",
"impexGuid": "string"
}
],
"guid": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z",
"priceComponents": [
{
"name": "string",
"guid": "string",
"value": 0.0,
"priceCategory": "string",
"priceCategoryId": "ENERGY_DELIVERY",
"priceDimension": "string",
"priceDimensionId": "ENERGY_PRICE_CHF_KWH",
"type": "TIME_OF_USE",
"timeOfUses": [
"string"
]
}
],
"timeOfUses": [
{
"name": "string",
"months": [
"string"
],
"days": [
"string"
],
"startTime": "string",
"endTime": "string"
}
],
"product": "string",
"year": 0,
"notes": "string",
"source": "string",
"suggested": true,
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
## Edit impex v2 1 { #operation-editImpexV2_1 }
```
PUT /sympheny-app/v2_1/scenarios/impex/{guid}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.impex.update()`](../../sdk/reference/impex.md#method-impex-update).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `guid` | path | string | yes | |
**Request body** (`ImportExportResponseDtoV2`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energyPriceCHFkWh` | number, nullable | no | |
| `maxCapacityKW` | number, nullable | no | |
| `totalAnnualEnergyAvailableKWhA` | number, nullable | no | |
| `capacityPriceCHFkWYear` | number, nullable | no | |
| `name` | string | yes | |
| `hourlyEnergyPriceProfileId` | integer (int64), nullable | no | |
| `capacityPriceCHFkWMonth` | number, nullable | no | |
| `fixedOmPriceCHFYear` | number, nullable | no | |
| `co2IntensityKgCo2kWhCo2CompensationKgCo2kWh` | number, nullable | no | |
| `dynamicCo2ProfileId` | integer (int64), nullable | no | |
| `maximumHourlyEnergyAvailableProfileId` | integer (int64), nullable | no | |
| `energyCarrier` | `EnergyCarrierResponseDto` | yes | |
| `type` | string | yes | |
| `hubs` | array of `ImpexHubResponseDto` | yes | |
| `guid` | string, nullable | no | |
| `updated` | string (date-time), nullable | no | |
| `created` | string (date-time), nullable | no | |
| `priceComponents` | array of `AdvancedPriceComponentResponseDtoV2` | yes | |
| `timeOfUses` | array of `TimeOfUseResponseDto` | yes | |
| `product` | string, nullable | no | |
| `year` | integer (int32), nullable | no | |
| `notes` | string, nullable | no | |
| `source` | string, nullable | no | |
| `suggested` | boolean, nullable | no | |
| `stages` | array of string (uuid) | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sympheny-app/v2_1/scenarios/impex/{guid}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"energyPriceCHFkWh": 0.0,
"maxCapacityKW": 0.0,
"totalAnnualEnergyAvailableKWhA": 0.0,
"capacityPriceCHFkWYear": 0.0,
"name": "string",
"hourlyEnergyPriceProfileId": 0,
"capacityPriceCHFkWMonth": 0.0,
"fixedOmPriceCHFYear": 0.0,
"co2IntensityKgCo2kWhCo2CompensationKgCo2kWh": 0.0,
"dynamicCo2ProfileId": 0,
"maximumHourlyEnergyAvailableProfileId": 0,
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"type": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"hubUpdated": "2026-01-01T00:00:00Z",
"hubCreated": "2026-01-01T00:00:00Z",
"impexGuid": "string"
}
],
"guid": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z",
"priceComponents": [
{
"name": "string",
"guid": "string",
"value": 0.0,
"priceCategory": "string",
"priceCategoryId": "ENERGY_DELIVERY",
"priceDimension": "string",
"priceDimensionId": "ENERGY_PRICE_CHF_KWH",
"type": "TIME_OF_USE",
"timeOfUses": [
"string"
]
}
],
"timeOfUses": [
{
"name": "string",
"months": [
"string"
],
"days": [
"string"
],
"startTime": "string",
"endTime": "string"
}
],
"product": "string",
"year": 0,
"notes": "string",
"source": "string",
"suggested": true,
"stages": [
"00000000-0000-0000-0000-000000000000"
]
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | OK | `ResponseDtoImportExportResponseDtoV2` |
**Example response** (200)
```json
{
"data": {
"energyPriceCHFkWh": 0.0,
"maxCapacityKW": 0.0,
"totalAnnualEnergyAvailableKWhA": 0.0,
"capacityPriceCHFkWYear": 0.0,
"name": "string",
"hourlyEnergyPriceProfileId": 0,
"capacityPriceCHFkWMonth": 0.0,
"fixedOmPriceCHFYear": 0.0,
"co2IntensityKgCo2kWhCo2CompensationKgCo2kWh": 0.0,
"dynamicCo2ProfileId": 0,
"maximumHourlyEnergyAvailableProfileId": 0,
"energyCarrier": {
"energyCarrierGuid": "string",
"typeKey": "string",
"typeDisplayName": "string",
"subtypeKey": "string",
"subtypeDisplayName": "string",
"energyCarrierName": "string",
"colorHexCode": "string",
"fixedInputShare": 0.0,
"outputEfficiency": 0.0,
"customOutputEfficiencyActivated": true,
"customInputEfficiencyActivated": true,
"customSeasonalityValues": [
{
"month": "JANUARY",
"value": 0.0
}
],
"outputEfficiencyProfileId": 0,
"created": "2026-01-01T00:00:00Z",
"primary": true
},
"type": "string",
"hubs": [
{
"hubGuid": "string",
"hubName": "string",
"hubUpdated": "2026-01-01T00:00:00Z",
"hubCreated": "2026-01-01T00:00:00Z",
"impexGuid": "string"
}
],
"guid": "string",
"updated": "2026-01-01T00:00:00Z",
"created": "2026-01-01T00:00:00Z",
"priceComponents": [
{
"name": "string",
"guid": "string",
"value": 0.0,
"priceCategory": "string",
"priceCategoryId": "ENERGY_DELIVERY",
"priceDimension": "string",
"priceDimensionId": "ENERGY_PRICE_CHF_KWH",
"type": "TIME_OF_USE",
"timeOfUses": [
"string"
]
}
],
"timeOfUses": [
{
"name": "string",
"months": [
"string"
],
"days": [
"string"
],
"startTime": "string",
"endTime": "string"
}
],
"product": "string",
"year": 0,
"notes": "string",
"source": "string",
"suggested": true,
"stages": [
"00000000-0000-0000-0000-000000000000"
]
},
"status": {
"code": "string",
"desc": "string",
"message": "string"
}
}
```
---
# Auth
External API - auth resource
## Post Oauth Webapp { #operation-post_oauth_webapp_backoffice_auth_ext_token_post }
```
POST /backoffice/auth/ext/token
```
No authentication required.
**Request body** (`Auth0UserCredentials`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `email` | string (email) | yes | |
| `password` | string | yes | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/backoffice/auth/ext/token" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "string"
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | Successful Response | `Auth0UserAccessToken` |
| 400 | Bad Request | `AppException` |
| 401 | Unauthorized | `AppException` |
| 404 | Not Found | `AppException` |
| 409 | Conflict | `AppException` |
| 500 | Internal Server Error | `AppException` |
| 422 | Validation Error | `HTTPValidationError` |
**Example response** (200)
```json
{
"access_token": "string",
"token_type": "string",
"expires_in": 0
}
```
---
# Users
External API - users resource
## Get User Profile { #operation-get_user_profile_backoffice_ext_users_profile_get }
```
GET /backoffice/ext/users/profile
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.users.profile()`](../../sdk/reference/users.md#method-users-profile).
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/backoffice/ext/users/profile" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | Successful Response | `GetUserProfileExt` |
| 400 | Bad Request | `AppException` |
| 401 | Unauthorized | `AppException` |
| 404 | Not Found | `AppException` |
| 409 | Conflict | `AppException` |
| 500 | Internal Server Error | `AppException` |
**Example response** (200)
```json
{
"account": {
"email": "user@example.com",
"planLimitationId": "string",
"organizationId": "string",
"subscriptionId": "string",
"planExpiry": "2026-01-01",
"numberOfExecutionsLeft": 0,
"executionTimeWeekLeft": 0,
"mfa": false,
"deactivated": false,
"superuser": false,
"admin": false,
"showMaintenanceInfo": false,
"showGtc": false,
"showUserGuide": false,
"accountGuid": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z"
},
"preferences": {
"exchangeCurrencyDefault": "string",
"unitSystemDefault": "string",
"languageDefault": "English",
"interestRateDefault": 0.0,
"firstName": "string",
"lastName": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z"
},
"planLimitation": {
"intraHubNetwork": false,
"advancedCostComponents": false,
"unitCommitment": false,
"maxEnergyCarriersPerHub": 0,
"maxEnergyDemands": 0,
"maxHubs": 0,
"maxStages": 1,
"maxSolarResources": 0,
"maxOtherResources": 0,
"maxImports": 0,
"maxExports": 0,
"maxConversionTechs": 0,
"maxConversionModes": 0,
"maxStorageTechs": 0,
"maxNetworkTechs": 0,
"maxNetworkLinks": 0,
"maxExecutions": 0,
"maxSimultaneousExecutions": 0,
"maxExecutionTime": 0,
"maxExecutionTimeWeek": 0,
"maxExecutionHistory": 100,
"maxParetoPoints": 9,
"fullTemporalResolution": false,
"maxProjects": 0,
"maxAnalyses": 0,
"maxScenarios": 0,
"shareProject": false,
"organizationDb": false,
"scenarioVariants": false,
"maxScenarioVariants": 0,
"name": "string",
"id": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"sagemakerOn": true,
"sagemakerRegions": [
"eu-north-1"
]
},
"organization": {
"name": "string",
"gisOn": false,
"sepOn": false,
"sepBuildingsLimit": 0,
"executionSlots": 0,
"variableBilling": false,
"maxExecutions": 0,
"maxSimultaneousExecutions": 0,
"maxExecutionTime": 0,
"maxExecutionTimeWeek": 0,
"numberOfExecutionsLeft": 0,
"executionTimeWeekLeft": 0,
"id": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z",
"sepBuildingsConsumed": 0
},
"subscription": {
"name": "string",
"organizationId": "string",
"startDate": "2026-01-01",
"endDate": "2026-01-01",
"billingCycle": "MONTHLY",
"nextBillingDate": "2026-01-01",
"variableBilling": false,
"executionPriority": 0,
"maxSimultaneousExecutions": 0,
"maxExecutionsPerCycle": 0,
"maxExecutionTimePerCycle": 0,
"maxExecutionsPerWeek": 0,
"maxExecutionTimePerWeek": 0,
"userMaxExecutionsPerCycle": 0,
"userMaxExecutionTimePerCycle": 0,
"userMaxExecutionsPerWeek": 0,
"userMaxExecutionTimePerWeek": 0,
"id": "string",
"created": "2026-01-01T00:00:00Z",
"updated": "2026-01-01T00:00:00Z"
},
"profilePicture": "string",
"organizationPicture": "string"
}
```
---
# Solver jobs
## Post Solver Jobs { #operation-post_solver_jobs_sense_api_ext_solver_jobs_post }
```
POST /sense-api/ext/solver/jobs
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solver_jobs.submit()`](../../sdk/reference/solver_jobs.md#method-solver_jobs-submit).
**Request body** (array of `PostSolverJobExt`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | |
| `objective1` | `ObjectiveFunction` | yes | One of: `MIN_LIFE_CYCLE_COST`, `MIN_ANNUALIZED_COST`, `MIN_CO2_EMISSIONS`, `MIN_INVESTMENT`, `MIN_OM`, `MIN_FUEL_IMPORTS`, `MIN_REPLACEMENT`, `MAX_EXPORTS`, `MAX_SALVAGE`. |
| `objective2` | `ObjectiveFunction`, nullable | no | |
| `scenarioGuid` | string, nullable | no | |
| `scenarioName` | string, nullable | no | |
| `temporalResolution` | `TemporalResolution` | yes | One of: `LOW`, `MEDIUM`, `HIGH`, `FULL`. |
| `points` | integer | yes | |
| `timeLimit` | integer | yes | |
| `mipGap` | number | yes | |
| `inputFileId` | string (uuid4), nullable | no | |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sense-api/ext/solver/jobs" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '[
{
"name": "string",
"objective1": "MIN_LIFE_CYCLE_COST",
"objective2": "MIN_LIFE_CYCLE_COST",
"scenarioGuid": "string",
"scenarioName": "string",
"temporalResolution": "LOW",
"points": 0,
"timeLimit": 0,
"mipGap": 0.0,
"inputFileId": "string"
}
]'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | Successful Response | array of `SolverJob` |
| 400 | Bad Request | `CustomHTTPException` |
| 401 | Unauthorized | `CustomHTTPException` |
| 404 | Not Found | `CustomHTTPException` |
| 409 | Conflict | `CustomHTTPException` |
| 413 | Request Entity Too Large | `CustomHTTPException` |
| 500 | Internal Server Error | `CustomHTTPException` |
| 422 | Validation Error | `HTTPValidationError` |
**Example response** (200)
```json
[
{
"status": "VALIDATING",
"statusMsg": "Validating",
"batchId": "string",
"pointsCompleted": 0,
"started": "2026-01-01T00:00:00Z",
"terminated": "2026-01-01T00:00:00Z",
"infeasibilityInfo": "string",
"name": "string",
"objective1": "MIN_LIFE_CYCLE_COST",
"objective2": "MIN_LIFE_CYCLE_COST",
"scenarioGuid": "string",
"scenarioName": "string",
"temporalResolution": "LOW",
"points": 0,
"timeLimit": 0,
"mipGap": 0.0,
"accountGuid": "string",
"organizationId": "string",
"subscriptionId": "string",
"id": "string",
"created": "2026-01-01T00:00:00Z"
}
]
```
## Post Get Scenario Jobs { #operation-post_get_scenario_jobs_sense_api_ext_solver_jobs_get_scenarios_post }
```
POST /sense-api/ext/solver/jobs/get-scenarios
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solver_jobs.list_for_scenarios()`](../../sdk/reference/solver_jobs.md#method-solver_jobs-list_for_scenarios).
**Request body** (`GetScenarioGuidsPage`)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `scenarioGuids` | array of string | yes | |
| `limit` | integer | no | Default: `200`. |
**Example request**
```bash
curl -X POST "https://eu-north-1-api.sympheny.com/sense-api/ext/solver/jobs/get-scenarios" \
-H "Authorization: Bearer $SYMPHENY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scenarioGuids": [
"string"
],
"limit": 200
}'
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | Successful Response | array of `SolverJob` |
| 400 | Bad Request | `CustomHTTPException` |
| 401 | Unauthorized | `CustomHTTPException` |
| 404 | Not Found | `CustomHTTPException` |
| 409 | Conflict | `CustomHTTPException` |
| 413 | Request Entity Too Large | `CustomHTTPException` |
| 500 | Internal Server Error | `CustomHTTPException` |
| 422 | Validation Error | `HTTPValidationError` |
**Example response** (200)
```json
[
{
"status": "VALIDATING",
"statusMsg": "Validating",
"batchId": "string",
"pointsCompleted": 0,
"started": "2026-01-01T00:00:00Z",
"terminated": "2026-01-01T00:00:00Z",
"infeasibilityInfo": "string",
"name": "string",
"objective1": "MIN_LIFE_CYCLE_COST",
"objective2": "MIN_LIFE_CYCLE_COST",
"scenarioGuid": "string",
"scenarioName": "string",
"temporalResolution": "LOW",
"points": 0,
"timeLimit": 0,
"mipGap": 0.0,
"accountGuid": "string",
"organizationId": "string",
"subscriptionId": "string",
"id": "string",
"created": "2026-01-01T00:00:00Z"
}
]
```
## Get Solver Jobs Usage { #operation-get_solver_jobs_usage_sense_api_ext_solver_jobs_usage_get }
```
GET /sense-api/ext/solver/jobs/usage
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solver_jobs.usage()`](../../sdk/reference/solver_jobs.md#method-solver_jobs-usage).
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sense-api/ext/solver/jobs/usage" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | Successful Response | `GetUsageExt` |
| 400 | Bad Request | `CustomHTTPException` |
| 401 | Unauthorized | `CustomHTTPException` |
| 404 | Not Found | `CustomHTTPException` |
| 409 | Conflict | `CustomHTTPException` |
| 413 | Request Entity Too Large | `CustomHTTPException` |
| 500 | Internal Server Error | `CustomHTTPException` |
**Example response** (200)
```json
{
"subscription": {
"totalCountOverage": 0,
"totalMinutesOverage": 0,
"weeklyCountOverage": 0,
"weeklyMinutesOverage": 0,
"totalCount": 0,
"totalMinutes": 0,
"currentWeekCount": 0,
"currentWeekMinutes": 0
},
"user": {
"totalCount": 0,
"totalMinutes": 0,
"currentWeekCount": 0,
"currentWeekMinutes": 0,
"historyCount": 0
}
}
```
## Get Solver Job { #operation-get_solver_job_sense_api_ext_solver_jobs__id__get }
```
GET /sense-api/ext/solver/jobs/{id}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solver_jobs.get()`](../../sdk/reference/solver_jobs.md#method-solver_jobs-get).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string (uuid) | yes | |
**Example request**
```bash
curl -X GET "https://eu-north-1-api.sympheny.com/sense-api/ext/solver/jobs/{id}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | Successful Response | `GetSolverJobExt` |
| 400 | Bad Request | `CustomHTTPException` |
| 401 | Unauthorized | `CustomHTTPException` |
| 404 | Not Found | `CustomHTTPException` |
| 409 | Conflict | `CustomHTTPException` |
| 413 | Request Entity Too Large | `CustomHTTPException` |
| 500 | Internal Server Error | `CustomHTTPException` |
| 422 | Validation Error | `HTTPValidationError` |
**Example response** (200)
```json
{
"status": "VALIDATING",
"statusMsg": "Validating",
"batchId": "string",
"pointsCompleted": 0,
"started": "2026-01-01T00:00:00Z",
"terminated": "2026-01-01T00:00:00Z",
"infeasibilityInfo": "string",
"name": "string",
"objective1": "MIN_LIFE_CYCLE_COST",
"objective2": "MIN_LIFE_CYCLE_COST",
"scenarioGuid": "string",
"scenarioName": "string",
"temporalResolution": "LOW",
"points": 0,
"timeLimit": 0,
"mipGap": 0.0,
"accountGuid": "string",
"organizationId": "string",
"subscriptionId": "string",
"id": "string",
"created": "2026-01-01T00:00:00Z",
"inputFile": "string",
"outputFile": "string"
}
```
## Delete Solver Job { #operation-delete_solver_job_sense_api_ext_solver_jobs__id__delete }
```
DELETE /sense-api/ext/solver/jobs/{id}
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solver_jobs.delete()`](../../sdk/reference/solver_jobs.md#method-solver_jobs-delete).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string (uuid) | yes | |
**Example request**
```bash
curl -X DELETE "https://eu-north-1-api.sympheny.com/sense-api/ext/solver/jobs/{id}" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | Successful Response | string |
| 400 | Bad Request | `CustomHTTPException` |
| 401 | Unauthorized | `CustomHTTPException` |
| 404 | Not Found | `CustomHTTPException` |
| 409 | Conflict | `CustomHTTPException` |
| 413 | Request Entity Too Large | `CustomHTTPException` |
| 500 | Internal Server Error | `CustomHTTPException` |
| 422 | Validation Error | `HTTPValidationError` |
**Example response** (200)
```json
"string"
```
## Stop Job { #operation-stop_job_sense_api_ext_solver_jobs__id__stop_put }
```
PUT /sense-api/ext/solver/jobs/{id}/stop
```
Requires a [Bearer token](../authentication.md). SDK method: [`client.solver_jobs.stop()`](../../sdk/reference/solver_jobs.md#method-solver_jobs-stop).
**Parameters**
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string (uuid) | yes | |
**Example request**
```bash
curl -X PUT "https://eu-north-1-api.sympheny.com/sense-api/ext/solver/jobs/{id}/stop" \
-H "Authorization: Bearer $SYMPHENY_TOKEN"
```
**Responses**
| Status | Description | Schema |
| --- | --- | --- |
| 200 | Successful Response | string |
| 400 | Bad Request | `CustomHTTPException` |
| 401 | Unauthorized | `CustomHTTPException` |
| 404 | Not Found | `CustomHTTPException` |
| 409 | Conflict | `CustomHTTPException` |
| 413 | Request Entity Too Large | `CustomHTTPException` |
| 500 | Internal Server Error | `CustomHTTPException` |
| 422 | Validation Error | `HTTPValidationError` |
**Example response** (200)
```json
"string"
```
---
# Python SDK
`sympheny-toolbox` is the official Python client for the Sympheny API. It exposes every
documented REST endpoint as a typed method, validates requests and responses with
Pydantic models, and handles authentication (login, token caching, refresh) for you.
## Install
```sh
pip install sympheny-toolbox
```
Requires Python 3.11 or newer.
## One API, sync and async
Every method exists on both `Sympheny` and `AsyncSympheny` with identical signatures —
the sync client is generated from the async source, so the two can never diverge.
These docs describe the async client once; every code example has a **Sync** / **Async**
tab, and your choice persists across all pages.
## Quickstart
Authenticate with your Sympheny account credentials, then reach the endpoints through
resource groups on the client (`client.projects`, `client.scenarios`, …):
=== "Async"
```python
import asyncio
from sympheny_toolbox import AsyncSympheny
async def main() -> None:
async with AsyncSympheny("you@example.com", "password") as client:
projects = await client.projects.list()
for project in projects:
print(project.project_name, project.project_guid)
asyncio.run(main())
```
=== "Sync"
```python
from sympheny_toolbox import Sympheny
with Sympheny("you@example.com", "password") as client:
projects = client.projects.list()
for project in projects:
print(project.project_name, project.project_guid)
```
The client is a context manager; it closes its HTTP connection pool on exit. Outside a
`with` block, call `aclose()` (async) or `close()` (sync) yourself.
### Client options
| Argument | Default | Description |
| --- | --- | --- |
| `username` | — | Sympheny account email address. |
| `password` | — | Sympheny account password. |
| `is_dev` | `False` | Use the development environment instead of production. |
| `base_url` | production URL | Override the API base URL entirely (takes precedence over `is_dev`). |
| `timeout` | `30.0` | Request timeout in seconds. |
### Errors
Failed requests raise typed exceptions from `sympheny_toolbox.errors`, all subclasses of
`SymphenyError`: `AuthenticationError` (401), `PermissionDeniedError` (403),
`NotFoundError` (404), `APIError` (any other unsuccessful status, with `status_code` and
`body` attributes), and `UnexpectedResponseError` (the response lacked the expected
payload).
## Where to go next
- [Workflows](workflows/index.md) — end-to-end guides: create a scenario from Excel, run a
solver job, and download the results.
- [SDK reference](reference/projects.md) — one page per resource group, one section per
method, each cross-linked to the REST operation it wraps.
- [Model reference](reference/models/common.md) — the Pydantic request/response models,
grouped by resource.
- [REST API reference](../api/index.md) — the underlying HTTP API, if you need to call
it directly.
---
# Workflows
The [SDK reference](../reference/projects.md) documents one method at a time. These
guides string those methods together into the end-to-end flows you actually run: take a
scenario from an Excel workbook, optimize it, and read the results back.
## The end-to-end flow
Most automation follows the same three steps, each covered by one guide:
1. **[Create a scenario from Excel](scenario-from-excel.md)** — upload a filled-in
scenario workbook and turn it into a scenario you can execute.
2. **[Run a solver job](run-solver-job.md)** — submit the scenario to the solver and
poll until the optimization finishes.
3. **[Download the results](download-results.md)** — fetch the result file of a finished
job, or link straight to its results dashboard.
You can also start in the middle: if you already modelled a scenario in the
[web application](../../web-app/index.md), skip to step 2 with its scenario GUID.
## Prerequisites
- The SDK installed and a Sympheny account — see the [SDK overview](../index.md).
- Familiarity with the Sympheny domain model helps; the
[concepts](../../web-app/concepts/index.md) pages define hubs, energy carriers,
demands, and technologies once, and the reference pages link back to them.
## Sync or async
Every example has a **Sync** and an **Async** tab, and your choice persists across pages.
The two are identical apart from `Sympheny`/`AsyncSympheny`, `await`, and `time.sleep`
vs `asyncio.sleep`.
!!! note "Convenience helpers are sync-only"
The `sympheny_toolbox.workflows` module bundles several of these flows into
one-line helpers (for example `workflows.execute_scenario`). They are built on the
synchronous client and have no async twin — each guide points them out where they
apply, and shows the client-level calls you would use on the async client.
---
# Create a scenario from Excel
Turn a filled-in scenario Excel workbook into a Sympheny scenario you can execute. This
is the fastest way to create a fully-specified scenario in one call instead of building
it stage by stage.
## Prerequisites
- An **analysis GUID** to create the scenario in. List your projects with
[`client.projects.list()`](../reference/projects.md#method-projects-list) and their
analyses with
[`client.analyses.list(project_guid)`](../reference/analyses.md#method-analyses-list),
or copy the GUID from the analysis URL in the
[web application](../../web-app/how-to/managing-analyses.md).
- A scenario **Excel workbook** with the sheets the importer expects (`Stages`, `Hubs`,
`Energy Carriers`, `Demands`, `Conversion Techs`, …). Export one from an existing
scenario in the web app to use as a template.
## Steps
Uploading happens in three calls: ask for a presigned upload URL, PUT the file to it,
then create the scenario from that URL.
=== "Async"
```python
import asyncio
from pathlib import Path
from sympheny_toolbox import AsyncSympheny
async def main() -> None:
analysis_guid = "your-analysis-guid"
content = Path("scenario.xlsx").read_bytes()
async with AsyncSympheny("you@example.com", "password") as client:
upload_url = await client.unofficial.get_upload_url()
await client.unofficial.upload_to_presigned_url(upload_url, content)
scenario_guid = await client.unofficial.create_scenario_from_excel_url(
upload_url, "Scenario from Excel", analysis_guid
)
print("created scenario", scenario_guid)
asyncio.run(main())
```
=== "Sync"
```python
from pathlib import Path
from sympheny_toolbox import Sympheny
analysis_guid = "your-analysis-guid"
content = Path("scenario.xlsx").read_bytes()
with Sympheny("you@example.com", "password") as client:
upload_url = client.unofficial.get_upload_url()
client.unofficial.upload_to_presigned_url(upload_url, content)
scenario_guid = client.unofficial.create_scenario_from_excel_url(
upload_url, "Scenario from Excel", analysis_guid
)
print("created scenario", scenario_guid)
```
`create_scenario_from_excel_url` returns the new scenario's GUID — pass it straight to
[Run a solver job](run-solver-job.md).
!!! note "Unofficial endpoints"
[`get_upload_url`](../reference/unofficial.md#method-unofficial-get_upload_url),
[`upload_to_presigned_url`](../reference/unofficial.md#method-unofficial-upload_to_presigned_url),
and
[`create_scenario_from_excel_url`](../reference/unofficial.md#method-unofficial-create_scenario_from_excel_url)
wrap endpoints that are **not part of the published REST spec**. They power the web
app's Excel import and are stable in practice, but may change without a version bump.
## Shortcut (sync client only)
The `workflows` module collapses the three calls into one. It reads the file, uploads it,
and creates the scenario:
```python
from sympheny_toolbox import Sympheny, workflows
with Sympheny("you@example.com", "password") as client:
scenario_guid = workflows.create_scenario_from_excel(
client, "scenario.xlsx", "Scenario from Excel", analysis_guid
)
```
This helper is built on the synchronous client and has no async twin; on the async client,
use the three calls above.
## What to read next
- [Run a solver job](run-solver-job.md) — optimize the scenario you just created.
- [Scenarios reference](../reference/scenarios.md) — inspect, rename, copy, or delete the
scenario.
- [Modeling scenarios](../../web-app/how-to/modeling-scenarios/index.md) — what each
workbook sheet corresponds to in the scenario editor.
---
# Run a solver job
Submit a scenario to the Sympheny solver and wait for the optimization to finish. This
mirrors clicking **Execute** in the [web application](../../web-app/how-to/executing-scenarios.md),
but scripted end to end.
## Prerequisites
- A **scenario GUID** that is ready for execution — for example the one returned by
[Create a scenario from Excel](scenario-from-excel.md), or an existing scenario's GUID.
- Solver quota on your subscription. Check it with
[`client.solver_jobs.usage()`](../reference/solver_jobs.md#method-solver_jobs-usage).
## Build the request
A solver job is described by a
[`PostSolverJobExt`](../reference/models/solver.md#model-PostSolverJobExt). The request is
plain data, so you build it the same way whichever client you use:
```python
from sympheny_toolbox.models import ObjectiveFunction, PostSolverJobExt, TemporalResolution
request = PostSolverJobExt(
name="Battery evaluation",
objective1=ObjectiveFunction.min_life_cycle_cost,
objective2=ObjectiveFunction.min_co2_emissions,
scenario_guid="your-scenario-guid",
temporal_resolution=TemporalResolution.low,
points=2,
time_limit=30,
mip_gap=1.0,
)
```
- **`objective1` / `objective2`** — the optimization objectives (see
[`ObjectiveFunction`](../reference/models/solver.md#model-ObjectiveFunction)). With two
objectives the solver returns a Pareto front of `points` solutions.
- **`temporal_resolution`** — how aggressively the 8760-hour year is
[clustered](../../web-app/concepts/clustered-profiles.md) before solving
(`LOW`/`MEDIUM`/`HIGH`/`FULL`); lower is faster, coarser.
- **`mip_gap`** — the optimality gap, in percent, at which the solver stops.
!!! warning "`time_limit` is in minutes"
`time_limit` is the solver's processing budget in **minutes** (queue time excluded),
not seconds. The server terminates a job once it is exceeded.
## Submit and poll
Submit the request, then poll the job until it reaches a terminal status. `DONE` means the
optimization succeeded; `STOPPED`, `FAILED`, and `INVALID` are terminal failures.
=== "Async"
```python
import asyncio
from sympheny_toolbox import AsyncSympheny
from sympheny_toolbox.models import JobStatus
TERMINAL = {JobStatus.done, JobStatus.stopped, JobStatus.failed, JobStatus.invalid}
async def main() -> None:
async with AsyncSympheny("you@example.com", "password") as client:
submitted = await client.solver_jobs.submit([request])
job_id = submitted[0].id
while True:
job = await client.solver_jobs.get(job_id)
print(job.status)
if job.status in TERMINAL:
break
await asyncio.sleep(10)
if job.status is not JobStatus.done:
raise RuntimeError(f"Job did not finish cleanly: {job.status} — {job.infeasibility_info}")
print("finished job", job_id)
asyncio.run(main())
```
=== "Sync"
```python
import time
from sympheny_toolbox import Sympheny
from sympheny_toolbox.models import JobStatus
TERMINAL = {JobStatus.done, JobStatus.stopped, JobStatus.failed, JobStatus.invalid}
with Sympheny("you@example.com", "password") as client:
submitted = client.solver_jobs.submit([request])
job_id = submitted[0].id
while True:
job = client.solver_jobs.get(job_id)
print(job.status)
if job.status in TERMINAL:
break
time.sleep(10)
if job.status is not JobStatus.done:
raise RuntimeError(f"Job did not finish cleanly: {job.status} — {job.infeasibility_info}")
print("finished job", job_id)
```
[`submit`](../reference/solver_jobs.md#method-solver_jobs-submit) takes a **list** of
requests and returns one [`SolverJob`](../reference/models/solver.md#model-SolverJob) per
request, so you can batch several scenarios in a single call and poll each `id`.
## Shortcut (sync client only)
`workflows.execute_scenario` builds the request, submits it, and polls to termination in
one call, raising if the scenario is infeasible:
```python
from sympheny_toolbox import Sympheny, workflows
with Sympheny("you@example.com", "password") as client:
job = workflows.execute_scenario(client, "your-scenario-guid", time_limit=30)
print(job.status) # JobStatus.done
```
Use `workflows.execute_scenarios` to submit many at once. Both are built on the
synchronous client; on the async client, use the submit-and-poll loop above.
## What to read next
- [Download the results](download-results.md) — read the result file of the finished job.
- [Solver jobs reference](../reference/solver_jobs.md) — every method on
`client.solver_jobs`, including `list_for_scenarios`, `stop`, and `delete`.
- [`POST /sense-api/ext/solver/jobs`](../../api/reference/solver-jobs.md#operation-post_solver_jobs_sense_api_ext_solver_jobs_post) —
the underlying REST operation.
---
# Download the results
Fetch the result file of a finished solver job, or link straight to its results dashboard
in the [web application](../../web-app/how-to/scenario-results.md).
## Prerequisites
- The **job id** of a finished job — the one returned by
[Run a solver job](run-solver-job.md). If you only have a scenario GUID, list its jobs
with
[`client.solver_jobs.list_for_scenarios([scenario_guid])`](../reference/solver_jobs.md#method-solver_jobs-list_for_scenarios).
## Get the result file URL
A finished job carries an `output_file` — a presigned URL to a zip of result workbooks,
one Excel file per Pareto solution. It is only populated once the job's status is `DONE`.
=== "Async"
```python
import asyncio
from sympheny_toolbox import AsyncSympheny
from sympheny_toolbox.models import JobStatus
async def main() -> None:
job_id = "your-job-id"
async with AsyncSympheny("you@example.com", "password") as client:
job = await client.solver_jobs.get(job_id)
if job.status is not JobStatus.done or job.output_file is None:
raise RuntimeError(f"No results available (status {job.status})")
print(str(job.output_file.root)) # presigned URL to the results zip
asyncio.run(main())
```
=== "Sync"
```python
from sympheny_toolbox import Sympheny
from sympheny_toolbox.models import JobStatus
job_id = "your-job-id"
with Sympheny("you@example.com", "password") as client:
job = client.solver_jobs.get(job_id)
if job.status is not JobStatus.done or job.output_file is None:
raise RuntimeError(f"No results available (status {job.status})")
print(str(job.output_file.root)) # presigned URL to the results zip
```
With the URL in hand you can download the zip with any HTTP client and open the workbooks
yourself, or use the helper below to parse them for you.
## Read a solution (sync client only)
`workflows.get_output_file_dict` downloads the zip, opens one solution's workbook, and
returns its `Cost & CO2` summary plus every `Mode *` profile sheet as plain Python data:
```python
from sympheny_toolbox import Sympheny, workflows
with Sympheny("you@example.com", "password") as client:
result = workflows.get_output_file_dict(client, "your-job-id", solution_num=1)
print(result["Cost & CO2"])
```
## Link to the dashboard instead
To send someone to the interactive results dashboard rather than the raw file,
`workflows.dashboard_url` returns the web-app URL of a scenario's first finished job:
```python
from sympheny_toolbox import Sympheny, workflows
with Sympheny("you@example.com", "password") as client:
print(workflows.dashboard_url(client, "your-scenario-guid"))
```
Both helpers are built on the synchronous client and have no async twin.
## What to read next
- [Scenario results](../../web-app/how-to/scenario-results.md) — how to read a results
dashboard in the web app.
- [Solver jobs reference](../reference/solver_jobs.md) — the full
[`GetSolverJobExt`](../reference/models/solver.md#model-GetSolverJobExt) a job returns.
- [`GET /sense-api/ext/solver/jobs/{id}`](../../api/reference/solver-jobs.md#operation-get_solver_job_sense_api_ext_solver_jobs__id__get) —
the underlying REST operation.
---
# Projects
Operations on projects. Available on the client as `client.projects`.
## projects.list { #method-projects-list }
```python
async def list() -> list[ProjectResponseDto]
```
List all projects visible to the authenticated user.
REST operation: [`GET /sympheny-app/projects`](../../api/reference/projects.md#operation-viewMyProjects)
**Returns:** list of [`ProjectResponseDto`](models/projects.md#model-ProjectResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
projects = await client.projects.list()
```
=== "Sync"
```python
with Sympheny(username, password) as client:
projects = client.projects.list()
```
## projects.create { #method-projects-create }
```python
async def create(request: ProjectRequestDto) -> ProjectResponseDto
```
Create a new project. Only V2 projects are supported.
REST operation: [`POST /sympheny-app/projects`](../../api/reference/projects.md#operation-createNewProject)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `request` | [`ProjectRequestDto`](models/projects.md#model-ProjectRequestDto) | yes | Request body. |
**Returns:** [`ProjectResponseDto`](models/projects.md#model-ProjectResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
project = await client.projects.create(request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
project = client.projects.create(request)
```
## projects.get { #method-projects-get }
```python
async def get(
project_guid: str,
*,
include_analyses: bool | None = None,
) -> ProjectDetailResponseDto
```
Get project details.
REST operation: [`GET /sympheny-app/projects/{guid}`](../../api/reference/projects.md#operation-viewProjectDetails)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `project_guid` | `str` | yes | GUID of the project. |
| `include_analyses` | `bool`, optional | no | Also return the project's analyses. |
**Returns:** [`ProjectDetailResponseDto`](models/projects.md#model-ProjectDetailResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
project = await client.projects.get(project_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
project = client.projects.get(project_guid)
```
## projects.delete { #method-projects-delete }
```python
async def delete(project_guid: str) -> ProjectSummaryResponseDto
```
Delete a project; returns the remaining projects.
REST operation: [`DELETE /sympheny-app/projects/{guid}`](../../api/reference/projects.md#operation-deleteProject)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `project_guid` | `str` | yes | GUID of the project. |
**Returns:** [`ProjectSummaryResponseDto`](models/projects.md#model-ProjectSummaryResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
remaining = await client.projects.delete(project_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
remaining = client.projects.delete(project_guid)
```
---
# Analyses
Operations on analyses. Available on the client as `client.analyses`.
## analyses.list { #method-analyses-list }
```python
async def list(project_guid: str) -> list[AnalysisResponseDto]
```
List the analyses of a project.
REST operation: [`GET /sympheny-app/projects/{guid}/analyses`](../../api/reference/analyses.md#operation-list_2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `project_guid` | `str` | yes | GUID of the project. |
**Returns:** list of [`AnalysisResponseDto`](models/projects.md#model-AnalysisResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
analyses = await client.analyses.list(project_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
analyses = client.analyses.list(project_guid)
```
## analyses.create { #method-analyses-create }
```python
async def create(project_guid: str, request: AnalysisRequestDto) -> AnalysisResponseDto
```
Create a new analysis in a project.
REST operation: [`POST /sympheny-app/projects/{guid}/analyses`](../../api/reference/analyses.md#operation-createNewAnalysis)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `project_guid` | `str` | yes | GUID of the project. |
| `request` | [`AnalysisRequestDto`](models/projects.md#model-AnalysisRequestDto) | yes | Request body. |
**Returns:** [`AnalysisResponseDto`](models/projects.md#model-AnalysisResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
analysis = await client.analyses.create(project_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
analysis = client.analyses.create(project_guid, request)
```
## analyses.get { #method-analyses-get }
```python
async def get(project_guid: str, analysis_guid: str) -> AnalysisDetailsResponseDto
```
Get analysis details.
REST operation: [`GET /sympheny-app/projects/{guid}/analysis/{analysisGuid}`](../../api/reference/analyses.md#operation-viewAnalysisDetails)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `project_guid` | `str` | yes | GUID of the project. |
| `analysis_guid` | `str` | yes | GUID of the analysis. |
**Returns:** [`AnalysisDetailsResponseDto`](models/projects.md#model-AnalysisDetailsResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
analysis = await client.analyses.get(project_guid, analysis_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
analysis = client.analyses.get(project_guid, analysis_guid)
```
## analyses.delete { #method-analyses-delete }
```python
async def delete(analysis_guid: str) -> Status
```
Delete an analysis.
REST operation: [`DELETE /sympheny-app/analysis/{analysisGuid}`](../../api/reference/analyses.md#operation-deleteAnalysis)
The API returns no `data` payload for this endpoint even on success, so a missing payload is treated as an empty [`Status`](models/common.md#model-Status) rather than an error.
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `analysis_guid` | `str` | yes | GUID of the analysis. |
**Returns:** [`Status`](models/common.md#model-Status)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
status = await client.analyses.delete(analysis_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
status = client.analyses.delete(analysis_guid)
```
---
# Scenarios
Operations on scenarios. Available on the client as `client.scenarios`.
## scenarios.list { #method-scenarios-list }
```python
async def list(analysis_guid: str) -> list[ScenarioResponseDto]
```
List the scenarios of an analysis.
REST operation: [`GET /sympheny-app/analysis/{guid}/scenario`](../../api/reference/scenarios.md#operation-listScenarios)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `analysis_guid` | `str` | yes | GUID of the analysis. |
**Returns:** list of [`ScenarioResponseDto`](models/common.md#model-ScenarioResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
scenarios = await client.scenarios.list(analysis_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
scenarios = client.scenarios.list(analysis_guid)
```
## scenarios.create { #method-scenarios-create }
```python
async def create(analysis_guid: str, request: ScenarioRequestDto) -> ScenarioResponseDto
```
Create a new scenario in an analysis.
REST operation: [`POST /sympheny-app/analysis/{guid}/scenario`](../../api/reference/scenarios.md#operation-createNewScenario)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `analysis_guid` | `str` | yes | GUID of the analysis. |
| `request` | [`ScenarioRequestDto`](models/scenarios.md#model-ScenarioRequestDto) | yes | Request body. |
**Returns:** [`ScenarioResponseDto`](models/common.md#model-ScenarioResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
scenario = await client.scenarios.create(analysis_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
scenario = client.scenarios.create(analysis_guid, request)
```
## scenarios.get { #method-scenarios-get }
```python
async def get(scenario_guid: str) -> ScenarioResponseDto
```
Get scenario details.
REST operation: [`GET /sympheny-app/scenario/{scenarioGuid}`](../../api/reference/scenarios.md#operation-getScenario)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** [`ScenarioResponseDto`](models/common.md#model-ScenarioResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
scenario = await client.scenarios.get(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
scenario = client.scenarios.get(scenario_guid)
```
## scenarios.rename { #method-scenarios-rename }
```python
async def rename(scenario_guid: str, request: ScenarioRequestDto) -> ScenarioResponseDto
```
Rename a scenario in place.
REST operation: [`PUT /sympheny-app/scenarios/{scenarioGuid}`](../../api/reference/scenarios.md#operation-renameScenario)
Unlike [`copy`](#method-scenarios-copy), this sets the scenario's name directly, so it works within the scenario's current analysis without creating a duplicate.
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`ScenarioRequestDto`](models/scenarios.md#model-ScenarioRequestDto) | yes | Request body. |
**Returns:** [`ScenarioResponseDto`](models/common.md#model-ScenarioResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
scenario = await client.scenarios.rename(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
scenario = client.scenarios.rename(scenario_guid, request)
```
## scenarios.delete { #method-scenarios-delete }
```python
async def delete(scenario_guid: str) -> Status
```
Delete a scenario.
REST operation: [`DELETE /sympheny-app/scenario/{scenarioGuid}`](../../api/reference/scenarios.md#operation-deleteScenario)
The API returns no `data` payload for this endpoint even on success, so a missing payload is treated as an empty [`Status`](models/common.md#model-Status) rather than an error.
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** [`Status`](models/common.md#model-Status)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
status = await client.scenarios.delete(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
status = client.scenarios.delete(scenario_guid)
```
## scenarios.copy { #method-scenarios-copy }
```python
async def copy(
scenario_guid: str,
*,
analysis_destination_guid: str | None = None,
name: str | None = None,
) -> ScenarioResponseDto
```
Copy a scenario, optionally into another analysis.
REST operation: [`PUT /sympheny-app/scenarios/copy/{scenarioGuid}`](../../api/reference/scenarios.md#operation-copyScenario)
Broken as of this writing (to be fixed server-side): the `name` argument is only applied when `analysis_destination_guid` is omitted (the copy stays in the source's analysis). When a destination *is* given, `name` is ignored and the copy takes the source's name *without* deduplicating, so copying the same source into one analysis twice fails the `scenario_name + analysis_id` unique constraint. To place a renamed copy in another analysis: copy into it without a name (the server assigns a unique "... (Copy)" name), then copy that in place with the wanted name.
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `analysis_destination_guid` | `str`, optional | no | GUID of the destination analysis; when omitted the copy stays in the source scenario's analysis. |
| `name` | `str`, optional | no | Name for the copy; see the caveat above. |
**Returns:** [`ScenarioResponseDto`](models/common.md#model-ScenarioResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
scenario = await client.scenarios.copy(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
scenario = client.scenarios.copy(scenario_guid)
```
---
# Stages
Operations on stages. Available on the client as `client.stages`.
## stages.list { #method-stages-list }
```python
async def list(scenario_guid: str) -> list[StageResponseDto]
```
List the stages of a scenario.
REST operation: [`GET /sympheny-app/scenarios/{scenarioGuid}/stages`](../../api/reference/stages.md#operation-list)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** list of [`StageResponseDto`](models/scenarios.md#model-StageResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
stages = await client.stages.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
stages = client.stages.list(scenario_guid)
```
## stages.create { #method-stages-create }
```python
async def create(scenario_guid: str, request: StageRequestDto) -> StageResponseDto
```
Create a new stage in a scenario.
REST operation: [`POST /sympheny-app/scenarios/{scenarioGuid}/stages`](../../api/reference/stages.md#operation-create)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`StageRequestDto`](models/scenarios.md#model-StageRequestDto) | yes | Request body. |
**Returns:** [`StageResponseDto`](models/scenarios.md#model-StageResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
stage = await client.stages.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
stage = client.stages.create(scenario_guid, request)
```
## stages.get { #method-stages-get }
```python
async def get(stage_guid: str) -> StageResponseDto
```
Get stage details.
REST operation: [`GET /sympheny-app/scenarios/stages/{guid}`](../../api/reference/stages.md#operation-get_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `stage_guid` | `str` | yes | GUID of the stage. |
**Returns:** [`StageResponseDto`](models/scenarios.md#model-StageResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
stage = await client.stages.get(stage_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
stage = client.stages.get(stage_guid)
```
## stages.update { #method-stages-update }
```python
async def update(scenario_guid: str, stage_guid: str, request: StageResponseDto) -> StageResponseDto
```
Update a stage.
REST operation: [`PUT /sympheny-app/scenarios/{scenarioGuid}/stages/{stageGuid}`](../../api/reference/stages.md#operation-update)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `stage_guid` | `str` | yes | GUID of the stage. |
| `request` | [`StageResponseDto`](models/scenarios.md#model-StageResponseDto) | yes | Request body. |
**Returns:** [`StageResponseDto`](models/scenarios.md#model-StageResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
stage = await client.stages.update(scenario_guid, stage_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
stage = client.stages.update(scenario_guid, stage_guid, request)
```
## stages.delete { #method-stages-delete }
```python
async def delete(scenario_guid: str, stage_guid: str) -> None
```
Delete a stage.
REST operation: [`DELETE /sympheny-app/scenarios/{scenarioGuid}/stages/{stageGuid}`](../../api/reference/stages.md#operation-delete)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `stage_guid` | `str` | yes | GUID of the stage. |
**Returns:** `None`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
await client.stages.delete(scenario_guid, stage_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
client.stages.delete(scenario_guid, stage_guid)
```
---
# Hubs
Operations on hubs. Available on the client as `client.hubs`.
## hubs.list { #method-hubs-list }
```python
async def list(scenario_guid: str) -> list[HubResponseDto]
```
List the hubs of a scenario.
REST operation: [`GET /sympheny-app/scenarios/{scenarioGuid}/hubs`](../../api/reference/hubs.md#operation-findAllHubsByScenario)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** list of [`HubResponseDto`](models/common.md#model-HubResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
hubs = await client.hubs.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
hubs = client.hubs.list(scenario_guid)
```
## hubs.create { #method-hubs-create }
```python
async def create(scenario_guid: str, request: HubRequestDto) -> HubResponseDto
```
Create a new hub in a scenario.
REST operation: [`POST /sympheny-app/scenarios/{scenarioGuid}/hubs`](../../api/reference/hubs.md#operation-createNewHub)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`HubRequestDto`](models/scenarios.md#model-HubRequestDto) | yes | Request body. |
**Returns:** [`HubResponseDto`](models/common.md#model-HubResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
hub = await client.hubs.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
hub = client.hubs.create(scenario_guid, request)
```
## hubs.get { #method-hubs-get }
```python
async def get(hub_guid: str) -> HubResponseDto
```
Get hub details.
REST operation: [`GET /sympheny-app/scenarios/hubs/{guid}`](../../api/reference/hubs.md#operation-getHub)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_guid` | `str` | yes | GUID of the hub. |
**Returns:** [`HubResponseDto`](models/common.md#model-HubResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
hub = await client.hubs.get(hub_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
hub = client.hubs.get(hub_guid)
```
## hubs.update { #method-hubs-update }
```python
async def update(hub_guid: str, request: HubResponseDto) -> HubResponseDto
```
Update a hub.
REST operation: [`PUT /sympheny-app/v2/scenarios/hubs/{guid}`](../../api/reference/hubs.md#operation-editHub)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_guid` | `str` | yes | GUID of the hub. |
| `request` | [`HubResponseDto`](models/common.md#model-HubResponseDto) | yes | Request body. |
**Returns:** [`HubResponseDto`](models/common.md#model-HubResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
hub = await client.hubs.update(hub_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
hub = client.hubs.update(hub_guid, request)
```
## hubs.delete { #method-hubs-delete }
```python
async def delete(hub_guid: str) -> builtins.list[HubResponseDto]
```
Delete a hub; returns the remaining hubs.
REST operation: [`DELETE /sympheny-app/scenarios/hubs/{guid}`](../../api/reference/hubs.md#operation-deleteHub)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_guid` | `str` | yes | GUID of the hub. |
**Returns:** list of [`HubResponseDto`](models/common.md#model-HubResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
remaining = await client.hubs.delete(hub_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
remaining = client.hubs.delete(hub_guid)
```
---
# Energy carriers
Operations on energy carriers. Available on the client as `client.energy_carriers`.
## energy_carriers.create { #method-energy_carriers-create }
```python
async def create(scenario_guid: str, request: EnergyCarrierRequestDtoV2) -> EnergyCarrierResponseDto
```
Create a new energy carrier in a scenario.
REST operation: [`POST /sympheny-app/v2/scenarios/{scenarioGuid}/carriers`](../../api/reference/energy-carriers.md#operation-createNewEnergyCarrierV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`EnergyCarrierRequestDtoV2`](models/energy.md#model-EnergyCarrierRequestDtoV2) | yes | Request body. |
**Returns:** [`EnergyCarrierResponseDto`](models/common.md#model-EnergyCarrierResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
carrier = await client.energy_carriers.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
carrier = client.energy_carriers.create(scenario_guid, request)
```
## energy_carriers.list { #method-energy_carriers-list }
```python
async def list(scenario_guid: str) -> EnergyCarriersListResponseDto
```
List the energy carriers of a scenario.
REST operation: [`GET /sympheny-app/scenarios/{scenarioGuid}/carriers`](../../api/reference/energy-carriers.md#operation-findAllEnergyCarriersByScenario)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** [`EnergyCarriersListResponseDto`](models/energy.md#model-EnergyCarriersListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
carriers = await client.energy_carriers.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
carriers = client.energy_carriers.list(scenario_guid)
```
## energy_carriers.get { #method-energy_carriers-get }
```python
async def get(carrier_guid: str) -> EnergyCarrierResponseDto
```
Get energy carrier details.
REST operation: [`GET /sympheny-app/carriers/{carrierGuid}`](../../api/reference/energy-carriers.md#operation-getEnergyCarrierByGuid)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `carrier_guid` | `str` | yes | GUID of the carrier. |
**Returns:** [`EnergyCarrierResponseDto`](models/common.md#model-EnergyCarrierResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
carrier = await client.energy_carriers.get(carrier_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
carrier = client.energy_carriers.get(carrier_guid)
```
## energy_carriers.update { #method-energy_carriers-update }
```python
async def update(carrier_guid: str, request: EnergyCarrierResponseDto) -> EnergyCarrierResponseDto
```
Update an energy carrier.
REST operation: [`PUT /sympheny-app/v2/carriers/{carrierGuid}`](../../api/reference/energy-carriers.md#operation-editEnergyCarrierV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `carrier_guid` | `str` | yes | GUID of the carrier. |
| `request` | [`EnergyCarrierResponseDto`](models/common.md#model-EnergyCarrierResponseDto) | yes | Request body. |
**Returns:** [`EnergyCarrierResponseDto`](models/common.md#model-EnergyCarrierResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
carrier = await client.energy_carriers.update(carrier_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
carrier = client.energy_carriers.update(carrier_guid, request)
```
## energy_carriers.delete { #method-energy_carriers-delete }
```python
async def delete(carrier_guid: str) -> EnergyCarriersListResponseDto
```
Delete an energy carrier; returns the remaining carriers.
REST operation: [`DELETE /sympheny-app/scenarios/carriers/{guid}`](../../api/reference/energy-carriers.md#operation-deleteEnergyCarrier)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `carrier_guid` | `str` | yes | GUID of the carrier. |
**Returns:** [`EnergyCarriersListResponseDto`](models/energy.md#model-EnergyCarriersListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
remaining = await client.energy_carriers.delete(carrier_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
remaining = client.energy_carriers.delete(carrier_guid)
```
---
# Energy demands
Operations on energy demands. Available on the client as `client.energy_demands`.
## energy_demands.create { #method-energy_demands-create }
```python
async def create(scenario_guid: str, request: EnergyDemandRequestDtoV2) -> EnergyDemandResponseDtoV2
```
Create a new energy demand in a scenario.
REST operation: [`POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/energy-demands`](../../api/reference/energy-demands.md#operation-uploadNewEnergyDemandProfileV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`EnergyDemandRequestDtoV2`](models/energy.md#model-EnergyDemandRequestDtoV2) | yes | Request body. |
**Returns:** [`EnergyDemandResponseDtoV2`](models/energy.md#model-EnergyDemandResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
demand = await client.energy_demands.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
demand = client.energy_demands.create(scenario_guid, request)
```
## energy_demands.list { #method-energy_demands-list }
```python
async def list(scenario_guid: str) -> list[EnergyDemandResponseDtoV2]
```
List the energy demands of a scenario.
REST operation: [`GET /sympheny-app/v2/scenarios/{scenarioGuid}/energy-demands`](../../api/reference/energy-demands.md#operation-getAllEnergyDemandsByScenarioV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** list of [`EnergyDemandResponseDtoV2`](models/energy.md#model-EnergyDemandResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
demands = await client.energy_demands.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
demands = client.energy_demands.list(scenario_guid)
```
## energy_demands.get { #method-energy_demands-get }
```python
async def get(
demand_guid: str,
*,
scenario_variant_guid: str | None = None,
) -> EnergyDemandDetailResponseDtoV2
```
Get energy demand details.
REST operation: [`GET /sympheny-app/v2/energy-demands/{guid}`](../../api/reference/energy-demands.md#operation-getEnergyDemandDetailsByGuidV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `demand_guid` | `str` | yes | GUID of the demand. |
| `scenario_variant_guid` | `str`, optional | no | GUID of the scenario variant to read from. |
**Returns:** [`EnergyDemandDetailResponseDtoV2`](models/energy.md#model-EnergyDemandDetailResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
demand = await client.energy_demands.get(demand_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
demand = client.energy_demands.get(demand_guid)
```
## energy_demands.update { #method-energy_demands-update }
```python
async def update(
scenario_guid: str,
demand_guid: str,
request: EnergyDemandResponseDtoV2,
) -> EnergyDemandResponseDtoV2
```
Update an energy demand.
REST operation: [`PUT /sympheny-app/v2_2/scenarios/{scenarioGuid}/energy-demands/{demand-guid}`](../../api/reference/energy-demands.md#operation-updateEnergyDemandV2_2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `demand_guid` | `str` | yes | GUID of the demand. |
| `request` | [`EnergyDemandResponseDtoV2`](models/energy.md#model-EnergyDemandResponseDtoV2) | yes | Request body. |
**Returns:** [`EnergyDemandResponseDtoV2`](models/energy.md#model-EnergyDemandResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
demand = await client.energy_demands.update(scenario_guid, demand_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
demand = client.energy_demands.update(scenario_guid, demand_guid, request)
```
## energy_demands.delete { #method-energy_demands-delete }
```python
async def delete(demand_guid: str) -> EnergyDemandListResponseDto
```
Delete an energy demand; returns the remaining demands.
REST operation: [`DELETE /sympheny-app/scenarios/energy-demands/{guid}`](../../api/reference/energy-demands.md#operation-deleteEnergyDemandProfile)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `demand_guid` | `str` | yes | GUID of the demand. |
**Returns:** [`EnergyDemandListResponseDto`](models/energy.md#model-EnergyDemandListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
remaining = await client.energy_demands.delete(demand_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
remaining = client.energy_demands.delete(demand_guid)
```
---
# Profiles
Operations on profiles. Available on the client as `client.profiles`.
## profiles.create { #method-profiles-create }
```python
async def create(scenario_guid: str, request: ProfileJsonRequestDto) -> ProfileResponseDto
```
Create a new profile in a scenario.
REST operation: [`POST /sympheny-app/scenarios/{scenarioGuid}/profiles-json`](../../api/reference/profiles.md#operation-createJson)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`ProfileJsonRequestDto`](models/energy.md#model-ProfileJsonRequestDto) | yes | Request body. |
**Returns:** [`ProfileResponseDto`](models/energy.md#model-ProfileResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
profile = await client.profiles.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
profile = client.profiles.create(scenario_guid, request)
```
## profiles.list { #method-profiles-list }
```python
async def list(scenario_guid: str) -> list[ProfileResponseDto]
```
List the profiles of a scenario.
REST operation: [`GET /sympheny-app/scenarios/{scenarioGuid}/profiles`](../../api/reference/profiles.md#operation-list_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** list of [`ProfileResponseDto`](models/energy.md#model-ProfileResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
profiles = await client.profiles.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
profiles = client.profiles.list(scenario_guid)
```
## profiles.get { #method-profiles-get }
```python
async def get(scenario_guid: str, profile_id: int) -> ProfileDetailsResponseDto
```
Get profile details.
REST operation: [`GET /sympheny-app/scenarios/{scenarioGuid}/profiles/{profileId}`](../../api/reference/profiles.md#operation-get)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `profile_id` | `int` | yes | Numeric id of the profile. |
**Returns:** [`ProfileDetailsResponseDto`](models/energy.md#model-ProfileDetailsResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
profile = await client.profiles.get(scenario_guid, profile_id)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
profile = client.profiles.get(scenario_guid, profile_id)
```
## profiles.update { #method-profiles-update }
```python
async def update(
scenario_guid: str,
profile_id: int,
request: ProfileDetailsResponseDto,
) -> ProfileDetailsResponseDto
```
Update a profile.
REST operation: [`PUT /sympheny-app/v2/scenarios/{scenarioGuid}/profiles-json/{profileId}`](../../api/reference/profiles.md#operation-editJsonV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `profile_id` | `int` | yes | Numeric id of the profile. |
| `request` | [`ProfileDetailsResponseDto`](models/energy.md#model-ProfileDetailsResponseDto) | yes | Request body. |
**Returns:** [`ProfileDetailsResponseDto`](models/energy.md#model-ProfileDetailsResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
profile = await client.profiles.update(scenario_guid, profile_id, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
profile = client.profiles.update(scenario_guid, profile_id, request)
```
## profiles.delete { #method-profiles-delete }
```python
async def delete(scenario_guid: str, profile_id: int) -> None
```
Delete a profile.
REST operation: [`DELETE /sympheny-app/scenarios/{scenarioGuid}/profiles/{profileId}`](../../api/reference/profiles.md#operation-delete_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `profile_id` | `int` | yes | Numeric id of the profile. |
**Returns:** `None`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
await client.profiles.delete(scenario_guid, profile_id)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
client.profiles.delete(scenario_guid, profile_id)
```
---
# Solar resources
Operations on solar on-site resources. Available on the client as `client.solar_resources`.
## solar_resources.create { #method-solar_resources-create }
```python
async def create(
scenario_guid: str,
request: SolarOnSiteResourceRequestDtoV2,
) -> SolarOnSiteResourceResponseDtoV2
```
Create a new solar on-site resource in a scenario.
REST operation: [`POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/solar-on-site-resource`](../../api/reference/solar-resources.md#operation-uploadNewSolarOnSiteResourceV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`SolarOnSiteResourceRequestDtoV2`](models/energy.md#model-SolarOnSiteResourceRequestDtoV2) | yes | Request body. |
**Returns:** [`SolarOnSiteResourceResponseDtoV2`](models/energy.md#model-SolarOnSiteResourceResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
resource = await client.solar_resources.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
resource = client.solar_resources.create(scenario_guid, request)
```
## solar_resources.list { #method-solar_resources-list }
```python
async def list(scenario_guid: str) -> list[SolarOnSiteResourceResponseDtoV2]
```
List the solar on-site resources of a scenario.
REST operation: [`GET /sympheny-app/v2/scenarios/{scenarioGuid}/solar-on-site-resource`](../../api/reference/solar-resources.md#operation-getAllSolarOnSiteResourcesByScenarioV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** list of [`SolarOnSiteResourceResponseDtoV2`](models/energy.md#model-SolarOnSiteResourceResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
resources = await client.solar_resources.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
resources = client.solar_resources.list(scenario_guid)
```
## solar_resources.get { #method-solar_resources-get }
```python
async def get(resource_guid: str) -> SolarOnSiteResourceResponseDtoV2
```
Get solar on-site resource details.
REST operation: [`GET /sympheny-app/v2/scenarios/solar-on-site-resource/{guid}`](../../api/reference/solar-resources.md#operation-getSolarOnSiteResourcesV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `resource_guid` | `str` | yes | GUID of the resource. |
**Returns:** [`SolarOnSiteResourceResponseDtoV2`](models/energy.md#model-SolarOnSiteResourceResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
resource = await client.solar_resources.get(resource_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
resource = client.solar_resources.get(resource_guid)
```
## solar_resources.update { #method-solar_resources-update }
```python
async def update(
resource_guid: str,
request: SolarOnSiteResourceResponseDtoV2,
) -> SolarOnSiteResourceResponseDtoV2
```
Update a solar on-site resource.
REST operation: [`PUT /sympheny-app/v2_2/scenarios/solar-on-site-resource/{guid}`](../../api/reference/solar-resources.md#operation-editSolarOnSiteResourceV2_2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `resource_guid` | `str` | yes | GUID of the resource. |
| `request` | [`SolarOnSiteResourceResponseDtoV2`](models/energy.md#model-SolarOnSiteResourceResponseDtoV2) | yes | Request body. |
**Returns:** [`SolarOnSiteResourceResponseDtoV2`](models/energy.md#model-SolarOnSiteResourceResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
resource = await client.solar_resources.update(resource_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
resource = client.solar_resources.update(resource_guid, request)
```
## solar_resources.delete { #method-solar_resources-delete }
```python
async def delete(resource_guid: str) -> SolarOnSiteResourceListResponseDto
```
Delete a solar on-site resource; returns the remaining resources.
REST operation: [`DELETE /sympheny-app/scenarios/solar-on-site-resource/{guid}`](../../api/reference/solar-resources.md#operation-deleteSolarOnSiteResource)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `resource_guid` | `str` | yes | GUID of the resource. |
**Returns:** [`SolarOnSiteResourceListResponseDto`](models/energy.md#model-SolarOnSiteResourceListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
remaining = await client.solar_resources.delete(resource_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
remaining = client.solar_resources.delete(resource_guid)
```
---
# Conversion technologies
Operations on conversion technologies. Available on the client as `client.conversion_technologies`.
## conversion_technologies.create { #method-conversion_technologies-create }
```python
async def create(
scenario_guid: str,
request: ConversionTechnologyRequestDtoV2,
) -> ConversionTechnologyResponseDtoV2
```
Create a conversion technology in a scenario.
REST operation: [`POST /sympheny-app/v2_2/scenarios/{scenarioGuid}/conversion-technologies`](../../api/reference/conversion-technologies.md#operation-specifyConversionTechnologyV2_2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`ConversionTechnologyRequestDtoV2`](models/technologies.md#model-ConversionTechnologyRequestDtoV2) | yes | Request body. |
**Returns:** [`ConversionTechnologyResponseDtoV2`](models/technologies.md#model-ConversionTechnologyResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technology = await client.conversion_technologies.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technology = client.conversion_technologies.create(scenario_guid, request)
```
## conversion_technologies.list { #method-conversion_technologies-list }
```python
async def list(scenario_guid: str) -> ConversionTechnologyListResponseDtoV2
```
List the conversion technologies of a scenario.
REST operation: [`GET /sympheny-app/v2/scenarios/{scenarioGuid}/conversion-technologies`](../../api/reference/conversion-technologies.md#operation-getAllConversionTechnologiesByScenarioV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** [`ConversionTechnologyListResponseDtoV2`](models/technologies.md#model-ConversionTechnologyListResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technologies = await client.conversion_technologies.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technologies = client.conversion_technologies.list(scenario_guid)
```
## conversion_technologies.get { #method-conversion_technologies-get }
```python
async def get(technology_guid: str) -> ConversionTechnologyDetailResponseDtoV2
```
Get conversion technology details.
REST operation: [`GET /sympheny-app/v2/scenarios/conversion-technologies/{guid}`](../../api/reference/conversion-technologies.md#operation-getConversionTechDetailsV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_guid` | `str` | yes | GUID of the technology. |
**Returns:** [`ConversionTechnologyDetailResponseDtoV2`](models/technologies.md#model-ConversionTechnologyDetailResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technology = await client.conversion_technologies.get(technology_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technology = client.conversion_technologies.get(technology_guid)
```
## conversion_technologies.update { #method-conversion_technologies-update }
```python
async def update(
technology_guid: str,
request: ConversionTechnologyDetailResponseDtoV2,
) -> ConversionTechnologyResponseDtoV2
```
Update a conversion technology.
REST operation: [`PUT /sympheny-app/v2_1/scenarios/conversion-technologies/{guid}`](../../api/reference/conversion-technologies.md#operation-updateConversionTechnology)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_guid` | `str` | yes | GUID of the technology. |
| `request` | [`ConversionTechnologyDetailResponseDtoV2`](models/technologies.md#model-ConversionTechnologyDetailResponseDtoV2) | yes | Request body. |
**Returns:** [`ConversionTechnologyResponseDtoV2`](models/technologies.md#model-ConversionTechnologyResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technology = await client.conversion_technologies.update(technology_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technology = client.conversion_technologies.update(technology_guid, request)
```
## conversion_technologies.delete { #method-conversion_technologies-delete }
```python
async def delete(technology_guid: str) -> None
```
Delete a conversion technology.
REST operation: [`DELETE /sympheny-app/v2/scenarios/conversion-technologies/{guid}`](../../api/reference/conversion-technologies.md#operation-deleteConversionTechnologyV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_guid` | `str` | yes | GUID of the technology. |
**Returns:** `None`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
await client.conversion_technologies.delete(technology_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
client.conversion_technologies.delete(technology_guid)
```
---
# Storage technologies
Operations on storage technologies. Available on the client as `client.storage_technologies`.
## storage_technologies.create { #method-storage_technologies-create }
```python
async def create(
scenario_guid: str,
request: StorageTechnologyRequestDtoV2,
) -> StorageTechnologyResponseDtoV2
```
Create a storage technology in a scenario.
REST operation: [`POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/storage-technologies`](../../api/reference/storage-technologies.md#operation-specifyStorageTechnologyV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`StorageTechnologyRequestDtoV2`](models/technologies.md#model-StorageTechnologyRequestDtoV2) | yes | Request body. |
**Returns:** [`StorageTechnologyResponseDtoV2`](models/technologies.md#model-StorageTechnologyResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technology = await client.storage_technologies.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technology = client.storage_technologies.create(scenario_guid, request)
```
## storage_technologies.list { #method-storage_technologies-list }
```python
async def list(scenario_guid: str) -> StorageTechnologyListResponseDtoV2
```
List the storage technologies of a scenario.
REST operation: [`GET /sympheny-app/v2/scenarios/{scenarioGuid}/storage-technologies`](../../api/reference/storage-technologies.md#operation-getAllStorageTechnologiesByScenarioV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** [`StorageTechnologyListResponseDtoV2`](models/technologies.md#model-StorageTechnologyListResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technologies = await client.storage_technologies.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technologies = client.storage_technologies.list(scenario_guid)
```
## storage_technologies.get { #method-storage_technologies-get }
```python
async def get(technology_guid: str) -> StorageTechnologyDetailResponseDtoV2
```
Get storage technology details.
REST operation: [`GET /sympheny-app/v2/scenarios/storage-technologies/{guid}`](../../api/reference/storage-technologies.md#operation-getStorageTechDetailsV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_guid` | `str` | yes | GUID of the technology. |
**Returns:** [`StorageTechnologyDetailResponseDtoV2`](models/technologies.md#model-StorageTechnologyDetailResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technology = await client.storage_technologies.get(technology_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technology = client.storage_technologies.get(technology_guid)
```
## storage_technologies.update { #method-storage_technologies-update }
```python
async def update(
technology_guid: str,
request: StorageTechnologyDetailResponseDtoV2,
) -> StorageTechnologyDetailResponseDtoV2
```
Update a storage technology.
REST operation: [`PUT /sympheny-app/v2_2/scenarios/storage-technologies/{guid}`](../../api/reference/storage-technologies.md#operation-updateStorageTechnologyV2_2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_guid` | `str` | yes | GUID of the technology. |
| `request` | [`StorageTechnologyDetailResponseDtoV2`](models/technologies.md#model-StorageTechnologyDetailResponseDtoV2) | yes | Request body. |
**Returns:** [`StorageTechnologyDetailResponseDtoV2`](models/technologies.md#model-StorageTechnologyDetailResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technology = await client.storage_technologies.update(technology_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technology = client.storage_technologies.update(technology_guid, request)
```
## storage_technologies.delete { #method-storage_technologies-delete }
```python
async def delete(technology_guid: str) -> StorageTechnologyListResponseDto
```
Delete a storage technology; returns the remaining storage technologies.
REST operation: [`DELETE /sympheny-app/scenarios/storage-technologies/{guid}`](../../api/reference/storage-technologies.md#operation-deleteStorageTechnology)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_guid` | `str` | yes | GUID of the technology. |
**Returns:** [`StorageTechnologyListResponseDto`](models/technologies.md#model-StorageTechnologyListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
remaining = await client.storage_technologies.delete(technology_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
remaining = client.storage_technologies.delete(technology_guid)
```
---
# Technology packages
Operations on technology packages. Available on the client as `client.technology_packages`.
## technology_packages.create { #method-technology_packages-create }
```python
async def create(
scenario_guid: str,
request: TechnologyPackageRequestDtoV2,
) -> TechnologyPackageResponseDtoV2
```
Create a technology package in a scenario.
REST operation: [`POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/technology-packages`](../../api/reference/technology-packages.md#operation-specifyTechnologyPackageV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`TechnologyPackageRequestDtoV2`](models/technologies.md#model-TechnologyPackageRequestDtoV2) | yes | Request body. |
**Returns:** [`TechnologyPackageResponseDtoV2`](models/technologies.md#model-TechnologyPackageResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
package = await client.technology_packages.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
package = client.technology_packages.create(scenario_guid, request)
```
## technology_packages.list { #method-technology_packages-list }
```python
async def list(scenario_guid: str) -> TechnologyPackageListResponseDtoV2
```
List the technology packages of a scenario.
REST operation: [`GET /sympheny-app/v2/scenarios/{scenarioGuid}/technology-packages`](../../api/reference/technology-packages.md#operation-getAllTechnologyPackagesByScenarioV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** [`TechnologyPackageListResponseDtoV2`](models/technologies.md#model-TechnologyPackageListResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
packages = await client.technology_packages.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
packages = client.technology_packages.list(scenario_guid)
```
## technology_packages.get { #method-technology_packages-get }
```python
async def get(scenario_guid: str, package_guid: str) -> TechnologyPackageResponseDtoV2
```
Get technology package details.
REST operation: [`GET /sympheny-app/v2/scenarios/{scenarioGuid}/technology-packages/{guid}`](../../api/reference/technology-packages.md#operation-getTechnologyPackageByGuidV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `package_guid` | `str` | yes | GUID of the package. |
**Returns:** [`TechnologyPackageResponseDtoV2`](models/technologies.md#model-TechnologyPackageResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
package = await client.technology_packages.get(scenario_guid, package_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
package = client.technology_packages.get(scenario_guid, package_guid)
```
## technology_packages.update { #method-technology_packages-update }
```python
async def update(
scenario_guid: str,
package_guid: str,
request: TechnologyPackageResponseDtoV2,
) -> TechnologyPackageResponseDtoV2
```
Update a technology package.
REST operation: [`PUT /sympheny-app/v2_1/scenarios/{scenarioGuid}/technology-packages/{guid}`](../../api/reference/technology-packages.md#operation-updateTechnologyPackageV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `package_guid` | `str` | yes | GUID of the package. |
| `request` | [`TechnologyPackageResponseDtoV2`](models/technologies.md#model-TechnologyPackageResponseDtoV2) | yes | Request body. |
**Returns:** [`TechnologyPackageResponseDtoV2`](models/technologies.md#model-TechnologyPackageResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
package = await client.technology_packages.update(scenario_guid, package_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
package = client.technology_packages.update(scenario_guid, package_guid, request)
```
## technology_packages.delete { #method-technology_packages-delete }
```python
async def delete(
scenario_guid: str,
package_guid: str,
*,
delete_techs: bool | None = None,
) -> TechnologyPackageListResponseDto
```
Delete a technology package.
REST operation: [`DELETE /sympheny-app/scenarios/{scenarioGuid}/technology-packages/{guid}`](../../api/reference/technology-packages.md#operation-deleteTechnologyPackage)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `package_guid` | `str` | yes | GUID of the package. |
| `delete_techs` | `bool`, optional | no | Also delete the technologies contained in the package. |
**Returns:** [`TechnologyPackageListResponseDto`](models/technologies.md#model-TechnologyPackageListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
status = await client.technology_packages.delete(scenario_guid, package_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
status = client.technology_packages.delete(scenario_guid, package_guid)
```
---
# Network technologies
Operations on network technologies. Available on the client as `client.network_technologies`.
## network_technologies.create { #method-network_technologies-create }
```python
async def create(
scenario_guid: str,
request: NetworkTechnologyRequestDtoV2,
) -> NetworkTechnologyResponseDtoV2
```
Create a network technology in a scenario.
REST operation: [`POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/network-technologies`](../../api/reference/network-technologies.md#operation-specifyNetworkTechnologyV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`NetworkTechnologyRequestDtoV2`](models/technologies.md#model-NetworkTechnologyRequestDtoV2) | yes | Request body. |
**Returns:** [`NetworkTechnologyResponseDtoV2`](models/technologies.md#model-NetworkTechnologyResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technology = await client.network_technologies.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technology = client.network_technologies.create(scenario_guid, request)
```
## network_technologies.list { #method-network_technologies-list }
```python
async def list(scenario_guid: str) -> NetworkTechnologyListResponseDtoV2
```
List the network technologies of a scenario.
REST operation: [`GET /sympheny-app/v2/scenarios/{scenarioGuid}/network-technologies`](../../api/reference/network-technologies.md#operation-getAllNetworkTechnologiesByScenarioV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** [`NetworkTechnologyListResponseDtoV2`](models/technologies.md#model-NetworkTechnologyListResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technologies = await client.network_technologies.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technologies = client.network_technologies.list(scenario_guid)
```
## network_technologies.get { #method-network_technologies-get }
```python
async def get(technology_guid: str) -> NetworkTechnologyResponseDtoV2
```
Get network technology details.
REST operation: [`GET /sympheny-app/v2/scenarios/network-technologies/{guid}`](../../api/reference/network-technologies.md#operation-getNetworkTechDetailsV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_guid` | `str` | yes | GUID of the technology. |
**Returns:** [`NetworkTechnologyResponseDtoV2`](models/technologies.md#model-NetworkTechnologyResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technology = await client.network_technologies.get(technology_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technology = client.network_technologies.get(technology_guid)
```
## network_technologies.update { #method-network_technologies-update }
```python
async def update(
technology_guid: str,
request: NetworkTechnologyResponseDtoV2,
) -> NetworkTechnologyResponseDtoV2
```
Update a network technology.
REST operation: [`PUT /sympheny-app/v2_1/scenarios/network-technologies/{guid}`](../../api/reference/network-technologies.md#operation-updateNetworkTechnologyV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_guid` | `str` | yes | GUID of the technology. |
| `request` | [`NetworkTechnologyResponseDtoV2`](models/technologies.md#model-NetworkTechnologyResponseDtoV2) | yes | Request body. |
**Returns:** [`NetworkTechnologyResponseDtoV2`](models/technologies.md#model-NetworkTechnologyResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
technology = await client.network_technologies.update(technology_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
technology = client.network_technologies.update(technology_guid, request)
```
## network_technologies.delete { #method-network_technologies-delete }
```python
async def delete(technology_guid: str) -> NetworkTechnologyListResponseDto
```
Delete a network technology; returns the remaining network technologies.
REST operation: [`DELETE /sympheny-app/scenarios/network-technologies/{guid}`](../../api/reference/network-technologies.md#operation-deleteNetworkTechnology)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_guid` | `str` | yes | GUID of the technology. |
**Returns:** [`NetworkTechnologyListResponseDto`](models/technologies.md#model-NetworkTechnologyListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
remaining = await client.network_technologies.delete(technology_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
remaining = client.network_technologies.delete(technology_guid)
```
---
# Network links
Operations on network links. Available on the client as `client.network_links`.
## network_links.create { #method-network_links-create }
```python
async def create(scenario_guid: str, request: NetworkLinkRequestDtoV2) -> NetworkLinkResponseDtoV2
```
Create a network link in a scenario.
REST operation: [`POST /sympheny-app/v2_1/scenarios/{scenarioGuid}/network-links`](../../api/reference/network-links.md#operation-specifyNetworkLinkV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`NetworkLinkRequestDtoV2`](models/technologies.md#model-NetworkLinkRequestDtoV2) | yes | Request body. |
**Returns:** [`NetworkLinkResponseDtoV2`](models/technologies.md#model-NetworkLinkResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
link = await client.network_links.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
link = client.network_links.create(scenario_guid, request)
```
## network_links.list { #method-network_links-list }
```python
async def list(scenario_guid: str) -> list[NetworkLinkResponseDtoV2]
```
List the network links of a scenario.
REST operation: [`GET /sympheny-app/v2/scenarios/{scenarioGuid}/network-links`](../../api/reference/network-links.md#operation-getAllNetworkLinksByScenarioV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** list of [`NetworkLinkResponseDtoV2`](models/technologies.md#model-NetworkLinkResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
links = await client.network_links.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
links = client.network_links.list(scenario_guid)
```
## network_links.get { #method-network_links-get }
```python
async def get(link_guid: str) -> NetworkLinkResponseDtoV2
```
Get network link details.
REST operation: [`GET /sympheny-app/v2/network-links/{network-link-guid}`](../../api/reference/network-links.md#operation-getNetworkLinkDetailsV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `link_guid` | `str` | yes | GUID of the link. |
**Returns:** [`NetworkLinkResponseDtoV2`](models/technologies.md#model-NetworkLinkResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
link = await client.network_links.get(link_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
link = client.network_links.get(link_guid)
```
## network_links.update { #method-network_links-update }
```python
async def update(
scenario_guid: str,
link_guid: str,
request: NetworkLinkResponseDtoV2,
) -> NetworkLinkResponseDtoV2
```
Update a network link.
REST operation: [`PUT /sympheny-app/v2_2/scenarios/{scenarioGuid}/network-links/{network-link-guid}`](../../api/reference/network-links.md#operation-updateNetworkLinkV2_2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `link_guid` | `str` | yes | GUID of the link. |
| `request` | [`NetworkLinkResponseDtoV2`](models/technologies.md#model-NetworkLinkResponseDtoV2) | yes | Request body. |
**Returns:** [`NetworkLinkResponseDtoV2`](models/technologies.md#model-NetworkLinkResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
link = await client.network_links.update(scenario_guid, link_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
link = client.network_links.update(scenario_guid, link_guid, request)
```
## network_links.delete { #method-network_links-delete }
```python
async def delete(scenario_guid: str, link_guid: str) -> NetworkLinkListResponseDto
```
Delete a network link; returns the remaining links.
REST operation: [`DELETE /sympheny-app/scenarios/{scenarioGuid}/network-links/{network-link-guid}`](../../api/reference/network-links.md#operation-deleteNetworkLink)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `link_guid` | `str` | yes | GUID of the link. |
**Returns:** [`NetworkLinkListResponseDto`](models/technologies.md#model-NetworkLinkListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
remaining = await client.network_links.delete(scenario_guid, link_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
remaining = client.network_links.delete(scenario_guid, link_guid)
```
---
# Intra-hub network links
Operations on intra-hub network links. Available on the client as `client.intra_hub_network_links`.
## intra_hub_network_links.create { #method-intra_hub_network_links-create }
```python
async def create(
scenario_guid: str,
request: IntraHubNetworkLinkRequestDto,
) -> IntraHubNetworkLinkResponseDto
```
Create an intra-hub network link in a scenario.
REST operation: [`POST /sympheny-app/v2/scenarios/{scenarioGuid}/intra-hub-network-links`](../../api/reference/intra-hub-network-links.md#operation-specifyIntraHubNetworkLinkV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`IntraHubNetworkLinkRequestDto`](models/technologies.md#model-IntraHubNetworkLinkRequestDto) | yes | Request body. |
**Returns:** [`IntraHubNetworkLinkResponseDto`](models/technologies.md#model-IntraHubNetworkLinkResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
link = await client.intra_hub_network_links.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
link = client.intra_hub_network_links.create(scenario_guid, request)
```
## intra_hub_network_links.list { #method-intra_hub_network_links-list }
```python
async def list(scenario_guid: str) -> IntraHubNetworkLinkListResponseDto
```
List the intra-hub network links of a scenario.
REST operation: [`GET /sympheny-app/scenarios/{scenarioGuid}/intra-hub-network-links`](../../api/reference/intra-hub-network-links.md#operation-getAllIntraHubNetworkLinks)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** [`IntraHubNetworkLinkListResponseDto`](models/technologies.md#model-IntraHubNetworkLinkListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
links = await client.intra_hub_network_links.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
links = client.intra_hub_network_links.list(scenario_guid)
```
## intra_hub_network_links.get { #method-intra_hub_network_links-get }
```python
async def get(link_guid: str) -> IntraHubNetworkLinkResponseDto
```
Get intra-hub network link details.
REST operation: [`GET /sympheny-app/scenarios/intra-hub-network-links/{guid}`](../../api/reference/intra-hub-network-links.md#operation-getIntraHubNetworkLinkDetails)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `link_guid` | `str` | yes | GUID of the link. |
**Returns:** [`IntraHubNetworkLinkResponseDto`](models/technologies.md#model-IntraHubNetworkLinkResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
link = await client.intra_hub_network_links.get(link_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
link = client.intra_hub_network_links.get(link_guid)
```
## intra_hub_network_links.update { #method-intra_hub_network_links-update }
```python
async def update(
link_guid: str,
request: IntraHubNetworkLinkResponseDto,
) -> IntraHubNetworkLinkResponseDto
```
Update an intra-hub network link.
REST operation: [`PUT /sympheny-app/v2/scenarios/intra-hub-network-links/{guid}`](../../api/reference/intra-hub-network-links.md#operation-updateIntraHubNetworkLinkV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `link_guid` | `str` | yes | GUID of the link. |
| `request` | [`IntraHubNetworkLinkResponseDto`](models/technologies.md#model-IntraHubNetworkLinkResponseDto) | yes | Request body. |
**Returns:** [`IntraHubNetworkLinkResponseDto`](models/technologies.md#model-IntraHubNetworkLinkResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
link = await client.intra_hub_network_links.update(link_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
link = client.intra_hub_network_links.update(link_guid, request)
```
## intra_hub_network_links.delete { #method-intra_hub_network_links-delete }
```python
async def delete(link_guid: str) -> IntraHubNetworkLinkListResponseDto
```
Delete an intra-hub network link; returns the remaining links.
REST operation: [`DELETE /sympheny-app/scenarios/intra-hub-network-links/{guid}`](../../api/reference/intra-hub-network-links.md#operation-deleteIntraHubNetworkLink)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `link_guid` | `str` | yes | GUID of the link. |
**Returns:** [`IntraHubNetworkLinkListResponseDto`](models/technologies.md#model-IntraHubNetworkLinkListResponseDto)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
remaining = await client.intra_hub_network_links.delete(link_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
remaining = client.intra_hub_network_links.delete(link_guid)
```
---
# Imports and exports (impex)
Operations on energy imports and exports. Available on the client as `client.impex`.
## impex.create { #method-impex-create }
```python
async def create(scenario_guid: str, request: ImportExportRequestDtoV2) -> ImportExportResponseDtoV2
```
Create a new import/export in a scenario.
REST operation: [`POST /sympheny-app/v2_1/scenario/{scenarioGuid}/impex`](../../api/reference/impex.md#operation-createNewImpexV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `request` | [`ImportExportRequestDtoV2`](models/energy.md#model-ImportExportRequestDtoV2) | yes | Request body. |
**Returns:** [`ImportExportResponseDtoV2`](models/energy.md#model-ImportExportResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
impex = await client.impex.create(scenario_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
impex = client.impex.create(scenario_guid, request)
```
## impex.list { #method-impex-list }
```python
async def list(scenario_guid: str) -> list[ImportExportResponseDtoV2]
```
List the imports/exports of a scenario.
REST operation: [`GET /sympheny-app/v2/scenarios/{scenarioGuid}/impexes`](../../api/reference/impex.md#operation-findAllByScenarioV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** list of [`ImportExportResponseDtoV2`](models/energy.md#model-ImportExportResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
impexes = await client.impex.list(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
impexes = client.impex.list(scenario_guid)
```
## impex.get { #method-impex-get }
```python
async def get(
impex_type: Type1,
impex_guid: str,
*,
scenario_variant_guid: str | None = None,
) -> ImportExportResponseDtoV2
```
Get import/export details.
REST operation: [`GET /sympheny-app/v2/impex/{type}/{guid}`](../../api/reference/impex.md#operation-getImpexByGuidV2)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `impex_type` | [`Type1`](models/energy.md#model-Type1) | yes | Whether the record is an import or an export. |
| `impex_guid` | `str` | yes | GUID of the impex. |
| `scenario_variant_guid` | `str`, optional | no | GUID of the scenario variant to read from. |
**Returns:** [`ImportExportResponseDtoV2`](models/energy.md#model-ImportExportResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
impex = await client.impex.get(impex_type, impex_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
impex = client.impex.get(impex_type, impex_guid)
```
## impex.update { #method-impex-update }
```python
async def update(impex_guid: str, request: ImportExportResponseDtoV2) -> ImportExportResponseDtoV2
```
Update an import/export.
REST operation: [`PUT /sympheny-app/v2_1/scenarios/impex/{guid}`](../../api/reference/impex.md#operation-editImpexV2_1)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `impex_guid` | `str` | yes | GUID of the impex. |
| `request` | [`ImportExportResponseDtoV2`](models/energy.md#model-ImportExportResponseDtoV2) | yes | Request body. |
**Returns:** [`ImportExportResponseDtoV2`](models/energy.md#model-ImportExportResponseDtoV2)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
impex = await client.impex.update(impex_guid, request)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
impex = client.impex.update(impex_guid, request)
```
## impex.delete { #method-impex-delete }
```python
async def delete(impex_type: Type1, impex_guid: str) -> Status
```
Delete an import/export.
REST operation: [`DELETE /sympheny-app/impex/{type}/{guid}`](../../api/reference/impex.md#operation-deleteImpex)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `impex_type` | [`Type1`](models/energy.md#model-Type1) | yes | Whether the record is an import or an export. |
| `impex_guid` | `str` | yes | GUID of the impex. |
**Returns:** [`Status`](models/common.md#model-Status)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
status = await client.impex.delete(impex_type, impex_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
status = client.impex.delete(impex_type, impex_guid)
```
---
# Solver jobs
Operations on solver jobs. Available on the client as `client.solver_jobs`.
## solver_jobs.submit { #method-solver_jobs-submit }
```python
async def submit(jobs: list[PostSolverJobExt]) -> list[SolverJob]
```
Submit one or more solver jobs for execution.
REST operation: [`POST /sense-api/ext/solver/jobs`](../../api/reference/solver-jobs.md#operation-post_solver_jobs_sense_api_ext_solver_jobs_post)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `jobs` | list of [`PostSolverJobExt`](models/solver.md#model-PostSolverJobExt) | yes | Jobs to submit. |
**Returns:** list of [`SolverJob`](models/solver.md#model-SolverJob)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
submitted = await client.solver_jobs.submit(jobs)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
submitted = client.solver_jobs.submit(jobs)
```
## solver_jobs.list_for_scenarios { #method-solver_jobs-list_for_scenarios }
```python
async def list_for_scenarios(
scenario_guids: list[str],
*,
limit: int = 200,
status: JobStatus | None = None,
) -> list[SolverJob]
```
List solver jobs for the given scenarios, optionally filtered by status.
REST operation: [`POST /sense-api/ext/solver/jobs/get-scenarios`](../../api/reference/solver-jobs.md#operation-post_get_scenario_jobs_sense_api_ext_solver_jobs_get_scenarios_post)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guids` | list of `str` | yes | GUIDs of the scenarios to list jobs for. |
| `limit` | `int` | no | Maximum number of jobs to return. Defaults to `200`. |
| `status` | [`JobStatus`](models/solver.md#model-JobStatus), optional | no | Return only jobs with this status (filtered client-side). |
**Returns:** list of [`SolverJob`](models/solver.md#model-SolverJob)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
jobs = await client.solver_jobs.list_for_scenarios(scenario_guids)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
jobs = client.solver_jobs.list_for_scenarios(scenario_guids)
```
## solver_jobs.usage { #method-solver_jobs-usage }
```python
async def usage() -> GetUsageExt
```
Get solver usage of the current subscription and user.
REST operation: [`GET /sense-api/ext/solver/jobs/usage`](../../api/reference/solver-jobs.md#operation-get_solver_jobs_usage_sense_api_ext_solver_jobs_usage_get)
**Returns:** [`GetUsageExt`](models/solver.md#model-GetUsageExt)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
usage = await client.solver_jobs.usage()
```
=== "Sync"
```python
with Sympheny(username, password) as client:
usage = client.solver_jobs.usage()
```
## solver_jobs.get { #method-solver_jobs-get }
```python
async def get(job_id: str | UUID) -> GetSolverJobExt
```
Get a solver job by id.
REST operation: [`GET /sense-api/ext/solver/jobs/{id}`](../../api/reference/solver-jobs.md#operation-get_solver_job_sense_api_ext_solver_jobs__id__get)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `job_id` | `str` or `UUID` | yes | Solver job id. |
**Returns:** [`GetSolverJobExt`](models/solver.md#model-GetSolverJobExt)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
job = await client.solver_jobs.get(job_id)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
job = client.solver_jobs.get(job_id)
```
## solver_jobs.delete { #method-solver_jobs-delete }
```python
async def delete(job_id: str | UUID) -> str
```
Delete a solver job.
REST operation: [`DELETE /sense-api/ext/solver/jobs/{id}`](../../api/reference/solver-jobs.md#operation-delete_solver_job_sense_api_ext_solver_jobs__id__delete)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `job_id` | `str` or `UUID` | yes | Solver job id. |
**Returns:** `str`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
result = await client.solver_jobs.delete(job_id)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
result = client.solver_jobs.delete(job_id)
```
## solver_jobs.stop { #method-solver_jobs-stop }
```python
async def stop(job_id: str | UUID) -> str
```
Stop a running solver job.
REST operation: [`PUT /sense-api/ext/solver/jobs/{id}/stop`](../../api/reference/solver-jobs.md#operation-stop_job_sense_api_ext_solver_jobs__id__stop_put)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `job_id` | `str` or `UUID` | yes | Solver job id. |
**Returns:** `str`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
result = await client.solver_jobs.stop(job_id)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
result = client.solver_jobs.stop(job_id)
```
---
# Users
User account endpoints. Available on the client as `client.users`.
## users.profile { #method-users-profile }
```python
async def profile() -> GetUserProfileExt
```
Get the profile of the authenticated user.
REST operation: [`GET /backoffice/ext/users/profile`](../../api/reference/users.md#operation-get_user_profile_backoffice_ext_users_profile_get)
**Returns:** [`GetUserProfileExt`](models/solver.md#model-GetUserProfileExt)
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
profile = await client.users.profile()
```
=== "Sync"
```python
with Sympheny(username, password) as client:
profile = client.users.profile()
```
---
# Unofficial endpoints
Endpoints outside the official documented Sympheny API. May change without notice. Available on the client as `client.unofficial`.
!!! warning
Every method on this page calls an endpoint that is **not part of the official
documented Sympheny API**. These endpoints may change or disappear without notice,
and they return raw JSON payloads (`dict`/`list`) instead of typed models. Prefer an
official, typed equivalent whenever one exists.
## unofficial.get_analysis { #method-unofficial-get_analysis }
```python
async def get_analysis(analysis_guid: str) -> dict[str, Any]
```
UNOFFICIAL — Get analysis details incl. scenarios and results.
REST operation: `GET /sympheny-app/analysis/{guid}` (not part of the official spec)
Prefer `client.analyses.get` unless you need the `results` payload (scenarios / input-file paths), which the official endpoint does not return.
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `analysis_guid` | `str` | yes | GUID of the analysis. |
**Returns:** `dict[str, Any]`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
analysis = await client.unofficial.get_analysis(analysis_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
analysis = client.unofficial.get_analysis(analysis_guid)
```
## unofficial.create_master_scenario { #method-unofficial-create_master_scenario }
```python
async def create_master_scenario(payload: dict[str, Any]) -> dict[str, Any]
```
UNOFFICIAL — Create a master scenario.
REST operation: `POST /sympheny-app/master-scenario/` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `payload` | `dict[str, Any]` | yes | Raw JSON payload. |
**Returns:** `dict[str, Any]`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
result = await client.unofficial.create_master_scenario(payload)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
result = client.unofficial.create_master_scenario(payload)
```
## unofficial.list_variants { #method-unofficial-list_variants }
```python
async def list_variants(master_scenario_guid: str) -> list[dict[str, Any]]
```
UNOFFICIAL — List scenario variants of a master scenario.
REST operation: `GET /sympheny-app/master-scenario/{guid}/scenario-variants` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `master_scenario_guid` | `str` | yes | GUID of the master scenario. |
**Returns:** list of `dict[str, Any]`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
variants = await client.unofficial.list_variants(master_scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
variants = client.unofficial.list_variants(master_scenario_guid)
```
## unofficial.delete_all_variants { #method-unofficial-delete_all_variants }
```python
async def delete_all_variants(master_scenario_guid: str) -> None
```
UNOFFICIAL — Delete all scenario variants of a master scenario.
REST operation: `DELETE /sympheny-app/master-scenario/{guid}/scenario-variants` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `master_scenario_guid` | `str` | yes | GUID of the master scenario. |
**Returns:** `None`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
await client.unofficial.delete_all_variants(master_scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
client.unofficial.delete_all_variants(master_scenario_guid)
```
## unofficial.get_variants_excel_url { #method-unofficial-get_variants_excel_url }
```python
async def get_variants_excel_url(master_scenario_guid: str) -> str
```
UNOFFICIAL — Get a presigned URL to the variants Excel export.
REST operation: `GET /sympheny-app/master-scenario/{guid}/scenario-variants-excel` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `master_scenario_guid` | `str` | yes | GUID of the master scenario. |
**Returns:** `str`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
url = await client.unofficial.get_variants_excel_url(master_scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
url = client.unofficial.get_variants_excel_url(master_scenario_guid)
```
## unofficial.create_variants_from_excel_url { #method-unofficial-create_variants_from_excel_url }
```python
async def create_variants_from_excel_url(
presigned_url: str,
master_scenario_guid: str,
*,
delete_existing: bool = True,
) -> Any
```
UNOFFICIAL — Create scenario variants from an uploaded Excel file.
REST operation: `PUT /sympheny-app/scenario-variants-excel` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `presigned_url` | `str` | yes | Presigned S3 URL the Excel file was uploaded to. |
| `master_scenario_guid` | `str` | yes | GUID of the master scenario. |
| `delete_existing` | `bool` | no | Delete the existing scenario variants first. Defaults to `True`. |
**Returns:** `Any`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
result = await client.unofficial.create_variants_from_excel_url(presigned_url, master_scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
result = client.unofficial.create_variants_from_excel_url(presigned_url, master_scenario_guid)
```
## unofficial.get_upload_url { #method-unofficial-get_upload_url }
```python
async def get_upload_url() -> str
```
UNOFFICIAL — Get a presigned S3 URL for file uploads.
REST operation: `GET /sympheny-app/db-update/s3-presigned-url` (not part of the official spec)
**Returns:** `str`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
url = await client.unofficial.get_upload_url()
```
=== "Sync"
```python
with Sympheny(username, password) as client:
url = client.unofficial.get_upload_url()
```
## unofficial.upload_to_presigned_url { #method-unofficial-upload_to_presigned_url }
```python
async def upload_to_presigned_url(presigned_url: str, content: bytes) -> None
```
UNOFFICIAL — Upload raw bytes to a presigned S3 URL (no Sympheny auth).
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `presigned_url` | `str` | yes | Presigned S3 URL from `get_upload_url`. |
| `content` | `bytes` | yes | Raw file bytes to upload. |
**Returns:** `None`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
await client.unofficial.upload_to_presigned_url(presigned_url, content)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
client.unofficial.upload_to_presigned_url(presigned_url, content)
```
## unofficial.create_scenario_from_excel_url { #method-unofficial-create_scenario_from_excel_url }
```python
async def create_scenario_from_excel_url(
presigned_url: str,
scenario_name: str,
analysis_guid: str,
) -> str
```
UNOFFICIAL — Create a scenario from an uploaded Excel file; returns the scenario GUID.
REST operation: `POST /sympheny-app/v2/analysis/{guid}/scenario/excel` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `presigned_url` | `str` | yes | Presigned S3 URL the Excel file was uploaded to. |
| `scenario_name` | `str` | yes | Name for the new scenario. |
| `analysis_guid` | `str` | yes | GUID of the analysis. |
**Returns:** `str`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
scenario_guid = await client.unofficial.create_scenario_from_excel_url(presigned_url, scenario_name, analysis_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
scenario_guid = client.unofficial.create_scenario_from_excel_url(presigned_url, scenario_name, analysis_guid)
```
## unofficial.close_diagram { #method-unofficial-close_diagram }
```python
async def close_diagram(scenario_guid: str) -> None
```
UNOFFICIAL — Close the hub diagram of a scenario.
REST operation: `PUT /sympheny-app/scenarios/{guid}/close-diagram` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** `None`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
await client.unofficial.close_diagram(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
client.unofficial.close_diagram(scenario_guid)
```
## unofficial.generate_specs { #method-unofficial-generate_specs }
```python
async def generate_specs(scenario_guids: list[str]) -> None
```
UNOFFICIAL — Trigger input-file (specs) generation for scenarios.
REST operation: `PUT /sympheny-app/v2/specs` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guids` | list of `str` | yes | GUIDs of the scenarios to generate input files for. |
**Returns:** `None`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
await client.unofficial.generate_specs(scenario_guids)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
client.unofficial.generate_specs(scenario_guids)
```
## unofficial.generate_scenario_specs { #method-unofficial-generate_scenario_specs }
```python
async def generate_scenario_specs(scenario_guid: str) -> None
```
UNOFFICIAL — Trigger specs generation for a single scenario.
REST operation: `PUT /sympheny-app/v2/scenarios/{guid}/specs` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** `None`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
await client.unofficial.generate_scenario_specs(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
client.unofficial.generate_scenario_specs(scenario_guid)
```
## unofficial.create_scenario_enymap { #method-unofficial-create_scenario_enymap }
```python
async def create_scenario_enymap(analysis_guid: str, payload: dict[str, Any]) -> dict[str, Any]
```
UNOFFICIAL — Create an enymap scenario.
REST operation: `POST /sympheny-app/analysis/{guid}/scenario-enymap` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `analysis_guid` | `str` | yes | GUID of the analysis. |
| `payload` | `dict[str, Any]` | yes | Raw JSON payload. |
**Returns:** `dict[str, Any]`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
result = await client.unofficial.create_scenario_enymap(analysis_guid, payload)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
result = client.unofficial.create_scenario_enymap(analysis_guid, payload)
```
## unofficial.create_gis_hub { #method-unofficial-create_gis_hub }
```python
async def create_gis_hub(scenario_guid: str, polygon: list[Any]) -> Any
```
UNOFFICIAL — Create a GIS hub for an enymap scenario.
REST operation: `POST /sympheny-app/scenario-enymap/{guid}/create-gis-hub` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
| `polygon` | list of `Any` | yes | Polygon coordinates. |
**Returns:** `Any`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
result = await client.unofficial.create_gis_hub(scenario_guid, polygon)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
result = client.unofficial.create_gis_hub(scenario_guid, polygon)
```
## unofficial.create_demand_solar { #method-unofficial-create_demand_solar }
```python
async def create_demand_solar(scenario_guid: str) -> Any
```
UNOFFICIAL — Create demands and solar resources for an enymap scenario.
REST operation: `POST /sympheny-app/scenario-enymap/{guid}/create-demand-solar` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str` | yes | GUID of the scenario. |
**Returns:** `Any`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
result = await client.unofficial.create_demand_solar(scenario_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
result = client.unofficial.create_demand_solar(scenario_guid)
```
## unofficial.gis_background_jobs { #method-unofficial-gis_background_jobs }
```python
async def gis_background_jobs() -> list[dict[str, Any]]
```
UNOFFICIAL — List GIS background jobs (`api-services` backend).
REST operation: `GET /api-services/gis/background` (not part of the official spec)
**Returns:** list of `dict[str, Any]`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
jobs = await client.unofficial.gis_background_jobs()
```
=== "Sync"
```python
with Sympheny(username, password) as client:
jobs = client.unofficial.gis_background_jobs()
```
## unofficial.hub_demand { #method-unofficial-hub_demand }
```python
async def hub_demand(
demand_type: str,
building_type: str,
buildings: list[dict[str, Any]],
) -> list[dict[str, Any]]
```
UNOFFICIAL — Estimate building energy demand (`api-services` backend).
REST operation: `POST /api-services/demand/hub_demand` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `demand_type` | `str` | yes | |
| `building_type` | `str` | yes | |
| `buildings` | list of `dict[str, Any]` | yes | |
**Returns:** list of `dict[str, Any]`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
demands = await client.unofficial.hub_demand(demand_type, building_type, buildings)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
demands = client.unofficial.hub_demand(demand_type, building_type, buildings)
```
## unofficial.get_database_demand_profile { #method-unofficial-get_database_demand_profile }
```python
async def get_database_demand_profile(demand_guid: str) -> list[dict[str, Any]]
```
UNOFFICIAL — Get the normalized profile of a database energy demand.
REST operation: `GET /sympheny-app/database-energy-demands/{guid}/profile` (not part of the official spec)
**Parameters**
| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `demand_guid` | `str` | yes | GUID of the demand. |
**Returns:** list of `dict[str, Any]`
=== "Async"
```python
async with AsyncSympheny(username, password) as client:
profile = await client.unofficial.get_database_demand_profile(demand_guid)
```
=== "Sync"
```python
with Sympheny(username, password) as client:
profile = client.unofficial.get_database_demand_profile(demand_guid)
```
---
# Shared models
Models used across several resource groups.
## CustomSeasonalityResponseDto { #model-CustomSeasonalityResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `month` | [`Month`](#model-Month), optional | no | |
| `value` | `float`, optional | no | |
## Demand { #model-Demand }
| Member | Value |
| --- | --- |
| `Demand.hot_water` | `'HOT_WATER'` |
| `Demand.space_heating` | `'SPACE_HEATING'` |
| `Demand.electricity` | `'ELECTRICITY'` |
| `Demand.cooling` | `'COOLING'` |
## EnergyCarrierResponseDto { #model-EnergyCarrierResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_carrier_guid` | `str` | yes | |
| `type_key` | `str` | yes | |
| `type_display_name` | `str` | yes | |
| `subtype_key` | `str` | yes | |
| `subtype_display_name` | `str` | yes | |
| `energy_carrier_name` | `str` | yes | |
| `color_hex_code` | `str` | yes | |
| `fixed_input_share` | `float`, optional | no | |
| `output_efficiency` | `float`, optional | no | |
| `custom_output_efficiency_activated` | `bool` | yes | |
| `custom_input_efficiency_activated` | `bool` | yes | |
| `custom_seasonality_values` | list of [`CustomSeasonalityResponseDto`](#model-CustomSeasonalityResponseDto), optional | no | |
| `output_efficiency_profile_id` | `int`, optional | no | |
| `created` | `AwareDatetime` | yes | |
| `primary` | `bool`, optional | no | |
## Export { #model-Export }
| Member | Value |
| --- | --- |
| `Export.heat_ambient` | `'HEAT_AMBIENT'` |
| `Export.cooling` | `'COOLING'` |
## HubResponseDto { #model-HubResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_guid` | `str` | yes | |
| `hub_name` | `str` | yes | |
| `updated` | `AwareDatetime` | yes | |
| `created` | `AwareDatetime` | yes | |
## Import { #model-Import }
| Member | Value |
| --- | --- |
| `Import.electricity` | `'ELECTRICITY'` |
## Month { #model-Month }
| Member | Value |
| --- | --- |
| `Month.january` | `'JANUARY'` |
| `Month.february` | `'FEBRUARY'` |
| `Month.march` | `'MARCH'` |
| `Month.april` | `'APRIL'` |
| `Month.may` | `'MAY'` |
| `Month.june` | `'JUNE'` |
| `Month.july` | `'JULY'` |
| `Month.august` | `'AUGUST'` |
| `Month.september` | `'SEPTEMBER'` |
| `Month.october` | `'OCTOBER'` |
| `Month.november` | `'NOVEMBER'` |
| `Month.december` | `'DECEMBER'` |
| `Month.none_type_none` | `None` |
## ScenarioEnymapResponseDto { #model-ScenarioEnymapResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `length` | `int`, optional | no | |
| `interest_rate` | `float`, optional | no | |
| `exchange_currency` | `str`, optional | no | |
| `exchange_rate` | `float`, optional | no | |
| `scope` | [`Scope`](#model-Scope), optional | no | |
| `technologies` | list of [`Technology`](#model-Technology), optional | no | |
| `demands` | list of [`Demand`](#model-Demand), optional | no | |
| `imports` | list of [`Import`](#model-Import), optional | no | |
| `exports` | list of [`Export`](#model-Export), optional | no | |
| `multi_hubs` | `bool`, optional | no | |
## ScenarioResponseDto { #model-ScenarioResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_guid` | `str`, optional | no | |
| `scenario_name` | `str`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `ready_for_execution` | `bool`, optional | no | |
| `preparing_execution_v2` | `bool`, optional | no | |
| `master_scenario_guid` | `str`, optional | no | |
| `project_guid` | `str`, optional | no | |
| `project_name` | `str`, optional | no | |
| `analysis_guid` | `str`, optional | no | |
| `analysis_name` | `str`, optional | no | |
| `enymap` | [`ScenarioEnymapResponseDto`](#model-ScenarioEnymapResponseDto), optional | no | |
| `variant` | `bool`, optional | no | |
## Scope { #model-Scope }
| Member | Value |
| --- | --- |
| `Scope.building_developments` | `'BUILDING_DEVELOPMENTS'` |
| `Scope.regional_national` | `'REGIONAL_NATIONAL'` |
| `Scope.industrial_parks` | `'INDUSTRIAL_PARKS'` |
| `Scope.none_type_none` | `None` |
## Status { #model-Status }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `code` | `str`, optional | no | |
| `desc` | `str`, optional | no | |
| `message` | `str`, optional | no | |
## Technology { #model-Technology }
| Member | Value |
| --- | --- |
| `Technology.pv` | `'PV'` |
| `Technology.heat_pump` | `'HEAT_PUMP'` |
| `Technology.gas_boiler` | `'GAS_BOILER'` |
| `Technology.hot_water_storage` | `'HOT_WATER_STORAGE'` |
| `Technology.chiller` | `'CHILLER'` |
| `Technology.battery` | `'BATTERY'` |
---
# Project and analysis models
## AnalysisDetailsResponseDto { #model-AnalysisDetailsResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `analysis_guid` | `str`, optional | no | |
| `analysis_name` | `str`, optional | no | |
| `execution_status` | [`ExecutionStatus`](#model-ExecutionStatus), optional | no | |
| `execution_in_progress` | `bool`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `cover_image` | `str`, optional | no | |
| `project_name` | `str`, optional | no | |
| `scenarios` | list of [`ScenarioResponseDto`](common.md#model-ScenarioResponseDto), optional | no | |
| `execution_options` | [`ExecutionOptionsResponseDto`](#model-ExecutionOptionsResponseDto), optional | no | |
| `results` | [`ResultsResponseDto`](#model-ResultsResponseDto), optional | no | |
| `project_guid` | `str`, optional | no | |
## AnalysisRequestDto { #model-AnalysisRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `analysis_name` | `str` | yes | (max length 100, min length 0) |
## AnalysisResponseDto { #model-AnalysisResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `analysis_guid` | `str`, optional | no | |
| `analysis_name` | `str`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `scenarios` | list of [`ScenarioResponseDto`](common.md#model-ScenarioResponseDto), optional | no | |
## ExecutionOptionsResponseDto { #model-ExecutionOptionsResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `objective1` | `str`, optional | no | |
| `objective2` | `str`, optional | no | |
| `number_of_pareto_points` | `int`, optional | no | |
| `scenarios` | list of `str`, optional | no | |
## ExecutionStatus { #model-ExecutionStatus }
| Member | Value |
| --- | --- |
| `ExecutionStatus.in_specification` | `'IN_SPECIFICATION'` |
| `ExecutionStatus.ready_to_submit` | `'READY_TO_SUBMIT'` |
| `ExecutionStatus.picked` | `'PICKED'` |
| `ExecutionStatus.failed` | `'FAILED'` |
| `ExecutionStatus.aborted` | `'ABORTED'` |
| `ExecutionStatus.running` | `'RUNNING'` |
| `ExecutionStatus.done` | `'DONE'` |
| `ExecutionStatus.none_type_none` | `None` |
## ImageResponseDto { #model-ImageResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `url` | `str`, optional | no | |
| `guid` | `str`, optional | no | |
| `cover` | `bool`, optional | no | |
## ProjectDetailResponseDto { #model-ProjectDetailResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `images` | list of [`ImageResponseDto`](#model-ImageResponseDto), optional | no | |
| `project_name` | `str`, optional | no | |
| `project_guid` | `str`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `project_owner` | `str`, optional | no | |
| `project_owner_email` | `str`, optional | no | |
| `secondary_owners` | list of [`SecondaryOwnerDto`](#model-SecondaryOwnerDto), optional | no | |
| `lock_user_email` | `str`, optional | no | |
| `lock` | `bool`, optional | no | |
| `lock_time` | `AwareDatetime`, optional | no | |
| `owned_by_current_user` | `bool`, optional | no | |
| `editable_by_current_user` | `bool`, optional | no | |
| `owner_history` | list of [`ProjectOwnerHistoryResponseDto`](#model-ProjectOwnerHistoryResponseDto), optional | no | |
| `analyses` | list of [`AnalysisResponseDto`](#model-AnalysisResponseDto), optional | no | |
| `cover_image` | `str`, optional | no | |
| `original_default_project_guid` | `str`, optional | no | |
| `version` | [`Version1`](#model-Version1), optional | no | |
| `webhook_url` | `str`, optional | no | |
| `favorite` | `bool`, optional | no | |
| `gis_centroid_x` | `float`, optional | no | |
| `gis_centroid_y` | `float`, optional | no | |
| `zoom_extent_xmin` | `float`, optional | no | |
| `zoom_extent_ymin` | `float`, optional | no | |
| `zoom_extent_xmax` | `float`, optional | no | |
| `zoom_extent_ymax` | `float`, optional | no | |
## ProjectOwnerHistoryResponseDto { #model-ProjectOwnerHistoryResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `owned_at` | `AwareDatetime`, optional | no | |
| `owner_email` | `str`, optional | no | |
## ProjectRequestDto { #model-ProjectRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `project_name` | `str` | yes | (max length 100, min length 0) |
| `version` | [`Version`](#model-Version) | yes | |
| `webhook_url` | `str`, optional | no | |
| `favorite` | `bool`, optional | no | |
| `gis_centroid_x` | `float`, optional | no | |
| `gis_centroid_y` | `float`, optional | no | |
| `zoom_extent_xmin` | `float`, optional | no | |
| `zoom_extent_ymin` | `float`, optional | no | |
| `zoom_extent_xmax` | `float`, optional | no | |
| `zoom_extent_ymax` | `float`, optional | no | |
## ProjectResponseDto { #model-ProjectResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `project_name` | `str`, optional | no | |
| `project_guid` | `str`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `cover_image` | `str`, optional | no | |
| `project_owner_email` | `str`, optional | no | |
| `secondary_owners` | list of [`SecondaryOwnerDto`](#model-SecondaryOwnerDto), optional | no | |
| `lock_user_email` | `str`, optional | no | |
| `lock` | `bool`, optional | no | |
| `lock_time` | `AwareDatetime`, optional | no | |
| `owned_by_current_user` | `bool`, optional | no | |
| `editable_by_current_user` | `bool`, optional | no | |
| `original_default_project_guid` | `str`, optional | no | |
| `version` | [`Version1`](#model-Version1), optional | no | |
| `favorite` | `bool`, optional | no | |
| `gis_centroid_x` | `float`, optional | no | |
| `gis_centroid_y` | `float`, optional | no | |
| `zoom_extent_xmin` | `float`, optional | no | |
| `zoom_extent_ymin` | `float`, optional | no | |
| `zoom_extent_xmax` | `float`, optional | no | |
| `zoom_extent_ymax` | `float`, optional | no | |
| `processing` | `bool`, optional | no | |
## ProjectSummaryResponseDto { #model-ProjectSummaryResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `projects` | list of [`ProjectResponseDto`](#model-ProjectResponseDto), optional | no | |
## ResultsResponseDto { #model-ResultsResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `execution_submitted` | `AwareDatetime`, optional | no | |
| `scenarios` | list of [`ResultsScenarioResponseDto`](#model-ResultsScenarioResponseDto), optional | no | |
| `dashboard_url` | `str`, optional | no | |
## ResultsScenarioResponseDto { #model-ResultsScenarioResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_name` | `str`, optional | no | |
| `status` | [`Status1`](#model-Status1), optional | no | |
| `status_message` | `str`, optional | no | |
| `pareto_points_completed` | `str`, optional | no | |
| `input_filepath` | `str`, optional | no | |
| `output_filepath` | `str`, optional | no | |
## SecondaryOwnerDto { #model-SecondaryOwnerDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `email` | `str` | yes | |
| `can_edit` | `bool`, optional | no | |
| `favorite` | `bool`, optional | no | |
## Status1 { #model-Status1 }
| Member | Value |
| --- | --- |
| `Status1.in_specification` | `'IN_SPECIFICATION'` |
| `Status1.submitted` | `'SUBMITTED'` |
| `Status1.aborted` | `'ABORTED'` |
| `Status1.validating` | `'VALIDATING'` |
| `Status1.valid` | `'VALID'` |
| `Status1.invalid` | `'INVALID'` |
| `Status1.pending` | `'PENDING'` |
| `Status1.running` | `'RUNNING'` |
| `Status1.done_optimization` | `'DONE_OPTIMIZATION'` |
| `Status1.generating_results` | `'GENERATING_RESULTS'` |
| `Status1.done` | `'DONE'` |
| `Status1.failed` | `'FAILED'` |
| `Status1.stopped` | `'STOPPED'` |
| `Status1.none_type_none` | `None` |
## Version { #model-Version }
| Member | Value |
| --- | --- |
| `Version.v1` | `'V1'` |
| `Version.v2` | `'V2'` |
## Version1 { #model-Version1 }
| Member | Value |
| --- | --- |
| `Version1.v1` | `'V1'` |
| `Version1.v2` | `'V2'` |
| `Version1.none_type_none` | `None` |
---
# Scenario, stage, and hub models
## HubRequestDto { #model-HubRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_name` | `str` | yes | (max length 100, min length 0) |
## ScenarioRequestDto { #model-ScenarioRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `scenario_name` | `str` | yes | (max length 100, min length 0) |
## StageRequestDto { #model-StageRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `length` | `int` | yes | |
| `interest_rate` | `float`, optional | no | |
| `inflation_rate` | `float`, optional | no | |
| `index` | `int` | yes | |
## StageResponseDto { #model-StageResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `length` | `int` | yes | |
| `interest_rate` | `float`, optional | no | |
| `inflation_rate` | `float`, optional | no | |
| `index` | `int` | yes | |
| `guid` | `UUID`, optional | no | |
---
# Energy models
## AdvancedPriceComponentRequestDtoV2 { #model-AdvancedPriceComponentRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `value` | `float`, optional | no | |
| `price_category` | [`PriceCategory`](#model-PriceCategory) | yes | |
| `price_dimension` | [`PriceDimension`](#model-PriceDimension) | yes | |
| `type` | [`Type2`](#model-Type2), optional | no | |
| `time_of_uses` | list of `str`, optional | no | |
| `price_category_id` | [`PriceCategoryId`](#model-PriceCategoryId), optional | no | |
| `price_dimension_id` | [`PriceDimensionId`](#model-PriceDimensionId), optional | no | |
## AdvancedPriceComponentResponseDtoV2 { #model-AdvancedPriceComponentResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str`, optional | no | |
| `guid` | `str`, optional | no | |
| `value` | `float`, optional | no | |
| `price_category` | `str`, optional | no | |
| `price_category_id` | [`PriceCategoryId`](#model-PriceCategoryId), optional | no | |
| `price_dimension` | `str`, optional | no | |
| `price_dimension_id` | [`PriceDimensionId`](#model-PriceDimensionId), optional | no | |
| `type` | [`Type2`](#model-Type2), optional | no | |
| `time_of_uses` | list of `str`, optional | no | |
## AvailableResourceType { #model-AvailableResourceType }
| Member | Value |
| --- | --- |
| `AvailableResourceType.area` | `'Area'` |
| `AvailableResourceType.generic` | `'Generic'` |
| `AvailableResourceType.power` | `'Power'` |
## EnergyCarrierRequestDtoV2 { #model-EnergyCarrierRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `sub_type` | [`SubType`](#model-SubType) | yes | |
| `energy_carrier_name` | `str` | yes | (max length 100, min length 0) |
| `color_hex_code` | `str`, optional | no | |
| `allow_virtual_load` | `bool`, optional | no | |
## EnergyCarriersListResponseDto { #model-EnergyCarriersListResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_carriers` | list of [`EnergyCarrierResponseDto`](common.md#model-EnergyCarrierResponseDto), optional | no | |
## EnergyDemandDetailResponseDtoV2 { #model-EnergyDemandDetailResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_demand_guid` | `str`, optional | no | |
| `energy_demand_name` | `str`, optional | no | |
| `energy_carrier_guid` | `str`, optional | no | |
| `energy_carrier_name` | `str`, optional | no | |
| `hubs` | list of [`HubResponseDto`](common.md#model-HubResponseDto), optional | no | |
| `demand_sale_price` | `float`, optional | no | |
| `stages` | list of `UUID`, optional | no | |
| `demand_profile_id` | `int`, optional | no | |
| `demand_scaling_factor` | `float`, optional | no | |
| `demand_sale_price_profile_id` | `int`, optional | no | |
| `demand_sale_price_scaling_factor` | `float`, optional | no | |
| `energy_demand_user_saved_metadata_guid` | `str`, optional | no | |
| `energy_demand_user_saved_metadata_name` | `str`, optional | no | |
| `energy_demand_user_saved_metadata_reference_area` | `float`, optional | no | |
| `scaling_factor` | `float`, optional | no | |
| `energy_demand_metadata_guid` | `str`, optional | no | |
| `energy_demand_metadata_name` | `str`, optional | no | |
| `energy_demand_metadata_db_organization` | `str`, optional | no | |
| `energy_demand_metadata_type` | [`EnergyDemandMetadataType`](#model-EnergyDemandMetadataType), optional | no | |
| `energy_demand_metadata_building_type` | [`EnergyDemandMetadataBuildingType`](#model-EnergyDemandMetadataBuildingType), optional | no | |
| `energy_demand_metadata_building_age` | [`EnergyDemandMetadataBuildingAge`](#model-EnergyDemandMetadataBuildingAge), optional | no | |
| `energy_demand_metadata_option` | [`EnergyDemandMetadataOption`](#model-EnergyDemandMetadataOption), optional | no | |
| `energy_demand_metadata_referenced_area_m2` | `float`, optional | no | |
| `energy_demand_metadata_specific_energy_demand_value_k_wh_m2` | `float`, optional | no | |
| `energy_demand_metadata_total_annual_demand` | `float`, optional | no | |
| `multiplication_factor_preview` | `int`, optional | no | |
| `multiplication_factor` | `int`, optional | no | |
| `reverse` | `bool`, optional | no | |
## EnergyDemandListResponseDto { #model-EnergyDemandListResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_demands` | list of [`EnergyDemandResponseDto`](#model-EnergyDemandResponseDto), optional | no | |
## EnergyDemandMetadataBuildingAge { #model-EnergyDemandMetadataBuildingAge }
| Member | Value |
| --- | --- |
| `EnergyDemandMetadataBuildingAge.age_under_1970` | `'AGE_UNDER_1970'` |
| `EnergyDemandMetadataBuildingAge.age_1970_1980` | `'AGE_1970_1980'` |
| `EnergyDemandMetadataBuildingAge.age_1980_1995` | `'AGE_1980_1995'` |
| `EnergyDemandMetadataBuildingAge.age_1995_2005` | `'AGE_1995_2005'` |
| `EnergyDemandMetadataBuildingAge.age_2005_2015` | `'AGE_2005_2015'` |
| `EnergyDemandMetadataBuildingAge.age_over_2015` | `'AGE_OVER_2015'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_mfh` | `'SIA_2024_EXISTING_MFH'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_sfh` | `'SIA_2024_EXISTING_SFH'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_hotel_room` | `'SIA_2024_EXISTING_HOTEL_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_lobby` | `'SIA_2024_EXISTING_LOBBY'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_single_group_office` | `'SIA_2024_EXISTING_SINGLE_GROUP_OFFICE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_open_plan_office` | `'SIA_2024_EXISTING_OPEN_PLAN_OFFICE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_meeting_room` | `'SIA_2024_EXISTING_MEETING_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_counter_hall` | `'SIA_2024_EXISTING_COUNTER_HALL'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_class_room` | `'SIA_2024_EXISTING_CLASS_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_teachers_lounge` | `'SIA_2024_EXISTING_TEACHERS_LOUNGE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_library` | `'SIA_2024_EXISTING_LIBRARY'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_auditorium` | `'SIA_2024_EXISTING_AUDITORIUM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_school_subject_room` | `'SIA_2024_EXISTING_SCHOOL_SUBJECT_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_food_sale_store` | `'SIA_2024_EXISTING_FOOD_SALE_STORE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_specialty_store` | `'SIA_2024_EXISTING_SPECIALTY_STORE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_sales_furniture_diy_garden` | `'SIA_2024_EXISTING_SALES_FURNITURE_DIY_GARDEN'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_patient_room` | `'SIA_2024_EXISTING_PATIENT_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_ward_room` | `'SIA_2024_EXISTING_WARD_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_treatment_room` | `'SIA_2024_EXISTING_TREATMENT_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_warehouse` | `'SIA_2024_EXISTING_WAREHOUSE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_gymnasium` | `'SIA_2024_EXISTING_GYMNASIUM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_fitness_room` | `'SIA_2024_EXISTING_FITNESS_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_existing_indoor_swimming_pool` | `'SIA_2024_EXISTING_INDOOR_SWIMMING_POOL'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_mfh` | `'SIA_2024_STANDARD_MFH'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_sfh` | `'SIA_2024_STANDARD_SFH'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_hotel_room` | `'SIA_2024_STANDARD_HOTEL_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_lobby` | `'SIA_2024_STANDARD_LOBBY'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_single_group_office` | `'SIA_2024_STANDARD_SINGLE_GROUP_OFFICE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_open_plan_office` | `'SIA_2024_STANDARD_OPEN_PLAN_OFFICE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_meeting_room` | `'SIA_2024_STANDARD_MEETING_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_counter_hall` | `'SIA_2024_STANDARD_COUNTER_HALL'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_class_room` | `'SIA_2024_STANDARD_CLASS_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_teachers_lounge` | `'SIA_2024_STANDARD_TEACHERS_LOUNGE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_library` | `'SIA_2024_STANDARD_LIBRARY'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_auditorium` | `'SIA_2024_STANDARD_AUDITORIUM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_school_subject_room` | `'SIA_2024_STANDARD_SCHOOL_SUBJECT_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_food_sale_store` | `'SIA_2024_STANDARD_FOOD_SALE_STORE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_specialty_store` | `'SIA_2024_STANDARD_SPECIALTY_STORE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_sales_furniture_diy_garden` | `'SIA_2024_STANDARD_SALES_FURNITURE_DIY_GARDEN'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_patient_room` | `'SIA_2024_STANDARD_PATIENT_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_ward_room` | `'SIA_2024_STANDARD_WARD_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_treatment_room` | `'SIA_2024_STANDARD_TREATMENT_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_warehouse` | `'SIA_2024_STANDARD_WAREHOUSE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_gymnasium` | `'SIA_2024_STANDARD_GYMNASIUM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_fitness_room` | `'SIA_2024_STANDARD_FITNESS_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_standard_indoor_swimming_pool` | `'SIA_2024_STANDARD_INDOOR_SWIMMING_POOL'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_mfh` | `'SIA_2024_TARGET_MFH'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_sfh` | `'SIA_2024_TARGET_SFH'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_hotel_room` | `'SIA_2024_TARGET_HOTEL_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_lobby` | `'SIA_2024_TARGET_LOBBY'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_single_group_office` | `'SIA_2024_TARGET_SINGLE_GROUP_OFFICE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_open_plan_office` | `'SIA_2024_TARGET_OPEN_PLAN_OFFICE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_meeting_room` | `'SIA_2024_TARGET_MEETING_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_counter_hall` | `'SIA_2024_TARGET_COUNTER_HALL'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_class_room` | `'SIA_2024_TARGET_CLASS_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_teachers_lounge` | `'SIA_2024_TARGET_TEACHERS_LOUNGE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_library` | `'SIA_2024_TARGET_LIBRARY'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_auditorium` | `'SIA_2024_TARGET_AUDITORIUM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_school_subject_room` | `'SIA_2024_TARGET_SCHOOL_SUBJECT_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_food_sale_store` | `'SIA_2024_TARGET_FOOD_SALE_STORE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_specialty_store` | `'SIA_2024_TARGET_SPECIALTY_STORE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_sales_furniture_diy_garden` | `'SIA_2024_TARGET_SALES_FURNITURE_DIY_GARDEN'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_patient_room` | `'SIA_2024_TARGET_PATIENT_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_ward_room` | `'SIA_2024_TARGET_WARD_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_treatment_room` | `'SIA_2024_TARGET_TREATMENT_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_warehouse` | `'SIA_2024_TARGET_WAREHOUSE'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_gymnasium` | `'SIA_2024_TARGET_GYMNASIUM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_fitness_room` | `'SIA_2024_TARGET_FITNESS_ROOM'` |
| `EnergyDemandMetadataBuildingAge.sia_2024_target_indoor_swimming_pool` | `'SIA_2024_TARGET_INDOOR_SWIMMING_POOL'` |
| `EnergyDemandMetadataBuildingAge.minergie_new_construction` | `'MINERGIE_NEW_CONSTRUCTION'` |
| `EnergyDemandMetadataBuildingAge.minergie_renovation` | `'MINERGIE_RENOVATION'` |
| `EnergyDemandMetadataBuildingAge.minergie_a` | `'MINERGIE_A'` |
| `EnergyDemandMetadataBuildingAge.minergie_p_new_construction` | `'MINERGIE_P_NEW_CONSTRUCTION'` |
| `EnergyDemandMetadataBuildingAge.minergie_p_renovation` | `'MINERGIE_P_RENOVATION'` |
| `EnergyDemandMetadataBuildingAge.others` | `'OTHERS'` |
| `EnergyDemandMetadataBuildingAge.none_type_none` | `None` |
## EnergyDemandMetadataBuildingType { #model-EnergyDemandMetadataBuildingType }
| Member | Value |
| --- | --- |
| `EnergyDemandMetadataBuildingType.residence_mfh` | `'RESIDENCE_MFH'` |
| `EnergyDemandMetadataBuildingType.residence_sfh` | `'RESIDENCE_SFH'` |
| `EnergyDemandMetadataBuildingType.administration` | `'ADMINISTRATION'` |
| `EnergyDemandMetadataBuildingType.offices` | `'OFFICES'` |
| `EnergyDemandMetadataBuildingType.schools` | `'SCHOOLS'` |
| `EnergyDemandMetadataBuildingType.retail` | `'RETAIL'` |
| `EnergyDemandMetadataBuildingType.restaurant` | `'RESTAURANT'` |
| `EnergyDemandMetadataBuildingType.assembly` | `'ASSEMBLY'` |
| `EnergyDemandMetadataBuildingType.hospitals` | `'HOSPITALS'` |
| `EnergyDemandMetadataBuildingType.industry` | `'INDUSTRY'` |
| `EnergyDemandMetadataBuildingType.warehouse` | `'WAREHOUSE'` |
| `EnergyDemandMetadataBuildingType.sports_center` | `'SPORTS_CENTER'` |
| `EnergyDemandMetadataBuildingType.indoor_pool` | `'INDOOR_POOL'` |
| `EnergyDemandMetadataBuildingType.hotel` | `'HOTEL'` |
| `EnergyDemandMetadataBuildingType.industry_1_shift_fabricated_metals` | `'INDUSTRY_1_SHIFT_FABRICATED_METALS'` |
| `EnergyDemandMetadataBuildingType.industry_2_shift_fabricated_metals` | `'INDUSTRY_2_SHIFT_FABRICATED_METALS'` |
| `EnergyDemandMetadataBuildingType.industry_food_processing` | `'INDUSTRY_FOOD_PROCESSING'` |
| `EnergyDemandMetadataBuildingType.industry_general_manufacturer` | `'INDUSTRY_GENERAL_MANUFACTURER'` |
| `EnergyDemandMetadataBuildingType.industry_pharmaceutical` | `'INDUSTRY_PHARMACEUTICAL'` |
| `EnergyDemandMetadataBuildingType.industry_plastic_manufacturer` | `'INDUSTRY_PLASTIC_MANUFACTURER'` |
| `EnergyDemandMetadataBuildingType.industry_services` | `'INDUSTRY_SERVICES'` |
| `EnergyDemandMetadataBuildingType.industry_warehouse` | `'INDUSTRY_WAREHOUSE'` |
| `EnergyDemandMetadataBuildingType.none_type_none` | `None` |
## EnergyDemandMetadataOption { #model-EnergyDemandMetadataOption }
| Member | Value |
| --- | --- |
| `EnergyDemandMetadataOption.option_1` | `'OPTION_1'` |
| `EnergyDemandMetadataOption.option_2` | `'OPTION_2'` |
| `EnergyDemandMetadataOption.option_3` | `'OPTION_3'` |
| `EnergyDemandMetadataOption.none_type_none` | `None` |
## EnergyDemandMetadataType { #model-EnergyDemandMetadataType }
| Member | Value |
| --- | --- |
| `EnergyDemandMetadataType.electricity` | `'ELECTRICITY'` |
| `EnergyDemandMetadataType.space_heating` | `'SPACE_HEATING'` |
| `EnergyDemandMetadataType.hot_water` | `'HOT_WATER'` |
| `EnergyDemandMetadataType.cooling` | `'COOLING'` |
| `EnergyDemandMetadataType.none_type_none` | `None` |
## EnergyDemandRequestDtoV2 { #model-EnergyDemandRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_guids` | list of `str` | yes | |
| `energy_carrier_guid` | `str` | yes | |
| `demand_profile_id` | `int` | yes | |
| `demand_scaling_factor` | `float`, optional | no | |
| `name` | `str` | yes | (max length 100, min length 0) |
| `demand_sale_price` | `float`, optional | no | |
| `demand_sale_price_profile_id` | `int`, optional | no | |
| `demand_sale_price_scaling_factor` | `float`, optional | no | |
| `stages` | list of `UUID` | yes | |
| `multiplication_factor` | `int`, optional | no | |
| `reverse` | `bool`, optional | no | |
## EnergyDemandResponseDto { #model-EnergyDemandResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_demand_guid` | `str`, optional | no | |
| `energy_carrier_name` | `str`, optional | no | |
| `hub_name` | `str`, optional | no | |
| `energy_demand_name` | `str`, optional | no | |
| `energy_carrier_guid` | `str`, optional | no | |
| `hub_guid` | `str`, optional | no | |
| `demand_sale_price` | `float`, optional | no | |
| `energy_demand_user_saved_metadata_guid` | `str`, optional | no | |
| `energy_demand_user_saved_metadata_name` | `str`, optional | no | |
| `energy_demand_user_saved_metadata_reference_area` | `float`, optional | no | |
| `scaling_factor` | `float`, optional | no | |
| `energy_demand_metadata_guid` | `str`, optional | no | |
| `energy_demand_metadata_name` | `str`, optional | no | |
| `energy_demand_metadata_db_organization` | `str`, optional | no | |
| `energy_demand_metadata_type` | [`EnergyDemandMetadataType`](#model-EnergyDemandMetadataType), optional | no | |
| `energy_demand_metadata_building_type` | [`EnergyDemandMetadataBuildingType`](#model-EnergyDemandMetadataBuildingType), optional | no | |
| `energy_demand_metadata_building_age` | [`EnergyDemandMetadataBuildingAge`](#model-EnergyDemandMetadataBuildingAge), optional | no | |
| `energy_demand_metadata_option` | [`EnergyDemandMetadataOption`](#model-EnergyDemandMetadataOption), optional | no | |
| `energy_demand_metadata_referenced_area_m2` | `float`, optional | no | |
| `energy_demand_metadata_specific_energy_demand_value_k_wh_m2` | `float`, optional | no | |
| `energy_demand_metadata_total_annual_demand` | `float`, optional | no | |
| `multiplication_factor_preview` | `int`, optional | no | |
| `multiplication_factor` | `int`, optional | no | |
## EnergyDemandResponseDtoV2 { #model-EnergyDemandResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_demand_guid` | `str`, optional | no | |
| `energy_carrier_name` | `str` | yes | |
| `hubs` | list of [`HubResponseDto`](common.md#model-HubResponseDto) | yes | |
| `energy_demand_name` | `str` | yes | |
| `energy_carrier_guid` | `str` | yes | |
| `demand_sale_price` | `float`, optional | no | |
| `stages` | list of `UUID` | yes | |
| `demand_profile_id` | `int` | yes | |
| `demand_scaling_factor` | `float`, optional | no | |
| `demand_sale_price_profile_id` | `int`, optional | no | |
| `demand_sale_price_scaling_factor` | `float`, optional | no | |
| `energy_demand_user_saved_metadata_guid` | `str`, optional | no | |
| `energy_demand_user_saved_metadata_name` | `str`, optional | no | |
| `energy_demand_user_saved_metadata_reference_area` | `float`, optional | no | |
| `scaling_factor` | `float`, optional | no | |
| `energy_demand_metadata_guid` | `str`, optional | no | |
| `energy_demand_metadata_name` | `str`, optional | no | |
| `energy_demand_metadata_db_organization` | `str`, optional | no | |
| `energy_demand_metadata_type` | [`EnergyDemandMetadataType`](#model-EnergyDemandMetadataType), optional | no | |
| `energy_demand_metadata_building_type` | [`EnergyDemandMetadataBuildingType`](#model-EnergyDemandMetadataBuildingType), optional | no | |
| `energy_demand_metadata_building_age` | [`EnergyDemandMetadataBuildingAge`](#model-EnergyDemandMetadataBuildingAge), optional | no | |
| `energy_demand_metadata_option` | [`EnergyDemandMetadataOption`](#model-EnergyDemandMetadataOption), optional | no | |
| `energy_demand_metadata_referenced_area_m2` | `float`, optional | no | |
| `energy_demand_metadata_specific_energy_demand_value_k_wh_m2` | `float`, optional | no | |
| `energy_demand_metadata_total_annual_demand` | `float`, optional | no | |
| `multiplication_factor_preview` | `int`, optional | no | |
| `multiplication_factor` | `int`, optional | no | |
| `reverse` | `bool` | yes | |
## HubSolarOnSiteResourceResponseDto { #model-HubSolarOnSiteResourceResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_name` | `str`, optional | no | |
| `hub_guid` | `str`, optional | no | |
| `available_solar_collector_area` | `float`, optional | no | |
| `available_resource_type` | `str`, optional | no | |
| `technology_dimensioning_std_value` | `float`, optional | no | |
## HubSolarOnSiteResourceResponseDtoV2 { #model-HubSolarOnSiteResourceResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_name` | `str` | yes | |
| `hub_guid` | `str` | yes | |
| `available_solar_collector_area` | `float` | yes | |
| `available_resource_type` | [`AvailableResourceType`](#model-AvailableResourceType) | yes | |
## ImpexHubRequestDto { #model-ImpexHubRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_guid` | `str` | yes | |
## ImpexHubResponseDto { #model-ImpexHubResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_guid` | `str` | yes | |
| `hub_name` | `str` | yes | |
| `hub_updated` | `AwareDatetime` | yes | |
| `hub_created` | `AwareDatetime` | yes | |
| `impex_guid` | `str`, optional | no | |
## ImportExportRequestDtoV2 { #model-ImportExportRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_price_ch_fk_wh` | `float`, optional | no | |
| `max_capacity_kw` | `float`, optional | no | |
| `total_annual_energy_available_k_wh_a` | `float`, optional | no | |
| `capacity_price_ch_fk_w_year` | `float`, optional | no | |
| `name` | `str` | yes | |
| `hourly_energy_price_profile_id` | `int`, optional | no | |
| `capacity_price_ch_fk_w_month` | `float`, optional | no | |
| `fixed_om_price_chf_year` | `float`, optional | no | |
| `co2_intensity_kg_co2k_wh_co2_compensation_kg_co2k_wh` | `float`, optional | no | |
| `dynamic_co2_profile_id` | `int`, optional | no | |
| `maximum_hourly_energy_available_profile_id` | `int`, optional | no | |
| `energy_carrier_guid` | `str` | yes | |
| `type` | [`Type1`](#model-Type1) | yes | |
| `hubs` | list of [`ImpexHubRequestDto`](#model-ImpexHubRequestDto) | yes | |
| `product` | `str`, optional | no | |
| `year` | `int`, optional | no | |
| `notes` | `str`, optional | no | |
| `source` | `str`, optional | no | |
| `suggested` | `bool`, optional | no | |
| `price_components` | list of [`AdvancedPriceComponentRequestDtoV2`](#model-AdvancedPriceComponentRequestDtoV2), optional | no | |
| `time_of_uses` | list of [`TimeOfUseRequestDto`](#model-TimeOfUseRequestDto), optional | no | |
| `stages` | list of `UUID` | yes | |
## ImportExportResponseDtoV2 { #model-ImportExportResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_price_ch_fk_wh` | `float`, optional | no | |
| `max_capacity_kw` | `float`, optional | no | |
| `total_annual_energy_available_k_wh_a` | `float`, optional | no | |
| `capacity_price_ch_fk_w_year` | `float`, optional | no | |
| `name` | `str` | yes | |
| `hourly_energy_price_profile_id` | `int`, optional | no | |
| `capacity_price_ch_fk_w_month` | `float`, optional | no | |
| `fixed_om_price_chf_year` | `float`, optional | no | |
| `co2_intensity_kg_co2k_wh_co2_compensation_kg_co2k_wh` | `float`, optional | no | |
| `dynamic_co2_profile_id` | `int`, optional | no | |
| `maximum_hourly_energy_available_profile_id` | `int`, optional | no | |
| `energy_carrier` | [`EnergyCarrierResponseDto`](common.md#model-EnergyCarrierResponseDto) | yes | |
| `type` | `str` | yes | |
| `hubs` | list of [`ImpexHubResponseDto`](#model-ImpexHubResponseDto) | yes | |
| `guid` | `str`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `price_components` | list of [`AdvancedPriceComponentResponseDtoV2`](#model-AdvancedPriceComponentResponseDtoV2) | yes | |
| `time_of_uses` | list of [`TimeOfUseResponseDto`](#model-TimeOfUseResponseDto) | yes | |
| `product` | `str`, optional | no | |
| `year` | `int`, optional | no | |
| `notes` | `str`, optional | no | |
| `source` | `str`, optional | no | |
| `suggested` | `bool`, optional | no | |
| `stages` | list of `UUID` | yes | |
## IrradianceProfileType { #model-IrradianceProfileType }
| Member | Value |
| --- | --- |
| `IrradianceProfileType.generated` | `'GENERATED'` |
| `IrradianceProfileType.uploaded` | `'UPLOADED'` |
| `IrradianceProfileType.saved` | `'SAVED'` |
## IrradianceProfileType1 { #model-IrradianceProfileType1 }
| Member | Value |
| --- | --- |
| `IrradianceProfileType1.generated` | `'GENERATED'` |
| `IrradianceProfileType1.uploaded` | `'UPLOADED'` |
| `IrradianceProfileType1.saved` | `'SAVED'` |
| `IrradianceProfileType1.none_type_none` | `None` |
## PriceCategory { #model-PriceCategory }
| Member | Value |
| --- | --- |
| `PriceCategory.energy_delivery` | `'ENERGY_DELIVERY'` |
| `PriceCategory.network_use` | `'NETWORK_USE'` |
| `PriceCategory.taxes` | `'TAXES'` |
| `PriceCategory.refunds_and_rebates` | `'REFUNDS_AND_REBATES'` |
| `PriceCategory.total` | `'TOTAL'` |
## PriceCategoryId { #model-PriceCategoryId }
| Member | Value |
| --- | --- |
| `PriceCategoryId.energy_delivery` | `'ENERGY_DELIVERY'` |
| `PriceCategoryId.network_use` | `'NETWORK_USE'` |
| `PriceCategoryId.taxes` | `'TAXES'` |
| `PriceCategoryId.refunds_and_rebates` | `'REFUNDS_AND_REBATES'` |
| `PriceCategoryId.total` | `'TOTAL'` |
| `PriceCategoryId.none_type_none` | `None` |
## PriceDimension { #model-PriceDimension }
| Member | Value |
| --- | --- |
| `PriceDimension.energy_price_chf_kwh` | `'ENERGY_PRICE_CHF_KWH'` |
| `PriceDimension.capacity_price_chf_kw_month` | `'CAPACITY_PRICE_CHF_KW_MONTH'` |
| `PriceDimension.capacity_price_chf_kw_year` | `'CAPACITY_PRICE_CHF_KW_YEAR'` |
| `PriceDimension.fixed_om_price_chf_year` | `'FIXED_OM_PRICE_CHF_YEAR'` |
## PriceDimensionId { #model-PriceDimensionId }
| Member | Value |
| --- | --- |
| `PriceDimensionId.energy_price_chf_kwh` | `'ENERGY_PRICE_CHF_KWH'` |
| `PriceDimensionId.capacity_price_chf_kw_month` | `'CAPACITY_PRICE_CHF_KW_MONTH'` |
| `PriceDimensionId.capacity_price_chf_kw_year` | `'CAPACITY_PRICE_CHF_KW_YEAR'` |
| `PriceDimensionId.fixed_om_price_chf_year` | `'FIXED_OM_PRICE_CHF_YEAR'` |
| `PriceDimensionId.none_type_none` | `None` |
## ProfileDetailsResponseDto { #model-ProfileDetailsResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `int`, optional | no | |
| `name` | `str` | yes | |
| `values` | list of [`ProfilePeriodValueDto`](#model-ProfilePeriodValueDto) | yes | |
## ProfileJsonRequestDto { #model-ProfileJsonRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `values` | list of [`ProfilePeriodValueDto`](#model-ProfilePeriodValueDto) | yes | |
## ProfilePeriodValueDto { #model-ProfilePeriodValueDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `period` | `int` | yes | |
| `demand_value` | `float` | yes | |
## ProfileResponseDto { #model-ProfileResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `int`, optional | no | |
| `name` | `str`, optional | no | |
## SolarOnSiteResourceListResponseDto { #model-SolarOnSiteResourceListResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `solar_resources` | list of [`SolarOnSiteResourceResponseDto`](#model-SolarOnSiteResourceResponseDto), optional | no | |
## SolarOnSiteResourceRequestDtoV2 { #model-SolarOnSiteResourceRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `energy_carrier_guid` | `str` | yes | |
| `hubs` | list of [`SolarOnSiteResourcesHubRequestDtoV2`](#model-SolarOnSiteResourcesHubRequestDtoV2) | yes | |
| `profile_id` | `int` | yes | |
| `stages` | list of `UUID` | yes | |
## SolarOnSiteResourceResponseDto { #model-SolarOnSiteResourceResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `solar_resource_guid` | `str`, optional | no | |
| `energy_carrier_guid` | `str`, optional | no | |
| `energy_carrier_name` | `str`, optional | no | |
| `hubs` | list of [`HubSolarOnSiteResourceResponseDto`](#model-HubSolarOnSiteResourceResponseDto), optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `irradiance_profile_type` | [`IrradianceProfileType1`](#model-IrradianceProfileType1), optional | no | |
| `solar_resource_metadata_name` | `str`, optional | no | |
| `solar_resource_metadata_db_organization` | `str`, optional | no | |
| `solar_resource_metadata_guid` | `str`, optional | no | |
| `solar_resource_metadata_location` | `str`, optional | no | |
| `solar_resource_metadata_type` | `str`, optional | no | |
| `solar_resource_metadata_slope` | `float`, optional | no | |
| `solar_resource_metadata_orientation` | `str`, optional | no | |
## SolarOnSiteResourceResponseDtoV2 { #model-SolarOnSiteResourceResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `solar_resource_guid` | `str`, optional | no | |
| `energy_carrier_guid` | `str` | yes | |
| `energy_carrier_name` | `str` | yes | |
| `hubs` | list of [`HubSolarOnSiteResourceResponseDtoV2`](#model-HubSolarOnSiteResourceResponseDtoV2) | yes | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `irradiance_profile_type` | [`IrradianceProfileType`](#model-IrradianceProfileType) | yes | |
| `solar_resource_metadata_name` | `str`, optional | no | |
| `solar_resource_metadata_db_organization` | `str`, optional | no | |
| `solar_resource_metadata_guid` | `str`, optional | no | |
| `solar_resource_metadata_location` | `str`, optional | no | |
| `solar_resource_metadata_type` | `str`, optional | no | |
| `solar_resource_metadata_slope` | `float`, optional | no | |
| `solar_resource_metadata_orientation` | `str`, optional | no | |
| `stages` | list of `UUID` | yes | |
| `profile_id` | `int` | yes | |
## SolarOnSiteResourcesHubRequestDtoV2 { #model-SolarOnSiteResourcesHubRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hub_guid` | `str` | yes | |
| `available_solar_collector_area` | `float` | yes | (> 0.0) |
| `available_resource_type` | [`AvailableResourceType`](#model-AvailableResourceType) | yes | |
## SubType { #model-SubType }
| Member | Value |
| --- | --- |
| `SubType.electricity` | `'ELECTRICITY'` |
| `SubType.electricity_renewable` | `'ELECTRICITY_RENEWABLE'` |
| `SubType.wood_chips` | `'WOOD_CHIPS'` |
| `SubType.wood_pellets` | `'WOOD_PELLETS'` |
| `SubType.coal` | `'COAL'` |
| `SubType.oil` | `'OIL'` |
| `SubType.gas` | `'GAS'` |
| `SubType.biogas` | `'BIOGAS'` |
| `SubType.hydrogen` | `'HYDROGEN'` |
| `SubType.hydrogen_pressurized` | `'HYDROGEN_PRESSURIZED'` |
| `SubType.cooling_1` | `'COOLING_1'` |
| `SubType.cooling_2` | `'COOLING_2'` |
| `SubType.cooling_3` | `'COOLING_3'` |
| `SubType.cooling_4` | `'COOLING_4'` |
| `SubType.ice` | `'ICE'` |
| `SubType.heat_1` | `'HEAT_1'` |
| `SubType.heat_2` | `'HEAT_2'` |
| `SubType.heat_3` | `'HEAT_3'` |
| `SubType.heat_4` | `'HEAT_4'` |
| `SubType.heat_5` | `'HEAT_5'` |
| `SubType.heat_6` | `'HEAT_6'` |
| `SubType.heat_7` | `'HEAT_7'` |
| `SubType.heat_8` | `'HEAT_8'` |
| `SubType.heat_9` | `'HEAT_9'` |
| `SubType.heat_ambient` | `'HEAT_AMBIENT'` |
| `SubType.steam_low_pressure` | `'STEAM_LOW_PRESSURE'` |
| `SubType.solar_roof` | `'SOLAR_ROOF'` |
| `SubType.solar_facade` | `'SOLAR_FACADE'` |
| `SubType.solar_parapet` | `'SOLAR_PARAPET'` |
| `SubType.wind` | `'WIND'` |
| `SubType.hydro` | `'HYDRO'` |
| `SubType.biomass` | `'BIOMASS'` |
| `SubType.geothermal` | `'GEOTHERMAL'` |
| `SubType.tidal` | `'TIDAL'` |
| `SubType.process_waste_heat` | `'PROCESS_WASTE_HEAT'` |
| `SubType.custom` | `'CUSTOM'` |
## TimeOfUseRequestDto { #model-TimeOfUseRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str`, optional | no | |
| `months` | list of `str`, optional | no | |
| `days` | list of `str`, optional | no | |
| `start_time` | `str`, optional | no | |
| `end_time` | `str`, optional | no | |
## TimeOfUseResponseDto { #model-TimeOfUseResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str`, optional | no | |
| `months` | list of `str`, optional | no | |
| `days` | list of `str`, optional | no | |
| `start_time` | `str`, optional | no | |
| `end_time` | `str`, optional | no | |
## Type1 { #model-Type1 }
| Member | Value |
| --- | --- |
| `Type1.import_` | `'IMPORT'` |
| `Type1.export` | `'EXPORT'` |
## Type2 { #model-Type2 }
| Member | Value |
| --- | --- |
| `Type2.time_of_use` | `'TIME_OF_USE'` |
| `Type2.fixed` | `'FIXED'` |
| `Type2.none_type_none` | `None` |
---
# Technology and network models
## AdvancedCostComponentRequestDto { #model-AdvancedCostComponentRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `value` | `float`, optional | no | |
| `category` | `str`, optional | no | |
| `lifetime` | `float`, optional | no | (≥ 0.0) |
| `interest_rate` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `length` | `float`, optional | no | |
| `complexity_factor` | `float`, optional | no | |
| `data_points` | `float`, optional | no | |
| `number_of_pumps` | `float`, optional | no | |
## AdvancedCostComponentResponseDto { #model-AdvancedCostComponentResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `value` | `float`, optional | no | |
| `category` | `str`, optional | no | |
| `lifetime` | `float`, optional | no | (≥ 0.0) |
| `interest_rate` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `length` | `float`, optional | no | |
| `complexity_factor` | `float`, optional | no | |
| `data_points` | `float`, optional | no | |
| `number_of_pumps` | `float`, optional | no | |
| `guid` | `str`, optional | no | |
| `category_id` | `str`, optional | no | |
## ConversionCarrierRequestDtoV2 { #model-ConversionCarrierRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_carrier_guid` | `str` | yes | |
| `fixed_input_share` | `float` | yes | (≥ 0.0) |
| `output_efficiency` | `float` | yes | (≥ 0.0) |
| `custom_input_share_activated` | `bool`, optional | no | |
| `custom_output_efficiency_activated` | `bool`, optional | no | |
| `input_share_profile_id` | `int`, optional | no | |
| `output_efficiency_profile_id` | `int`, optional | no | |
| `custom_seasonality_values` | list of [`CustomSeasonalityRequestDto`](#model-CustomSeasonalityRequestDto), optional | no | |
| `type` | [`Type`](#model-Type) | yes | |
| `primary` | `bool` | yes | |
## ConversionTechnologyDetailResponseDtoV2 { #model-ConversionTechnologyDetailResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `fixed_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `fixed_om_cost_chf` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost_percent` | `float`, optional | no | |
| `variable_om_cost_year` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost` | `float`, optional | no | (≥ 0.0) |
| `fixed_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_emitted_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_captured_co2` | `float`, optional | no | (≥ 0.0) |
| `fixed_replacement_cost` | `float`, optional | no | (≥ 0.0) |
| `variable_replacement_cost_percent` | `float`, optional | no | (≥ 0.0) |
| `variable_replacement_cost_chf` | `float`, optional | no | (≥ 0.0) |
| `fixed_salvage_value` | `float`, optional | no | (≥ 0.0) |
| `variable_salvage_value_percent` | `float`, optional | no | (≥ 0.0) |
| `variable_salvage_value_chf` | `float`, optional | no | (≥ 0.0) |
| `must_be_installed_in_hubs` | [`MustBeInstalledInHubs2`](#model-MustBeInstalledInHubs2) | yes | |
| `conversion_technology_guid` | `str`, optional | no | |
| `process_name` | `str` | yes | |
| `exchange_currency` | `str`, optional | no | |
| `exchange_rate` | `float`, optional | no | |
| `variable_investment_cost` | `float`, optional | no | |
| `lifetime` | `float` | yes | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `hubs` | list of [`HubResponseDto`](common.md#model-HubResponseDto) | yes | |
| `technology_modes` | list of [`TechnologyModeResponseDtoV2`](#model-TechnologyModeResponseDtoV2), optional | no | |
| `category` | `str`, optional | no | |
| `technology_category` | `str`, optional | no | |
| `mutually_exclusive_group` | `str`, optional | no | |
| `notes` | `str`, optional | no | |
| `virtual` | `bool` | yes | |
| `technology_optional` | `bool`, optional | no | |
| `part_of_technology_package` | `bool`, optional | no | |
| `technology_capacity` | `str`, optional | no | |
| `cost_components` | list of [`AdvancedCostComponentResponseDto`](#model-AdvancedCostComponentResponseDto), optional | no | |
| `comes_from_db` | `str`, optional | no | |
| `stages` | list of `UUID` | yes | |
## ConversionTechnologyListResponseDtoV2 { #model-ConversionTechnologyListResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `conversion_technologies` | list of [`ConversionTechnologyResponseDtoV2`](#model-ConversionTechnologyResponseDtoV2), optional | no | |
## ConversionTechnologyRequestDtoV2 { #model-ConversionTechnologyRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `fixed_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `fixed_om_cost_chf` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost_percent` | `float`, optional | no | |
| `variable_om_cost_year` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost` | `float`, optional | no | (≥ 0.0) |
| `fixed_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_emitted_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_captured_co2` | `float`, optional | no | (≥ 0.0) |
| `fixed_replacement_cost` | `float`, optional | no | (≥ 0.0) |
| `variable_replacement_cost_percent` | `float`, optional | no | (≥ 0.0) |
| `variable_replacement_cost_chf` | `float`, optional | no | (≥ 0.0) |
| `fixed_salvage_value` | `float`, optional | no | (≥ 0.0) |
| `variable_salvage_value_percent` | `float`, optional | no | (≥ 0.0) |
| `variable_salvage_value_chf` | `float`, optional | no | (≥ 0.0) |
| `must_be_installed_in_hubs` | [`MustBeInstalledInHubs`](#model-MustBeInstalledInHubs) | yes | |
| `process_name` | `str` | yes | (max length 100, min length 0) |
| `variable_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `lifetime` | `int` | yes | |
| `hub_guids` | list of `str` | yes | |
| `conversion_technology_modes` | list of [`TechnologyModeRequestDtoV2`](#model-TechnologyModeRequestDtoV2) | yes | (max length 3, min length 1) |
| `virtual` | `bool` | yes | |
| `cost_components` | list of [`AdvancedCostComponentRequestDto`](#model-AdvancedCostComponentRequestDto), optional | no | |
| `suggested` | `bool`, optional | no | |
| `technology_category` | `str`, optional | no | |
| `notes` | `str`, optional | no | |
| `source` | `str`, optional | no | |
| `comes_from_db` | `str`, optional | no | |
| `exchange_currency` | `str` | yes | (max length 3, min length 0) |
| `exchange_rate` | `float` | yes | (≥ 0.0) |
| `stages` | list of `UUID` | yes | |
## ConversionTechnologyResponseDtoV2 { #model-ConversionTechnologyResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `conversion_technology_guid` | `str`, optional | no | |
| `process_name` | `str`, optional | no | |
| `lifetime` | `int`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `conversion_technology_modes` | list of [`TechnologyModeResponseDtoV2`](#model-TechnologyModeResponseDtoV2), optional | no | |
| `hubs` | list of [`HubResponseDto`](common.md#model-HubResponseDto), optional | no | |
| `virtual` | `bool`, optional | no | |
| `must_be_installed_in_hubs` | [`MustBeInstalledInHubs1`](#model-MustBeInstalledInHubs1), optional | no | |
| `stages` | list of `UUID`, optional | no | |
## CustomSeasonalityRequestDto { #model-CustomSeasonalityRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `month` | [`Month`](common.md#model-Month), optional | no | |
| `value` | `float`, optional | no | |
## EnergyCarrierResponseDtoV2 { #model-EnergyCarrierResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `energy_carrier_guid` | `str`, optional | no | |
| `type_key` | `str`, optional | no | |
| `type_display_name` | `str`, optional | no | |
| `subtype_key` | `str`, optional | no | |
| `subtype_display_name` | `str`, optional | no | |
| `energy_carrier_name` | `str`, optional | no | |
| `color_hex_code` | `str`, optional | no | |
| `output_efficiency` | `float`, optional | no | |
| `fixed_input_share` | `float`, optional | no | |
| `custom_output_efficiency_activated` | `bool`, optional | no | |
| `custom_input_share_activated` | `bool`, optional | no | |
| `custom_seasonality_values` | list of [`CustomSeasonalityResponseDto`](common.md#model-CustomSeasonalityResponseDto), optional | no | |
| `input_share_profile_id` | `int`, optional | no | |
| `output_efficiency_profile_id` | `int`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `primary` | `bool`, optional | no | |
## GuidNameDto { #model-GuidNameDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `guid` | `str` | yes | |
| `name` | `str` | yes | |
## IntraHubNetworkLinkListResponseDto { #model-IntraHubNetworkLinkListResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `intra_hub_network_links` | list of [`IntraHubNetworkLinkResponseDto`](#model-IntraHubNetworkLinkResponseDto), optional | no | |
## IntraHubNetworkLinkRequestDto { #model-IntraHubNetworkLinkRequestDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `network_loss` | `float`, optional | no | |
| `fixed_embodied_co2` | `float`, optional | no | |
| `input_energy_carrier_guid` | `str` | yes | |
| `output_energy_carrier_guid` | `str` | yes | |
| `hub_guids` | list of `str` | yes | |
| `advanced_cost_components` | list of [`AdvancedCostComponentRequestDto`](#model-AdvancedCostComponentRequestDto), optional | no | |
| `stages` | list of `UUID` | yes | |
## IntraHubNetworkLinkResponseDto { #model-IntraHubNetworkLinkResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `intra_hub_network_link_guid` | `str`, optional | no | |
| `name` | `str` | yes | |
| `network_loss` | `float`, optional | no | |
| `fixed_embodied_co2` | `float`, optional | no | |
| `input_energy_carrier` | [`EnergyCarrierResponseDto`](common.md#model-EnergyCarrierResponseDto) | yes | |
| `output_energy_carrier` | [`EnergyCarrierResponseDto`](common.md#model-EnergyCarrierResponseDto) | yes | |
| `hubs` | list of [`HubResponseDto`](common.md#model-HubResponseDto) | yes | |
| `advanced_cost_components` | list of [`AdvancedCostComponentResponseDto`](#model-AdvancedCostComponentResponseDto) | yes | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `stages` | list of `UUID` | yes | |
## LocalTime { #model-LocalTime }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `hour` | `int`, optional | no | |
| `minute` | `int`, optional | no | |
| `second` | `int`, optional | no | |
| `nano` | `int`, optional | no | |
## MustBeInstalled { #model-MustBeInstalled }
| Member | Value |
| --- | --- |
| `MustBeInstalled.can_be_installed` | `'canBeInstalled'` |
| `MustBeInstalled.must_be_installed` | `'mustBeInstalled'` |
| `MustBeInstalled.must_be_installed_in_at_least_one_hub` | `'mustBeInstalledInAtLeastOneHub'` |
## MustBeInstalledInHubs { #model-MustBeInstalledInHubs }
| Member | Value |
| --- | --- |
| `MustBeInstalledInHubs.can_be_installed` | `'canBeInstalled'` |
| `MustBeInstalledInHubs.must_be_installed` | `'mustBeInstalled'` |
| `MustBeInstalledInHubs.must_be_installed_in_at_least_one_hub` | `'mustBeInstalledInAtLeastOneHub'` |
## MustBeInstalledInHubs1 { #model-MustBeInstalledInHubs1 }
| Member | Value |
| --- | --- |
| `MustBeInstalledInHubs1.can_be_installed` | `'canBeInstalled'` |
| `MustBeInstalledInHubs1.must_be_installed` | `'mustBeInstalled'` |
| `MustBeInstalledInHubs1.must_be_installed_in_at_least_one_hub` | `'mustBeInstalledInAtLeastOneHub'` |
| `MustBeInstalledInHubs1.none_type_none` | `None` |
## MustBeInstalledInHubs2 { #model-MustBeInstalledInHubs2 }
| Member | Value |
| --- | --- |
| `MustBeInstalledInHubs2.can_be_installed` | `'canBeInstalled'` |
| `MustBeInstalledInHubs2.must_be_installed` | `'mustBeInstalled'` |
| `MustBeInstalledInHubs2.must_be_installed_in_at_least_one_hub` | `'mustBeInstalledInAtLeastOneHub'` |
## NetworkLinkListResponseDto { #model-NetworkLinkListResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `network_links` | list of [`NetworkLinkResponseDto`](#model-NetworkLinkResponseDto), optional | no | |
## NetworkLinkRequestDtoV2 { #model-NetworkLinkRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `installed_capacity` | `float`, optional | no | (≥ 0.0) |
| `maximum_capacity` | `float`, optional | no | (≥ 0.0) |
| `name` | `str` | yes | |
| `length` | `float` | yes | (≥ 0.0) |
| `technology_capacity` | [`TechnologyCapacity`](#model-TechnologyCapacity) | yes | |
| `uni_directional_flow` | `bool` | yes | |
| `must_be_installed` | `bool` | yes | |
| `node1_guid` | `str` | yes | |
| `node2_guid` | `str` | yes | |
| `network_technology_guid` | `str` | yes | |
| `cost_components` | list of [`AdvancedCostComponentRequestDto`](#model-AdvancedCostComponentRequestDto), optional | no | |
| `minimum_capacity` | `float`, optional | no | (≥ 0.0) |
| `network_loss` | `float` | yes | (≥ 0.0) |
| `network_loss_profile_id` | `int`, optional | no | |
## NetworkLinkResponseDto { #model-NetworkLinkResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `network_link_guid` | `str`, optional | no | |
| `length` | `float`, optional | no | |
| `technology_capacity` | [`TechnologyCapacity2`](#model-TechnologyCapacity2), optional | no | |
| `installed_capacity` | `float`, optional | no | |
| `uni_directional_flow` | `bool`, optional | no | |
| `must_be_installed` | `bool`, optional | no | |
| `node1_guid` | `str`, optional | no | |
| `node1_name` | `str`, optional | no | |
| `node2_guid` | `str`, optional | no | |
| `node2_name` | `str`, optional | no | |
| `network_technology_name` | `str`, optional | no | |
| `network_technology_guid` | `str`, optional | no | |
| `cost_components` | list of [`AdvancedCostComponentResponseDto`](#model-AdvancedCostComponentResponseDto), optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
## NetworkLinkResponseDtoV2 { #model-NetworkLinkResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `installed_capacity` | `float`, optional | no | (≥ 0.0) |
| `maximum_capacity` | `float`, optional | no | (≥ 0.0) |
| `network_link_guid` | `str`, optional | no | |
| `name` | `str` | yes | |
| `length` | `float` | yes | |
| `technology_capacity` | [`TechnologyCapacity`](#model-TechnologyCapacity) | yes | |
| `uni_directional_flow` | `bool` | yes | |
| `must_be_installed` | `bool` | yes | |
| `node1_guid` | `str` | yes | |
| `node1_name` | `str` | yes | |
| `node2_guid` | `str` | yes | |
| `node2_name` | `str` | yes | |
| `network_technology_name` | `str` | yes | |
| `network_technology_guid` | `str` | yes | |
| `cost_components` | list of [`AdvancedCostComponentResponseDto`](#model-AdvancedCostComponentResponseDto) | yes | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `minimum_capacity` | `float`, optional | no | |
| `network_loss` | `float` | yes | |
| `network_loss_profile_id` | `int`, optional | no | |
## NetworkTechnologyListResponseDto { #model-NetworkTechnologyListResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `network_technologies` | list of [`NetworkTechnologyResponseDto`](#model-NetworkTechnologyResponseDto), optional | no | |
## NetworkTechnologyListResponseDtoV2 { #model-NetworkTechnologyListResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `network_technologies` | list of [`NetworkTechnologyResponseDtoV2`](#model-NetworkTechnologyResponseDtoV2), optional | no | |
## NetworkTechnologyRequestDtoV2 { #model-NetworkTechnologyRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `fixed_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `variable_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `fixed_om_cost_chf` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost_percent` | `float`, optional | no | |
| `variable_om_cost_year` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost_ch_fk_wh` | `float`, optional | no | (≥ 0.0) |
| `fixed_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `fixed_replacement_cost` | `float`, optional | no | |
| `variable_replacement_cost_percent` | `float`, optional | no | |
| `variable_replacement_cost_chf` | `float`, optional | no | |
| `fixed_salvage_value` | `float`, optional | no | |
| `variable_salvage_value_percent` | `float`, optional | no | |
| `variable_salvage_value_chf` | `float`, optional | no | |
| `network_technology_name` | `str` | yes | (max length 100, min length 0) |
| `lifetime` | `int` | yes | |
| `energy_carrier_guid` | `str` | yes | |
| `cost_components` | list of [`AdvancedCostComponentRequestDto`](#model-AdvancedCostComponentRequestDto), optional | no | |
| `suggested` | `bool`, optional | no | |
| `technology_category` | `str`, optional | no | |
| `network_size` | `str`, optional | no | |
| `notes` | `str`, optional | no | |
| `source` | `str`, optional | no | |
| `comes_from_db` | `str`, optional | no | |
| `exchange_currency` | `str`, optional | no | (max length 3, min length 0) |
| `exchange_rate` | `float`, optional | no | (≥ 0.0) |
| `stages` | list of `UUID` | yes | |
## NetworkTechnologyResponseDto { #model-NetworkTechnologyResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `network_technology_guid` | `str`, optional | no | |
| `network_technology_name` | `str`, optional | no | |
| `network_loss` | `float`, optional | no | |
| `fixed_investment_cost` | `float`, optional | no | |
| `variable_investment_cost` | `float`, optional | no | |
| `variable_om_cost_year` | `float`, optional | no | |
| `fixed_om_cost_chf` | `float`, optional | no | |
| `fixed_om_cost_percent` | `float`, optional | no | |
| `lifetime` | `float`, optional | no | |
| `maximum_capacity` | `float`, optional | no | |
| `minimum_capacity` | `float`, optional | no | |
| `variable_embodied_co2` | `float`, optional | no | |
| `fixed_embodied_co2` | `float`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `energy_carrier` | [`EnergyCarrierResponseDto`](common.md#model-EnergyCarrierResponseDto), optional | no | |
| `category` | `str`, optional | no | |
| `technology_category` | `str`, optional | no | |
| `notes` | `str`, optional | no | |
| `source` | `str`, optional | no | |
| `network_size` | `str`, optional | no | |
| `comes_from_db` | `str`, optional | no | |
| `cost_components` | list of [`AdvancedCostComponentResponseDto`](#model-AdvancedCostComponentResponseDto), optional | no | |
## NetworkTechnologyResponseDtoV2 { #model-NetworkTechnologyResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `fixed_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `variable_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `fixed_om_cost_chf` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost_percent` | `float`, optional | no | |
| `variable_om_cost_year` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost_ch_fk_wh` | `float`, optional | no | (≥ 0.0) |
| `fixed_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `fixed_replacement_cost` | `float`, optional | no | |
| `variable_replacement_cost_percent` | `float` | yes | |
| `variable_replacement_cost_chf` | `float`, optional | no | |
| `fixed_salvage_value` | `float`, optional | no | |
| `variable_salvage_value_percent` | `float` | yes | |
| `variable_salvage_value_chf` | `float`, optional | no | |
| `network_technology_guid` | `str`, optional | no | |
| `network_technology_name` | `str` | yes | |
| `exchange_currency` | `str` | yes | |
| `exchange_rate` | `float` | yes | |
| `lifetime` | `int` | yes | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `energy_carrier` | [`EnergyCarrierResponseDto`](common.md#model-EnergyCarrierResponseDto) | yes | |
| `category` | `str` | yes | |
| `technology_category` | `str`, optional | no | |
| `notes` | `str`, optional | no | |
| `source` | `str`, optional | no | |
| `network_size` | `str`, optional | no | |
| `comes_from_db` | `str`, optional | no | |
| `cost_components` | list of [`AdvancedCostComponentResponseDto`](#model-AdvancedCostComponentResponseDto) | yes | |
| `stages` | list of `UUID` | yes | |
## SeasonalOperation { #model-SeasonalOperation }
| Member | Value |
| --- | --- |
| `SeasonalOperation.all_seasons` | `'ALL_SEASONS'` |
| `SeasonalOperation.winter` | `'WINTER'` |
| `SeasonalOperation.non_winter` | `'NON_WINTER'` |
| `SeasonalOperation.summer` | `'SUMMER'` |
| `SeasonalOperation.non_summer` | `'NON_SUMMER'` |
## StorageTechnologyDetailResponseDtoV2 { #model-StorageTechnologyDetailResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `variable_om_cost_percent` | `float`, optional | no | |
| `variable_om_energy_flow_cost` | `float`, optional | no | (≥ 0.0) |
| `capacity` | `float`, optional | no | (≥ 0.0) |
| `maximum_capacity` | `float`, optional | no | (≥ 0.0) |
| `minimum_capacity` | `float`, optional | no | (≥ 0.0) |
| `fixed_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `fixed_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost` | `float`, optional | no | (≥ 0.0) |
| `maximum_charging_rate` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `maximum_discharging_rate` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `variable_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `fixed_replacement_cost` | `float`, optional | no | |
| `variable_replacement_cost_percent` | `float` | yes | |
| `variable_replacement_cost_chf` | `float`, optional | no | |
| `fixed_salvage_value` | `float`, optional | no | |
| `variable_salvage_value_percent` | `float` | yes | |
| `variable_salvage_value_chf` | `float`, optional | no | |
| `must_be_installed` | `str` | yes | |
| `storage_technology_guid` | `str`, optional | no | |
| `storage_name` | `str` | yes | |
| `exchange_currency` | `str` | yes | |
| `exchange_rate` | `float` | yes | |
| `variable_investment_cost` | `float`, optional | no | |
| `fixed_om_cost_chf` | `float`, optional | no | |
| `lifetime` | `int` | yes | |
| `standby_loss` | `float`, optional | no | |
| `stand_by_loss_profile_id` | `int`, optional | no | |
| `minimum_soc` | `float`, optional | no | |
| `storage_charging_efficiency` | `float` | yes | |
| `storage_discharging_efficiency` | `float` | yes | |
| `technology_capacity` | `str` | yes | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `storage_carrier` | [`EnergyCarrierResponseDto`](common.md#model-EnergyCarrierResponseDto) | yes | |
| `hubs` | list of [`HubResponseDto`](common.md#model-HubResponseDto) | yes | |
| `category` | `str` | yes | |
| `technology_category` | `str`, optional | no | |
| `mutually_exclusive_group` | `str`, optional | no | |
| `notes` | `str`, optional | no | |
| `source` | `str`, optional | no | |
| `technology_optional` | `bool`, optional | no | |
| `cost_components` | list of [`AdvancedCostComponentResponseDto`](#model-AdvancedCostComponentResponseDto) | yes | |
| `comes_from_db` | `str`, optional | no | |
| `stages` | list of `UUID` | yes | |
| `ev_plug_in_time` | [`LocalTime`](#model-LocalTime), optional | no | |
| `ev_plug_out_time` | [`LocalTime`](#model-LocalTime), optional | no | |
| `ev_plug_in_duration_hours` | `float`, optional | no | |
| `driving_distance_kms` | `float`, optional | no | |
| `ev_soc_start_percent` | `float`, optional | no | |
| `ev_battery_size_k_wh` | `float`, optional | no | |
| `maximum_soc_percent` | `float`, optional | no | |
| `ev_average_k_wh_per_km` | `float`, optional | no | |
| `ev_plug_in_power_kw` | `float`, optional | no | |
| `is_ev_battery` | `bool`, optional | no | |
| `type_of_charging` | [`TypeOfCharging`](#model-TypeOfCharging), optional | no | |
## StorageTechnologyListResponseDto { #model-StorageTechnologyListResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `storage_technologies` | list of [`StorageTechnologyResponseDto`](#model-StorageTechnologyResponseDto), optional | no | |
## StorageTechnologyListResponseDtoV2 { #model-StorageTechnologyListResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `storage_technologies` | list of [`StorageTechnologyResponseDtoV2`](#model-StorageTechnologyResponseDtoV2), optional | no | |
## StorageTechnologyRequestDtoV2 { #model-StorageTechnologyRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `variable_om_cost_percent` | `float`, optional | no | |
| `variable_om_energy_flow_cost` | `float`, optional | no | (≥ 0.0) |
| `capacity` | `float`, optional | no | (≥ 0.0) |
| `maximum_capacity` | `float`, optional | no | (≥ 0.0) |
| `minimum_capacity` | `float`, optional | no | (≥ 0.0) |
| `fixed_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `fixed_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `variable_om_cost` | `float`, optional | no | (≥ 0.0) |
| `maximum_charging_rate` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `maximum_discharging_rate` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `variable_embodied_co2` | `float`, optional | no | (≥ 0.0) |
| `fixed_replacement_cost` | `float`, optional | no | |
| `variable_replacement_cost_percent` | `float`, optional | no | |
| `variable_replacement_cost_chf` | `float`, optional | no | |
| `fixed_salvage_value` | `float`, optional | no | |
| `variable_salvage_value_percent` | `float`, optional | no | |
| `variable_salvage_value_chf` | `float`, optional | no | |
| `must_be_installed` | `str` | yes | |
| `storage_name` | `str` | yes | (max length 100, min length 0) |
| `variable_investment_cost` | `float`, optional | no | (≥ 0.0) |
| `fixed_om_cost_chf` | `float`, optional | no | (≥ 0.0) |
| `lifetime` | `int` | yes | |
| `standby_loss` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `stand_by_loss_profile_id` | `int`, optional | no | |
| `minimum_soc` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `hub_guids` | list of `str` | yes | |
| `energy_carrier_guid` | `str` | yes | |
| `storage_charging_efficiency` | `float` | yes | (≥ 0.0, ≤ 100.0) |
| `storage_discharging_efficiency` | `float` | yes | (≥ 0.0, ≤ 100.0) |
| `technology_capacity` | `str` | yes | |
| `cost_components` | list of [`AdvancedCostComponentRequestDto`](#model-AdvancedCostComponentRequestDto), optional | no | |
| `suggested` | `bool`, optional | no | |
| `technology_category` | `str`, optional | no | |
| `notes` | `str`, optional | no | |
| `source` | `str`, optional | no | |
| `comes_from_db` | `str`, optional | no | |
| `exchange_currency` | `str`, optional | no | (max length 3, min length 0) |
| `exchange_rate` | `float`, optional | no | (≥ 0.0) |
| `stages` | list of `UUID` | yes | |
| `ev_plug_in_time` | [`LocalTime`](#model-LocalTime), optional | no | |
| `ev_plug_out_time` | [`LocalTime`](#model-LocalTime), optional | no | |
| `ev_plug_in_duration_hours` | `float`, optional | no | |
| `driving_distance_kms` | `float`, optional | no | |
| `ev_soc_start_percent` | `float`, optional | no | |
| `ev_battery_size_k_wh` | `float`, optional | no | |
| `maximum_soc_percent` | `float`, optional | no | |
| `ev_average_k_wh_per_km` | `float`, optional | no | |
| `ev_plug_in_power_kw` | `float`, optional | no | |
| `is_ev_battery` | `bool`, optional | no | |
| `type_of_charging` | [`TypeOfCharging`](#model-TypeOfCharging), optional | no | |
## StorageTechnologyResponseDto { #model-StorageTechnologyResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `storage_technology_guid` | `str`, optional | no | |
| `storage_name` | `str`, optional | no | |
| `lifetime` | `float`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `energy_carrier` | [`EnergyCarrierResponseDto`](common.md#model-EnergyCarrierResponseDto), optional | no | |
| `hubs` | list of [`HubResponseDto`](common.md#model-HubResponseDto), optional | no | |
## StorageTechnologyResponseDtoV2 { #model-StorageTechnologyResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `storage_technology_guid` | `str`, optional | no | |
| `storage_name` | `str`, optional | no | |
| `lifetime` | `int`, optional | no | |
| `created` | `AwareDatetime`, optional | no | |
| `updated` | `AwareDatetime`, optional | no | |
| `energy_carrier` | [`EnergyCarrierResponseDto`](common.md#model-EnergyCarrierResponseDto), optional | no | |
| `hubs` | list of [`HubResponseDto`](common.md#model-HubResponseDto), optional | no | |
| `stages` | list of `UUID`, optional | no | |
| `stand_by_loss_profile_id` | `int`, optional | no | |
## TechnologyCapacity { #model-TechnologyCapacity }
| Member | Value |
| --- | --- |
| `TechnologyCapacity.optimize` | `'optimize'` |
| `TechnologyCapacity.specify` | `'specify'` |
## TechnologyCapacity2 { #model-TechnologyCapacity2 }
| Member | Value |
| --- | --- |
| `TechnologyCapacity2.optimize` | `'optimize'` |
| `TechnologyCapacity2.specify` | `'specify'` |
| `TechnologyCapacity2.none_type_none` | `None` |
## TechnologyModeRequestDtoV2 { #model-TechnologyModeRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `capacity` | `float`, optional | no | (≥ 0.0) |
| `minimum_annual_output` | `float`, optional | no | (≥ 0.0) |
| `maximum_annual_output` | `float`, optional | no | (≥ 0.0) |
| `curtailment_limitation` | `float`, optional | no | (≥ 0.0) |
| `peak_power` | `float`, optional | no | |
| `min_part_load` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `minimum_up_time` | `int`, optional | no | (≥ 1, ≤ 8760) |
| `minimum_down_time` | `int`, optional | no | (≥ 1, ≤ 8760) |
| `primary` | `bool`, optional | no | |
| `seasonal_operation` | [`SeasonalOperation`](#model-SeasonalOperation) | yes | |
| `allowed_operation_profile_id` | `int`, optional | no | |
| `energy_carriers` | list of [`ConversionCarrierRequestDtoV2`](#model-ConversionCarrierRequestDtoV2) | yes | |
| `maximum_capacity` | `float`, optional | no | (≥ 0.0) |
| `minimum_capacity` | `float`, optional | no | (≥ 0.0) |
| `simultaneous_operation` | `bool`, optional | no | |
## TechnologyModeResponseDtoV2 { #model-TechnologyModeResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `capacity` | `float`, optional | no | (≥ 0.0) |
| `minimum_annual_output` | `float`, optional | no | (≥ 0.0) |
| `maximum_annual_output` | `float`, optional | no | (≥ 0.0) |
| `curtailment_limitation` | `float`, optional | no | (≥ 0.0) |
| `peak_power` | `float`, optional | no | |
| `min_part_load` | `float`, optional | no | (≥ 0.0, ≤ 100.0) |
| `minimum_up_time` | `int`, optional | no | (≥ 1, ≤ 8760) |
| `minimum_down_time` | `int`, optional | no | (≥ 1, ≤ 8760) |
| `technology_mode_guid` | `str`, optional | no | |
| `input_energy_carriers` | list of [`EnergyCarrierResponseDtoV2`](#model-EnergyCarrierResponseDtoV2), optional | no | |
| `output_energy_carriers` | list of [`EnergyCarrierResponseDtoV2`](#model-EnergyCarrierResponseDtoV2), optional | no | |
| `seasonal_operation_name` | `str`, optional | no | |
| `seasonal_operation_value` | `str`, optional | no | |
| `allowed_operation_profile_id` | `int`, optional | no | |
| `primary` | `bool`, optional | no | |
| `maximum_capacity` | `float`, optional | no | |
| `minimum_capacity` | `float`, optional | no | |
| `simultaneous_operation` | `bool`, optional | no | |
## TechnologyPackageListResponseDto { #model-TechnologyPackageListResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_packages` | list of [`TechnologyPackageResponseDto`](#model-TechnologyPackageResponseDto), optional | no | |
## TechnologyPackageListResponseDtoV2 { #model-TechnologyPackageListResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `technology_packages` | list of [`TechnologyPackageResponseDtoV2`](#model-TechnologyPackageResponseDtoV2), optional | no | |
## TechnologyPackageRequestDtoV2 { #model-TechnologyPackageRequestDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `maximum_conversions` | `int`, optional | no | (≥ 1) |
| `maximum_storages` | `int`, optional | no | (≥ 1) |
| `must_be_installed` | [`MustBeInstalled`](#model-MustBeInstalled) | yes | |
| `mutually_exclusive_group` | `str`, optional | no | |
| `name` | `str` | yes | |
| `conversion_technologies` | list of `str` | yes | |
| `storage_technologies` | list of `str` | yes | |
## TechnologyPackageResponseDto { #model-TechnologyPackageResponseDto }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str`, optional | no | |
| `guid` | `str`, optional | no | |
| `conversion_technologies` | list of `str`, optional | no | |
| `storage_technologies` | list of `str`, optional | no | |
| `db_organization` | `str`, optional | no | |
## TechnologyPackageResponseDtoV2 { #model-TechnologyPackageResponseDtoV2 }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `maximum_conversions` | `int`, optional | no | (≥ 1) |
| `maximum_storages` | `int`, optional | no | (≥ 1) |
| `must_be_installed` | [`MustBeInstalled`](#model-MustBeInstalled) | yes | |
| `mutually_exclusive_group` | `str`, optional | no | |
| `name` | `str` | yes | |
| `guid` | `str`, optional | no | |
| `conversion_technologies` | list of [`GuidNameDto`](#model-GuidNameDto) | yes | |
| `storage_technologies` | list of [`GuidNameDto`](#model-GuidNameDto) | yes | |
## Type { #model-Type }
| Member | Value |
| --- | --- |
| `Type.input` | `'INPUT'` |
| `Type.output` | `'OUTPUT'` |
## TypeOfCharging { #model-TypeOfCharging }
| Member | Value |
| --- | --- |
| `TypeOfCharging.smart` | `'Smart'` |
| `TypeOfCharging.dump` | `'Dump'` |
| `TypeOfCharging.v2_g` | `'V2G'` |
| `TypeOfCharging.none` | `'None'` |
| `TypeOfCharging.none_type_none` | `None` |
---
# Solver job and user models
## AwsRegion { #model-AwsRegion }
| Member | Value |
| --- | --- |
| `AwsRegion.eu_north_1` | `'eu-north-1'` |
| `AwsRegion.eu_central_2` | `'eu-central-2'` |
## BillingCycle { #model-BillingCycle }
| Member | Value |
| --- | --- |
| `BillingCycle.monthly` | `'MONTHLY'` |
| `BillingCycle.quarterly` | `'QUARTERLY'` |
| `BillingCycle.annually` | `'ANNUALLY'` |
## GetOrganizationExt { #model-GetOrganizationExt }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `gis_on` | `bool`, optional | no | |
| `sep_on` | `bool`, optional | no | |
| `sep_buildings_limit` | `int`, optional | no | |
| `execution_slots` | `int`, optional | no | |
| `variable_billing` | `bool`, optional | no | |
| `max_executions` | `int`, optional | no | |
| `max_simultaneous_executions` | `int`, optional | no | |
| `max_execution_time` | `int`, optional | no | |
| `max_execution_time_week` | `int`, optional | no | |
| `number_of_executions_left` | `int`, optional | no | |
| `execution_time_week_left` | `int`, optional | no | |
| `id` | `UUID4` | yes | |
| `created` | `AwareDatetime` | yes | |
| `updated` | `AwareDatetime` | yes | |
| `sep_buildings_consumed` | `int`, optional | no | |
## GetPlanExt { #model-GetPlanExt }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `intra_hub_network` | `bool`, optional | no | |
| `advanced_cost_components` | `bool`, optional | no | |
| `unit_commitment` | `bool`, optional | no | |
| `max_energy_carriers_per_hub` | `int`, optional | no | |
| `max_energy_demands` | `int`, optional | no | |
| `max_hubs` | `int`, optional | no | |
| `max_stages` | `int`, optional | no | (≤ 8) |
| `max_solar_resources` | `int`, optional | no | |
| `max_other_resources` | `int`, optional | no | |
| `max_imports` | `int`, optional | no | |
| `max_exports` | `int`, optional | no | |
| `max_conversion_techs` | `int`, optional | no | |
| `max_conversion_modes` | `int`, optional | no | |
| `max_storage_techs` | `int`, optional | no | |
| `max_network_techs` | `int`, optional | no | |
| `max_network_links` | `int`, optional | no | |
| `max_executions` | `int`, optional | no | |
| `max_simultaneous_executions` | `int`, optional | no | |
| `max_execution_time` | `int`, optional | no | |
| `max_execution_time_week` | `int`, optional | no | |
| `max_execution_history` | `int`, optional | no | (≤ 500) |
| `max_pareto_points` | `int`, optional | no | (≤ 9) |
| `full_temporal_resolution` | `bool`, optional | no | |
| `max_projects` | `int`, optional | no | |
| `max_analyses` | `int`, optional | no | |
| `max_scenarios` | `int`, optional | no | |
| `share_project` | `bool`, optional | no | |
| `organization_db` | `bool`, optional | no | |
| `scenario_variants` | `bool`, optional | no | |
| `max_scenario_variants` | `int`, optional | no | |
| `name` | `str` | yes | |
| `id` | `UUID4` | yes | |
| `created` | `AwareDatetime` | yes | |
| `updated` | `AwareDatetime`, optional | yes | |
| `sagemaker_on` | `bool` | yes | |
| `sagemaker_regions` | list of [`AwsRegion`](#model-AwsRegion) | yes | |
## GetSolverJobExt { #model-GetSolverJobExt }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `status` | [`JobStatus`](#model-JobStatus), optional | no | |
| `status_msg` | `str`, optional | no | |
| `batch_id` | `str`, optional | no | |
| `points_completed` | `int`, optional | no | |
| `started` | `AwareDatetime`, optional | no | |
| `terminated` | `AwareDatetime`, optional | no | |
| `infeasibility_info` | `str`, optional | no | |
| `name` | `str` | yes | |
| `objective1` | [`ObjectiveFunction`](#model-ObjectiveFunction) | yes | |
| `objective2` | [`ObjectiveFunction`](#model-ObjectiveFunction), optional | no | |
| `scenario_guid` | `str`, optional | no | |
| `scenario_name` | `str`, optional | no | |
| `temporal_resolution` | [`TemporalResolution`](#model-TemporalResolution) | yes | |
| `points` | `int` | yes | (≥ 1, ≤ 10) |
| `time_limit` | `int` | yes | (≥ 1, ≤ 18720) |
| `mip_gap` | `float` | yes | (≥ 0.1, < 100.0) |
| `account_guid` | `str` | yes | |
| `organization_id` | `UUID4` | yes | |
| `subscription_id` | `UUID4` | yes | |
| `id` | `UUID4` | yes | |
| `created` | `AwareDatetime` | yes | |
| `input_file` | [`InputFile`](#model-InputFile), optional | no | |
| `output_file` | [`OutputFile`](#model-OutputFile), optional | no | |
## GetSubscriptionExt { #model-GetSubscriptionExt }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `organization_id` | `UUID4` | yes | |
| `start_date` | `date` | yes | |
| `end_date` | `date`, optional | no | |
| `billing_cycle` | [`BillingCycle`](#model-BillingCycle), optional | no | |
| `next_billing_date` | `date`, optional | no | |
| `variable_billing` | `bool`, optional | no | |
| `execution_priority` | `int`, optional | no | |
| `max_simultaneous_executions` | `int`, optional | no | |
| `max_executions_per_cycle` | `int`, optional | no | |
| `max_execution_time_per_cycle` | `int`, optional | no | |
| `max_executions_per_week` | `int`, optional | no | |
| `max_execution_time_per_week` | `int`, optional | no | |
| `user_max_executions_per_cycle` | `int`, optional | no | |
| `user_max_execution_time_per_cycle` | `int`, optional | no | |
| `user_max_executions_per_week` | `int`, optional | no | |
| `user_max_execution_time_per_week` | `int`, optional | no | |
| `id` | `UUID4` | yes | |
| `created` | `AwareDatetime` | yes | |
| `updated` | `AwareDatetime` | yes | |
## GetUsageExt { #model-GetUsageExt }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `subscription` | [`SubscriptionUsage`](#model-SubscriptionUsage) | yes | |
| `user` | [`UserUsage`](#model-UserUsage) | yes | |
## GetUserProfileExt { #model-GetUserProfileExt }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `account` | [`User`](#model-User) | yes | |
| `preferences` | [`Preferences`](#model-Preferences) | yes | |
| `plan_limitation` | [`GetPlanExt`](#model-GetPlanExt) | yes | |
| `organization` | [`GetOrganizationExt`](#model-GetOrganizationExt) | yes | |
| `subscription` | [`GetSubscriptionExt`](#model-GetSubscriptionExt) | yes | |
| `profile_picture` | `str`, optional | no | |
| `organization_picture` | `str`, optional | no | |
## InputFile { #model-InputFile }
Root model wrapping `AnyUrl`.
## JobStatus { #model-JobStatus }
| Member | Value |
| --- | --- |
| `JobStatus.validating` | `'VALIDATING'` |
| `JobStatus.valid` | `'VALID'` |
| `JobStatus.pending` | `'PENDING'` |
| `JobStatus.queued` | `'QUEUED'` |
| `JobStatus.running` | `'RUNNING'` |
| `JobStatus.done` | `'DONE'` |
| `JobStatus.stopped` | `'STOPPED'` |
| `JobStatus.failed` | `'FAILED'` |
| `JobStatus.invalid` | `'INVALID'` |
## Language { #model-Language }
| Member | Value |
| --- | --- |
| `Language.english` | `'English'` |
| `Language.german` | `'German'` |
## ObjectiveFunction { #model-ObjectiveFunction }
| Member | Value |
| --- | --- |
| `ObjectiveFunction.min_life_cycle_cost` | `'MIN_LIFE_CYCLE_COST'` |
| `ObjectiveFunction.min_annualized_cost` | `'MIN_ANNUALIZED_COST'` |
| `ObjectiveFunction.min_co2_emissions` | `'MIN_CO2_EMISSIONS'` |
| `ObjectiveFunction.min_investment` | `'MIN_INVESTMENT'` |
| `ObjectiveFunction.min_om` | `'MIN_OM'` |
| `ObjectiveFunction.min_fuel_imports` | `'MIN_FUEL_IMPORTS'` |
| `ObjectiveFunction.min_replacement` | `'MIN_REPLACEMENT'` |
| `ObjectiveFunction.max_exports` | `'MAX_EXPORTS'` |
| `ObjectiveFunction.max_salvage` | `'MAX_SALVAGE'` |
## OutputFile { #model-OutputFile }
Root model wrapping `AnyUrl`.
## PostSolverJobExt { #model-PostSolverJobExt }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `str` | yes | |
| `objective1` | [`ObjectiveFunction`](#model-ObjectiveFunction) | yes | |
| `objective2` | [`ObjectiveFunction`](#model-ObjectiveFunction), optional | no | |
| `scenario_guid` | `str`, optional | no | |
| `scenario_name` | `str`, optional | no | |
| `temporal_resolution` | [`TemporalResolution`](#model-TemporalResolution) | yes | |
| `points` | `int` | yes | (≥ 1, ≤ 10) |
| `time_limit` | `int` | yes | (≥ 1, ≤ 18720) |
| `mip_gap` | `float` | yes | (≥ 0.1, < 100.0) |
| `input_file_id` | `UUID4`, optional | no | |
## Preferences { #model-Preferences }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `exchange_currency_default` | `str` | yes | |
| `unit_system_default` | `str` | yes | |
| `language_default` | [`Language`](#model-Language) | yes | |
| `interest_rate_default` | `float`, optional | no | |
| `first_name` | `str`, optional | no | |
| `last_name` | `str`, optional | no | |
| `created` | `AwareDatetime` | yes | |
| `updated` | `AwareDatetime` | yes | |
## SolverJob { #model-SolverJob }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `status` | [`JobStatus`](#model-JobStatus), optional | no | |
| `status_msg` | `str`, optional | no | |
| `batch_id` | `str`, optional | no | |
| `points_completed` | `int`, optional | no | |
| `started` | `AwareDatetime`, optional | no | |
| `terminated` | `AwareDatetime`, optional | no | |
| `infeasibility_info` | `str`, optional | no | |
| `name` | `str` | yes | |
| `objective1` | [`ObjectiveFunction`](#model-ObjectiveFunction) | yes | |
| `objective2` | [`ObjectiveFunction`](#model-ObjectiveFunction), optional | no | |
| `scenario_guid` | `str`, optional | no | |
| `scenario_name` | `str`, optional | no | |
| `temporal_resolution` | [`TemporalResolution`](#model-TemporalResolution) | yes | |
| `points` | `int` | yes | (≥ 1, ≤ 10) |
| `time_limit` | `int` | yes | (≥ 1, ≤ 18720) |
| `mip_gap` | `float` | yes | (≥ 0.1, < 100.0) |
| `account_guid` | `str` | yes | |
| `organization_id` | `UUID4` | yes | |
| `subscription_id` | `UUID4` | yes | |
| `id` | `UUID4` | yes | |
| `created` | `AwareDatetime` | yes | |
## SubscriptionUsage { #model-SubscriptionUsage }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `total_count_overage` | `int` | yes | |
| `total_minutes_overage` | `int` | yes | |
| `weekly_count_overage` | `int` | yes | |
| `weekly_minutes_overage` | `int` | yes | |
| `total_count` | `int` | yes | |
| `total_minutes` | `int` | yes | |
| `current_week_count` | `int` | yes | |
| `current_week_minutes` | `int` | yes | |
## TemporalResolution { #model-TemporalResolution }
| Member | Value |
| --- | --- |
| `TemporalResolution.low` | `'LOW'` |
| `TemporalResolution.medium` | `'MEDIUM'` |
| `TemporalResolution.high` | `'HIGH'` |
| `TemporalResolution.full` | `'FULL'` |
## User { #model-User }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `email` | `str` | yes | |
| `plan_limitation_id` | `UUID4` | yes | |
| `organization_id` | `UUID4` | yes | |
| `subscription_id` | `UUID4` | yes | |
| `plan_expiry` | `date`, optional | no | |
| `number_of_executions_left` | `int`, optional | no | |
| `execution_time_week_left` | `int`, optional | no | |
| `mfa` | `bool`, optional | no | |
| `deactivated` | `bool`, optional | no | |
| `superuser` | `bool`, optional | no | |
| `admin` | `bool`, optional | no | |
| `show_maintenance_info` | `bool`, optional | no | |
| `show_gtc` | `bool`, optional | no | |
| `show_user_guide` | `bool`, optional | no | |
| `account_guid` | `str` | yes | |
| `created` | `AwareDatetime` | yes | |
| `updated` | `AwareDatetime` | yes | |
## UserUsage { #model-UserUsage }
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `total_count` | `int` | yes | |
| `total_minutes` | `int` | yes | |
| `current_week_count` | `int` | yes | |
| `current_week_minutes` | `int` | yes | |
| `history_count` | `int`, optional | no | |
---
# Use with AI
Sympheny is built to be driven by AI assistants and coding agents. This section covers the ways to connect Sympheny to an AI tool.
## MCP server
The Sympheny MCP server lets an AI assistant call the Sympheny API directly — creating scenarios, running solver jobs, and reading results — over a standard [Model Context Protocol](https://modelcontextprotocol.io/) connection.
!!! info "Coming soon"
The MCP server has not been released yet. See [MCP server setup](mcp.md) for the configuration you will use once it ships.
Until then, drive Sympheny programmatically with the [REST API](../api/index.md) or the [Python SDK](../sdk/index.md) — both are agent-friendly and fully documented on this site.
## Machine-readable docs
This site publishes two machine-readable indexes, served from the site root and
regenerated on every build:
- [`llms.txt`](https://docs.sympheny.com/llms.txt) — a
compact, nav-ordered index of every page with a one-line description.
- [`llms-full.txt`](https://docs.sympheny.com/llms-full.txt) —
the full documentation concatenated in reading order, for tools that want the
whole corpus in a single fetch.
Both follow the [llms.txt](https://llmstxt.org/) convention.
---
# MCP server setup
The Sympheny MCP server exposes the Sympheny API to AI assistants over the
[Model Context Protocol](https://modelcontextprotocol.io/), so a model can create
scenarios, run solver jobs, and read results without you wiring up HTTP calls
yourself. It is a remote server, reachable over streamable HTTP.
!!! warning "Not yet available"
The MCP server has not been released. The configuration below is the shape
you will use once it ships — the server URL is a **placeholder** and will not
connect today. Authentication settings will be added here when the server is
published; the exact scheme is not final yet.
Throughout this page the placeholder endpoint is:
```text
https://mcp.sympheny.com/mcp # placeholder — not live yet
```
## Claude Code
Add the server from the CLI (the `--transport http` flag is required for a remote
server):
```bash
claude mcp add --transport http sympheny https://mcp.sympheny.com/mcp
```
To share the configuration with a team, use `--scope project`, which writes a
checked-in `.mcp.json`:
```json
{
"mcpServers": {
"sympheny": {
"type": "http",
"url": "https://mcp.sympheny.com/mcp"
}
}
}
```
Verify the connection with `claude mcp get sympheny` or the `/mcp` command.
## Claude Desktop
Open **Settings → Connectors → Add custom connector**, enter the server URL, and
click **Add**. This is the recommended path for remote servers — no config file
to edit.
## ChatGPT
Enable **Developer mode**, then open **Settings → Connectors → Create** and enter
the server URL. When calling a model through the API instead, add the server as an
MCP tool:
```json
{
"type": "mcp",
"server_label": "sympheny",
"server_url": "https://mcp.sympheny.com/mcp"
}
```
## Gemini CLI
Add the server to `~/.gemini/settings.json` under `mcpServers`, using `httpUrl`
for the streamable-HTTP transport:
```json
{
"mcpServers": {
"sympheny": {
"httpUrl": "https://mcp.sympheny.com/mcp"
}
}
}
```
---
Not using an MCP client yet? Drive Sympheny with the [REST API](../api/index.md)
or the [Python SDK](../sdk/index.md) today.