Skip to main content
POST
Register a user's wallbox

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 wallbox belongs to

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,
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
charge_deadline_at
string<time> | null

Recurring daily charge deadline as a local wall-clock time (e.g. 07:00:00) in the wallbox's price zone. It is rolled to its next local occurrence, so it binds on every session. Null uses the fleet default hour. A session-scoped deadline submitted to /session-soc outranks this for the session it was given for.

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
charge_target_max
integer | null
default:80
charge_power_max_w
integer
default:7000
battery_capacity_kwh
hems_min_export_to_start_w
integer
default:1380
hems_max_import_before_stopping_w
integer
default:300
is_charge_policy_enabled
boolean | null
default:false
minimum_charge_limit
integer | null
default:80
is_over_charge_allowed
boolean | null
default:false
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).

car_suspended_at
string<date-time> | null

Timestamp the car itself stopped accepting charge (OCPP SuspendedEV). NULL when not suspended. Drives the not_charging_reason status field.

car_suspension_last_updated_at
string<date-time> | null
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
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
created_at
string<date-time>
required
updated_at
string<date-time>
required
mode
enum<string>
required

User-facing wallbox state pill. Derived from is_authenticated, is_plugged_in, and is_charging. See Wallbox.mode for the truth table.

Available options:
READY,
PLUGGED_IN,
CHARGING,
UNAVAILABLE,
UNKNOWN
connection
enum<string>
required

User-facing wallbox WS-presence dot. Derived from is_authenticated + is_ocpp_connected. See Wallbox.connection for the truth table.

Available options:
online,
offline,
never_connected
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
charge_target_min
integer | null
default:50
charge_target_max
integer | null
default:80
charge_power_max_w
integer
default:7000
battery_capacity_kwh
supports_current_modulation
boolean
default:false
supports_phase_switching
boolean
default:false
phases
integer
default:1
min_amps
integer
default:6
max_amps
integer
default:16
capabilities_last_refreshed_at
string<date-time> | null
electricals_source
string
default:installer_default
Maximum string length: 20
electricals_updated_at
string<date-time> | null
hems_min_export_to_start_w
integer
default:1380
hems_max_import_before_stopping_w
integer
default:300
firmware_version
string | null
Maximum string length: 32
is_ocpp_connected
boolean
default:false
ocpp_connected_last_updated_at
string<date-time> | null
total_energy_delivered_wh
integer | null
is_charge_policy_enabled
boolean | null
default:false
charge_policy_last_updated_at
string<date-time> | null
minimum_charge_limit
integer | null
default:80
charge_deadline_at
string<time> | null

Local wall-clock time in the wallbox's price zone, applied to every session. Empty falls back to the fleet default hour.

is_over_charge_allowed
boolean | null
default:false
charge_time_remaining
integer | null
charge_rate_w
number | null
is_fully_charged
boolean | null
default:false
is_plugged_in
boolean | null
default:false
is_charging
boolean | null
default:false
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
car_suspended_at
string<date-time> | null

Timestamp the car itself stopped accepting charge (OCPP SuspendedEV). NULL when not suspended. Drives the not_charging_reason status field.

car_suspension_last_updated_at
string<date-time> | null
charge_state_last_updated_at
string<date-time> | null
consumption_last_day_kwh
consumption_last_week_kwh
consumption_last_month_kwh
consumption_last_updated_at
string<date-time> | null
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