Skip to content

Element X on iOS and Android doesn't send Authorization header for MSC4143 endpoint → MISSING_MATRIX_RTC_TRANSPORT #3825

Description

@Yason24

Steps to reproduce

I'm experiencing the same issue as described in this thread. Element X fails to start calls with error MISSING_MATRIX_RTC_TRANSPORT, even though the server is fully and correctly configured.

Environment:

  • App: Element X (both iOS and Android)
  • Version: 26.03.3
  • Devices: iPhone 15 Plus (iOS 26.3.1) and Samsung SM-A725F (Android 14)
  • Homeserver: matrix.rdk-invest.ru:8450 (Synapse 1.150.0)
  • SFU: LiveKit 1.10.0 with JWT service (lk-jwt-service 0.4.1)
  • Reverse proxy: Nginx Proxy Manager
  • TURN/STUN: Coturn (works fine for classic Element)

What works correctly:

.well-known/matrix/client:
json

{
  "m.homeserver": {
    "base_url": "https://matrix.rdk-invest.ru:8450"
  },
  "org.matrix.msc2965.authentication": {
    "issuer": "https://auth.rdk-invest.ru:8450",
    "account": "https://auth.rdk-invest.ru:8450/account/"
  },
  "org.matrix.msc4143.rtc_foci": [
    {
      "type": "livekit",
      "livekit_service_url": "https://matrix.rdk-invest.ru:8450/livekit/jwt"
    }
  ]
}

What doesn't work:

  • ❌ Element X cannot start calls
  • ❌ Error: MISSING_MATRIX_RTC_TRANSPORT

Server logs (captured request):
text

GET /_matrix/client/unstable/org.matrix.msc4143/rtc/transports HTTP/1.1
Host: matrix.rdk-invest.ru:8450
User-Agent: Element X/26.03.3 (iPhone 15 Plus; iOS 26.3.1; Scale/3.00)
// No Authorization header present

Server response:
text

401 Missing access token

Manual verification (with token):
bash

curl -X GET "https://matrix.rdk-invest.ru:8450/_matrix/client/unstable/org.matrix.msc4143/rtc/transports" \
  -H "Authorization: Bearer <valid_token>"

-> Returns {} (200 OK)

What I've tried:

  • Clearing app cache
  • Reinstalling Element X
  • Rebooting devices
  • Restarting Synapse and LiveKit
  • Verified .well-known is correct
  • Verified LiveKit and JWT service are accessible
  • Verified all other endpoints work with authentication

Conclusion:
This is a client-side bug. Element X does not send the Authorization: Bearer ... header specifically for the MSC4143 rtc/transports endpoint, while it correctly sends it for other authenticated endpoints (e.g., /profile, /sync, /messages). Because of this, Synapse returns 401, and the app shows MISSING_MATRIX_RTC_TRANSPORT.

The server is fully configured according to the official Element Call documentation and works perfectly with classic Element for calls (using TURN/Coturn). This issue only affects Element X.

Please fix this bug so Element X can work with self-hosted servers!

Server info for developers:

Thank you! 🚀

Metadata

Metadata

Assignees

No one assigned

    Labels

    T-DefectSomething isn't working: bugs, crashes, hangs, vulnerabilities, or other reported problems

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions