Download and install Postman from https://www.postman.com/downloads/. The desktop app is required for WebSocket (WSS) testing.
LG webOS TVs expose a secure WebSocket endpoint:
wss://<TV_IP>:3001
Example:
wss://192.168.1.37:3001
In Postman:
• New → WebSocket Request
• Enter the WSS URL
• Click Connect
LG TVs use a self-signed certificate. In Postman:
Settings → General → SSL certificate verification → OFF
Without this, the connection will fail.
Golden manifest (known-working for audio & power):
{
"id": "register",
"type": "register",
"payload": {
"pairingType":
"PROMPT",
"manifest": {
"appVersion":
"1.0",
"manifestVersion": 1,
"permissions": [
"CONTROL_AUDIO",
"CONTROL_POWER",
"READ_SETTINGS",
"READ_INSTALLED_APPS",
"CONTROL_INPUT_MEDIA_PLAYBACK"
]
}
}
}
Max-permissions manifest (for discovery & testing):
{
"id": "register",
"type": "register",
"payload": {
"pairingType":
"PROMPT",
"manifest": {
"appVersion":
"1.0",
"manifestVersion": 1,
"permissions": [
"LAUNCH",
"LAUNCH_WEBAPP",
"APP_TO_APP",
"CONTROL_AUDIO",
"CONTROL_DISPLAY",
"CONTROL_INPUT_MEDIA_PLAYBACK",
"CONTROL_POWER",
"CONTROL_INPUT_TEXT",
"CONTROL_MOUSE_AND_KEYBOARD",
"READ_SETTINGS",
"READ_INSTALLED_APPS",
"READ_RUNNING_APPS",
"READ_POWER_STATE",
"READ_CURRENT_CHANNEL",
"READ_TV_CHANNEL_LIST",
"READ_COUNTRY_INFO",
"READ_NOTIFICATIONS",
"SEARCH",
"WRITE_NOTIFICATION_TOAST"
]
}
}
}
After approving the pairing prompt on the TV, the response will include:
{
"type":
"registered",
"payload": {
"client-key":
"YOUR_CLIENT_KEY"
}
}
Save this client-key. It uniquely identifies your client.
For future connections, include the client-key in the payload:
{
"id": "register",
"type": "register",
"payload": {
"client-key":
"YOUR_CLIENT_KEY"
}
}
Get Volume: ssap://audio/getVolume
Volume Up: ssap://audio/volumeUp
Volume Down: ssap://audio/volumeDown
Mute: ssap://audio/setMute
Power Off: ssap://system/turnOff
Get Power State (subscribe): ssap://com.webos.service.tvpower/power/getPowerState
Foreground App: ssap://com.webos.applicationManager/getForegroundAppInfo
List Apps: ssap://com.webos.applicationManager/listApps
Launch App: ssap://system.launcher/launch
Toast: ssap://system.notifications/createToast
Switch Input: ssap://tv/switchInput
Get Sound Output: ssap://audio/getSoundOutput
• 401 errors almost always indicate missing permissions
• Some APIs require subscribe:true
• Some services reject calls unless registered with PROMPT pairing
• ECONNRESET usually means the TV closed the socket
• SEARCH may return 404 on newer webOS builds
Includes audio, power, apps, inputs, remote keys,
subscriptions, and settings APIs.
Example URIs:
- ssap://audio/getVolume
- ssap://system/turnOff
- ssap://com.webos.applicationManager/listApps
- ssap://com.webos.service.tvpower/power/getPowerState (subscribe:true)
- ssap://com.webos.service.networkinput/getPointerInputSocket
- ssap://com.webos.service.tv.channel/changeChannel
This section documents a ready-to-import Postman collection
containing:
- Register (max permissions)
- Register with existing client-key
- Audio controls
- App launch (Netflix, Prime, Disney+)
- Input switching
- Remote key emulation
A minimal Node.js library using the ws package is provided.
Capabilities:
- Pairing and re-registration
- Audio and power control
- App launching
- Subscription handling
TLS verification disabled for LG self-signed certificates.
Key points:
- Hubitat drivers must persist client-key
- Pairing should be manual (PROMPT)
- Use WebSocket reconnect logic
- THR mappings align to SSAP remote commands