Skip to content

API documentation for Vizio SmartCast TV's

Notifications You must be signed in to change notification settings

exiva/Vizio_SmartCast_API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 

Repository files navigation

Vizio SmartCast API (2016+ Models)

API Clients

The following API clients are available based on these API docs:

Overview

  • On firmware versions older than 4.0 the API server runs on port 9000, on 4.0 and newer the API server runs on port 7345. Both are using https and will not respond to http.

    Don't port forward it. There are some commands that can be executed without authentication.

  • Certificate's CN is BG2.prod.vizio.com so will likely fail SSL validation.

  • API includes a Status object, URI requested, and Execution time on every response. It's included below, but excluded in all of the examples for redundancy.

     {
     	...
     	"STATUS": {
     		"RESULT": String,
     		"DETAIL": String
     	},
     	"URI": String,
     	"TIME": String
     }
    

    API does not seem to be fully restful, and doesn't apply proper status codes in responses. Verify request's result from the status object. Result codes included where applicable.

  • All requests made should contain a JSON body with the header Content-Type: application/json set.

  • When authentication is required, send Auth: AUTH_TOKEN header with request.

  • This does not cover any MyVizio Account APIs.

  • See an issue? Have a question? Open an issue, or find me on Mastodon @exiva@social.lol

Display Discovery

Find IP Address

Perform an SSDP query for ST: urn:schemas-kinoma-com:device:shell:1

Example

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: 1
ST: urn:schemas-kinoma-com:device:shell:1

Pairing

required to control set.

Start Pairing

PUT /pairing/start

Body

{
	"DEVICE_NAME": String,
	"DEVICE_ID": String
}

Response

{
	"ITEM": {
		"PAIRING_REQ_TOKEN": Integer,
		"CHALLENGE_TYPE": Integer
	},
	...
}

cURL Example

curl -k -H "Content-Type: application/json" -X PUT -d '{"DEVICE_ID":"12345","DEVICE_NAME":"cURL Example"}' https://myVizioTV:9000/pairing/start

Notes

Save DEVICE_ID, you'll need it for the challenge or to cancel pairing.

Submit Challenge

PUT /pairing/pair

Body

{
  "DEVICE_ID": String,
  "CHALLENGE_TYPE": Integer,
  "RESPONSE_VALUE": String,
  "PAIRING_REQ_TOKEN": Integer
}

Response

{
	"ITEM": {
		"AUTH_TOKEN": String
	},
	...
}

cURL Example

curl -k -H "Content-Type: application/json" -X PUT -d '{"DEVICE_ID": "12345","CHALLENGE_TYPE": 1,"RESPONSE_VALUE": "1234","PAIRING_REQ_TOKEN": 654321}' https://myVizioTV:9000/pairing/pair

Notes

RESPONSE_VALUE key is the code displayed on the TV.
PAIRING_REQ_TOKEN key is returned from the /pairing/start request.

Cancel Pairing

PUT /pairing/cancel

Body

{
  "DEVICE_ID": String,
  "CHALLENGE_TYPE": Integer,
  "RESPONSE_VALUE": "1111",
  "PAIRING_REQ_TOKEN": Integer
}

Response

{
	"ITEM": {},
	...
}

cURL Example

curl -k -H "Content-Type: application/json" -X PUT -d '{"DEVICE_ID":"12345","CHALLENGE_TYPE": 1,"RESPONSE_VALUE": "1111","PAIRING_REQ_TOKEN": 0}' https://myVizioTV:9000/pairing/cancel

Notes

For cancellation, RESPONSE_VALUE should be hard-coded to "1111".

Appendix

Status Results

RESULT Meaning
INVALID_PARAMETER Malformed Request
MAX_CHALLENGES_EXCEEDED Too many failed pair attempts
SUCCESS Successfully Paired
PAIRING_DENIED Incorrect Pin
VALUE_OUT_OF_RANGE Pin out of range
CHALLENGE_INCORRECT Incorrect challenge
BLOCKED Pairing in progress already

Remote Control Methods

Turning Set on From Sleep

The HTTP API server turns off when the set is sleeping. Send a WoL magic packet to turn it on. not supported when set runs in Eco mode.

Power State

Authenticated

GET /state/device/power_mode

Response

{
	"ITEMS": [{
		"TYPE": "T_VALUE_V1",
		"CNAME": "power_mode",
		"NAME": "Power Mode",
		"VALUE": 1
	}],
	"PARAMETERS": {
		"HASHONLY": "FALSE",
		"FLAT": "TRUE",
		"HELPTEXT": "FALSE"
	}
	...
}

cURL Example

curl -k -H "Content-Type: application/json" -H "AUTH: 123A456B" -X GET https://myVizioTV:9000/state/device/power_mode

Send remote control button press

Authenticated

PUT /key_command/

Body

{
	"KEYLIST": [{
		"CODESET": Integer,
		"CODE": Integer,
		"ACTION": String
	}]
}

cURL Example

