diff --git a/api/funkwhale_api/subsonic/authentication.py b/api/funkwhale_api/subsonic/authentication.py
index a573a109249972e5a1e693d2c84edfe66efd0f46..d6edb90cdb14a3c80fc7c89214c008dbbd20c001 100644
--- a/api/funkwhale_api/subsonic/authentication.py
+++ b/api/funkwhale_api/subsonic/authentication.py
@@ -19,7 +19,7 @@ def authenticate(username, password):
             password = password.replace("enc:", "", 1)
             password = binascii.unhexlify(password).decode("utf-8")
         user = User.objects.get(
-            username=username, is_active=True, subsonic_api_token=password
+            username__iexact=username, is_active=True, subsonic_api_token=password
         )
     except (User.DoesNotExist, binascii.Error):
         raise exceptions.AuthenticationFailed("Wrong username or password.")
diff --git a/api/tests/subsonic/test_authentication.py b/api/tests/subsonic/test_authentication.py
index b2d2c04001d694bacff2e4e2f816240944e4d2fa..b0c6b1b3287c930045a2b984253cb0a3a5970cf6 100644
--- a/api/tests/subsonic/test_authentication.py
+++ b/api/tests/subsonic/test_authentication.py
@@ -63,3 +63,15 @@ def test_auth_with_inactive_users(api_request, factories):
     authenticator = authentication.SubsonicAuthentication()
     with pytest.raises(exceptions.AuthenticationFailed):
         authenticator.authenticate(request)
+
+
+def test_auth_case_insensitive(api_request, factories):
+    user = factories["users.User"](username="Hello")
+    user.subsonic_api_token = "password"
+    user.save()
+    request = api_request.get("/", {"u": "hello", "p": "password"})
+
+    authenticator = authentication.SubsonicAuthentication()
+    u, _ = authenticator.authenticate(request)
+
+    assert user == u
diff --git a/changes/changelog.d/339.bugfix b/changes/changelog.d/339.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..3f4d82ea4c0126d527e53f64b3992e536672b103
--- /dev/null
+++ b/changes/changelog.d/339.bugfix
@@ -0,0 +1 @@
+Subsonic API login is now case insensitive (#339)