Skip to main content
PUT
Update details of a user's electric vehicle

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 electric vehicle belongs to

electric_vehicle_id
string<uuid>
required

The ID of the modified electric vehicle

Body

application/json
is_pause_power_active
boolean
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
device_model
DeviceModelInput · object | null
price_zone
enum<string>
default:AT
Available options:
AT,
AT_HOURLY,
BE,
CH,
EE,
DE_LU,
HR,
HU,
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
hems_mode
enum<string>
default:balanced

How an EV's HEMS start/stop thresholds are determined (SC-137).

The preset modes derive the surplus start/stop band at session start from the household PV size (kWp) and the actuation floor — see core_app.services.smart_charging.thresholds.derive_preset_thresholds. The stored raw threshold columns on ElectricVehicle are read only in CUSTOM mode (or as fallback when no usable kWp is known).

EAGER - start on a small surplus fraction of kWp; tolerate more import. BALANCED - the default middle ground. CONSERVATIVE - start only on a large surplus; stop early on import. CUSTOM - the user/operator set the raw threshold columns explicitly.

Available options:
eager,
balanced,
conservative,
custom
deleted_at
string<date-time> | null

When set, the device is considered deleted.

pause_power_until
string<date-time> | null
optimization_score
number | null
comment
string | null
Maximum string length: 300
last_monitoring_executed_at
string<date-time> | null
charge_target_min
integer | null
default:50
is_charge_policy_enabled
boolean | null
default:false
minimum_charge_limit
integer | null
default:100
charge_deadline_at
string<time> | null
default:06:00:00
is_over_charge_allowed
boolean | null
default:false
expected_max_charge_power
integer
default:3600
boost_active_at
string<date-time> | null

Timestamp boost was activated by the workflow. NULL when no boost is active. Retained for the whole boost (REQUESTED before is_charging=true, ONGOING once charging); cleared only when the boost ends.

boost_stop_requested_at
string<date-time> | null

Timestamp the API signalled a boost cancel (owned by the API, not the workflow). Drives BoostState.STOPPING until the workflow ends the boost and clears boost_active_at. Cleared by the API on an un-cancel (re-tap).

boost_for_next_session
boolean
default:false

User tapped boost while unplugged. Workflow consumes on next session start (fires signal_boost on the schedule child) and auto-resets. Means 'don't optimize next session, charge ASAP'.

latitude
number | null
longitude
number | null
coordinates_last_updated_at
string<date-time> | null
geo_fence_distance_m
number
default:100
battery_at_plug_in
number | null

Battery level at latest plug-in event

steering_block_probed_at
string<date-time> | null

Last steering-block recovery probe attempt. NULL = never probed.

minimum_solar_coverage
number
default:1
hems_min_export_to_start_w
integer
default:2000
hems_max_import_before_stopping_w
integer
default:4000
hems_min_production_to_start_w
integer
default:3000
hems_min_production_before_stopping_w
integer
default:2000
information_notifications
string[] | null

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
device_model
DeviceModelOutput · object | null
required
owner
OwnerOutput · object
required
created_at
string<date-time>
required
updated_at
string<date-time>
required
price_zone
enum<string>
default:AT
Available options:
AT,
AT_HOURLY,
BE,
CH,
EE,
DE_LU,
HR,
HU,
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
charge_target_min
integer | null
default:50
charge_target_max
integer | null

Detected OEM-app charge cap (percent). NULL = unknown / no cap detected.

is_charge_policy_enabled
boolean | null
default:false
charge_policy_last_updated_at
string<date-time> | null
minimum_charge_limit
integer | null
default:100
charge_deadline_at
string<time> | null
default:06:00:00
is_over_charge_allowed
boolean | null
default:false
expected_max_charge_power
integer
default:3600
charge_time_remaining
integer | null
charge_rate_w
integer | null
is_fully_charged
boolean | null
default:false
is_plugged_in
boolean | null
default:false
is_charging
boolean | null
default:false
battery_level
integer | null
driving_range
integer | null
battery_capacity_kwh
default:0
charge_state_last_updated_at
string<date-time> | null
boost_stop_requested_at
string<date-time> | null

Timestamp the API signalled a boost cancel (owned by the API, not the workflow). Drives BoostState.STOPPING until the workflow ends the boost and clears boost_active_at. Cleared by the API on an un-cancel (re-tap).

boost_for_next_session
boolean
default:false
latitude
number | null
longitude
number | null
coordinates_last_updated_at
string<date-time> | null
geo_fence_distance_m
number
default:100
consumption_last_day_kwh
consumption_last_week_kwh
consumption_last_month_kwh
consumption_last_updated_at
string<date-time> | null
battery_at_plug_in
number | null

Battery level at latest plug-in event

steering_block_probed_at
string<date-time> | null

Last steering-block recovery probe attempt. NULL = never probed.

minimum_solar_coverage
number
default:1
hems_mode
string
default:balanced
Maximum string length: 16
hems_min_export_to_start_w
integer
default:2000
hems_max_import_before_stopping_w
integer
default:4000
hems_min_production_to_start_w
integer
default:3000
hems_min_production_before_stopping_w
integer
default:2000
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

action_needed
boolean
default:false

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. The actions field on the detail response carries the specifics.

has_notification
boolean
default:false

True when the device has at least one unread information notification for the owner.

boost_state
enum<string>
default:unavailable

Pure boost lifecycle, shared by EVs and wallboxes (SC-154). Describes only the boost, not whether the device is charging — normal optimizer-driven charging is AVAILABLE (boostable), not ONGOING.

Available options:
available,
requested,
unavailable,
ongoing,
stopping
boost_feature_enabled
boolean
default:true
last_boost_triggered_at
string<date-time> | null
last_boost_ended_at
string<date-time> | null
last_boost_end_reason
string | null