curl -k -H "Content-Type: application/json" -H "AUTH: 123A456B" -X PUT -d '{"KEYLIST": [{"CODESET": 5,"CODE": 0,"ACTION":"KEYPRESS"}]}' https://myVizioTV:9000/key_command/

Notes

You can string together long remote actions by adding to the keylist array.

Appendix

Action
KEYDOWN
KEYUP
KEYPRESS
Event Name Codeset Code
Volume Down 5 0
Volume Up 5 1
Mute Off 5 2
Mute On 5 3
Mute Toggle 5 4
Cycle Input 7 1
Channel Down 8 0
Channel Up 8 1
Previous Ch 8 2
Power Off 11 0
Power On 11 1
Power Toggle 11 2

Video Input Methods

Get currently selected input

Authenticated

GET /menu_native/dynamic/tv_settings/devices/current_input

Response

{
	"ITEMS": [{
		"NAME": String,
		"CNAME": String,
		"TYPE": String,
		"VALUE": String,
		"ENABLED": Boolean,
		"HASHVAL": Integer
	}],
	"NAME": String,
	"HASHLIST": Array,
	"GROUP": String,
	"PARAMETERS": {
		"HASHONLY": String,
		"FLAT": String,
		"HELPTEXT": String
	},
	...
}

cURL Example

curl -k -H "Content-Type: application/json" -H "AUTH: 123A456B" -X GET https://myVizioTV:9000/menu_native/dynamic/tv_settings/devices/current_input

Get list of inputs

Authenticated

GET /menu_native/dynamic/tv_settings/devices/name_input

Response

{
	"ITEMS": [{
		"NAME": String,
		"CNAME": String,
		"TYPE": String,
		"VALUE": {
			"NAME": String,
			"METADATA": String
		},
		"ENABLED": Boolean,
		"HASHVAL": Integer
	},
	...
	],
	"NAME": String,
	"HASHLIST": Array,
	"GROUP": String,
	"PARAMETERS": {
		"HASHONLY": String,
		"FLAT": String,
		"HELPTEXT": String
	},
	...
}

cURL Example

curl -k -H "Content-Type: application/json" -H "AUTH: 123A456B" -X GET https://myVizioTV:9000/menu_native/dynamic/tv_settings/devices/name_input

Change Input

Authenticated

PUT /menu_native/dynamic/tv_settings/devices/current_input

Body

{
	"REQUEST": "MODIFY",
	"VALUE": String,
	"HASHVAL": Integer
}
Expected Values
PUT current_input From name_input
VALUE ITEMS[x].NAME
HASHVAL Current HashValue from a "get" of current_input

Note: The hashvalue is from the current input, not the list of inputs.

cURL Example

curl -k -H "Content-Type: application/json" -H "AUTH: 123A456B" -X PUT -d '{"REQUEST": "MODIFY","VALUE": "HDMI-1","HASHVAL": 1384176329}' https://myVizioTV:9000/menu_native/dynamic/tv_settings/devices/current_input

Launch TV App

Authenticated

PUT /app/launch

Body

{
	"VALUE": {
		"MESSAGE": String,
		"NAME_SPACE": Integer,
		"APP_ID": String
	}
}

See App IDs for Values

Display Settings

Read Settings

Authenticated

GET /menu_native/dynamic/tv_settings/SETTINGS_CNAME (See Settings CNAMEs for SETTINGS_CNAME values)

Response

{
	"ITEMS": [{
		"NAME": String,
		"CNAME": String,
		"TYPE": String,
		"VALUE": String,
		"ENABLED": Boolean,
		"HASHVAL": Int,
		"ELEMENTS": Array
	},
	...
	],
	"NAME": String,
	"HASHLIST": Array,
	"GROUP": String,
	"PARAMETERS": {
		"HASHONLY": String,
		"FLAT": String,
		"HELPTEXT": String
	},
	...
}

Notes

ELEMENTS array is conditional.

cURL Example

curl -k -H "Content-Type: application/json" -H "AUTH: 123A456B" -X GET https://myVizioTV:9000/menu_native/dynamic/tv_settings/picture

Write Settings

Authenticated

Warning Writing an invalid value may have the potential to brick sets. Use the TYPE key from SETTINGS_CNAME ITEMS array to determine the data type to write.

PUT /menu_native/dynamic/tv_settings/SETTINGS_CNAME/ITEMS_CNAME

Body

{
	"REQUEST": "MODIFY",
	"HASHVAL": Integer,
	"VALUE": String/Integer/Boolean
}

Notes

Obtain ITEMS_CNAME and HASHVAL values from the SETTINGS_CNAME ITEMS array.

cURL Example

curl -k -H "Content-Type: application/json" -H "AUTH: 123A456B" -X PUT -d '{"REQUEST": "MODIFY", "HASHVAL": 831638627, "VALUE": "On"}' https://myVizioTV:9000/menu_native/dynamic/tv_settings/picture/game_low_latency

Appendix

Settings CNAME's

SETTINGS_CNAME
picture
picture/picture_size
picture/picture_position
picture/picture_mode_edit
picture/color_calibration
picture/color_calibration/color_tuner
picture/color_calibration/calibration_tests
audio
timers
network
channels
closed_captions
devices
system
system/system_information
system/system_information/tv_information
system/system_information/tuner_information
system/system_information/network_information
system/system_information/uli_information
mobile_devices
cast

