Get desktop application:
View/edit binary Protocol Buffers messages
Deprecated, should be removed in 2027.8 - https://github.com/esphome/esphome/pull/10318
==================== BLUETOOTH CONNECTION PARAMS ====================
units of 1.25ms
units of 1.25ms
units of 10ms
legacy, for older peers, newer ones should use CLIMATE_PRESET_AWAY in preset Deprecated in API version 1.5
Deprecated in API version 1.5
legacy: command has been removed in 1.13 clients/servers must still send/accept it until the next protocol change Deprecated in API version 1.1
Deprecated in API version 1.1
(message has no fields)
Deprecated in ESPHome 2026.1.0, but kept for backward compatibility with older ESPHome versions that still send this field.
The name of the node, given by "App.set_name()"
The mac address of the device. For example "AC:BC:32:89:0E:A9"
A string describing the ESPHome version. For example "1.10.0"
A string describing the date of compilation, this is generated by the compiler and therefore may not be in the same format all the time. If the user isn't using ESPHome, this will also not be set.
The model of the board. For example NodeMCU
The esphome project details if set
Deprecated in API version 1.9
Deprecated in API version 1.10
The Bluetooth mac address of the device. For example "AC:BC:32:89:0E:AA"
Supports receiving and saving api encryption key
Top-level area info to phase out suggested_area
Indicates if Z-Wave proxy support is available and features supported
Serial proxy instance metadata
REMOVED in ESPHome 2026.1.0: rpc authenticate (AuthenticationRequest) returns (AuthenticationResponse)
Request to close the connection. Can be sent by both the client and server
(message has no fields)
(message has no fields)
Deprecated in API version 1.6
Deprecated in API version 1.6
Message sent at the beginning of each connection Can only be sent by the client and only at the beginning of the connection
Description of client (like User Agent) For example "Home Assistant" Not strictly necessary to send but nice for debugging purposes.
Confirmation of successful connection request. Can only be sent by the server and only at the beginning of the connection
The version of the API to use. The _client_ (for example Home Assistant) needs to check for compatibility and if necessary adopt to an older API. Major is for breaking changes in the base protocol - a mismatch will lead to immediate disconnect_client_ Minor is for breaking changes in individual messages - a mismatch will lead to a warning message
A string identifying the server (ESP); like client info this may be empty and only exists for debugging/logging purposes. For example "ESPHome v1.10.0 on ESP8266"
The name of the server (App.get_name())
Command to transmit infrared/RF data using raw timings
Key identifying the transmitter instance
Carrier frequency in Hz
Number of times to transmit (1 = once, 2 = twice, etc.)
Raw timings in microseconds (zigzag-encoded): positive = mark (LED/TX on), negative = space (LED/TX off)
(message has no fields)
Not yet implemented:
==================== NOISE ENCRYPTION ====================
(message has no fields)
(message has no fields)
Configure UART parameters for a serial proxy instance
Instance index (0-based)
Baud rate in bits per second
Enable hardware flow control
Parity setting
Number of stop bits (1 or 2)
Number of data bits (5-8)
Request current modem control pin states
Instance index (0-based)
Generic request message for simple serial proxy operations
Instance index (0-based)
Request type
Set modem control pin states (RTS and DTR)
Instance index (0-based)
Bitmask of SerialProxyLineStateFlags
Write data to a serial device
Instance index (0-based)
Raw data to write to the serial device
(message has no fields)
==================== BLUETOOTH ====================
==================== IMPORT HOME ASSISTANT STATES ==================== 1. Client sends SubscribeHomeAssistantStatesRequest 2. Server responds with zero or more SubscribeHomeAssistantStateResponse (async) 3. Client sends HomeAssistantStateResponse for state changes.
(message has no fields)
==================== HOMEASSISTANT.SERVICE ====================
(message has no fields)
(message has no fields)
(message has no fields)
Bitmask of which fields are set (see WaterHeaterCommandHasField)
State flags bitmask (bit 0 = away, bit 1 = on)
==================== ALARM CONTROL PANEL ====================
Used in:
Used in:
Used in:
DEPRECATED in ESPHome 2026.1.0 - Password authentication is no longer supported. These messages are kept for protocol documentation but are not processed by the server. Use noise encryption instead: https://esphome.io/components/api/#configuration-variables
If the binary sensor does not have a valid state yet. Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller
Used in:
V1 removed, use V3 variants
Used in:
New field for efficient UUID (v1.12+) Only one of uuid or short_uuid will be set. short_uuid is used for both 16-bit and 32-bit UUIDs with v1.12+ clients. 128-bit UUIDs always use the uuid field for backwards compatibility.
16-bit or 32-bit UUID
Used in:
New field for efficient UUID (v1.12+) Only one of uuid or short_uuid will be set. short_uuid is used for both 16-bit and 32-bit UUIDs with v1.12+ clients. 128-bit UUIDs always use the uuid field for backwards compatibility.
16-bit or 32-bit UUID
Used in:
New field for efficient UUID (v1.12+) Only one of uuid or short_uuid will be set. short_uuid is used for both 16-bit and 32-bit UUIDs with v1.12+ clients. 128-bit UUIDs always use the uuid field for backwards compatibility.
16-bit or 32-bit UUID
Removed in ESPHome 2025.8.0 - use BluetoothLERawAdvertisementsResponse instead
Used in:
Used in: ,
Used in:
Deprecated - only used by deprecated BluetoothLEAdvertisementResponse
Used in:
Deprecated in API version 1.7
Removed in api version 1.7
Added in api version 1.7
Used in:
values same as mode for readability
Used in: , ,
==================== CLIMATE ====================
Used in: , ,
Used in: , ,
For older peers, equal to preset == CLIMATE_PRESET_AWAY Deprecated in API version 1.5
Used in: , ,
==================== LIGHT ====================
Used in: , ,
Used in:
legacy: state has been removed in 1.13 clients/servers must still send/accept it until the next protocol change Deprecated in API version 1.1
Used in:
Used in:
If the date does not have a valid state yet. Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller
If the datetime does not have a valid state yet. Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller
Used in:
Used in: , , , , , , , , , , , , , , , , , , , , , , , ,
Used in:
ESPHome 1.14 (api v1.3) make int a signed value
Message sent by ESPHome to Home Assistant with service execution response data
Matches the call_id from ExecuteServiceRequest
Whether the service execution succeeded
Error message if success = false
Used in: ,
Deprecated in API version 1.6 - only used in deprecated fields
Used in: ,
Deprecated in API version 1.6
==================== IMPORT TIME ====================
(message has no fields)
Message sent by Home Assistant to ESPHome with service call response data
Matches the call_id from HomeassistantActionRequest
Whether the service call succeeded
Error message if success = false
Used in:
Event message for received infrared/RF data
Key identifying the receiver instance
Raw timings in microseconds (zigzag-encoded): alternating mark/space periods
Deprecated in API version 1.1
Used in:
Deprecated in API version 1.1
Used in:
==================== BINARY SENSOR ====================
==================== BUTTON ====================
==================== CAMERA ====================
Deprecated: use feature_flags
Deprecated: use feature_flags
for older peer versions - in new system this is if CLIMATE_PRESET_AWAY exists is supported_presets Deprecated in API version 1.5
Deprecated: use feature_flags
Deprecated: use feature_flags
Deprecated: use feature_flags
==================== COVER ====================
==================== DATETIME DATE ====================
==================== DATETIME DATETIME ====================
(message has no fields)
==================== EVENT ====================
==================== FAN ====================
Listing of infrared instances
Bitfield of InfraredCapabilityFlags
next four supports_* are for legacy clients, newer clients should use color modes Deprecated in API version 1.6
Deprecated in API version 1.6
Deprecated in API version 1.6
Deprecated in API version 1.6
Not yet implemented:
==================== SELECT ====================
Last reset type removed in 2021.9.0 Deprecated in API version 1.5
Used in:
==================== SIREN ====================
==================== SWITCH ====================
==================== TEXT SENSOR ====================
==================== DATETIME TIME ====================
==================== UPDATE ====================
==================== VALVE ====================
Bitmask of WaterHeaterFeature flags
Used in:
==================== LOCK ====================
Used in:
==================== SUBSCRIBE LOGS ====================
Used in: ,
Used in:
Used in:
==================== MEDIA PLAYER ====================
Used in:
Used in:
==================== NUMBER ====================
Used in:
If the number does not have a valid state yet. Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller
Used in:
If the select does not have a valid state yet. Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller
Deprecated in API version 1.5
Used in:
==================== SENSOR ====================
Used in:
If the sensor does not have a valid state yet. Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller
Data received from a serial device, forwarded to clients
Instance index (0-based)
Raw data received from the serial device
Response with current modem control pin states
Instance index (0-based)
Bitmask of SerialProxyLineStateFlags
Used in:
Human-readable port name
Port type (RS232, RS485)
Used in:
Used in:
Response to a SerialProxyRequest (e.g. flush completion or failure)
Instance index (0-based)
Which request type this responds to
Result status
Additional detail on failure (optional)
Used in: ,
Subscribe to receive data from this serial proxy instance
Unsubscribe from this serial proxy instance
Flush the serial port (block until all TX data is sent)
Used in:
Completed successfully; TX drain confirmed
Platform cannot confirm TX drain; success assumed
Driver or hardware error
Timed out before TX completed
Request type not supported by this instance
==================== USER-DEFINES SERVICES ====================
Used in:
Used in:
Status-only response - reports success/error without data payload Value is higher to avoid conflicts with future Home Assistant values
===================== TEXT =====================
Used in:
If the text sensor does not have a valid state yet. Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller
If the Text does not have a valid state yet. Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller
If the time does not have a valid state yet. Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
==================== VOICE ASSISTANT ====================
Used in:
Used in:
Used as response type in: APIConnection.alarm_control_panel_command, APIConnection.bluetooth_device_request, APIConnection.bluetooth_gatt_get_services, APIConnection.bluetooth_gatt_notify, APIConnection.bluetooth_gatt_read, APIConnection.bluetooth_gatt_read_descriptor, APIConnection.bluetooth_gatt_write, APIConnection.bluetooth_gatt_write_descriptor, APIConnection.bluetooth_scanner_set_mode, APIConnection.button_command, APIConnection.camera_image, APIConnection.climate_command, APIConnection.cover_command, APIConnection.date_command, APIConnection.datetime_command, APIConnection.execute_service, APIConnection.fan_command, APIConnection.infrared_rf_transmit_raw_timings, APIConnection.light_command, APIConnection.list_entities, APIConnection.lock_command, APIConnection.media_player_command, APIConnection.number_command, APIConnection.select_command, APIConnection.serial_proxy_configure, APIConnection.serial_proxy_get_modem_pins, APIConnection.serial_proxy_request, APIConnection.serial_proxy_set_modem_pins, APIConnection.serial_proxy_write, APIConnection.siren_command, APIConnection.subscribe_bluetooth_le_advertisements, APIConnection.subscribe_home_assistant_states, APIConnection.subscribe_homeassistant_services, APIConnection.subscribe_logs, APIConnection.subscribe_states, APIConnection.subscribe_voice_assistant, APIConnection.switch_command, APIConnection.text_command, APIConnection.time_command, APIConnection.unsubscribe_bluetooth_le_advertisements, APIConnection.update_command, APIConnection.valve_command, APIConnection.voice_assistant_set_configuration, APIConnection.water_heater_command, APIConnection.zwave_proxy_frame, APIConnection.zwave_proxy_request
(message has no fields)
Bitmask for WaterHeaterCommandRequest.has_fields
==================== WATER_HEATER ====================
Used in: , ,
Bitmask of current state flags (bit 0 = away, bit 1 = on)
Used in: