# Expose supported extensions

**URL:** <http://support.symfonium.app/t/expose-supported-extensions/1185>\
**Category:** OpenSubsonic API extensions\
**Created:** [January 4, 2023, 9:36am UTC](http://support.symfonium.app/t/expose-supported-extensions/1185 "2023-01-04T09:36:53Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tolriq](http://support.symfonium.app/user_avatar/support.symfonium.app/tolriq/32/726_2.png) [@Tolriq](http://support.symfonium.app/u/Tolriq)\
**Post date:** [January 4, 2023, 9:36am UTC](http://support.symfonium.app/t/expose-supported-extensions/1185/1 "2023-01-04T09:36:53Z")

</div>

# Type of change

- API extension

# Proposal description

Since most of the extensions should be optional it’s important to for clients to have a way to know what the server actually support.

Server should expose that it support extensions and implement an endpoint that list the supported endpoints.

# Backward compatibility impact

Exposing a new field should not have impacts nor adding a new endpoint.

# API details

1. Expand `subsonic-response`

Add a new field `supportExtensions` : Boolean - True if support at least one extension

1. New endpoint to expose supported extensions

To be discussed:

- Single endpoint returning a list of supported extensions
- Single endpoint returning a list of supported extensions with their status
- Endpoint to ask is a specific feature is supported (Not very efficient)
- …

# Security impacts

# Potential issues

# Alternative solutions

* * *

# Proposal status

Proposed

# Server implementation status

---

<div class="post-metadata">

**Author:** ![deluan](http://support.symfonium.app/user_avatar/support.symfonium.app/deluan/32/928_2.png) [@deluan](http://support.symfonium.app/u/deluan)\
**Post date:** [January 12, 2023, 1:46pm UTC](http://support.symfonium.app/t/expose-supported-extensions/1185/2 "2023-01-12T13:46:49Z")

</div>

Maybe this `supportExtensions` field should be only part of the `ping` endpoint response, to not bloat all other responses?

---

<div class="post-metadata">

**Author:** ![Tolriq](http://support.symfonium.app/user_avatar/support.symfonium.app/tolriq/32/726_2.png) [@Tolriq](http://support.symfonium.app/u/Tolriq)\
**Post date:** [January 12, 2023, 2:14pm UTC](http://support.symfonium.app/t/expose-supported-extensions/1185/3 "2023-01-12T14:14:10Z")

</div>

I don’t know, if we need to do a ping then we can also directly ask for the supported extension and handle error 404 since in all case we will do it after we know it’s supported.

If all servers report the type and version the field is probably not even needed since it’s more or less part of the extensions?

---

<div class="post-metadata">

**Author:** ![deluan](http://support.symfonium.app/user_avatar/support.symfonium.app/deluan/32/928_2.png) [@deluan](http://support.symfonium.app/u/deluan)\
**Post date:** [January 12, 2023, 2:18pm UTC](http://support.symfonium.app/t/expose-supported-extensions/1185/4 "2023-01-12T14:18:16Z")

</div>

From what I see with other clients (DSub, Ultrasonic, substreamer), they send a `ping` when registering the server to validate address/user/password. At this point you would get the `supportExtensions ` field and save it with the server information you already save.

Doesn’t Symfonium do this initial ping to validate address/user/password?

---

<div class="post-metadata">

**Author:** ![Tolriq](http://support.symfonium.app/user_avatar/support.symfonium.app/tolriq/32/726_2.png) [@Tolriq](http://support.symfonium.app/u/Tolriq)\
**Post date:** [January 12, 2023, 2:25pm UTC](http://support.symfonium.app/t/expose-supported-extensions/1185/5 "2023-01-12T14:25:29Z")

</div>

Yes I do amongst other tests, but servers are upgraded during their life time that will need to request the supported endpoints anyway again without running the wizard. Probably based on the fact that the server version have changed in any query return.

Anyway exposing the field in ping does not hurt and works for me.

---

<div class="post-metadata">

**Author:** ![itm](http://support.symfonium.app/letter_avatar_proxy/v4/letter/i/da6949/32.png) [@itm](http://support.symfonium.app/u/itm)\
**Post date:** [January 12, 2023, 7:10pm UTC](http://support.symfonium.app/t/expose-supported-extensions/1185/6 "2023-01-12T19:10:40Z")

</div>

Why not directly use the new endpoint to retrieve the extensions? Will this hurt some “old” servers?

---

<div class="post-metadata">

**Author:** ![Tolriq](http://support.symfonium.app/user_avatar/support.symfonium.app/tolriq/32/726_2.png) [@Tolriq](http://support.symfonium.app/u/Tolriq)\
**Post date:** [January 12, 2023, 7:28pm UTC](http://support.symfonium.app/t/expose-supported-extensions/1185/7 "2023-01-12T19:28:34Z")

</div>

It won’t hurt but might fill them with error in their logs that users would not understand. And some reverse proxy might have security around too many 404.
