[READ-ONLY] Mirror of https://github.com/FoxxMD/multi-scrobbler. Scrobble plays from multiple sources to multiple clients docs.multi-scrobbler.app
deezer docker jellyfin koito lastfm listenbrainz maloja mopidy mpris music music-assistant plex scrobble self-hosted spotify subsonic tautulli youtube-music
0

Configure Feed

Select the types of activity you want to include in your feed.

feat(applemusic): add support for custom headers in API requests

Introduced a `headers` configuration option to allow setting custom request headers, such as 'Origin', for Apple Music API requests. Updated configuration schema and source implementation to apply these headers.

Exerra (Jul 14, 2026, 1:03 AM +0300) c404dd53 cae84502

+39 -1
+27
config/applemusic.json.example
··· 1 + [ 2 + { 3 + "id": "myAppleMusic", 4 + "name": "My Apple Music", 5 + "enable": true, 6 + "clients": [], 7 + "data": { 8 + // either key or token needs to be provided 9 + "key": { 10 + "id": "2HPSNJZ88N", 11 + "teamId": "SN6YASW8G4", 12 + "p8": "-----BEGIN PRIVATE KEY-----\nMIGTAgEAMBMGByqGSM49AgEG...-----END PRIVATE KEY-----" 13 + }, 14 + "token": "your-jwt-token-here", 15 + "mediaUserToken": "your-media-user-token-here", 16 + // optional: custom headers for API requests (e.g. Origin) 17 + //"headers": { 18 + // "Origin": "https://music.apple.com" 19 + //} 20 + // optional: polling interval in seconds (default 60) 21 + //"interval": 60 22 + }, 23 + "options": { 24 + "logDiff": true 25 + } 26 + } 27 + ]
+7 -1
src/backend/common/infrastructure/config/source/applemusic.ts
··· 11 11 key?: AppleMusicKey 12 12 token?: string 13 13 mediaUserToken?: string 14 - storefront?: string 14 + /** 15 + * Custom headers to include in every Apple Music API request. 16 + * Useful for setting Origin header, etc. 17 + * 18 + * @examples [{"Origin": "https://music.apple.com"}] 19 + */ 20 + headers?: Record<string, string> 15 21 } 16 22 17 23 export interface AppleMusicSourceConfig extends CommonSourceConfig {
+5
src/backend/sources/AppleMusicSource.ts
··· 53 53 key, 54 54 token, 55 55 mediaUserToken, 56 + headers, 56 57 } = this.config.data || {}; 57 58 58 59 if (!key && !token) { ··· 70 71 mediaUserToken, 71 72 }); 72 73 this.musicKit.token = token!; 74 + } 75 + 76 + if (headers) { 77 + this.musicKit.headers = headers; 73 78 } 74 79 75 80 return true;