Skip to content
Evgeny Slavnov edited this page Jan 17, 2021 · 11 revisions

PHILIPS TV (2015+) UNOFFICIAL API REFERENCE

Update 2021-01-17: All the docs have been moved to the repo now. I will leave these wiki pages here not to break any links, but for the most recent version of the documentation please check the docs in the repo.

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

  1. Android TVs require pairing, non-Android do not need it
  2. Android TVs need to send username/password with the requests, non-Android do not need it
  3. Android TVs use https://, non-Android TV use http://
  4. 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%'

TABLE OF CONTENTS

        Ambilight:

  1. Ambilight power (GET)

  2. Ambilight power (POST)

  3. Ambilight supported styles (GET)

  4. Ambilight config (GET)

  5. Ambilight config (POST)

  6. Ambilight cached (GET)

  7. Ambilight cached (POST)

  8. Ambilight mode (GET)

  9. Ambilight mode (POST)

  10. Ambilight lounge (GET)

  11. Ambilight lounge (POST)

  12. Ambilight proccesed (GET)

  13. Ambilight measured (GET)

  14. Ambilight topology (GET)

    Applications:

  15. Applications (GET)

  16. Activities current (GET)

  17. Activities launch (POST)

    Audio:

  18. Audio (GET)

  19. Audio (POST)

    TV channels:

  20. Channel list (GET)

  21. EPG source (GET)

  22. Recordings (GET)

    TV settings:

  23. Settings menu (current) (POST)

  24. Settings menu structure (GET)

  25. Settings menu update (POST)

    TV remote control:

  26. Input key (POST)

  27. Power state (GET)

    Other:

  28. System (GET)

  29. Storage (GET)

  30. Timestamp (GET)

  31. Notifychange (POST)