I want to provide custom layout

I want to provide a custom layout to meeting participants. While we can provide a custom layout for the host user of the meeting, participants don’t have the permission to call “drawParticipant,” so we are unable to share a custom layout with them.

Is there any good solution? For example, is it possible to share the host user’s layout with other participants or set participants as co-hosts via an API?

The API documentation for “drawParticipant” contains the following note, but what kind of situation is it intended for?

  • The getMeetingParticipants() API is only available to the meeting host. When multiple participants are each using the same Layers app for a meeting, app-specific messaging may be used to communicate the participants list to other meeting attendees.

My use case is as follows: There is a meeting with multiple participants using special cameras. I want to provide a layout optimized for those cameras to all participants. Each participant opens the app in immersive mode and configures their own layout using drawParticipant .


Thank you for your post on the Zoom Developer Forum! I’m unsure whether it’s possible for each participant to open the app in immersive mode and configure their own layout using the drawParticipant function. Refer to the screenshot below for more details. Could you clarify whether the meeting host’s app instance uses the sendAppInvitationToAllParticipants API?


Thank you for your response. My apps uses the sendAppInvitationToAllParticipants API. It uses as below.

      if (
        !hasImmersiveModeStarted &&
        userContext?.role !== "host" &&
        context !== "inImmersive"
      ) {

      await zoomSdk.sendAppInvitationToAllParticipants();

I’m currently examining the following sample app, which behaves similarly to what I have implemented:

It appears that in this app, the host’s immersive view is shared with attendees, but I’m not sure which specific process handle this. The app uses connect/postMessage, so I thought it might be related to that. I tried checking the API documentation, but the descriptions in the API documentation alone weren’t sufficient for me to understand how it works.