Steps to reproduce
- Use a self-hosted Synapse homeserver.
- Upgrade the homeserver from Synapse
1.136 to Synapse 1.151.
- Configure MatrixRTC / Element Call with a separate LiveKit server and
lk-jwt-service.
- Configure MatrixRTC discovery through both:
/.well-known/matrix/client
- Synapse
matrix_rtc.transports
- Confirm that desktop web clients can use Element Call successfully.
- Confirm that a mobile browser using the self-hosted Element Call frontend can also use the same Element Call / LiveKit deployment successfully.
- On Element X Android, log in with an affected account on the same homeserver.
- Open a room and start or join an Element Call.
- Element X Android fails with
OPEN_ID_ERROR, or enters the call screen but stays stuck on Waiting for media.
- Check the homeserver reverse proxy logs during the failing attempt.
Observed server-side behavior
During the failing Element X Android attempt, the client still contacts the homeserver normally.
The homeserver receives requests such as:
GET /.well-known/matrix/client
GET /_matrix/client/v3/profile/...
GET /_matrix/client/v3/rooms/.../members
POST /_matrix/client/unstable/org.matrix.simplified_msc3575/sync
- other normal sync/profile/member requests
However, during the failing Element X Android attempt, the homeserver does not receive this request:
POST /_matrix/client/v3/user/{userId}/openid/request_token
The homeserver also does not receive the expected MatrixRTC call membership event from the failing Android client.
By contrast, when the same call is joined from desktop web or from the mobile browser Element Call frontend:
- the OpenID request is sent successfully
- the JWT service validates it successfully
- the MatrixRTC call membership event is sent
- the call works
Observed client-side behavior
Element X Android shows either:
OPEN_ID_ERROR
- or
Waiting for media
Relevant Element X log messages include:
[ElementCall] [LocalTransport] Failed to authenticate to transport ... {"code":"OPEN_ID_ERROR"}
[CallViewModel][LocalMembership] Multiple Transport Errors
Uncaught Error: Something went wrong
Important detail
The error shown in the UI is OPEN_ID_ERROR, but based on homeserver access logs, the OpenID request is not failing on the server side.
It appears that Element X Android never sends the OpenID token request at all during the failing attempt.
This makes me suspect the issue may be in the Element X Android / embedded Element Call / WebView OpenID bridge path, rather than in the Synapse OpenID endpoint itself.
Outcome
What did you expect?
Element X Android should request an OpenID token from the homeserver by calling:
POST /_matrix/client/v3/user/{userId}/openid/request_token
Then it should pass the OpenID token to the configured LiveKit JWT service, receive LiveKit credentials, publish the MatrixRTC call membership event, and join the Element Call successfully.
What happened instead?
Element X Android fails with OPEN_ID_ERROR or gets stuck on Waiting for media.
The homeserver logs show that the OpenID request is not sent by Element X Android during the failing attempt.
Desktop web clients and the mobile browser Element Call frontend can use the same homeserver, same room, same LiveKit server, and same JWT service successfully.
Additional context
- The issue started after upgrading Synapse from
1.136 to 1.151.
- The reverse proxy was also upgraded around the same time.
- The current MatrixRTC / LiveKit setup works from web clients.
- The Synapse OpenID endpoint works when used by desktop web Element Call.
- The LiveKit JWT service works when used by desktop web Element Call.
- The problem appears to be specific to Element X Android for some accounts/sessions.
- Clearing cache did not fix the issue.
- The issue reproduces on both Element X Android
26.06.4 and 26.05.2.
- A mobile browser on the same phone can use the self-hosted Element Call frontend successfully.
Your phone model
Samsung S23 / Samsung S23+
Operating system version
Android 16
Application version and app store
Element X Android 26.06.4
Homeserver
Self-hosted Synapse 1.151 The homeserver was upgraded from Synapse 1.136. MatrixRTC / MSC4143 is enabled. Element Call is configured with a separate LiveKit server and lk-jwt-service.
Will you send logs?
Yes
Are you willing to provide a PR?
No
Steps to reproduce
1.136to Synapse1.151.lk-jwt-service./.well-known/matrix/clientmatrix_rtc.transportsOPEN_ID_ERROR, or enters the call screen but stays stuck onWaiting for media.Observed server-side behavior
During the failing Element X Android attempt, the client still contacts the homeserver normally.
The homeserver receives requests such as:
GET /.well-known/matrix/clientGET /_matrix/client/v3/profile/...GET /_matrix/client/v3/rooms/.../membersPOST /_matrix/client/unstable/org.matrix.simplified_msc3575/syncHowever, during the failing Element X Android attempt, the homeserver does not receive this request:
POST /_matrix/client/v3/user/{userId}/openid/request_tokenThe homeserver also does not receive the expected MatrixRTC call membership event from the failing Android client.
By contrast, when the same call is joined from desktop web or from the mobile browser Element Call frontend:
Observed client-side behavior
Element X Android shows either:
OPEN_ID_ERRORWaiting for mediaRelevant Element X log messages include:
[ElementCall] [LocalTransport] Failed to authenticate to transport ... {"code":"OPEN_ID_ERROR"}[CallViewModel][LocalMembership] Multiple Transport ErrorsUncaught Error: Something went wrongImportant detail
The error shown in the UI is
OPEN_ID_ERROR, but based on homeserver access logs, the OpenID request is not failing on the server side.It appears that Element X Android never sends the OpenID token request at all during the failing attempt.
This makes me suspect the issue may be in the Element X Android / embedded Element Call / WebView OpenID bridge path, rather than in the Synapse OpenID endpoint itself.
Outcome
What did you expect?
Element X Android should request an OpenID token from the homeserver by calling:
POST /_matrix/client/v3/user/{userId}/openid/request_tokenThen it should pass the OpenID token to the configured LiveKit JWT service, receive LiveKit credentials, publish the MatrixRTC call membership event, and join the Element Call successfully.
What happened instead?
Element X Android fails with
OPEN_ID_ERRORor gets stuck onWaiting for media.The homeserver logs show that the OpenID request is not sent by Element X Android during the failing attempt.
Desktop web clients and the mobile browser Element Call frontend can use the same homeserver, same room, same LiveKit server, and same JWT service successfully.
Additional context
1.136to1.151.26.06.4and26.05.2.Your phone model
Samsung S23 / Samsung S23+
Operating system version
Android 16
Application version and app store
Element X Android
26.06.4Homeserver
Self-hosted Synapse
1.151The homeserver was upgraded from Synapse1.136. MatrixRTC / MSC4143 is enabled. Element Call is configured with a separate LiveKit server andlk-jwt-service.Will you send logs?
Yes
Are you willing to provide a PR?
No