App IDs

Name Name_Space App_id Message
Hulu 2 3 None
Prime Video 2 4 None
Crackle 2 5 None
iHeartRadio 2 6 None
Fandango Now 2 7 None
Plex 2 9 None
NBC 2 10 None
Baeble 2 11 None
Curiosity Stream 2 12 None
Newsy 2 15 None
Dove Channel 2 16 None
ConTV 2 18 None
Toon Goggles 2 21 None
Vudu 2 21 https://my.vudu.com/castReceiver/index.html?launch-source=app-icon
WatchFree 2 22 None
FilmRise 2 24 None
TasteIt 2 26 None
AsianCrush 2 27 https://html5.asiancrush.com/?ua=viziosmartcast
DAZN 2 34 None
Flixfling 2 36 None
CBS All Access 2 37 None
FitFusion by Jillian Michaels 2 39 None
Redbox 2 41 None
CBS CBS News 2 42 None
Cocoro TV 2 55 None
Love Destination 2 57 None
Haystack TV 0 898AF734 {"CAST_NAMESPACE":"urn:x-cast:com.google.cast.media","CAST_MESSAGE":{"type":"LOAD","media":{},"autoplay":true,"currentTime":0,"customData":{"platform":"sctv"}}}
XUMO 0 36E1EA1F {"CAST_NAMESPACE":"urn:x-cast:com.google.cast.media","CAST_MESSAGE":{"type":"LOAD","media":{},"autoplay":true,"currentTime":0,"customData":{}}}
Pluto TV 0 E6F74C01 {"CAST_NAMESPACE":"urn:x-cast:tv.pluto","CAST_MESSAGE":{"command":"initializePlayback","channel":"","episode":"","time":0}}
Netflix 3 1 None
YouTubeTV 5 1 None

A current list of app_id's can be found at http://hometest.buddytv.netdna-cdn.com/appservice/vizio_apps_prod.json and NAME_SPACE and MESSAGE values needed can be found in http://hometest.buddytv.netdna-cdn.com/appservice/app_availability_prod.json

Misc

Status Responses

RESULT
success
failure
uri_not_found
aborted
busy
blocked
requires_pairing
requires_system_pin
requires_new_system_pin
net_wifi_needs_valid_ssid
net_wifi_already_connected
net_wifi_missing_password
net_wifi_not_existed
net_wifi_missing_password
net_wifi_needs_valid_ssid
net_wifi_auth_rejected
net_wifi_connect_timeout
net_wifi_connect_aborted
net_wifi_connection_error
net_ip_manual_config_error
net_ip_dhcp_failed
net_unknown_error

Types

ITEM
T_UNKNOWN_V1
T_NO_TYPE_V1
T_HIDDEN_NETWORK_V1
T_DST_LIST_V1
T_MENU_V1
T_MENU_X_V1
T_LIST_V1
T_LIST_X_V1
T_VALUE_ABS_V1
T_VALUE_V1
T_STRING_V1
T_PIN_V1
T_IP_ADDRESS_V1
T_MAC_ADDRESS_V1
T_MATRIX_V1
T_HEADER_V1
T_ROW_V1
T_DEVICE_V1
T_ACTION_V1
T_APS_V1
T_AP_V1
T_PASSWORD_V1
T_SOFTAP_CONFIG_V1
T_LIST_PAIRED_DEVICES_V1
T_TEST_CONNECTION_V1
T_IETF_2822_STRING_V1
T_DATE_V1
T_LIST_CEC_DEVICE_V1
T_MANUAL_IP_CONFIG_V1
T_VIZIO_DEVICE_INFO_V1
T_UPDATE_INFO_V1
T_ARRAY_V1
T_EMAIL_V1
T_LIST_VALUES_V1
T_CEC_DEVICE_V1

Additional Remote Codes

ed: I can't see where these are used, but included anyway for completion.

Note

Add a MODIFIER pair to /key_command request if used.

Event Name Codeset Code Modifier
0 0 48
1 0 49
& 0 38
* 0 42
Backspace 0 8
Bel 0 7
Cancel 0 14
, 0 44
$ 0 36
Esc 0 27
! 0 33
\ 0 47
- 0 45
( 0 40
Linefeed 0 10
% 0 37
. 0 46
+ 0 43
# 0 35
" 0 34
Return 0 13
) 0 41
' 0 39
Space 0 52
Tab 0 9
Audio MTS 5 5 TYPE
MTS Cycle 5 6 TYPE
Picture Mode 6 0
Wide Mode 6 1
Wide Cycle 6 2

Additional Remote Code Sets

Name Codeset
ASCII 0
Key Modifier 1
Transport 2
D-Pad 3
Nav 4
Audio 5
Video 6
Input 7
CH 8
Color 9
Launch 10
Power 11
3D 12
CC 13
Factor 14

About

API documentation for Vizio SmartCast TV's

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published