# Flex Shape API

The Flex Shape API turns a portfolio of distributed energy assets into a tradable flexibility forecast. Push a price signal, read the optimized load curve that results, construct a bid curve, submit it to the market. Apply volume control when you need to reserve capacity for a different position.This is the reference for trading integrations that want to monetize the flexibility of the vehicles, batteries, inverters, and other assets managed through Enode.

## The Trading Loop

```text {% title="Trading loop" %}
Push price signal → Read flex shape → Adjust volume?
        ↑                  ↑              │
        │                  └── Apply volume control ← Yes
        │                                 │
        └──── Submit bids to market ←──── No
```

Every cycle of your trading integration moves through this loop:

1. **Push a price signal.** Day-ahead auction results, forecasted imbalance, intra-day updates — whatever signal is driving your optimization.
2. **Read the flex shape.** The aggregated flexible load forecast for the zone, broken into the intervals you're bidding.
3. **Optionally apply volume control.** Reserve or cap specific chunks when you want to commit them elsewhere or hold them back.
4. **Construct your bid curves** from the shape and submit them.

The shape is always up-to-date with the latest price signal. Push fresh data as often as your upstream signals change.

## Key Concepts

**Zone.** An electricity bidding zone — for example `NO1`, `SE3`, `GER`, `BE`. Flex shapes are computed per zone; one HTTP request returns everything you need for one bidding interval.

**Segmentation dimension.** A named way of splitting a zone's portfolio into **groups** — a grid region, a meter class, a tariff group, or any other split you trade separately. Dimensions and their groups are configured by Enode and agreed upfront with your organization; you assign locations to groups and read the shape per group.

**Price signal.** A timeseries of prices over future time slots, pushed per zone. Each push replaces an explicit window of existing data. The optimizer re-plans immediately against the new prices.

**Flex shape.** The zone's cost-optimal schedule, broken into evenly-sized chunks. Each chunk carries an expected load plus a feasibility envelope (minimum and maximum bound) — the range within which trading can flex load without raising the end customer's tariff cost. This is what you turn into a bid curve.

**Volume control.** Relative setpoints you apply to individual chunks of the shape to bias the optimizer away from its cost-optimal solution. By default the bias operates within the tariff-cost envelope: Enode will not shift load in a way that raises the end customer's tariff cost above what they would have paid without flex trading, and the optimizer continues to satisfy any user-set constraints — charge targets, deadlines, and the like. Use volume control to steer the shape toward positions you've committed to in other markets.

**Status.** Health indicators for a zone — forecast stability, solvency of the execution engine, control reliability. Use as a circuit breaker before submitting bids.

## What to Read Next

- [Setting up locations](https://flex.developers.enode.com/docs/flex-shape/setting-up-locations) — assign your locations to a zone and to segmentation groups so they're included in the right shape.
- [Price signals](https://flex.developers.enode.com/docs/flex-shape/price-signals) — pushing and reading prices.
- [Flex shape](https://flex.developers.enode.com/docs/flex-shape/flex-shape) — reading the forecast, segmented shapes, and realized load.
- [Volume control](https://flex.developers.enode.com/docs/flex-shape/volume-control) — previewing and applying setpoint constraints.
- [Status](https://flex.developers.enode.com/docs/flex-shape/status) — health signals and circuit breakers.


