Skip to main content
GET
Get a user's electric vehicles

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

Query Parameters

include_deleted
boolean
default:false

If true, includes soft-deleted

Response

200 - application/json

One object per electric vehicle of the user.

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
support
SupportCountsOutput · object
required

The device's pending cues per Support category.

health
enum<string> | null
required

The device's service-health verdict: unhealthy when any component reads no, else healthy when any reads yes, else unknown. As of the last hourly sweep for heat pumps and electric vehicles; unknown until a new device is first swept; null when soft-deleted.

Available options:
unhealthy,
unknown,
healthy
device_model
DeviceModelOutput · object | null
required
owner
OwnerOutput · object
required
price_zone
enum<string>
required
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
created_at
string<date-time>
required
updated_at
string<date-time>
required
charging_status
enum<string> | null
required

What is happening with the vehicle now, as one value from a closed set. Render it as it is: the server decides it from the plug, the charge, the open session, its plan, whether HEMS drives the charge, the boost and pending owner actions, so a client must not re-derive it from other fields. The first value whose condition holds is served:

  • action_required: the owner must act before steering can work — the same condition as tone = action_required.
  • unknown: no reading says whether the cable is in.
  • unplugged: the cable is not in.
  • plugged_in: the cable is in and no charging session is open, or no other value applies.
  • away_from_home: the open session is not at the home location, so it is not steered.
  • smart_charging_off: the vehicle's current mode steers neither on prices nor on solar.
  • boosting: a boost is requested, running or stopping (boost_state).
  • solar_charging: HEMS drives the charge from surplus and the charge is observed. A solar top-up of a car already at its target reads this too.
  • target_reached: the car is at its charge target and nothing in the session will charge it further. An owner who allows charging past the target lets a solar top-up or the car's own charge continue, so then this value is served only while neither can happen.
  • waiting_for_solar: solar is steered, no charge is observed, and HEMS holds the charge or no price plan decides it.
  • waiting_for_prices: the plan waits for the day-ahead prices it needs.
  • planning: the session is open and its plan is not made yet.
  • charging_planned: the plan charges later.
  • smart_charging: the plan charges now and the charge is observed.
  • starting: the plan charges now and no charge is observed yet.
  • charging: the charge is observed and no plan decides it. The plan values (waiting_for_prices to starting) are served while a price plan decides the charge. A live plan is served whatever the current mode says, because a running engine keeps the mode it started with until the vehicle is unplugged; planning is served only while the mode steers on prices. Switching steering off shows smart_charging_off at once. With both price and solar steering, a plan that still decides the charge wins over waiting for solar, except between two plan segments while HEMS holds the charge. A charge is observed when the vehicle reports it, or the wallbox its session is routed through does. null for a soft-deleted vehicle, which has no live state. The value is computed when it is read and is never stored. A client must map a value it does not know to the raw plug state.
Available options:
action_required,
unknown,
unplugged,
plugged_in,
away_from_home,
smart_charging_off,
boosting,
target_reached,
solar_charging,
waiting_for_solar,
waiting_for_prices,
planning,
charging_planned,
smart_charging,
starting,
charging
service_health
ServiceHealthOutput · object
required

Whether the platform is doing what it should for this vehicle, 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.

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.

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

Observed steering: active, degraded, inactive, blocked, disabled, or unevaluated. Unknown means no observation.

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_power_measured_at
string<date-time> | null
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
plug_state_evidence_at
string<date-time> | null

Event time of the last accepted canonical plug-state write, from any source (Smartcar telemetry, OCPP wire). The arbitration watermark: a claim whose evidence time is not newer than this is stale and does not write. NULL = no claim yet, so anything wins.

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
token_refresh_status
string | null
Maximum string length: 16
token_refresh_last_succeeded_at
string<date-time> | null
token_refresh_degraded_since
string<date-time> | null
token_refresh_terminal_at
string<date-time> | null
token_refresh_terminal_reason
string | null
Maximum string length: 200
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

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