4058 lines
128 KiB
TypeScript
4058 lines
128 KiB
TypeScript
/**
|
||
* This file was auto-generated by openapi-typescript.
|
||
* Do not make direct changes to the file.
|
||
*/
|
||
|
||
export interface paths {
|
||
"/status": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** Get Status */
|
||
get: operations["get_status_status_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/config": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Config
|
||
* @description Return all configuration sections. Secret field values are masked (empty string).
|
||
*/
|
||
get: operations["get_config_api_config_get"];
|
||
/**
|
||
* Put Config
|
||
* @description Save configuration updates.
|
||
*
|
||
* - Blank secret value keeps the existing stored value (no change).
|
||
* - Invalid values return 422 and nothing is written to the database.
|
||
* - If MQTT-related settings changed, the MQTT client reconnects automatically.
|
||
*/
|
||
put: operations["put_config_api_config_put"];
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/config/smtp/test": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Smtp Test
|
||
* @description Send a test SMTP email using the current runtime settings.
|
||
*
|
||
* Returns a structured result indicating success or the category of failure.
|
||
* Three possible outcomes:
|
||
* - 200 { "result": "success", "message": ... }
|
||
* - 400 { "result": "config-error", "message": ... } (EmailConfigurationError)
|
||
* - 502 { "result": "failed", "message": ... } (EmailDeliveryError)
|
||
*
|
||
* SMTP credentials are never echoed in the response.
|
||
*/
|
||
post: operations["post_smtp_test_api_config_smtp_test_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/config/mqtt/test": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Mqtt Test
|
||
* @description Test MQTT broker connectivity by attempting to connect and publishing a
|
||
* test message to ``<ha_discovery_prefix>/home-automation/test``.
|
||
*
|
||
* The message is visible in MQTT Explorer (or any subscriber) so users can
|
||
* confirm the full broker publish path is working.
|
||
*
|
||
* Three possible outcomes:
|
||
* - 200 { "result": "success", "message": ... }
|
||
* - 400 { "result": "config-error", "message": ... } (not configured)
|
||
* - 502 { "result": "failed", "message": ... } (connection/publish error)
|
||
*
|
||
* MQTT credentials are never echoed in the response.
|
||
*/
|
||
post: operations["post_mqtt_test_api_config_mqtt_test_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/locations": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Locations
|
||
* @description Return location records with optional time-window filtering and pagination.
|
||
*
|
||
* - ``start`` / ``end`` are ISO8601 strings; filtering is **inclusive** on both bounds.
|
||
* - Results are ordered by ``datetime`` ascending.
|
||
* - ``limit`` is capped at 5000 to prevent full-table exports.
|
||
*/
|
||
get: operations["get_locations_api_locations_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/poo": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Poo
|
||
* @description Return poo records ordered by timestamp descending (most recent first).
|
||
*
|
||
* ``limit`` is capped at 1000 to prevent full-table exports.
|
||
*/
|
||
get: operations["get_poo_api_poo_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/public-ip": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Public Ip
|
||
* @description Return the current public IP state and recent history.
|
||
*
|
||
* - ``state`` is ``null`` if no IP check has been performed yet.
|
||
* - ``history`` is ordered by ``observed_at`` descending (most recent first).
|
||
* - ``limit`` applies to the history list and is capped at 1000.
|
||
*/
|
||
get: operations["get_public_ip_api_public_ip_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/locations/{person}/{datetime}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
post?: never;
|
||
/**
|
||
* Delete Location Record
|
||
* @description Delete the single location record identified by its composite PK.
|
||
*
|
||
* - Exactly one row is deleted; **404** if the PK does not exist.
|
||
* - No batch delete / truncate path is available.
|
||
*/
|
||
delete: operations["delete_location_record_api_locations__person___datetime__delete"];
|
||
options?: never;
|
||
head?: never;
|
||
/**
|
||
* Patch Location
|
||
* @description Update the non-PK fields of a single location record.
|
||
*
|
||
* - ``person`` and ``datetime`` identify the row (composite PK) and are immutable.
|
||
* - Only ``latitude``, ``longitude``, and ``altitude`` may be updated.
|
||
* - Omitted body fields are left unchanged.
|
||
* - Returns **404** if the PK does not exist.
|
||
*/
|
||
patch: operations["patch_location_api_locations__person___datetime__patch"];
|
||
trace?: never;
|
||
};
|
||
"/api/poo/{timestamp}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
post?: never;
|
||
/**
|
||
* Delete Poo
|
||
* @description Delete the single poo record identified by its PK.
|
||
*
|
||
* - Exactly one row is deleted; **404** if the PK does not exist.
|
||
* - No batch delete / truncate path is available.
|
||
*/
|
||
delete: operations["delete_poo_api_poo__timestamp__delete"];
|
||
options?: never;
|
||
head?: never;
|
||
/**
|
||
* Patch Poo
|
||
* @description Update the non-PK fields of a single poo record.
|
||
*
|
||
* - ``timestamp`` is the PK and is immutable.
|
||
* - Only ``status``, ``latitude``, and ``longitude`` may be updated.
|
||
* - Omitted body fields are left unchanged.
|
||
* - Returns **404** if the PK does not exist.
|
||
*/
|
||
patch: operations["patch_poo_api_poo__timestamp__patch"];
|
||
trace?: never;
|
||
};
|
||
"/api/energy/prices": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Prices
|
||
* @description Return the price curve for the active contract.
|
||
*
|
||
* **Tibber contracts** (kind="tibber"):
|
||
* Fetches ``tibber_price`` rows within ``[start, end]``, ordered ascending
|
||
* by ``starts_at``. At most ``limit`` rows are returned (most recent first
|
||
* within the window, then reversed to ascending order — identical to the
|
||
* modbus readings pattern).
|
||
*
|
||
* Response ``points`` carries per-slot:
|
||
* - ``buy = total`` (Tibber all-inclusive price)
|
||
* - ``sell = total − energy_tax − sell_adjust`` (from active version values)
|
||
* - ``level`` (Tibber price level, may be null)
|
||
*
|
||
* ``tariff`` is null.
|
||
*
|
||
* **Manual contracts** (kind="manual"):
|
||
* ``points`` is empty. ``tariff`` carries the four effective prices
|
||
* derived using the billing engine formula:
|
||
* - ``buy_dal = energy.buy.dal + energy_tax + ode``
|
||
* - ``buy_normal = energy.buy.normal + energy_tax + ode``
|
||
* - ``sell_dal = energy.sell.dal``
|
||
* - ``sell_normal = energy.sell.normal``
|
||
*
|
||
* **No active contract**: returns kind=null, currency="EUR", points=[], tariff=null (200).
|
||
*/
|
||
get: operations["get_prices_api_energy_prices_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/costs": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Costs
|
||
* @description Return energy_cost_period rows within a time window.
|
||
*
|
||
* Rows are ordered by ``period_start`` ascending. When the window contains
|
||
* more rows than ``limit``, the **most recent** N rows are returned (DESC LIMIT),
|
||
* then reversed to ascending order — identical to the modbus readings pattern.
|
||
*
|
||
* Query parameters:
|
||
* - ``start``: inclusive lower bound on ``period_start`` (ISO 8601 datetime).
|
||
* - ``end``: inclusive upper bound on ``period_start`` (ISO 8601 datetime).
|
||
* - ``limit``: max rows to return (default 500, max {_COSTS_LIMIT_MAX}).
|
||
*/
|
||
get: operations["get_costs_api_energy_costs_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/costs/summary": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Costs Summary
|
||
* @description Aggregate billing for a time interval.
|
||
*
|
||
* Calls ``energy_cost.summarize(session, start, end)`` which computes:
|
||
*
|
||
* total_payable = Σ(net_cost) + fixed_costs − credits
|
||
*
|
||
* where ``fixed_costs`` is (network_fee + management_fee) apportioned to the
|
||
* interval length in days (÷30 per month), and ``credits`` is heffingskorting
|
||
* apportioned similarly (÷365 per year).
|
||
*
|
||
* Both ``fixed_costs`` and ``credits`` are derived from the **currently active
|
||
* contract version at ``end``**. When no active contract exists they are 0.
|
||
*/
|
||
get: operations["get_costs_summary_api_energy_costs_summary_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/dsmr/latest": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Dsmr Latest
|
||
* @description Return the most recent dsmr_reading row.
|
||
*
|
||
* Returns ``{"found": false, "recorded_at": null, "payload": null}`` (200, not
|
||
* 404) when no rows exist yet, so the front-end can distinguish "no data" from
|
||
* a server error.
|
||
*/
|
||
get: operations["get_dsmr_latest_api_energy_dsmr_latest_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/costs/recompute": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Recompute
|
||
* @description Idempotently recompute billing records in a time window.
|
||
*
|
||
* Calls ``energy_cost.recompute_range(session, start, end)`` which overwrites
|
||
* existing rows (including successful ones) for every UTC quarter-hour boundary
|
||
* in ``[start, end)``.
|
||
*
|
||
* **Idempotency**: repeated calls with the same window produce the same
|
||
* outcome. No rows are deleted; only upserted.
|
||
*
|
||
* **Window constraint**: the maximum allowed range is {_RECOMPUTE_MAX_DAYS} days.
|
||
* Requests exceeding this return 422.
|
||
*
|
||
* Returns the number of periods for which a billing record was written.
|
||
* Periods skipped due to missing contract or missing Tibber price are not counted.
|
||
*/
|
||
post: operations["post_recompute_api_energy_costs_recompute_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/tibber/test": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Tibber Test
|
||
* @description Test Tibber API connectivity by fetching the current price point.
|
||
*
|
||
* Three possible outcomes:
|
||
*
|
||
* - **200** ``{ result: "success", message: ..., price: {...} }``
|
||
* The Tibber API responded with a valid current price. ``price`` contains
|
||
* starts_at, total, energy, tax, currency, and level.
|
||
*
|
||
* - **400** ``{ result: "config-error", message: ... }``
|
||
* The Tibber API token is empty or not configured.
|
||
*
|
||
* - **502** ``{ result: "failed", message: ... }``
|
||
* The API call failed (authentication rejected, network error, timeout,
|
||
* unexpected response, etc.).
|
||
*
|
||
* The API token is **never** included in the response body or logged.
|
||
*/
|
||
post: operations["post_tibber_test_api_energy_tibber_test_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/profiles": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Profiles
|
||
* @description List all available pricing profile structures.
|
||
*
|
||
* Returns the full profile structure for each supported contract kind
|
||
* (``manual`` and ``tibber``). The front-end uses this to dynamically
|
||
* render the correct fields and labels for the contract creation/editing form.
|
||
*/
|
||
get: operations["get_profiles_api_energy_profiles_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/contracts": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* List Energy Contracts
|
||
* @description List all energy contracts with their active status.
|
||
*
|
||
* Returns a flat list (no embedded version history); use
|
||
* GET /api/energy/contracts/{id} to fetch the full version history for a
|
||
* specific contract.
|
||
*/
|
||
get: operations["list_energy_contracts_api_energy_contracts_get"];
|
||
put?: never;
|
||
/**
|
||
* Create Energy Contract
|
||
* @description Create a new energy contract with an initial pricing version.
|
||
*
|
||
* The ``values`` dict is validated against the YAML profile for the given
|
||
* ``kind``; non-conforming values result in 422 Unprocessable Entity.
|
||
* The new contract is created with ``active=False``; use
|
||
* PATCH /api/energy/contracts/{id} with ``active=true`` to activate it.
|
||
*/
|
||
post: operations["create_energy_contract_api_energy_contracts_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/contracts/{contract_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Energy Contract
|
||
* @description Return a single energy contract with its full version history.
|
||
*
|
||
* Versions are ordered by ``effective_from`` ascending so the caller can
|
||
* easily inspect the pricing timeline.
|
||
*/
|
||
get: operations["get_energy_contract_api_energy_contracts__contract_id__get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
/**
|
||
* Patch Energy Contract
|
||
* @description Partially update a contract: rename or change activation status.
|
||
*
|
||
* - ``name``: updates the human-readable label.
|
||
* - ``active=true``: activates this contract (all others are deactivated).
|
||
* - ``active=false``: deactivates this contract (no effect on others).
|
||
*
|
||
* At most one contract may be active at any time; the service layer enforces
|
||
* mutual exclusion.
|
||
*/
|
||
patch: operations["patch_energy_contract_api_energy_contracts__contract_id__patch"];
|
||
trace?: never;
|
||
};
|
||
"/api/energy/contracts/{contract_id}/versions": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Add Contract Version
|
||
* @description Add a new pricing version to an existing contract.
|
||
*
|
||
* This is how price changes are recorded: the current open version is
|
||
* automatically closed (its ``effective_to`` is set to ``body.effective_from``)
|
||
* and a new version is created starting at ``body.effective_from``.
|
||
*
|
||
* The ``values`` dict must conform to the contract's pricing profile.
|
||
* Non-conforming values return 422. If ``effective_from`` is not strictly
|
||
* after the previous version's ``effective_from``, 422 is returned without
|
||
* writing any rows.
|
||
*
|
||
* Historical versions are never modified; this endpoint is append-only.
|
||
*/
|
||
post: operations["add_contract_version_api_energy_contracts__contract_id__versions_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/meters": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* List Energy Meters
|
||
* @description List all meter epochs in ascending ``started_at`` order.
|
||
*
|
||
* Returns the full historical sequence of meter installations across all
|
||
* commodities. The active meter (``ended_at=null``) appears last because it
|
||
* has the latest ``started_at``.
|
||
*/
|
||
get: operations["list_energy_meters_api_energy_meters_get"];
|
||
put?: never;
|
||
/**
|
||
* Declare Energy Meter
|
||
* @description Declare a new meter epoch (swap, home move, or initial declaration).
|
||
*
|
||
* Closes the current active meter for the given commodity at ``started_at``
|
||
* and opens a new active meter. If no active meter exists, the new meter is
|
||
* simply created without closing anything.
|
||
*
|
||
* **Validation**: ``started_at`` must be **≥** the current active meter's
|
||
* own ``started_at`` (no chronological backdate below the active epoch's
|
||
* start). Equal timestamps are allowed (replaces the current meter at the
|
||
* same logical moment). Violation → 422.
|
||
*
|
||
* **Retroactive recompute**: if ``started_at`` is in the past, billing
|
||
* records from that point forward are re-judged via ``recompute_range`` to
|
||
* reflect the new meter attribution. The recompute is transparent — the
|
||
* response body is the created meter (``MeterResponse``) only and does **not**
|
||
* include a recompute count; callers should re-fetch costs if they need the
|
||
* updated totals.
|
||
*/
|
||
post: operations["declare_energy_meter_api_energy_meters_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/energy/meters/{meter_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
/**
|
||
* Patch Energy Meter
|
||
* @description Partially update a meter epoch: rename, edit note, or correct started_at.
|
||
*
|
||
* - ``label``: updates the human-readable label.
|
||
* - ``note``: updates the free-form note.
|
||
* - ``started_at``: **retroactive correction** — shifts this meter's start
|
||
* boundary. The service layer maintains timeline continuity by also
|
||
* updating the preceding meter's ``ended_at``. Validation:
|
||
* * Must be strictly after the previous meter's own ``started_at``.
|
||
* * Must be strictly before this meter's ``ended_at`` (if closed).
|
||
* Violation → 422.
|
||
*
|
||
* **Retroactive recompute when ``started_at`` changes**: billing records in
|
||
* the window ``[min(old, new), now)`` are re-judged to reflect the corrected
|
||
* meter attribution.
|
||
*
|
||
* Not found → 404.
|
||
*/
|
||
patch: operations["patch_energy_meter_api_energy_meters__meter_id__patch"];
|
||
trace?: never;
|
||
};
|
||
"/api/expose": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Expose
|
||
* @description Return the full exposable-entity catalog with toggle states and MQTT status.
|
||
*
|
||
* The catalog is computed dynamically from registered providers (e.g. the
|
||
* Modbus provider enumerates all enabled devices and their metric entities).
|
||
* Toggle states come from the ``exposed_entity_toggle`` table; entities with
|
||
* no row default to ``enabled=False``.
|
||
*/
|
||
get: operations["get_expose_api_expose_get"];
|
||
/**
|
||
* Put Expose
|
||
* @description Set per-entity toggle state.
|
||
*
|
||
* Accepts a map of ``{key: bool}`` and upserts rows in the
|
||
* ``exposed_entity_toggle`` table. Only keys present in ``body.toggles``
|
||
* are touched; other entities' toggles are left unchanged.
|
||
*
|
||
* After writing the toggles, triggers a HA Discovery re-publish so any
|
||
* changes (enabled ↔ disabled) are reflected in Home Assistant immediately.
|
||
*/
|
||
put: operations["put_expose_api_expose_put"];
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/expose/republish": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Expose Republish
|
||
* @description Manually trigger a full HA Discovery re-publish.
|
||
*
|
||
* Calls ``publish_discovery(session)`` from the HA discovery service (M5-T11).
|
||
* Returns a status indicating whether the publish was attempted (or skipped
|
||
* because MQTT / discovery is not enabled / connected).
|
||
*/
|
||
post: operations["post_expose_republish_api_expose_republish_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/modbus/profiles": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Profiles
|
||
* @description List all available Modbus YAML profiles (name + description).
|
||
*
|
||
* Intended for the front-end's device-creation profile drop-down.
|
||
*/
|
||
get: operations["get_profiles_api_modbus_profiles_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/modbus/devices": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* List Devices
|
||
* @description Return all Modbus devices (no pagination — device counts stay small).
|
||
*/
|
||
get: operations["list_devices_api_modbus_devices_get"];
|
||
put?: never;
|
||
/**
|
||
* Create Device
|
||
* @description Create a new Modbus device.
|
||
*
|
||
* - Validates that the referenced ``profile`` exists; returns 422 if not.
|
||
* - Returns 201 with the created device on success.
|
||
*/
|
||
post: operations["create_device_api_modbus_devices_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/modbus/devices/{uuid}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Device
|
||
* @description Return a single Modbus device by UUID.
|
||
*/
|
||
get: operations["get_device_api_modbus_devices__uuid__get"];
|
||
put?: never;
|
||
post?: never;
|
||
/**
|
||
* Delete Device
|
||
* @description Delete a Modbus device.
|
||
*
|
||
* **Default behaviour (cascade=false)**:
|
||
* Returns 409 Conflict if the device has any associated readings; use
|
||
* ``enabled=false`` to disable it instead.
|
||
*
|
||
* **Cascade delete (cascade=true)**:
|
||
* Permanently deletes the device together with all its readings and any
|
||
* ``ExposedEntityToggle`` rows whose key matches ``modbus.<uuid>.*``.
|
||
* Also makes a best-effort attempt to clear the device's HA Discovery
|
||
* config topics from MQTT (empty retained payload) before the DB rows
|
||
* are removed. MQTT failures are swallowed — the DB deletion proceeds
|
||
* regardless.
|
||
* Returns HTTP 200 with a ``ModbusDeleteResponse`` JSON body on success.
|
||
*
|
||
* **Application-layer safety**: the 409 guard uses an explicit SELECT COUNT
|
||
* query to return a friendly message. FK RESTRICT is enforced at runtime
|
||
* (the app sets ``PRAGMA foreign_keys=ON``), so the cascade path deletes
|
||
* readings before the device.
|
||
*/
|
||
delete: operations["delete_device_api_modbus_devices__uuid__delete"];
|
||
options?: never;
|
||
head?: never;
|
||
/**
|
||
* Patch Device
|
||
* @description Partially update a Modbus device (including enable/disable).
|
||
*
|
||
* Only fields explicitly provided in the request body are updated.
|
||
* Providing ``profile`` triggers a profile-existence check (422 if unknown).
|
||
*/
|
||
patch: operations["patch_device_api_modbus_devices__uuid__patch"];
|
||
trace?: never;
|
||
};
|
||
"/api/modbus/devices/{uuid}/latest": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Latest Reading
|
||
* @description Return the most recent reading for a device.
|
||
*
|
||
* If no readings exist yet, returns ``{"found": false, "recorded_at": null,
|
||
* "payload": null}`` (200, not 404) so the front-end can distinguish
|
||
* "device exists but has no data" from "device not found".
|
||
*/
|
||
get: operations["get_latest_reading_api_modbus_devices__uuid__latest_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/modbus/devices/{uuid}/readings": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Readings
|
||
* @description Return time-range readings for a device.
|
||
*
|
||
* When the window contains more rows than ``limit``, the **most recent** N rows
|
||
* are returned (``ORDER BY recorded_at DESC LIMIT n``), then reversed to
|
||
* ascending order before being sent to the client. This ensures that for long
|
||
* time-range requests (e.g. 6 h / 24 h) the caller always sees the latest data
|
||
* rather than the oldest segment of the window.
|
||
*
|
||
* When the window has fewer rows than ``limit`` the full window is returned in
|
||
* ascending order — behaviour is identical to a plain ascending query.
|
||
*
|
||
* The response schema is unchanged: items are always ``recorded_at`` ascending.
|
||
*
|
||
* The query uses the ``(device_id, recorded_at)`` composite index for
|
||
* efficient time-window scans.
|
||
*
|
||
* Query parameters:
|
||
* - ``start``: inclusive lower bound (ISO8601 datetime)
|
||
* - ``end``: inclusive upper bound (ISO8601 datetime)
|
||
* - ``limit``: max rows to return (default 500, max {_READINGS_LIMIT_MAX})
|
||
*/
|
||
get: operations["get_readings_api_modbus_devices__uuid__readings_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/modbus/devices/{uuid}/metrics": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Metrics
|
||
* @description Return the metric catalogue for a device's profile.
|
||
*
|
||
* Each entry has ``key``, ``label`` (derived from key if the profile has
|
||
* none — underscores → spaces, title-cased), ``unit``, and ``device_class``.
|
||
* This is the authoritative metadata source for front-end card labels and
|
||
* chart axis labels.
|
||
*/
|
||
get: operations["get_metrics_api_modbus_devices__uuid__metrics_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/modbus/devices/{uuid}/test": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Test Read
|
||
* @description Immediately read and decode the device once without persisting any data.
|
||
*
|
||
* Useful for validating gateway connectivity and Modbus address settings
|
||
* before relying on the background polling job.
|
||
*
|
||
* This is a write-class endpoint (it initiates network I/O on demand) and
|
||
* therefore requires a CSRF token. The response payload is never stored.
|
||
*/
|
||
post: operations["test_read_api_modbus_devices__uuid__test_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/session": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Session
|
||
* @description Return the current session user and CSRF token. Returns 401 if not authenticated.
|
||
*/
|
||
get: operations["get_session_api_session_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/auth/login": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Login
|
||
* @description Authenticate with username and password.
|
||
*
|
||
* On success, sets an HttpOnly session cookie and returns the session user + CSRF token.
|
||
* On failure, returns 401 with no cookie set.
|
||
* Repeated failures trigger exponential back-off (429 + Retry-After).
|
||
* No X-CSRF-Token required (unauthenticated endpoint).
|
||
*/
|
||
post: operations["post_login_api_auth_login_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/auth/logout": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Logout
|
||
* @description Revoke the current session and clear the session cookie.
|
||
* Requires authentication and X-CSRF-Token header.
|
||
* Returns 204 No Content.
|
||
*/
|
||
post: operations["post_logout_api_auth_logout_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/auth/password": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Change Password
|
||
* @description Change the current user's password.
|
||
* Requires authentication and X-CSRF-Token header.
|
||
* On AuthPasswordChangeError returns 400 with a generic message.
|
||
* On success, force_password_change becomes False (handled by the service).
|
||
* Returns 204 No Content.
|
||
*/
|
||
post: operations["post_change_password_api_auth_password_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/auth/totp/setup": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Totp Setup
|
||
* @description Generate a new pending TOTP secret, otpauth URI, and one-time recovery codes.
|
||
*
|
||
* The secret is stored in the DB but TOTP is NOT yet enabled (totp_enabled stays
|
||
* False until the user confirms with POST /api/auth/totp/enable).
|
||
*
|
||
* Recovery codes are returned here as plaintext exactly once; their Argon2 hashes
|
||
* are persisted immediately so enable only needs to flip the enabled flag.
|
||
*
|
||
* Repeating this call replaces any prior pending secret and regenerates codes.
|
||
*
|
||
* Requires: session cookie + X-CSRF-Token.
|
||
*/
|
||
post: operations["post_totp_setup_api_auth_totp_setup_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/auth/totp/enable": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Totp Enable
|
||
* @description Enable TOTP by confirming with the current 6-digit code from the authenticator app.
|
||
*
|
||
* Requires a prior call to POST /api/auth/totp/setup (so that a pending secret
|
||
* exists). On success, totp_enabled becomes True.
|
||
*
|
||
* Returns 400 if the code is wrong or there is no pending secret.
|
||
* Requires: session cookie + X-CSRF-Token.
|
||
*/
|
||
post: operations["post_totp_enable_api_auth_totp_enable_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/auth/totp/disable": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Post Totp Disable
|
||
* @description Disable TOTP. The caller must provide exactly one of:
|
||
* - ``password``: the user's current login password, OR
|
||
* - ``code``: the current 6-digit TOTP code.
|
||
*
|
||
* On success: totp_enabled=False, totp_secret cleared, all recovery codes deleted.
|
||
* Returns 400 if neither credential matches or neither is provided.
|
||
* Requires: session cookie + X-CSRF-Token.
|
||
*/
|
||
post: operations["post_totp_disable_api_auth_totp_disable_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/auth/totp": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get Totp Status
|
||
* @description Return the current TOTP status for the authenticated user.
|
||
*
|
||
* Response contains only ``{"enabled": bool}``.
|
||
* Secret and recovery codes are NEVER returned here.
|
||
* Requires: session cookie only (no CSRF — read-only).
|
||
*/
|
||
get: operations["get_totp_status_api_auth_totp_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/homeassistant/publish": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/** Publish From Homeassistant */
|
||
post: operations["publish_from_homeassistant_homeassistant_publish_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/location/record": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/** Create Location Record */
|
||
post: operations["create_location_record_location_record_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/poo/record": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/** Create Poo Record */
|
||
post: operations["create_poo_record_poo_record_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/poo/latest": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** Notify Latest Poo */
|
||
get: operations["notify_latest_poo_poo_latest_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/public-ip/check": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** Run Public Ip Check */
|
||
get: operations["run_public_ip_check_public_ip_check_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/ticktick/auth/start": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** Start Ticktick Auth */
|
||
get: operations["start_ticktick_auth_ticktick_auth_start_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/ticktick/auth/code": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** Handle Ticktick Auth Code */
|
||
get: operations["handle_ticktick_auth_code_ticktick_auth_code_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
}
|
||
export type webhooks = Record<string, never>;
|
||
export interface components {
|
||
schemas: {
|
||
/**
|
||
* CatalogEntrySchema
|
||
* @description An entity from the catalog with its current toggle state.
|
||
*/
|
||
CatalogEntrySchema: {
|
||
entity: components["schemas"]["ExposableEntitySchema"];
|
||
/** Enabled */
|
||
enabled: boolean;
|
||
};
|
||
/** ConfigField */
|
||
ConfigField: {
|
||
/** Env Name */
|
||
env_name: string;
|
||
/** Label */
|
||
label: string;
|
||
/** Value */
|
||
value: string;
|
||
/** Secret */
|
||
secret: boolean;
|
||
/** Input Type */
|
||
input_type: string;
|
||
/** Configured */
|
||
configured: boolean;
|
||
};
|
||
/** ConfigResponse */
|
||
ConfigResponse: {
|
||
/** Sections */
|
||
sections: components["schemas"]["ConfigSection"][];
|
||
};
|
||
/** ConfigSection */
|
||
ConfigSection: {
|
||
/** Name */
|
||
name: string;
|
||
/** Fields */
|
||
fields: components["schemas"]["ConfigField"][];
|
||
};
|
||
/**
|
||
* ConfigUpdateRequest
|
||
* @description Flat mapping of env_name → value, mirroring the existing form semantics.
|
||
*/
|
||
ConfigUpdateRequest: {
|
||
/** Updates */
|
||
updates: {
|
||
[key: string]: string;
|
||
};
|
||
};
|
||
/** ConfigUpdateResponse */
|
||
ConfigUpdateResponse: {
|
||
/** Sections */
|
||
sections: components["schemas"]["ConfigSection"][];
|
||
};
|
||
/**
|
||
* ContractCreate
|
||
* @description Request body for POST /api/energy/contracts.
|
||
*
|
||
* ``effective_from`` defaults to the current UTC time if not provided,
|
||
* giving the first version an open-ended start from "now".
|
||
* ``kind`` is validated at the application layer against the profile registry;
|
||
* clients should send ``"manual"`` or ``"tibber"``.
|
||
*/
|
||
ContractCreate: {
|
||
/** Name */
|
||
name: string;
|
||
/** Kind */
|
||
kind: string;
|
||
/**
|
||
* Currency
|
||
* @default EUR
|
||
*/
|
||
currency: string;
|
||
/** Values */
|
||
values: {
|
||
[key: string]: unknown;
|
||
};
|
||
/**
|
||
* Effective From
|
||
* @description UTC datetime from which the first pricing version is effective. Defaults to the current UTC time when omitted.
|
||
*/
|
||
effective_from?: string | null;
|
||
};
|
||
/**
|
||
* ContractDetailResponse
|
||
* @description Response schema for a single EnergyContract with full version history.
|
||
*
|
||
* Returned by GET /api/energy/contracts/{id} and by successful POST / PATCH
|
||
* operations where the caller needs to see all version data.
|
||
*/
|
||
ContractDetailResponse: {
|
||
/** Id */
|
||
id: number;
|
||
/** Name */
|
||
name: string;
|
||
/** Kind */
|
||
kind: string;
|
||
/** Active */
|
||
active: boolean;
|
||
/** Currency */
|
||
currency: string;
|
||
/**
|
||
* Created At
|
||
* Format: date-time
|
||
*/
|
||
created_at: string;
|
||
/**
|
||
* Updated At
|
||
* Format: date-time
|
||
*/
|
||
updated_at: string;
|
||
/** Versions */
|
||
versions: components["schemas"]["ContractVersionResponse"][];
|
||
};
|
||
/**
|
||
* ContractListResponse
|
||
* @description Response schema for GET /api/energy/contracts.
|
||
*/
|
||
ContractListResponse: {
|
||
/** Items */
|
||
items: components["schemas"]["ContractResponse"][];
|
||
/** Total */
|
||
total: number;
|
||
};
|
||
/**
|
||
* ContractPatch
|
||
* @description Request body for PATCH /api/energy/contracts/{id}.
|
||
*
|
||
* All fields are optional. Sending ``active=true`` activates this contract
|
||
* (deactivating all others); ``active=false`` deactivates it without affecting
|
||
* other contracts.
|
||
*/
|
||
ContractPatch: {
|
||
/** Name */
|
||
name?: string | null;
|
||
/** Active */
|
||
active?: boolean | null;
|
||
};
|
||
/**
|
||
* ContractResponse
|
||
* @description Response schema for a single EnergyContract (without embedded versions).
|
||
*
|
||
* Used for list responses where embedding all versions would be expensive.
|
||
*/
|
||
ContractResponse: {
|
||
/** Id */
|
||
id: number;
|
||
/** Name */
|
||
name: string;
|
||
/** Kind */
|
||
kind: string;
|
||
/** Active */
|
||
active: boolean;
|
||
/** Currency */
|
||
currency: string;
|
||
/**
|
||
* Created At
|
||
* Format: date-time
|
||
*/
|
||
created_at: string;
|
||
/**
|
||
* Updated At
|
||
* Format: date-time
|
||
*/
|
||
updated_at: string;
|
||
};
|
||
/**
|
||
* ContractVersionResponse
|
||
* @description Response schema for a single EnergyContractVersion row.
|
||
*/
|
||
ContractVersionResponse: {
|
||
/** Id */
|
||
id: number;
|
||
/**
|
||
* Effective From
|
||
* Format: date-time
|
||
*/
|
||
effective_from: string;
|
||
/** Effective To */
|
||
effective_to: string | null;
|
||
/** Values */
|
||
values: {
|
||
[key: string]: unknown;
|
||
};
|
||
/**
|
||
* Created At
|
||
* Format: date-time
|
||
*/
|
||
created_at: string;
|
||
};
|
||
/**
|
||
* CostPeriodSchema
|
||
* @description One 15-minute billing record from the energy_cost_period table.
|
||
*/
|
||
CostPeriodSchema: {
|
||
/**
|
||
* Period Start
|
||
* Format: date-time
|
||
*/
|
||
period_start: string;
|
||
/**
|
||
* D1 Kwh
|
||
* @description Delivered low-tariff kWh for this period.
|
||
*/
|
||
d1_kwh: number;
|
||
/**
|
||
* D2 Kwh
|
||
* @description Delivered normal-tariff kWh for this period.
|
||
*/
|
||
d2_kwh: number;
|
||
/**
|
||
* R1 Kwh
|
||
* @description Returned low-tariff kWh for this period.
|
||
*/
|
||
r1_kwh: number;
|
||
/**
|
||
* R2 Kwh
|
||
* @description Returned normal-tariff kWh for this period.
|
||
*/
|
||
r2_kwh: number;
|
||
/**
|
||
* Import Cost
|
||
* @description Cost of electricity drawn from grid (EUR).
|
||
*/
|
||
import_cost: number;
|
||
/**
|
||
* Export Revenue
|
||
* @description Revenue from electricity fed to grid (EUR).
|
||
*/
|
||
export_revenue: number;
|
||
/**
|
||
* Net Cost
|
||
* @description import_cost − export_revenue (EUR).
|
||
*/
|
||
net_cost: number;
|
||
/**
|
||
* Currency
|
||
* @description ISO 4217 currency code.
|
||
*/
|
||
currency: string;
|
||
/**
|
||
* Degraded
|
||
* @description True when the period was computed with incomplete data.
|
||
*/
|
||
degraded: boolean;
|
||
/**
|
||
* Contract Version Id
|
||
* @description FK to the contract version used for this billing period (null when degraded).
|
||
*/
|
||
contract_version_id?: number | null;
|
||
};
|
||
/**
|
||
* CostsResponse
|
||
* @description Response for GET /api/energy/costs.
|
||
*/
|
||
CostsResponse: {
|
||
/** Items */
|
||
items: components["schemas"]["CostPeriodSchema"][];
|
||
/**
|
||
* Total
|
||
* @description Number of items returned.
|
||
*/
|
||
total: number;
|
||
};
|
||
/**
|
||
* DeviceInfoSchema
|
||
* @description HA device grouping info for an exposable entity.
|
||
*/
|
||
DeviceInfoSchema: {
|
||
/** Identifiers */
|
||
identifiers: string[];
|
||
/** Name */
|
||
name: string;
|
||
};
|
||
/**
|
||
* DsmrLatestResponse
|
||
* @description Response for GET /api/energy/dsmr/latest.
|
||
*
|
||
* ``found`` is False when no dsmr_reading rows exist yet. The front-end
|
||
* should check ``found`` before reading ``recorded_at`` or ``payload``.
|
||
*/
|
||
DsmrLatestResponse: {
|
||
/** Found */
|
||
found: boolean;
|
||
/** Recorded At */
|
||
recorded_at?: string | null;
|
||
/** Payload */
|
||
payload?: {
|
||
[key: string]: unknown;
|
||
} | null;
|
||
};
|
||
/**
|
||
* ExposableEntitySchema
|
||
* @description One exposable entity in the catalog.
|
||
*
|
||
* ``value_getter`` is intentionally excluded — it is a non-serialisable
|
||
* callable and is only used internally by the HA Discovery service.
|
||
*/
|
||
ExposableEntitySchema: {
|
||
/** Key */
|
||
key: string;
|
||
/** Component */
|
||
component: string;
|
||
device: components["schemas"]["DeviceInfoSchema"];
|
||
/** Device Class */
|
||
device_class: string | null;
|
||
/** Unit */
|
||
unit: string;
|
||
/** Name */
|
||
name: string;
|
||
/** State Class */
|
||
state_class?: string | null;
|
||
};
|
||
/**
|
||
* ExposeResponse
|
||
* @description Response for GET /api/expose.
|
||
*/
|
||
ExposeResponse: {
|
||
/** Catalog */
|
||
catalog: components["schemas"]["CatalogEntrySchema"][];
|
||
mqtt_status: components["schemas"]["MqttStatusSchema"];
|
||
};
|
||
/**
|
||
* ExposeUpdateRequest
|
||
* @description Request body for PUT /api/expose.
|
||
*
|
||
* ``toggles`` is a map from entity key to desired enabled state (bool).
|
||
* Only keys present in the map are updated; absent keys are untouched.
|
||
*/
|
||
ExposeUpdateRequest: {
|
||
/** Toggles */
|
||
toggles: {
|
||
[key: string]: boolean;
|
||
};
|
||
};
|
||
/**
|
||
* ExposeUpdateResponse
|
||
* @description Response for PUT /api/expose (returns updated catalog + status).
|
||
*/
|
||
ExposeUpdateResponse: {
|
||
/** Catalog */
|
||
catalog: components["schemas"]["CatalogEntrySchema"][];
|
||
mqtt_status: components["schemas"]["MqttStatusSchema"];
|
||
};
|
||
/** HTTPValidationError */
|
||
HTTPValidationError: {
|
||
/** Detail */
|
||
detail?: components["schemas"]["ValidationError"][];
|
||
};
|
||
/** LocationRecord */
|
||
LocationRecord: {
|
||
/** Person */
|
||
person: string;
|
||
/** Datetime */
|
||
datetime: string;
|
||
/** Latitude */
|
||
latitude: number;
|
||
/** Longitude */
|
||
longitude: number;
|
||
/** Altitude */
|
||
altitude: number | null;
|
||
};
|
||
/**
|
||
* LocationUpdateRequest
|
||
* @description PATCH body for a location record — all fields optional; PK fields excluded.
|
||
*/
|
||
LocationUpdateRequest: {
|
||
/** Latitude */
|
||
latitude?: number | null;
|
||
/** Longitude */
|
||
longitude?: number | null;
|
||
/** Altitude */
|
||
altitude?: number | null;
|
||
};
|
||
/** LocationsResponse */
|
||
LocationsResponse: {
|
||
/** Items */
|
||
items: components["schemas"]["LocationRecord"][];
|
||
/** Limit */
|
||
limit: number;
|
||
/** Offset */
|
||
offset: number;
|
||
};
|
||
/** LoginRequest */
|
||
LoginRequest: {
|
||
/** Username */
|
||
username: string;
|
||
/** Password */
|
||
password: string;
|
||
/** Totp Code */
|
||
totp_code?: string | null;
|
||
};
|
||
/**
|
||
* ManualTariffSchema
|
||
* @description Fixed-tariff breakdown for manual contracts.
|
||
*
|
||
* Prices are the *effective* buy prices as used by the billing engine
|
||
* (energy_buy_x + energy_tax + ode) and the raw sell prices.
|
||
*/
|
||
ManualTariffSchema: {
|
||
/**
|
||
* Buy Dal
|
||
* @description Effective buy price, low-tariff / dal (EUR/kWh).
|
||
*/
|
||
buy_dal: number;
|
||
/**
|
||
* Buy Normal
|
||
* @description Effective buy price, normal / high-tariff (EUR/kWh).
|
||
*/
|
||
buy_normal: number;
|
||
/**
|
||
* Sell Dal
|
||
* @description Sell price, low-tariff / dal (EUR/kWh).
|
||
*/
|
||
sell_dal: number;
|
||
/**
|
||
* Sell Normal
|
||
* @description Sell price, normal / high-tariff (EUR/kWh).
|
||
*/
|
||
sell_normal: number;
|
||
};
|
||
/**
|
||
* MeterDeclareRequest
|
||
* @description Request body for POST /api/energy/meters.
|
||
*
|
||
* Declares a new meter epoch (swap, home move, or initial declaration). The
|
||
* service layer closes the current active meter for the given commodity at
|
||
* ``started_at`` and opens a new one.
|
||
*
|
||
* ``started_at`` follows the Principle-A localisation convention: a
|
||
* timezone-naive value is interpreted as the **server's local wall-clock time**
|
||
* (e.g. CEST midnight → stored as UTC the night before); a timezone-aware
|
||
* value is converted to UTC as-is. Omitting ``started_at`` is not allowed —
|
||
* every meter declaration must carry an explicit start timestamp.
|
||
*
|
||
* ``commodity`` defaults to ``"electricity"``; the field is available for
|
||
* future use with ``gas`` or ``heating``.
|
||
*/
|
||
MeterDeclareRequest: {
|
||
/** Label */
|
||
label: string;
|
||
/**
|
||
* Started At
|
||
* Format: date-time
|
||
* @description UTC (or server-local naive) datetime from which this meter epoch starts. May be in the past (retroactive declaration).
|
||
*/
|
||
started_at: string;
|
||
/** @description Why this epoch was created. One of: initial, meter_swap, home_move, other. */
|
||
reason: components["schemas"]["MeterReason"];
|
||
/** Note */
|
||
note?: string | null;
|
||
/**
|
||
* Commodity
|
||
* @description Energy commodity this meter measures. Defaults to 'electricity'.
|
||
* @default electricity
|
||
*/
|
||
commodity: string;
|
||
};
|
||
/**
|
||
* MeterListResponse
|
||
* @description Response schema for GET /api/energy/meters.
|
||
*
|
||
* Meters are returned in ascending ``started_at`` order so the caller sees
|
||
* the historical installation sequence.
|
||
*/
|
||
MeterListResponse: {
|
||
/** Items */
|
||
items: components["schemas"]["MeterResponse"][];
|
||
/** Total */
|
||
total: number;
|
||
};
|
||
/**
|
||
* MeterPatchRequest
|
||
* @description Request body for PATCH /api/energy/meters/{id}.
|
||
*
|
||
* All fields are optional. Only non-``None`` values are applied.
|
||
*
|
||
* Updating ``started_at`` is a **retroactive correction**: the service layer
|
||
* maintains timeline continuity (adjusting the preceding meter's ``ended_at``)
|
||
* and the API layer triggers ``recompute_range`` over the affected window so
|
||
* that billing attribution is re-judged.
|
||
*/
|
||
MeterPatchRequest: {
|
||
/** Label */
|
||
label?: string | null;
|
||
/** Note */
|
||
note?: string | null;
|
||
/**
|
||
* Started At
|
||
* @description Retroactive correction of the meter epoch start timestamp. Triggers billing recompute over the affected window.
|
||
*/
|
||
started_at?: string | null;
|
||
};
|
||
/**
|
||
* MeterReason
|
||
* @description Allowed values for the meter epoch creation reason.
|
||
* @enum {string}
|
||
*/
|
||
MeterReason: "initial" | "meter_swap" | "home_move" | "other";
|
||
/**
|
||
* MeterResponse
|
||
* @description Response schema for a single Meter epoch row.
|
||
*
|
||
* ``ended_at`` is ``null`` for the currently active meter.
|
||
*/
|
||
MeterResponse: {
|
||
/** Id */
|
||
id: number;
|
||
/** Label */
|
||
label: string;
|
||
/** Commodity */
|
||
commodity: string;
|
||
/**
|
||
* Started At
|
||
* Format: date-time
|
||
*/
|
||
started_at: string;
|
||
/** Ended At */
|
||
ended_at: string | null;
|
||
/** Reason */
|
||
reason: string;
|
||
/** Note */
|
||
note: string | null;
|
||
/**
|
||
* Created At
|
||
* Format: date-time
|
||
*/
|
||
created_at: string;
|
||
};
|
||
/**
|
||
* MetricInfo
|
||
* @description Metadata for a single measurable quantity in a device's profile.
|
||
*/
|
||
MetricInfo: {
|
||
/** Key */
|
||
key: string;
|
||
/** Label */
|
||
label: string;
|
||
/** Unit */
|
||
unit: string;
|
||
/** Device Class */
|
||
device_class: string;
|
||
};
|
||
/**
|
||
* ModbusDeviceCreate
|
||
* @description Request body for POST /api/modbus/devices.
|
||
*/
|
||
ModbusDeviceCreate: {
|
||
/** Friendly Name */
|
||
friendly_name: string;
|
||
/**
|
||
* Transport
|
||
* @default tcp
|
||
*/
|
||
transport: string;
|
||
/** Host */
|
||
host: string;
|
||
/**
|
||
* Port
|
||
* @default 502
|
||
*/
|
||
port: number;
|
||
/**
|
||
* Unit Id
|
||
* @default 1
|
||
*/
|
||
unit_id: number;
|
||
/** Profile */
|
||
profile: string;
|
||
/**
|
||
* Poll Interval S
|
||
* @default 5
|
||
*/
|
||
poll_interval_s: number;
|
||
/**
|
||
* Enabled
|
||
* @default true
|
||
*/
|
||
enabled: boolean;
|
||
};
|
||
/**
|
||
* ModbusDeviceListResponse
|
||
* @description Response schema for listing Modbus devices.
|
||
*/
|
||
ModbusDeviceListResponse: {
|
||
/** Items */
|
||
items: components["schemas"]["ModbusDeviceResponse"][];
|
||
/** Total */
|
||
total: number;
|
||
};
|
||
/**
|
||
* ModbusDeviceResponse
|
||
* @description Response schema for a single Modbus device.
|
||
*/
|
||
ModbusDeviceResponse: {
|
||
/** Uuid */
|
||
uuid: string;
|
||
/** Friendly Name */
|
||
friendly_name: string;
|
||
/** Transport */
|
||
transport: string;
|
||
/** Host */
|
||
host: string;
|
||
/** Port */
|
||
port: number;
|
||
/** Unit Id */
|
||
unit_id: number;
|
||
/** Profile */
|
||
profile: string;
|
||
/** Poll Interval S */
|
||
poll_interval_s: number;
|
||
/** Enabled */
|
||
enabled: boolean;
|
||
/** Last Poll At */
|
||
last_poll_at: string | null;
|
||
/** Last Poll Ok */
|
||
last_poll_ok: boolean | null;
|
||
/**
|
||
* Created At
|
||
* Format: date-time
|
||
*/
|
||
created_at: string;
|
||
/**
|
||
* Updated At
|
||
* Format: date-time
|
||
*/
|
||
updated_at: string;
|
||
};
|
||
/**
|
||
* ModbusDeviceUpdate
|
||
* @description Request body for PATCH /api/modbus/devices/{uuid} — all fields optional.
|
||
*/
|
||
ModbusDeviceUpdate: {
|
||
/** Friendly Name */
|
||
friendly_name?: string | null;
|
||
/** Transport */
|
||
transport?: string | null;
|
||
/** Host */
|
||
host?: string | null;
|
||
/** Port */
|
||
port?: number | null;
|
||
/** Unit Id */
|
||
unit_id?: number | null;
|
||
/** Profile */
|
||
profile?: string | null;
|
||
/** Poll Interval S */
|
||
poll_interval_s?: number | null;
|
||
/** Enabled */
|
||
enabled?: boolean | null;
|
||
};
|
||
/**
|
||
* ModbusLatestResponse
|
||
* @description Response for the /latest endpoint.
|
||
*
|
||
* ``found`` is False and ``recorded_at``/``payload`` are None when the device
|
||
* has no readings yet. Callers should check ``found`` before using the values.
|
||
*/
|
||
ModbusLatestResponse: {
|
||
/** Found */
|
||
found: boolean;
|
||
/** Recorded At */
|
||
recorded_at: string | null;
|
||
/** Payload */
|
||
payload: {
|
||
[key: string]: unknown;
|
||
} | null;
|
||
};
|
||
/**
|
||
* ModbusMetricsResponse
|
||
* @description Response schema for GET /api/modbus/devices/{uuid}/metrics.
|
||
*/
|
||
ModbusMetricsResponse: {
|
||
/** Profile */
|
||
profile: string;
|
||
/** Metrics */
|
||
metrics: components["schemas"]["MetricInfo"][];
|
||
};
|
||
/**
|
||
* ModbusProfilesResponse
|
||
* @description Response schema for GET /api/modbus/profiles.
|
||
*/
|
||
ModbusProfilesResponse: {
|
||
/** Profiles */
|
||
profiles: components["schemas"]["ProfileSummary"][];
|
||
};
|
||
/**
|
||
* ModbusReadingResponse
|
||
* @description A single reading row: timestamp + decoded payload.
|
||
*/
|
||
ModbusReadingResponse: {
|
||
/**
|
||
* Recorded At
|
||
* Format: date-time
|
||
*/
|
||
recorded_at: string;
|
||
/** Payload */
|
||
payload: {
|
||
[key: string]: unknown;
|
||
};
|
||
};
|
||
/**
|
||
* ModbusReadingsResponse
|
||
* @description Response schema for the readings time-range endpoint.
|
||
*/
|
||
ModbusReadingsResponse: {
|
||
/** Items */
|
||
items: components["schemas"]["ModbusReadingResponse"][];
|
||
};
|
||
/**
|
||
* ModbusTestReadResponse
|
||
* @description Response for POST /api/modbus/devices/{uuid}/test.
|
||
*
|
||
* On success ``ok=True`` and ``payload`` contains the decoded values.
|
||
* On failure ``ok=False`` and ``error`` describes the problem.
|
||
*/
|
||
ModbusTestReadResponse: {
|
||
/** Ok */
|
||
ok: boolean;
|
||
/** Payload */
|
||
payload?: {
|
||
[key: string]: unknown;
|
||
} | null;
|
||
/** Error */
|
||
error?: string | null;
|
||
};
|
||
/**
|
||
* MqttStatusSchema
|
||
* @description Connection status for MQTT and HA Discovery.
|
||
*/
|
||
MqttStatusSchema: {
|
||
/** Mqtt Configured */
|
||
mqtt_configured: boolean;
|
||
/** Mqtt Connected */
|
||
mqtt_connected: boolean;
|
||
/** Discovery Enabled */
|
||
discovery_enabled: boolean;
|
||
};
|
||
/**
|
||
* MqttTestResponse
|
||
* @description Response from POST /api/config/mqtt/test.
|
||
*/
|
||
MqttTestResponse: {
|
||
/**
|
||
* Result
|
||
* @enum {string}
|
||
*/
|
||
result: "success" | "config-error" | "failed";
|
||
/** Message */
|
||
message: string;
|
||
};
|
||
/** PasswordChangeRequest */
|
||
PasswordChangeRequest: {
|
||
/** Current Password */
|
||
current_password: string;
|
||
/** New Password */
|
||
new_password: string;
|
||
/** Confirm Password */
|
||
confirm_password: string;
|
||
};
|
||
/** PooRecord */
|
||
PooRecord: {
|
||
/** Timestamp */
|
||
timestamp: string;
|
||
/** Status */
|
||
status: string;
|
||
/** Latitude */
|
||
latitude: number;
|
||
/** Longitude */
|
||
longitude: number;
|
||
};
|
||
/** PooResponse */
|
||
PooResponse: {
|
||
/** Items */
|
||
items: components["schemas"]["PooRecord"][];
|
||
/** Limit */
|
||
limit: number;
|
||
/** Offset */
|
||
offset: number;
|
||
};
|
||
/**
|
||
* PooUpdateRequest
|
||
* @description PATCH body for a poo record — all fields optional; PK field excluded.
|
||
*/
|
||
PooUpdateRequest: {
|
||
/** Status */
|
||
status?: string | null;
|
||
/** Latitude */
|
||
latitude?: number | null;
|
||
/** Longitude */
|
||
longitude?: number | null;
|
||
};
|
||
/**
|
||
* PricePointSchema
|
||
* @description A single 15-minute price point (tibber) or placeholder entry.
|
||
*/
|
||
PricePointSchema: {
|
||
/**
|
||
* Starts At
|
||
* Format: date-time
|
||
*/
|
||
starts_at: string;
|
||
/**
|
||
* Buy
|
||
* @description All-in buy price in EUR/kWh (including taxes).
|
||
*/
|
||
buy: number;
|
||
/**
|
||
* Sell
|
||
* @description Net sell price in EUR/kWh.
|
||
*/
|
||
sell: number;
|
||
/**
|
||
* Level
|
||
* @description Tibber price level (CHEAP / NORMAL / EXPENSIVE); null for manual.
|
||
*/
|
||
level?: string | null;
|
||
};
|
||
/**
|
||
* PricesResponse
|
||
* @description Response for GET /api/energy/prices.
|
||
*
|
||
* ``kind`` mirrors the active contract kind:
|
||
* - ``"tibber"`` → ``points`` has actual 15-min price entries; ``tariff`` is null.
|
||
* - ``"manual"`` → ``points`` is empty; ``tariff`` carries the fixed-rate table.
|
||
* - ``None`` → no active contract; both ``points`` and ``tariff`` are empty/null.
|
||
*
|
||
* ``currency`` comes from the active contract (or "EUR" fallback).
|
||
* ``points`` is always ascending by ``starts_at``.
|
||
*/
|
||
PricesResponse: {
|
||
/**
|
||
* Kind
|
||
* @description Active contract kind ('tibber' or 'manual'), or null if no active contract.
|
||
*/
|
||
kind: string | null;
|
||
/**
|
||
* Currency
|
||
* @description ISO 4217 currency code.
|
||
*/
|
||
currency: string;
|
||
/**
|
||
* Points
|
||
* @description 15-minute price points for tibber contracts (ascending by starts_at). Empty for manual contracts or when no active contract exists.
|
||
*/
|
||
points: components["schemas"]["PricePointSchema"][];
|
||
/** @description Fixed tariff table for manual contracts. Null for tibber contracts and when no active contract exists. */
|
||
tariff?: components["schemas"]["ManualTariffSchema"] | null;
|
||
};
|
||
/**
|
||
* ProfileSummary
|
||
* @description One entry in the GET /api/modbus/profiles response.
|
||
*/
|
||
ProfileSummary: {
|
||
/** Name */
|
||
name: string;
|
||
/** Description */
|
||
description: string;
|
||
};
|
||
/**
|
||
* ProfilesResponse
|
||
* @description Response schema for GET /api/energy/profiles.
|
||
*
|
||
* ``profiles`` is a list of raw profile dicts as produced by
|
||
* ``list_profiles()`` (Pydantic model dumps). Each entry contains at minimum
|
||
* ``kind`` and ``label``; the full nested structure allows the front-end to
|
||
* render a type-appropriate form for each pricing profile.
|
||
*/
|
||
ProfilesResponse: {
|
||
/** Profiles */
|
||
profiles: {
|
||
[key: string]: unknown;
|
||
}[];
|
||
};
|
||
/** PublicIPCheckResponse */
|
||
PublicIPCheckResponse: {
|
||
/**
|
||
* Status
|
||
* @enum {string}
|
||
*/
|
||
status: "first_seen" | "unchanged" | "changed" | "error";
|
||
/**
|
||
* Checked At
|
||
* Format: date-time
|
||
*/
|
||
checked_at: string;
|
||
/** Changed */
|
||
changed: boolean;
|
||
};
|
||
/** PublicIPHistorySchema */
|
||
PublicIPHistorySchema: {
|
||
/** Id */
|
||
id: number;
|
||
/** Ipv4 */
|
||
ipv4: string;
|
||
/**
|
||
* Observed At
|
||
* Format: date-time
|
||
*/
|
||
observed_at: string;
|
||
/** Change Type */
|
||
change_type: string;
|
||
/** Provider */
|
||
provider: string | null;
|
||
};
|
||
/** PublicIPResponse */
|
||
PublicIPResponse: {
|
||
state: components["schemas"]["PublicIPStateSchema"] | null;
|
||
/** History */
|
||
history: components["schemas"]["PublicIPHistorySchema"][];
|
||
};
|
||
/** PublicIPStateSchema */
|
||
PublicIPStateSchema: {
|
||
/** Id */
|
||
id: number;
|
||
/** Current Ipv4 */
|
||
current_ipv4: string;
|
||
/** Previous Ipv4 */
|
||
previous_ipv4: string | null;
|
||
/**
|
||
* First Seen At
|
||
* Format: date-time
|
||
*/
|
||
first_seen_at: string;
|
||
/**
|
||
* Last Checked At
|
||
* Format: date-time
|
||
*/
|
||
last_checked_at: string;
|
||
/** Last Changed At */
|
||
last_changed_at: string | null;
|
||
/** Last Check Status */
|
||
last_check_status: string;
|
||
/** Last Check Error */
|
||
last_check_error: string | null;
|
||
/** Last Provider */
|
||
last_provider: string | null;
|
||
};
|
||
/**
|
||
* RecomputeResponse
|
||
* @description Response for POST /api/energy/costs/recompute.
|
||
*/
|
||
RecomputeResponse: {
|
||
/**
|
||
* Recomputed
|
||
* @description Number of 15-minute periods for which a billing record was written (inserted or updated). Periods skipped due to missing contract or missing Tibber price are not counted.
|
||
*/
|
||
recomputed: number;
|
||
};
|
||
/**
|
||
* RepublishResponse
|
||
* @description Response for POST /api/expose/republish.
|
||
*/
|
||
RepublishResponse: {
|
||
/** Ok */
|
||
ok: boolean;
|
||
/** Message */
|
||
message: string;
|
||
};
|
||
/** SessionResponse */
|
||
SessionResponse: {
|
||
user: components["schemas"]["SessionUser"];
|
||
/** Csrf Token */
|
||
csrf_token: string;
|
||
};
|
||
/** SessionUser */
|
||
SessionUser: {
|
||
/** Username */
|
||
username: string;
|
||
/** Force Password Change */
|
||
force_password_change: boolean;
|
||
};
|
||
/**
|
||
* SmtpTestResponse
|
||
* @description Response from POST /api/config/smtp/test.
|
||
*/
|
||
SmtpTestResponse: {
|
||
/**
|
||
* Result
|
||
* @enum {string}
|
||
*/
|
||
result: "success" | "config-error" | "failed";
|
||
/** Message */
|
||
message: string;
|
||
};
|
||
/** StatusResponse */
|
||
StatusResponse: {
|
||
/** Status */
|
||
status: string;
|
||
};
|
||
/**
|
||
* SummaryResponse
|
||
* @description Response for GET /api/energy/costs/summary.
|
||
*
|
||
* All monetary values are in ``currency``.
|
||
*
|
||
* ``total_payable = metered_net + fixed_costs − credits``
|
||
*/
|
||
SummaryResponse: {
|
||
/** Currency */
|
||
currency: string;
|
||
/**
|
||
* Metered Import
|
||
* @description Σ import_cost for non-degraded periods.
|
||
*/
|
||
metered_import: number;
|
||
/**
|
||
* Metered Export
|
||
* @description Σ export_revenue for non-degraded periods.
|
||
*/
|
||
metered_export: number;
|
||
/**
|
||
* Metered Net
|
||
* @description Σ net_cost for non-degraded periods.
|
||
*/
|
||
metered_net: number;
|
||
/**
|
||
* Fixed Costs
|
||
* @description Standing charges (network_fee + management_fee) apportioned over the interval.
|
||
*/
|
||
fixed_costs: number;
|
||
/**
|
||
* Credits
|
||
* @description Energy-tax credit (heffingskorting) apportioned over the interval.
|
||
*/
|
||
credits: number;
|
||
/**
|
||
* Total Payable
|
||
* @description metered_net + fixed_costs − credits (actual amount owed).
|
||
*/
|
||
total_payable: number;
|
||
/**
|
||
* Period Count
|
||
* @description Number of non-degraded billing periods in range.
|
||
*/
|
||
period_count: number;
|
||
/**
|
||
* Degraded Count
|
||
* @description Number of degraded billing periods in range.
|
||
*/
|
||
degraded_count: number;
|
||
/**
|
||
* Days
|
||
* @description Interval length in days.
|
||
*/
|
||
days: number;
|
||
};
|
||
/**
|
||
* TibberTestPriceSchema
|
||
* @description Current Tibber price point returned on a successful test.
|
||
*
|
||
* Carries enough fields for the front-end to confirm the API is working and
|
||
* display the live price. The API token is **never** included.
|
||
*/
|
||
TibberTestPriceSchema: {
|
||
/**
|
||
* Starts At
|
||
* Format: date-time
|
||
*/
|
||
starts_at: string;
|
||
/** Total */
|
||
total: number;
|
||
/** Energy */
|
||
energy: number;
|
||
/** Tax */
|
||
tax: number;
|
||
/** Currency */
|
||
currency: string;
|
||
/** Level */
|
||
level?: string | null;
|
||
};
|
||
/**
|
||
* TibberTestResponse
|
||
* @description Three-state response for POST /api/energy/tibber/test.
|
||
*
|
||
* Possible ``result`` values:
|
||
*
|
||
* - ``"success"`` — Tibber API responded with a valid price.
|
||
* - ``"config-error"`` — Token is missing or not configured.
|
||
* - ``"failed"`` — API call failed (auth rejected, network error, timeout, etc.).
|
||
*
|
||
* ``price`` is populated only on ``"success"``; it is null otherwise.
|
||
* ``message`` always contains a human-readable explanation.
|
||
*/
|
||
TibberTestResponse: {
|
||
/**
|
||
* Result
|
||
* @enum {string}
|
||
*/
|
||
result: "success" | "config-error" | "failed";
|
||
/** Message */
|
||
message: string;
|
||
price?: components["schemas"]["TibberTestPriceSchema"] | null;
|
||
};
|
||
/**
|
||
* TotpDisableRequest
|
||
* @description Disable TOTP by proving identity.
|
||
*
|
||
* Exactly one of ``password`` or ``code`` must be provided.
|
||
*/
|
||
TotpDisableRequest: {
|
||
/** Password */
|
||
password?: string | null;
|
||
/** Code */
|
||
code?: string | null;
|
||
};
|
||
/**
|
||
* TotpEnableRequest
|
||
* @description The user confirms setup by providing the 6-digit TOTP code.
|
||
*/
|
||
TotpEnableRequest: {
|
||
/** Code */
|
||
code: string;
|
||
};
|
||
/**
|
||
* TotpSetupResponse
|
||
* @description Returned once after a setup call.
|
||
*
|
||
* ``secret`` and ``recovery_codes`` are **one-time plaintext values**.
|
||
* They are never returned again by any subsequent API call.
|
||
* The frontend must display and instruct the user to save them before confirming.
|
||
*/
|
||
TotpSetupResponse: {
|
||
/** Secret */
|
||
secret: string;
|
||
/** Otpauth Uri */
|
||
otpauth_uri: string;
|
||
/** Recovery Codes */
|
||
recovery_codes: string[];
|
||
};
|
||
/**
|
||
* TotpStatusResponse
|
||
* @description Minimal status response — never exposes secret or recovery codes.
|
||
*/
|
||
TotpStatusResponse: {
|
||
/** Enabled */
|
||
enabled: boolean;
|
||
};
|
||
/** ValidationError */
|
||
ValidationError: {
|
||
/** Location */
|
||
loc: (string | number)[];
|
||
/** Message */
|
||
msg: string;
|
||
/** Error Type */
|
||
type: string;
|
||
};
|
||
/**
|
||
* VersionCreate
|
||
* @description Request body for POST /api/energy/contracts/{id}/versions.
|
||
*/
|
||
VersionCreate: {
|
||
/**
|
||
* Effective From
|
||
* Format: date-time
|
||
*/
|
||
effective_from: string;
|
||
/** Values */
|
||
values: {
|
||
[key: string]: unknown;
|
||
};
|
||
};
|
||
};
|
||
responses: never;
|
||
parameters: never;
|
||
requestBodies: never;
|
||
headers: never;
|
||
pathItems: never;
|
||
}
|
||
export type $defs = Record<string, never>;
|
||
export interface operations {
|
||
get_status_status_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["StatusResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_config_api_config_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ConfigResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put_config_api_config_put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ConfigUpdateRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ConfigUpdateResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_smtp_test_api_config_smtp_test_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["SmtpTestResponse"];
|
||
};
|
||
};
|
||
/** @description Bad Request */
|
||
400: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["SmtpTestResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
/** @description Bad Gateway */
|
||
502: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["SmtpTestResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_mqtt_test_api_config_mqtt_test_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["MqttTestResponse"];
|
||
};
|
||
};
|
||
/** @description Bad Request */
|
||
400: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["MqttTestResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
/** @description Bad Gateway */
|
||
502: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["MqttTestResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_locations_api_locations_get: {
|
||
parameters: {
|
||
query?: {
|
||
limit?: number;
|
||
offset?: number;
|
||
start?: string | null;
|
||
end?: string | null;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["LocationsResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_poo_api_poo_get: {
|
||
parameters: {
|
||
query?: {
|
||
limit?: number;
|
||
offset?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["PooResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_public_ip_api_public_ip_get: {
|
||
parameters: {
|
||
query?: {
|
||
limit?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["PublicIPResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete_location_record_api_locations__person___datetime__delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
person: string;
|
||
datetime: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
204: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content?: never;
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
patch_location_api_locations__person___datetime__patch: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
person: string;
|
||
datetime: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": components["schemas"]["LocationUpdateRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["LocationRecord"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete_poo_api_poo__timestamp__delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
timestamp: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
204: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content?: never;
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
patch_poo_api_poo__timestamp__patch: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
timestamp: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": components["schemas"]["PooUpdateRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["PooRecord"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_prices_api_energy_prices_get: {
|
||
parameters: {
|
||
query?: {
|
||
/** @description Inclusive start of the time window (ISO 8601). Defaults to the start of today UTC when omitted. */
|
||
start?: string | null;
|
||
/** @description Inclusive end of the time window (ISO 8601). Defaults to the end of tomorrow UTC when omitted. */
|
||
end?: string | null;
|
||
/** @description Maximum number of Tibber price points to return. */
|
||
limit?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["PricesResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_costs_api_energy_costs_get: {
|
||
parameters: {
|
||
query?: {
|
||
/** @description Inclusive lower bound for period_start (ISO 8601). */
|
||
start?: string | null;
|
||
/** @description Inclusive upper bound for period_start (ISO 8601). */
|
||
end?: string | null;
|
||
/** @description Maximum number of cost periods to return (default 500, max 5000). */
|
||
limit?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["CostsResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_costs_summary_api_energy_costs_summary_get: {
|
||
parameters: {
|
||
query?: {
|
||
/** @description Inclusive start of the summary interval (ISO 8601). Defaults to the start of the current UTC day. */
|
||
start?: string | null;
|
||
/** @description Exclusive end of the summary interval (ISO 8601). Defaults to the start of the next UTC day (i.e. today's full data). */
|
||
end?: string | null;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["SummaryResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_dsmr_latest_api_energy_dsmr_latest_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["DsmrLatestResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_recompute_api_energy_costs_recompute_post: {
|
||
parameters: {
|
||
query: {
|
||
/** @description Inclusive start of the recompute window (ISO 8601). Required. */
|
||
start: string;
|
||
/** @description Exclusive end of the recompute window (ISO 8601). Required. */
|
||
end: string;
|
||
};
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["RecomputeResponse"];
|
||
};
|
||
};
|
||
/** @description Validation error (missing window or range too large) */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content?: never;
|
||
};
|
||
};
|
||
};
|
||
post_tibber_test_api_energy_tibber_test_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["TibberTestResponse"];
|
||
};
|
||
};
|
||
/** @description Bad Request */
|
||
400: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["TibberTestResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
/** @description Bad Gateway */
|
||
502: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["TibberTestResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_profiles_api_energy_profiles_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ProfilesResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
list_energy_contracts_api_energy_contracts_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ContractListResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
create_energy_contract_api_energy_contracts_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ContractCreate"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ContractDetailResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_energy_contract_api_energy_contracts__contract_id__get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
contract_id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ContractDetailResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
patch_energy_contract_api_energy_contracts__contract_id__patch: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
contract_id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ContractPatch"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ContractDetailResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
add_contract_version_api_energy_contracts__contract_id__versions_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
contract_id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["VersionCreate"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ContractDetailResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
list_energy_meters_api_energy_meters_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["MeterListResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
declare_energy_meter_api_energy_meters_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["MeterDeclareRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["MeterResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
patch_energy_meter_api_energy_meters__meter_id__patch: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
meter_id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["MeterPatchRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["MeterResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_expose_api_expose_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ExposeResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put_expose_api_expose_put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ExposeUpdateRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ExposeUpdateResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_expose_republish_api_expose_republish_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["RepublishResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_profiles_api_modbus_profiles_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusProfilesResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
list_devices_api_modbus_devices_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusDeviceListResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
create_device_api_modbus_devices_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusDeviceCreate"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusDeviceResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_device_api_modbus_devices__uuid__get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
uuid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusDeviceResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete_device_api_modbus_devices__uuid__delete: {
|
||
parameters: {
|
||
query?: {
|
||
cascade?: boolean;
|
||
};
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
uuid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
204: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content?: never;
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
patch_device_api_modbus_devices__uuid__patch: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
uuid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusDeviceUpdate"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusDeviceResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_latest_reading_api_modbus_devices__uuid__latest_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
uuid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusLatestResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_readings_api_modbus_devices__uuid__readings_get: {
|
||
parameters: {
|
||
query?: {
|
||
start?: string | null;
|
||
end?: string | null;
|
||
limit?: number;
|
||
};
|
||
header?: never;
|
||
path: {
|
||
uuid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusReadingsResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_metrics_api_modbus_devices__uuid__metrics_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
uuid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusMetricsResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
test_read_api_modbus_devices__uuid__test_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path: {
|
||
uuid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ModbusTestReadResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_session_api_session_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["SessionResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_login_api_auth_login_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["LoginRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["SessionResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_logout_api_auth_logout_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_change_password_api_auth_password_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["PasswordChangeRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_totp_setup_api_auth_totp_setup_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["TotpSetupResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_totp_enable_api_auth_totp_enable_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["TotpEnableRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
204: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content?: never;
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post_totp_disable_api_auth_totp_disable_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: {
|
||
"X-CSRF-Token"?: string | null;
|
||
};
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["TotpDisableRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
204: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content?: never;
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_totp_status_api_auth_totp_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["TotpStatusResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
publish_from_homeassistant_homeassistant_publish_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
create_location_record_location_record_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
create_poo_record_poo_record_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
notify_latest_poo_poo_latest_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
run_public_ip_check_public_ip_check_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["PublicIPCheckResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
start_ticktick_auth_ticktick_auth_start_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
handle_ticktick_auth_code_ticktick_auth_code_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
}
|