Skip to main content
GET
Get details about a user's specific heat pump

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Path Parameters

org_id
string<uuid>
required

The organization ID of the user's organization

user_id
string<uuid>
required

The user ID of the user whom the heat pump belongs to

heat_pump_id
string<uuid>
required

The ID of the specified heat pump

Query Parameters

include_deleted
boolean
default:false

If true, includes soft-deleted

Response

200 - application/json

OK

connection_status
enum<string>
required
Available options:
ok,
warning,
error,
unknown
monitoring_status
enum<string>
required
Available options:
ok,
warning,
error,
unknown
steering_status
enum<string>
required
Available options:
ok,
warning,
error,
unknown
tone
required

The device's console health tone, and the only verdict a client should render: action_required when a partner-resolvable action is pending, else the worst of connection and monitoring, with not_steered for a healthy device nobody optimizes. Do not re-derive it from connection_status/monitoring_status/steering_status — those three are cue-blind and would report a device asking for reauthentication as healthy. The status filter on GET /org/{org_id}/devices and the tone counts on …/devices/summary grade the three statuses only, so a device with a pending action reads action_required here while being counted and filtered under its status tone.

Available options:
good,
warning,
critical,
not_steered
device_model
DeviceModelOutput · object | null
required
owner
OwnerOutput · object
required
steering_reason
enum<string>
required

Why actual_steering_state reads the way it does, from a closed set. unknown covers both a pump no evaluation has judged yet and one whose internal reason is outside the published set; no manufacturer error text is ever carried here.

Available options:
no_schedule,
missing_price_data,
coverage_not_price_backed,
no_commands,
too_few_commands,
retries_in_progress,
no_critical_calls,
commands_failed,
commands_successful,
physical_compliance_degraded,
physical_compliance_low,
physical_compliance_healthy,
steering_permission_not_granted,
subscription_required,
non_steerable,
no_blocker,
unknown
steering_since
string<date-time> | null
required

When the current pair of desired and observed steering states started — whichever of the two changed last. Null until at least one of them has been recorded. It is a start time, not a last-checked time: an evaluation that finds nothing changed leaves it where it was.

steering_changes_due
integer
required

How many mode changes this pump's schedule called for over the last 24 hours. Zero means the plan asked for nothing, which is what tells an idle pump apart from one that was asked to act and did not.

operational_status
enum<string>
required

Where this device sits in the same eight-value vocabulary the customer status uses, so a device and its owner read in one language. Unlike tone it keeps the communication and steering bands apart and separates an open ticket from an action the partner must take.

Available options:
disabled,
communication-error,
steering-error,
actions-required,
troubleshooting,
communication-warning,
steering-warning,
normal
service_health
ServiceHealthOutput · object
required

Whether the platform is doing what it should for this pump, component by component, and where the problem starts when it is not. Every cell is a reading of state the evaluators already recorded, so a cell nothing has observed reads not_measured rather than a guess.

created_at
string<date-time>
required
updated_at
string<date-time>
required
action_needed
boolean
default:false
deprecated

Deprecated — use GET /org/{org_id}/notifications/status for per-device-type counts, or GET /org/{org_id}/notifications/actions?device_id=… for the specifics. True when at least one action is pending against this device and the partner must take that action before the device can resume normal operation.

price_zone
enum<string>
default:AT
Available options:
AT,
AT_HOURLY,
BE,
CH,
EE,
DE_LU,
HR,
HU,
IE_SEM,
IT_CNOR,
IT_CSUD,
IT_NORD,
IT_PUN,
IT_SARD,
IT_SICI,
IT_SUD,
PT,
RO,
SE_1,
SE_2,
SE_3,
SE_4,
UK
is_authenticated
boolean | null
default:false
is_smart_optimization_active
boolean
default:false
is_inverter_forced_mode_enabled
boolean
default:false
actual_steering_state
string
default:unknown
Maximum string length: 20
id
string<uuid> | null
deleted_at
string<date-time> | null

When set, the device is considered deleted.

pause_power_until
string<date-time> | null
is_pause_power_active
boolean
default:false
external_device_id
string | null
default:""
Maximum string length: 255
optimization_score
number | null
current_mode
string | null
comment
string | null
Maximum string length: 300
current_state_last_updated_at
string<date-time> | null
last_monitoring_executed_at
string<date-time> | null
is_inverter_forced_mode_active
boolean
default:false
inverter_forced_mode_since
string<date-time> | null
default:0001-01-01T00:00:00Z
indoor_target_temperature_offset
dhw_standard_temperature
is_hot_water_heating_enabled
boolean | null
default:false
is_space_heating_enabled
boolean | null
default:false
is_pool_heating_enabled
boolean | null
default:false
is_space_cooling_enabled
boolean | null
default:false
heating_policy_name
string | null
Maximum string length: 100
maximum_temperature_limit
minimum_temperature_limit
minimum_dhw_temperature_limit
is_heating_policy_enabled
boolean | null
default:false
heating_policy_last_updated_at
string<date-time> | null
away_mode_start
string<date-time> | null
away_mode_end
string<date-time> | null
is_away_mode_enabled
boolean | null
default:true
away_mode_minimum_temperature_limit
away_mode_last_updated_at
string<date-time> | null
min_solar_power_w
integer
default:2000
operational_mode
string | null
Maximum string length: 100
current_power_consumption_w
integer | null
inlet_temperature
outlet_temperature
dhw_temperature
outdoor_temperature
indoor_actual_temperature
indoor_target_temperature
consumption_last_day_kwh
consumption_last_week_kwh
consumption_last_month_kwh
consumption_last_updated_at
string<date-time> | null
optimization_level
string | null
default:Mid
Maximum string length: 10
temperature_delta_override_for_slight_change
integer | null

Overrides the temperature change amount when steering the device for slight changes. For example, from MIN to LOW. Disclaimer: this depends on the integration support for overrides.

temperature_delta_override_for_significant_change
integer | null

Overrides the temperature change amount when steering the device for significant changes. For example, from MIN to MAX. Disclaimer: this depends on the integration support for overrides.

information_notifications
string[] | null
embeddable_url
string | null

URL to embeddable onboarding form

authorization_url
string | null

Base URL for authorizing with the Podero server

has_notification
boolean
default:false
deprecated

Deprecated — use GET /org/{org_id}/notifications/status or GET /org/{org_id}/notifications/information?device_id=…. True when the device has at least one unread information notification for the owner.

actions
(ReauthenticateProjection · object | InformationActionProjection · object | SocInputRequestedProjection · object)[]
deprecated

Deprecated — use GET /org/{org_id}/notifications/actions?device_id=… instead. Pending actions the partner can take on this device. Each item carries a code discriminator that determines its remaining fields — different action codes can use different resolution mechanisms (URL flow, webhook, in-band command, ...). Empty when nothing is pending.

Action requiring the partner to reauthenticate the user against an upstream provider.

Once more action codes are introduced, expose them as sibling classes (e.g. FooAction with code: Literal["foo"]) and combine them into a discriminated union (Annotated[ReauthenticateAction | FooAction, Field(discriminator="code")]) so OpenAPI consumers can branch on code to select the right shape.