Where capabilities live
There’s no separate endpoint.commands, conflictStrategies, and settings come back on the device read.
commands.charge.parameters.target on the read becomes action.parameters.target on the push, sent as { "value": 80, "unit": "percent" }.
Present means supported
If a key is present, the device supports it. If it’s absent, the request is refused with422 DEVICE_NOT_CAPABLE. There is no supported: false.
parameters: {} means the command is supported and takes no parameters.
When a device can’t do something
There are two different answers. Handle them differently.
An immediate
DEVICE_NOT_CAPABLE can carry details naming the refused value and what the device offers, such as deviceCapabilities.supportedModes, supportedExecution, or supportedStrategies. A failed action carries only errorCode and errorMessage. See Error codes.
Units and bounds
Each parameter declares aunit, and optional min, max, and step. A missing bound is open-ended on that side. step is the increment a value must land on, counted from min.
Bounds are per device, not per type. Two batteries from different manufacturers can declare different ranges for the same parameter, so always read them from the device.
Execution
execution lists the timings each command accepts. Details are in Scheduling.
Timings are per command. A battery can accept
charge as windowed while auto.balance is immediate or scheduled only. auto.* commands are never windowed.
Conflict strategies
conflictStrategies lists the onConflict values the device accepts when a new push collides with an active action. See Conflicts.
Commands by device type
This is the full set per type. Each device declares the subset it supports.
Read-only device types
Solar inverters and vehicles report state only. Their reads have nocommands, conflictStrategies, or settings. A POST to /solar-inverter/{deviceId} or /vehicle/{deviceId} returns 405 METHOD_NOT_ALLOWED, with the allowed methods in the Allow header.
Live access and maturity
Which brands your end users can link in live depends on your account and each integration’s maturity: experimental, beta, or general. General integrations are open to accounts enabled for live; earlier stages need early-access approval. Sandbox includes every brand. None of this appears on the device read, which shows only what the linked device offers.Coming soon. Live control of thermostats. Sandbox supports every thermostat command.
Next steps
Push
Turn a capability into a command.
Settings
Read and change persistent device configuration.
Scheduling
Run a command later or across a window.
Pull
Everything else on the device read.