Qobuz playback broken: track/getFileUrl returns HTTP 410 (endpoint deprecated by Qobuz)
Maintainers usually reply within 6 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
Research direction
Start with external/qobuz/client.go, especially trackFileURL, apiFileURL, and validateSecret; then review the SofusA/qobine reverse-engineering notes referenced by the bundle scraper. Reproduce with a Qobuz account and the steps in the issue. Done means playback works with the current Qobuz endpoints and secret-validation errors distinguish endpoint deprecation from invalid signatures.
Written by the indexing model from the issue text.
Description
Summary
Qobuz playback is broken as of ~2026-08-28: every track fails with ERR: qobuz: playlist/get: HTTP 401 on a stale token, and after cliamp qobuz reset + fresh OAuth sign-in, authentication succeeds but playback fails with HTTP 410 from track/getFileUrl, followed by ERR: qobuz: no valid signing secret found.
Root cause
cliamp resolves streams via the legacy track/getFileUrl endpoint (external/qobuz/client.go, trackFileURL). Qobuz now returns HTTP 410 Gone for it — the endpoint has been deprecated. The current Qobuz web player uses /file/url + /session/start, which returns segmented AES-128-CTR-encrypted CMAF (qbz-1) instead of a plain file URL.
The code already documents this risk in the apiFileURL comment:
The current web player instead uses /file/url + /session/start, which returns segmented, AES-128-CTR-encrypted CMAF (qbz-1) requiring a full key-derivation + per-frame decryption pipeline. ... this is a known, monitored assumption.
That assumption just stopped holding.
Secondary bug: misleading error on secret validation
validateSecret() treats any trackFileURL error as an invalid secret, so a 410 from the dead endpoint surfaces as qobuz: no valid signing secret found during sign-in. This is a red herring — the secrets are still valid. Verified by re-scraping the current bundle (play.qobuz.com, /resources/8.2.0-b034/bundle.js) and testing each secret against track/getFileUrl with cliamp's exact trackFileURLSig scheme:
- Berlin secret
abb2...→ HTTP 401 (signature accepted, auth required — secret is VALID) - Other secrets → HTTP 400 invalid signature (expected, they're timezone-variant decoys)
Since validateSecret probes an authenticated endpoint, all candidates "fail" (410 without auth / with auth) and interactive sign-in fails before credentials are saved.
Repro
cliamp qobuz reset- Start cliamp, select Qobuz, complete OAuth sign-in in browser (succeeds)
- Playing any track →
ERR: qobuz: ... HTTP 410; during fresh sign-in →ERR: qobuz: no valid signing secret found
Suggested fix
- Migrate to the
/file/url+/session/startpipeline (qbz-1 CMAF decryption), per the SofusA/qobine reverse-engineering notes the bundle scraper already references. - Interim: distinguish 410 from signature failure in
validateSecretso auth completes and the error is actionable.
Environment
- cliamp v1.63.2 (latest release)
- Linux x86_64
- Qobuz Studio subscription
- Dominant language
- Go
- Stars
- 4.4k
- Forks
- 307
- Avg merge
- 8d 12h
- Merged PRs (30d)
- 28
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from bjarneo/cliamp
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 6 days
-
The radio playlist are limited to 200 tracksPossibly taken @manuaudio claimed this today. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
bjarneo/cliamp#681 · 1 comment ·
Maintainers usually reply within 6 days
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 92/100
Maintainers usually reply within 6 days
-
Show the Podcast episodes in newest first orderPossibly taken @lchojnack claimed this 19 days ago. Openenhancement
Difficulty 2/5 1-3 hours Newbie friendliness 69/100
Maintainers usually reply within 6 days
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Maintainers usually reply within 6 days
Similar issues
-
desktop v3 windows
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
esengine/DeepSeek-Reasonix#15016 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
OneBusAway/vehicle-positions#260 ·
Maintainers usually reply within 1 day
-
Panic on startup when the GitHub releases API returns no `tag_name` (rate limit / network failure)Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
blurfx/KakaoTalkAdBlock#113 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
discobox-ai/discobox#860 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
Maintainers usually reply within 1 day