Extra services should be handled transparently to the end-user. In the wizard, they should be some sort of enum (e.g. drop-down), and in the actual request they should be selected with a single option. Wiring the services together is on the admin.
With that, I propose the following interface:
LFME_BACKEND_DEFAULT: string: specifies a default backend for /user/ requests.LFME_BACKEND_ADDITIONAL_GNUKEBOX: string,*: specifies a set of additional domains supporting the old libre.fm/gnukebox API, assuming i can track down its documentation.LFME_BACKEND_ADDITIONAL_LISTENBRAINZ: string,*: specifies a set of additional domains supporting the listenbrainz API.LFME_BACKEND_ADDITIONAL_AUDIOSCROBBLER: string,*: specifies a set of additional domains supporting the last.fm API.LFME_BACKEND_ADDITIONAL_HACIENDA: string,*: specifies a set of additional domains supporting the hacienda API, when documentation for it is released.?backend=(last.fm|libre.fm|listenbrainz.com|{LFME_BACKEND_ADDITIONAL_*}): the first 3 will be builtin, although it will only be mandatory to specify API keys for one, plus the keys for $LFME_BACKEND_DEFAULTuser.service: never nulluser.service.type: (audioscrobbler|listenbrainz|gnukebox|hacienda)user.service.domain: the string for the service's domain.