# X-Plex-Client-Profile-Extra Documentation

**URL:** <https://forums.plex.tv/t/x-plex-client-profile-extra-documentation/599464>\
**Category:** Dev/API Corner\
**Tags:** server-windows, server-mac, server-linux, plex-web\
**Created:** [June 4, 2020, 2:55am UTC](https://forums.plex.tv/t/x-plex-client-profile-extra-documentation/599464 "2020-06-04T02:55:41Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Conicaw](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/conicaw/32/189663_2.png) [@Conicaw](https://forums.plex.tv/u/Conicaw)\
**Post date:** [June 4, 2020, 2:55am UTC](https://forums.plex.tv/t/x-plex-client-profile-extra-documentation/599464/1 "2020-06-04T02:55:41Z")

</div>

I want to know about how the X-Plex-Client-Profile-Extra header works, what options are available, what they do, and how they interface with the xml profile files.

Looking around a bit, I see these are some of the valid directives for the header:

- append-transcode-target-codec
- restrict-transcode-target-codec
- add-transcode-target-audio-codec
- add-transcode-target-settings
- add-direct-play-profile

One example of a valid value for this header is:

```auto
add-transcode-target-audio-codec(type=videoProfile&context=streaming&protocol=hls&audioCodec=%s)+add-limitation(scope=videoAudioCodec&scopeName=%s&type=upperBound&name=audio.channels&value=6&onlyTranscodes=true&replace=true)

```

In my specific case, I want to know this because I want to start with the Web profile (`X-Plex-Device: Web`) and modify itwith that header to make it only give webvtt subtitles instead of ass.

I’ve googled around a ton and see no documentation on this header at all. I would appreciate any help or information.

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [June 4, 2020, 4:48am UTC](https://forums.plex.tv/t/x-plex-client-profile-extra-documentation/599464/2 "2020-06-04T04:48:47Z")

</div>

That information is proprietary to the Plex apps.  
You might be able to arrange a NDA (Non-Disclosure Agreement) with HQ but it’s not something which can be discussed in an open forum.

---

<div class="post-metadata">

**Author:** ![Conicaw](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/conicaw/32/189663_2.png) [@Conicaw](https://forums.plex.tv/u/Conicaw)\
**Post date:** [July 9, 2020, 3:42am UTC](https://forums.plex.tv/t/x-plex-client-profile-extra-documentation/599464/3 "2020-07-09T03:42:03Z")

</div>

Can you provide more details about who to contact? How would this affect development if the information were used on an open source project?

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [July 9, 2020, 4:27am UTC](https://forums.plex.tv/t/x-plex-client-profile-extra-documentation/599464/4 "2020-07-09T04:27:41Z")

</div>

You can use the contact form at www.plex.tv (at the bottom)

---

<div class="post-metadata">

**Author:** ![Zekkai](https://avatars.discourse-cdn.com/v4/letter/z/977dab/32.png) [@Zekkai](https://forums.plex.tv/u/Zekkai)\
**Post date:** [July 16, 2020, 1:30am UTC](https://forums.plex.tv/t/x-plex-client-profile-extra-documentation/599464/5 "2020-07-16T01:30:08Z")

</div>

It’s pretty easy to figure out on your own using verbose logging and header/Url param interception&modification.

Honestly can’t even fathom how something so easy to reverse engineer (read as: trial and error with HTTP) could require an NDA​:sweat\_smile:🤣.

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [July 16, 2020, 2:06am UTC](https://forums.plex.tv/t/x-plex-client-profile-extra-documentation/599464/6 "2020-07-16T02:06:13Z")

</div>

Plex is officially closed-source and a for-profit company.  
As such, they own the API.  
I’m not the person who is authorized to say “Sure, go use it as you see fit”.  
That’s all I’m saying. It requires HQ / the business folks to do that. (chain of command stuff).

---

<div class="post-metadata">

**Author:** ![Conicaw](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/conicaw/32/189663_2.png) [@Conicaw](https://forums.plex.tv/u/Conicaw)\
**Post date:** [July 25, 2020, 5:09am UTC](https://forums.plex.tv/t/x-plex-client-profile-extra-documentation/599464/7 "2020-07-25T05:09:12Z")

</div>

I am likely going to just accept ASS subtitles and use [Subtitle Octopus](https://github.com/Dador/JavascriptSubtitlesOctopus) to render them instead. Plex appears to use libjass ([Plex licenses](https://support.plex.tv/articles/204096476-license-information/)) which is now no longer worked on, and the project recommends using Subtitle Octopus instead. Probably for the best since it’s a bit more fully features than webvtt.

Edit: Subtitle Octopus is looking like it requires the full subtitle file before it starts doing anything. Plex doesn’t give the entire subtitle at once but instead streams it over time. I’m going to use libjass instead since it has a nice method [minimalASS](https://arnavion.github.io/libjass/api.xhtml#libjass.parser.StreamParser.minimalASS). I have gotten stuff partially working with libjass. I’m having to write a custom stream reader for it to support seeking around in the video and having it restart the xhr or fetch request for the subtitles.
