Update 2020-30-12: Two years into this project and I have finally thought of looking deeper into my Android TV. I was able to extract and decode the API and now I have its full source code in a fully readable format. I did not spend too much time researching it since I feel like all the endpoints have already been discovered, but it's certainly an interesting read for anybody curious about how this API works/who developed it for Philips. You can see all the endpoints, parameters they take and the exact logic for any part of the API - anything you want. You'll need to grab /system/priv-app/xtv/oat/arm/xtv.odex
, then use vdexExtractor and jadx to see the Java code.
The TV's API is roughly based on JointSpace with a current version of 6.2. The only available official documentation that I was able to find is for JointSpace version 1, which is incredibly outdated.
Since no official API documentation is available, I've decided to collect and document to the best of my knowledge all endpoints that are working in API version 6+ (Philips TVs 2016-2018). Most of these endpoints should work for API version 5 as well (2015 Philips TVs), but your mileage may vary. This API reference is based on:
- Official JointSpace documentation
- Community endpoints (various endpoints discovered by the community over the years)
- Endpoints discovered by using a man-in-the-middle attack on an iPhone running an official Philips TV remote app (this finally allowed to discover an endpoint responsible for toggling 'Ambilight + Hue' mode among other things)
All endpoints in API reference are tested and fully working unless explicitly marked otherwise. Any comments, new endpoints and fixes to the API reference are incredibly welcome.
Differences between Android TVs and non-Android TVs
- Android TVs require pairing, non-Android do not need it
- Android TVs need to send username/password with the requests, non-Android do not need it
- Android TVs use
https://
, non-Android TV usehttp://
- Android TVs primarily use port 1926, non-Android TV use port 1925 only
General endpoint format
%protocol% + %ip_address% + ":" + %port% + "/" + %api_version% + "/" + %endpoint%
Sending requests
Send requests with the tool's get
or post
commands or use cURL:
curl -X GET --digest --insecure -u %username%:%password% https://%ip_address%:1926/6/%endpoint%
curl -X POST --digest --insecure -u %username%:%password% https://%ip_address%:1926/6/%endpoint% -d '%body%'
Ambilight:
-
Applications:
-
Audio:
-
TV channels:
-
TV settings:
-
TV remote control:
-
Other: