Gauss is in preview: it is reachable only by sending
X-API-Version: 2026-09-08.gauss explicitly, is never a client’s default, and may still change before it graduates.Breaking changesGET /plans/{id}/quotebecomesPOST /plans/{id}/quote, Calculate a quote: same path, and theGETnow returnsNOT_FOUND. The inputs move into a body so the §14a EnWG modules travel as onegrid_fee_reductionsobject, and so the response of Calculate savings can be posted straight back.usageis an object there as well: send the priced kWh asusage.consumption, not as a plain number. On earlier versions theGETis unchanged.meter_typeis gone. Load shifting needs a smart meter, so the quote prices one whenever the optimization rate that applies is above zero and an analog meter otherwise. That rate isoptimization_ratewhen sent, and the plan’s own rate when it is not, so a plan configured with a rate is quoted on a smart meter by default andoptimization_rate: 0is how you ask for an analog one.- Calculate a quote states the load-shifting discount on a subcomponent of its own (
subgroup: "optimization", a negative amount) instead of folding it intoenergy.energyis now the undiscounted EPEX day-ahead average; the subcomponents still sum tounit_amountand the quote total is unchanged. Clients that readenergyas the billed energy price should read the two rows together, or keep pinning2026-05-27.curie. - Both new endpoints are a
POST, so they need awrite:*token even though they read and change nothing: the required scope follows the HTTP method, not the effect. POST /load-forecastsis removed and returnsNOT_FOUND. Earlier versions keep accepting load forecasts unchanged.- List filters are strict, on every version. An unknown filter field, an operator the field does not accept, a filter sent twice, or more than one of
eq,neandinon one field returns400 BAD_REQUESTnaming the parameter, where it used to be ignored and return the unfiltered list. An emptyinlist matches nothing. Each list endpoint’s reference names its fields and the operators they accept. List assets filtershousehold,external_idandparent_inverterwitheqorin. Smart meter orders filtercustomerandsubscriptionwitheqonly. Enum fields no longer takeis_null, since none of them can be empty, and onstatusit returned nothing for either value.
- Retrieve spot prices adds
GET /spot-prices, independent of a subscription. Select raw realized German EPEX prices withtype=day_ahead(the default), or Nomos’s forecast of that market price withtype=day_ahead_forecast. Both use the familiar price time-series envelope inct/kWh, with no subscription, components, fees, margins, VAT, taxes or levies. The response lists every interval start without a published price undermissing, so an unpublished day or a partial multi-day response is detectable without counting intervals. Partner integrations use their existing read access; forecasts require separate partner enablement, cover yesterday through seven days ahead, and retain the curve frozen before delivery. Realized prices can be requested for any past date through tomorrow. Subscription prices are unchanged. - Calculate a quote takes an optional
optimization_rate, the share of the day-ahead price load shifting is expected to save. Omit it for the plan’s own rate (a plan that configures none is quoted without optimization), or send a number to override it, with0pricing the plan without any optimization. Feed-in plans never earn an optimization row, whatever is sent. Where there is no discount to state theoptimizationsubcomponent is absent rather than zero. grid_fee_reductionsadds14a_module_3(Zeitvariable Netzentgelte) to the two modules already supported. With it thegridsubcomponent is the operator’s low, standard and high windows blended over the share of the year the schedule is in effect, rather than the static rate. It requires14a_module_1, and the blended rate can exceed the static one, in which case the grid line goes up.- The quote response carries
resolution, the period its amounts cover. It ismonthtoday, matching every earlier version. - List households and Retrieve a household expose the households that the
householdfield on subscriptions points at. The list returnscustomerandaddressas ids, the single resource expands both. The address is the delivery address of the household’s metering point, so the two households of a customer with a separately metered heat pump can share it. - Assets describe the devices behind a household’s meter: Add an asset, List assets, Retrieve an asset, Update an asset and Decommission an asset. Each device is one asset of type
inverter,solar,battery,wallboxorheat_pump, with its data in an object named like its type and your own ID inexternal_id, which is unique in your organization and never reused. A solar asset, and a battery behind a hybrid inverter, names that inverter inparent_inverter. A household’s first asset also createshousehold_netandhousehold_residual, the grid connection and the consumption no other asset covers. Unknown fields inside a type data object return400, since a dropped key would change how a device is steered. Unknown top-level fields are ignored, as everywhere in the API. An update changes only the fields sent, andnullclears a field. - Asset snapshots carry the live state of a household’s assets: Send asset snapshots and List the newest asset snapshots. A request takes up to 10,000 snapshots of one household’s assets and is stored as a whole or not at all, with every problem listed in
errorsby its path.power_kwis positive into the asset and negative out of it, each asset type takes only its own fields, and a value more than 1.5 times the asset’s rating, atimestampmore than a minute in the future, an unknown field and two different values for one asset andtimestampall return400. The list returns the newest snapshot of each asset from the last 24 hours and requires ahouseholdorassetfilter, witheqorin. - Subscriptions carry
householdin every response that returns a subscription, and List subscriptions filters by it withfilter[household][eq]=<id>. A household groups the contracts at one metering point: one consumption subscription at a time, plus the feed-in subscriptions on that same meter. It belongs to one customer and stays the same when they cancel and sign up again. A separately metered device, such as a heat pump with its own meter and consumption subscription, is a household of its own, so one customer at one address can have two. Both the field and the filter are additive and land on every version. - Calculate savings estimates what a household saves per year on a plan, broken down into the tariff, the §14a EnWG grid fee reductions, and optimization. Describe the household in the body by its base
household.usageplus one object per asset it owns underassets(ev,heatpump,pv,battery), with an optionalcurrent_tariff(base_feein EUR per year,var_feein EUR per kWh) to compare against instead of the market benchmark. The optimization rate and the §14a EnWG eligibility are derived from that mix and from what the plan sells; they cannot be requested. Postusage,optimization_rateandgrid_fee_reductionsfrom the response back to Calculate a quote unchanged to price the same household and reconcile every figure. - Invoices include exit summaries (
type: "exit_summary"), the closing document of an ended subscription. An exit summary settles corrections to periods already billed: a positivetotalis charged, a negative one paid out. List invoices returns them and filters on them withfilter[type][eq]=exit_summary, and Retrieve an invoice and Retrieve an invoice PDF resolve them. Earlier versions keep leaving them out.
Curie introduces feed-in support, improved smart meter orders, webhook events, the first
PATCH endpoints, and restructures key resources around top-level endpoints. Older versions keep the removed routes and previous response shapes.Breaking changesSeveral routes are replaced by top-level endpoints. The old routes are removed from this version onwards:Scope the new list endpoints to a single subscription with
filter[subscription][eq]=<id>- The Retrieve usage data response
objectfield changes fromconsumptiontousage. - Meter order responses collapse
statusfrom 14 internal partner-specific states to 8 public values and dropupdated_at; see Retrieve a smart meter order for the full list.POST /meter-ordersis unchanged.
- Feed-in plans compensate customers for electricity they feed into the grid, for example from rooftop solar. Plans and subscriptions carry a
typefield (consumptionorfeed_in). POST /subscriptions/{id}/terminateterminates a subscription via a discriminatedreasonfield:ORDINARY,MOVE_OUT, orWITHDRAWAL.PATCH /subscriptions/{id}updates the billing address, payment method, or metadata.PATCH /customers/{id}updates the customer’s name.- Meter orders report lifecycle timestamps and reasons for cancelled or blocked orders.
- Invoices add support for prepayments and voided invoices via new
typevalues (prepayment,void) and statuses (voided,uncollectible). - Structured validation errors: failures return an
errors[]array with one entry per invalid field instead of a single message. - Webhook events for invoices and smart meter orders.
Edison adds grid fee reductions for §14a EnWG modules, smart meter orders, and filtering on all list endpoints.New features
GET /grid-fee-reductions,GET /grid-fee-reductions/{id}, andPOST /grid-fee-reductionsmanage grid fee reductions for §14a EnWG modules.GET /meter-orders,GET /meter-orders/{id}, andPOST /meter-ordersmanage smart meter orders for a subscription.- All list endpoints support Filtering.
Batman introduces pagination on all list endpoints and API versioning.Breaking changes
- List endpoints are paginated. See Pagination. Affects
/customers,/leads,/plans,/subscriptions,/subscriptions/{id}/invoices,/subscriptions/{id}/meter_readings,/suppliers, and/suppliers/search.
- Versioning. Routes stay the same; pin a version per Auth Client or per request via
X-API-Version.
Initial public version of the Nomos API.