# Android - Mobile Transfer Issues - HTTP 403

**URL:** <https://community.passbolt.com/t/android-mobile-transfer-issues-http-403/13437>\
**Category:** Installation Issues\
**Created:** [July 27, 2025, 3:56pm UTC](https://community.passbolt.com/t/android-mobile-transfer-issues-http-403/13437 "2025-07-27T15:56:12Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Codixer](https://yyz1.discourse-cdn.com/flex031/user_avatar/community.passbolt.com/codixer/32/5218_2.png) [@Codixer](https://community.passbolt.com/u/Codixer)\
**Post date:** [July 27, 2025, 3:56pm UTC](https://community.passbolt.com/t/android-mobile-transfer-issues-http-403/13437/1 "2025-07-27T15:56:12Z")

</div>

**Checklist**  
 I have read intro post: [https://community.passbolt.com/t/about-the-installation-issues-category/12](https://community.passbolt.com/t/about-the-installation-issues-category/12)  
 I have read the tutorials, help and searched for similar issues  
 I provide relevant information about my server (component names and versions, etc.)  
 I provide a copy of my logs and healthcheck  
 I describe the steps I have taken to trouble shoot the problem  
 I describe the steps on how to reproduce the issue

**Provide your system information**

> **System Information**
>
> – Server operating system name and version  
> LXC Container on Proxmox running an Ubuntu 24.04 template.
> 
> – Web server name and version  
> LXC - nginx version: nginx/1.24.0 (Ubuntu)  
> Reverse Proxy - NPMPlus - 2.12.3+0a85402  
> Cloudflare
> 
> Cloudflare → NPMP → LXC
> 
> – Database server name and version  
> mysql 8.0.42-0ubuntu0.24.04.2
> 
> – Php version  
> PHP 8.3.6 (cli) (built: Jul 14 2025 18:30:55) (NTS)
> 
> – Passbolt version  
> Can’t find version, assuming github… `Somebody to love` (`[5.3.2] - 2025-07-16`)

> **Healthcheck**
>
> ```auto
> root@passbolt:/opt# sudo su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt healthcheck" www-data
> 
> __________  
> / __\____  _________/ /_____ / / /_ 
> / /_/ / __`/___ / ___/__ \/ __\/ /__ / 
> / ____/ /_/ (__ |__ ) /_/ / /_/ / / /    
> /_/ \ __,_/____ / ____/_.___ /\ ____/_/\__ /   
> 
> Open source password manager for teams
> -------------------------------------------------------------------------------
> Healthcheck shell
> If you want to have more information about the different checks, please take a look at the documentation: https://www.passbolt.com/docs/admin/server-maintenance/passbolt-api-status/                                                                
> -------------------------------------------------------------------------------
> 
> Environment
> 
> [INFO] Linux passbolt 6.8.12-4-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.12-4 (2024-11-06T15:04Z) x86_64 x86_64 x86_64 GNU/Linux
> [PASS] PHP version 8.3.6.
> [PASS] PHP version is 8.2 or above.
> [PASS] 64-bit architecture system detected.
> [INFO] gpg (GnuPG) 2.4.4 / libgcrypt 1.10.3
> [PASS] PCRE compiled with unicode support.
> [PASS] Mbstring extension is installed.
> [PASS] Intl extension is installed.
> [PASS] GD or Imagick extension is installed.
> [PASS] The temporary directory and its content are writable and not executable.
> [PASS] The logs directory /var/log/passbolt/ and its content are writable.
> [PASS] System clock is synchronized and NTP service is active.
> 
> Config files
> 
> [PASS] The application config file is present
> [PASS] The passbolt config file is present
> 
> Core config
> 
> [PASS] Cache is working.
> [PASS] Debug mode is off.
> [PASS] Unique value set for security.salt
> [PASS] Full base url is set to https://pass.stefanocoding.me
> [PASS] App.fullBaseUrl validation OK.
> [PASS] /healthcheck/status is reachable.
> 
> SSL Certificate
> 
> [PASS] SSL peer certificate validates.
> [PASS] Hostname is matching in SSL certificate.
> [PASS] Not using a self-signed certificate.
> 
> SMTP settings
> 
> [PASS] The SMTP Settings plugin is enabled.
> [PASS] SMTP Settings coherent. You may send a test email to validate them.
> [PASS] The SMTP Settings source is: database.
> [WARN] The SMTP Settings plugin endpoints are enabled.
> [HELP] It is recommended to disable the plugin endpoints.
> [HELP] Set the PASSBOLT_SECURITY_SMTP_SETTINGS_ENDPOINTS_DISABLED environment variable to true.
> [HELP] Or set passbolt.security.smtpSettings.endpointsDisabled to true in /etc/passbolt/passbolt.php.
> [PASS] No custom SSL configuration for SMTP server.
> 
> JWT Authentication
> 
> [PASS] The JWT Authentication plugin is enabled.
> [PASS] The /etc/passbolt/jwt/ directory is not writable.
> [PASS] A valid JWT key pair was found.
> 
> GPG Configuration
> 
> [PASS] PHP GPG Module is installed and loaded.
> [PASS] The environment variable GNUPGHOME is set to /var/lib/passbolt/.gnupg.
> [PASS] The directory /var/lib/passbolt/.gnupg containing the keyring is writable by the webserver user.
> [PASS] The server OpenPGP key is not the default one.
> [PASS] The public key file is defined in /etc/passbolt/passbolt.php and readable.
> [PASS] The private key file is defined in /etc/passbolt/passbolt.php and readable.
> [PASS] The server key fingerprint matches the one defined in /etc/passbolt/passbolt.php.
> [PASS] The server public key defined in the /etc/passbolt/passbolt.php (or environment variables) is in the keyring.
> [PASS] There is a valid email id defined for the server key.
> [PASS] The public key can be used to encrypt a message.
> [PASS] The private key can be used to sign a message.
> [PASS] The public and private keys can be used to encrypt and sign a message.
> [PASS] The private key can be used to decrypt a message.
> [PASS] The private key can be used to decrypt and verify a message.
> [PASS] The public key can be used to verify a signature.
> [PASS] The server public key format is Gopengpg compatible.
> [PASS] The server private key format is Gopengpg compatible.
> 
> Application configuration
> 
> [PASS] Using latest passbolt version (5.3.2).
> [PASS] Passbolt is configured to force SSL use.
> [PASS] App.fullBaseUrl is set to HTTPS.
> [PASS] Selenium API endpoints are disabled.
> [PASS] Search engine robots are told not to index content.
> [INFO] The Self Registration plugin is enabled.
> [INFO] Registration is closed, only administrators can add users.
> [PASS] The deprecated self registration public setting was not found in /etc/passbolt/passbolt.php.
> [WARN] Host availability checking is disabled.
> [HELP] Make sure this instance is not publicly available on the internet.
> [HELP] Or set the PASSBOLT_EMAIL_VALIDATE_MX environment variable to true.
> [HELP] Or set passbolt.email.validate.mx to true in /etc/passbolt/passbolt.php.
> [PASS] Serving the compiled version of the javascript app.
> [WARN] Some email notifications are disabled by the administrator.
> [PASS] The database schema is up to date.
> 
> Database
> 
> [PASS] The application is able to connect to the database
> [PASS] 34 tables found.
> [PASS] Some default content is present.
> 
> Metadata
> 
> [PASS] The server is able to decrypt the metadata private key.
> 
> [PASS] No error found. Nice one, sparky!
> 
> ```

**Describe the problem thoroughly with as much details as possible so that people can reproduce the issues**

> **Problem and details**
>
> – What steps did you take?  
> Passbolt is fully installed and working on both Windows, Web and extention. Encrypts and decrypts with the full vault.
> 
> – What happened?  
> Android is unable to sync, when checking the latest code, I am unable to setup due to a 403 error.
> 
> > **Logs**
> >
> > ```auto
> > Device: Google Pixel 8
> > Android 16 (36)
> > Passbolt 2.1.1-38
> > 
> > 17:09:56 --> PUT https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json h2 (41-byte body)
> > 17:09:56 <-- 200 https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json (242ms, unknown-length body)
> > 17:09:56 --> PUT https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json h2 (41-byte body)
> > 17:09:56 <-- 200 https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json (230ms, unknown-length body)
> > 17:09:57 --> PUT https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json h2 (41-byte body)
> > 17:09:57 <-- 200 https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json (149ms, unknown-length body)
> > 17:09:57 --> PUT https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json h2 (41-byte body)
> > 17:09:58 <-- 200 https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json (114ms, unknown-length body)
> > 17:09:58 Saving private key.
> > 17:09:58 --> PUT https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json?contain%5Buser.profile%5D=1 h2 (38-byte body)
> > 17:09:58 <-- 403 https://pass.stefanocoding.me/mobile/transfers/239e9d4f-3ead-48ae-907d-4b4463c06c71/33e57a85-18fa-4fea-ad65-7b62cec7546a.json?contain%5Buser.profile%5D=1 (40ms, unknown-length body)
> > 17:09:58 retrofit2.HttpException: HTTP 403 
> > at retrofit2.KotlinExtensions$await$2$2.onResponse(SourceFile:53)
> > at retrofit2.OkHttpCall$1.onResponse(SourceFile:164)
> > at okhttp3.internal.connection.RealCall$AsyncCall.run(SourceFile:519)
> > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
> > at java.lang.Thread.run(Thread.java:1119)
> > 
> > retrofit2.HttpException: HTTP 403 
> > at retrofit2.KotlinExtensions$await$2$2.onResponse(SourceFile:53)
> > at retrofit2.OkHttpCall$1.onResponse(SourceFile:164)
> > at okhttp3.internal.connection.RealCall$AsyncCall.run(SourceFile:519)
> > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
> > at java.lang.Thread.run(Thread.java:1119)
> > 17:09:58 Encountered a non-standard backend error response
> > 17:09:58 There was an error during checking if MFA is required
> > java.lang.NullPointerException: null cannot be cast to non-null type kotlin.collections.Map<kotlin.String, kotlin.collections.List<kotlin.String>>
> > at com.passbolt.mobile.android.core.networking.ErrorHeaderMapper.checkMfaRequired(SourceFile:71)
> > at com.passbolt.mobile.android.core.networking.ResponseHandler.checkIfMfaRequired(SourceFile:76)
> > at com.passbolt.mobile.android.core.networking.ResponseHandler.handleException(SourceFile:50)
> > at com.passbolt.mobile.android.passboltapi.registration.MobileTransferRepository.turnPage(SourceFile:97)
> > at com.passbolt.mobile.android.passboltapi.registration.MobileTransferRepository$turnPage$1.invokeSuspend(Unknown Source:16)
> > at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:33)
> > at kotlinx.coroutines.DispatchedTask.run(SourceFile:102)
> > at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(SourceFile:111)
> > at kotlinx.coroutines.scheduling.TaskImpl.run(SourceFile:99)
> > at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(SourceFile:585)
> > at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(SourceFile:802)
> > at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(SourceFile:706)
> > at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(SourceFile:693)
> > 
> > java.lang.NullPointerException: null cannot be cast to non-null type kotlin.collections.Map<kotlin.String, kotlin.collections.List<kotlin.String>>
> > at com.passbolt.mobile.android.core.networking.ErrorHeaderMapper.checkMfaRequired(SourceFile:71)
> > at com.passbolt.mobile.android.core.networking.ResponseHandler.checkIfMfaRequired(SourceFile:76)
> > at com.passbolt.mobile.android.core.networking.ResponseHandler.handleException(SourceFile:50)
> > at com.passbolt.mobile.android.passboltapi.registration.MobileTransferRepository.turnPage(SourceFile:97)
> > at com.passbolt.mobile.android.passboltapi.registration.MobileTransferRepository$turnPage$1.invokeSuspend(Unknown Source:16)
> > at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:33)
> > at kotlinx.coroutines.DispatchedTask.run(SourceFile:102)
> > at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(SourceFile:111)
> > at kotlinx.coroutines.scheduling.TaskImpl.run(SourceFile:99)
> > at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(SourceFile:585)
> > at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(SourceFile:802)
> > at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(SourceFile:706)
> > at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(SourceFile:693)
> > 17:09:58 There was an error during transfer update
> > retrofit2.HttpException: HTTP 403 
> > at retrofit2.KotlinExtensions$await$2$2.onResponse(SourceFile:53)
> > at retrofit2.OkHttpCall$1.onResponse(SourceFile:164)
> > at okhttp3.internal.connection.RealCall$AsyncCall.run(SourceFile:519)
> > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
> > at java.lang.Thread.run(Thread.java:1119)
> > 
> > retrofit2.HttpException: HTTP 403 
> > at retrofit2.KotlinExtensions$await$2$2.onResponse(SourceFile:53)
> > at retrofit2.OkHttpCall$1.onResponse(SourceFile:164)
> > at okhttp3.internal.connection.RealCall$AsyncCall.run(SourceFile:519)
> > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
> > at java.lang.Thread.run(Thread.java:1119)
> > 17:10:01 Checking biometry state
> > 17:10:02 Received fill request
> > 17:10:02 Visiting view node with id: -1 scheme + domain: null://null package: null content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 0 input type: 0 
> > 17:10:02 Visiting view node with id: 2131361871 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 0 input type: 0 
> > 17:10:02 Visiting view node with id: 2131361892 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 0 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362208 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 0 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362208 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 0 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362731 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 0 input type: 0 
> > 17:10:02 Visiting view node with id: -1 scheme + domain: null://null package: null content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362417 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362135 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362112 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362488 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 0 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362728 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362708 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362275 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints passwordAuto hint: null html autocomplete attr: null important for autofill: 1 input type: 129 
> > 17:10:02 Visiting view node with id: -1 scheme + domain: null://null package: null content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 0 input type: 0 
> > 17:10:02 Visiting view node with id: -1 scheme + domain: null://null package: null content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 0 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362722 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Visiting view node with id: 2131361968 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Visiting view node with id: 2131361966 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Visiting view node with id: 2131362207 scheme + domain: null://null package: com.passbolt.mobile.android content description: null autofill hints null hint: null html autocomplete attr: null important for autofill: 1 input type: 0 
> > 17:10:02 Parsed domain: 
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: mail,username,mobile,number,name,mail,username,mobile,number,name,username
> > Structure hint: passwordAuto
> > 17:10:02 Marking input as fillable. 
> > Hint values: password,secret,passphrase,password,secret,passphrase,password
> > Structure hint: passwordAuto
> > 17:10:02 Showing authentication prompt
> > 17:10:07 Passphrase cache cleared
> > 17:10:07 Passphrase cached
> > 17:10:07 Getting server pgp and rsa keys
> > 17:10:07 --> GET https://pass.stefanocoding.me/auth/verify.json h2
> > 17:10:07 <-- 200 https://pass.stefanocoding.me/auth/verify.json (192ms, unknown-length body)
> > 17:10:07 --> GET https://pass.stefanocoding.me/auth/jwt/rsa.json h2
> > 17:10:08 <-- 200 https://pass.stefanocoding.me/auth/jwt/rsa.json (117ms, unknown-length body)
> > 17:10:08 Getting server pgp and rsa keys succeeded
> > 17:10:08 Checking if time adjustment is needed
> > 17:10:08 Local time sync needed. Adjusted: -1
> > 17:10:08 Verifying server fingerprint
> > 17:10:08 Server key fingerprint is valid
> > 17:10:08 Preparing sign in challenge
> > 17:10:08 Prepared sign in challenge
> > 17:10:08 Signing in
> > 17:10:08 --> POST https://pass.stefanocoding.me/auth/jwt/login.json h2 (1699-byte body)
> > 17:10:08 <-- 403 https://pass.stefanocoding.me/auth/jwt/login.json (25ms, unknown-length body)
> > 17:10:08 Encountered a non-standard backend error response
> > 17:10:08 There was an error during checking if MFA is required
> > java.lang.NullPointerException: null cannot be cast to non-null type kotlin.collections.Map<kotlin.String, kotlin.collections.List<kotlin.String>>
> > at com.passbolt.mobile.android.core.networking.ErrorHeaderMapper.checkMfaRequired(SourceFile:71)
> > at com.passbolt.mobile.android.core.networking.ResponseHandler.checkIfMfaRequired(SourceFile:76)
> > at com.passbolt.mobile.android.passboltapi.auth.AuthRepository.signIn(SourceFile:114)
> > at com.passbolt.mobile.android.passboltapi.auth.AuthRepository$signIn$1.invokeSuspend(Unknown Source:12)
> > at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:33)
> > at kotlinx.coroutines.DispatchedTask.run(SourceFile:104)
> > at android.os.Handler.handleCallback(Handler.java:995)
> > at android.os.Handler.dispatchMessage(Handler.java:103)
> > at android.os.Looper.loopOnce(Looper.java:248)
> > at android.os.Looper.loop(Looper.java:338)
> > at android.app.ActivityThread.main(ActivityThread.java:9067)
> > at java.lang.reflect.Method.invoke(Native Method)
> > at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
> > at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932)
> > 
> > java.lang.NullPointerException: null cannot be cast to non-null type kotlin.collections.Map<kotlin.String, kotlin.collections.List<kotlin.String>>
> > at com.passbolt.mobile.android.core.networking.ErrorHeaderMapper.checkMfaRequired(SourceFile:71)
> > at com.passbolt.mobile.android.core.networking.ResponseHandler.checkIfMfaRequired(SourceFile:76)
> > at com.passbolt.mobile.android.passboltapi.auth.AuthRepository.signIn(SourceFile:114)
> > at com.passbolt.mobile.android.passboltapi.auth.AuthRepository$signIn$1.invokeSuspend(Unknown Source:12)
> > at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:33)
> > at kotlinx.coroutines.DispatchedTask.run(SourceFile:104)
> > at android.os.Handler.handleCallback(Handler.java:995)
> > at android.os.Handler.dispatchMessage(Handler.java:103)
> > at android.os.Looper.loopOnce(Looper.java:248)
> > at android.os.Looper.loop(Looper.java:338)
> > at android.app.ActivityThread.main(ActivityThread.java:9067)
> > at java.lang.reflect.Method.invoke(Native Method)
> > at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
> > at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932)
> > 17:10:08 Failure during sign in: Something went wrong!
> > 
> > ```
> 
> – What did you expect instead?  
> Being able to login to passbolt on my phone.

Other issues with similair logs  
[https://community.passbolt.com/t/cannot-scan-qr-code-on-android/8754](https://community.passbolt.com/t/cannot-scan-qr-code-on-android/8754)  
[https://community.passbolt.com/t/android-qr-code-error-during-transport-update/8446](https://community.passbolt.com/t/android-qr-code-error-during-transport-update/8446)

---

<div class="post-metadata">

**Author:** ![Codixer](https://yyz1.discourse-cdn.com/flex031/user_avatar/community.passbolt.com/codixer/32/5218_2.png) [@Codixer](https://community.passbolt.com/u/Codixer)\
**Post date:** [August 7, 2025, 12:06pm UTC](https://community.passbolt.com/t/android-mobile-transfer-issues-http-403/13437/2 "2025-08-07T12:06:10Z")

</div>

I moved from NPMPlus to NPM (so sort of a downgrade of sorts?) and now it works.
