Subsonic (gonic family)
Meter the Subsonic scrobble endpoint — per-play royalties for gonic and other Subsonic-API servers.
What gets metered
a scrobbled play — the sidecar handles the Subsonic GET /rest/scrobble.view call (via createSubsonicProxy in front of the server, or as the configured scrobble target) and charges RATE per submission.
- Who pays: the listening user (Subsonic username/credential, mapped in
PAYER_WALLETS) - Who gets paid: the artist — mapped from the track id in
CREATOR_WALLETS, or resolved via MusicBrainz whenMUSICBRAINZ_USER_AGENTis set
Attach surface — no fork
The Subsonic API's own scrobble endpoint: either redirect the scrobble target at the sidecar or put the transparent createSubsonicProxy in front of the server — requests pass through untouched, scrobbles are metered. No server modification.
Quickstart
Run the sidecar in Subsonic mode:
PLATFORM=subsonic RATE=100 \
PAYER_WALLETS='{"<subsonic-username>":"0x…"}' \
CREATOR_WALLETS='{"<track-or-artist-id>":"0x…"}' \
FACILITATOR_URL=https://facilitator.example FACILITATOR_API_KEY=… \
npx up-integration
# optional: resolve artists through MusicBrainz instead of a static map
MUSICBRAINZ_USER_AGENT="universal-paywall/0.1 (ops@example.com)"
All values above are placeholders — supply your own facilitator, wallets, and rate.
The shared prerequisites (a deployed StakeVaultFactory, a running
facilitator, a wallet registry) are covered in the admin overview.
Verify
npm test -w @universal-paywall/integrations The Subsonic adapter and proxy are covered by the package's unit suite; the live loop ran against a real gonic instance.
Notes & caveats
Links
- Recipe:
packages/integrations/deploy/README.md— the authoritative attach instructions in the repo. - Testing plan — Subsonic row
- Integration Playbook — how integrations like this one are built.
- Testing plan — this platform's row in the L1→L4 matrix.