PCL for accessing the Subsonic Music Server API in .NET without actually using the REST API
Branch: master
Clone or download
Pull request Compare This branch is 1 commit ahead of Mouaijin:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



PCL for accessing the Subsonic Music Server API in .NET without actually using the REST API


  1. Allow for fluent OOP use of the Subsonic REST API in .Net
  2. Create a completely portable library for development of Subsonic clients on any device
  3. Lower the barrier to entry drastically for use of the API

##Installation You can build and include this binary manually, or retrieve the package using nuget: SubsonicSharp.PCL

##Use Create a SubsonicClient object from the main package by passing in user and server information strings, and then call the methods needed as listed in the official API documentation. These methods are sometimes grouped into property classes according to function groups defined in the API specification, such as MediaRetrieval or ClientBrowser. More information on use and syntax can be found in the test files for the project.

####Media Retrieval Note This library currently supports passing the URL string needed to stream or download files, but does not pass the data itself. This may be addressed with platform-specific DI projects in the future (pull requests welcome), but due to the differences in how each platform handles media retrieval, this is a secondary goal.

##SSL Support Because it is not possible to authenticate SSL certificates from a PCL at this time, to use this library with HTTPS, it is necessary to add some code to the consuming project. The easiest way to trust all certificates is to add the line: ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;

This will modify the validation method for the entire application domain, so it is suggested that one of two actions is taken:

  1. Reset this callback to null after making a call to the API
  2. Set the callback to use a custom authentication method, rather than just returning true

####Contributions to address this problem with a standard DI approach for specific platforms welcomed

##API Coverage Progress


  • System
    • Ping
    • Get License
  • Browsing
    • GetMusicFolders
    • Get Indexes
    • Get Music Directory
    • Get Genres
    • Get Artists
    • Get Artist
    • Get Album
    • Get Song
    • Get Videos
    • Get Album Info (1.14+)
    • Get Album Info 2 (1.14+)
    • Get Artist Info
    • Get Artist Info 2
    • Get Similar Songs
    • Get Similar Songs 2
    • Get Top Songs
    • Get Video Info (1.14+)
  • Media Retrieval
    • Stream
    • Download
    • HLS
    • Get Cover Art
    • Get Lyrics
    • Get Captions
    • Get Avatar
  • Album/Song List
    • Get Album List
    • Get Album List 2
    • Get Random Songs
    • Get Songs By Genre
    • Get Now Playing
    • Get Starred
    • Get Starred 2
  • Searching
    • Search 2
    • Search 3
  • Playlists
    • GetPlaylists
    • Get Playlist
    • Create Playlist
    • Update Playlist
    • Delete Playlist
  • Sharing
    • Get Shares
    • Create Share
    • Update Share
    • Delete Share
  • User Management
    • Get User
    • Get Users
    • Create User
    • Update User
    • Delete User
    • Change Password
  • Bookmarks
  • Get Bookmarks
  • Create Bookmark
  • Delete Bookmarks
  • Get Play Queue
  • Save Play Queue
  • Media Annotation
    • Star
    • Unstar
    • Set Rating
    • Scrobble
  • Podcast
    • Get Podcasts
    • Get Newest Podcasts
    • Refresh Podcasts
    • Create Podcast Channel
    • Delete Podcast Channel
    • Delete Podcast Episode
    • Download Podcast Episode
  • Chat
    • Get Chat Messages
    • Add Chat Message
  • Jukebox
    • Jukebox Control


  • Searching
    • Search (deprecated in 1.4, will not implement)