Apply authenticated participant moderation to a conference room

POST https://z.u1v.ru/api/v1/calls/conferences/participants/action

Apply a participant-scoped moderation action to an authenticated live conference room for the active Zulip account.

This endpoint is intentionally narrow. It only operates on the caller-owned live conference record already exposed through POST /calls/recovery, and it fails closed when the authenticated room contract does not grant management authority.

Usage examples

The -u line implements HTTP Basic authentication. See the Authorization header documentation for how to get those credentials for Zulip users and bots.

curl -sSX POST https://z.u1v.ru/api/v1/calls/conferences/participants/action \
    -u EMAIL_ADDRESS:API_KEY \
    --data-urlencode owner_user_id=42 \
    --data-urlencode room_id=room-1 \
    --data-urlencode participant_user_id=17 \
    --data-urlencode action=mute

Parameters

owner_user_id string required

Example: "42"

Stringified Zulip user ID that owns the authenticated live conference record.


room_id string required

Example: "room-1"

Authenticated conference room identifier.


participant_user_id integer required

Example: 17

Zulip user ID of the participant to moderate.


action string required

Example: "mute"

Participant moderation action to apply.

Must be one of: "mute", "unmute", "remove", "grant_moderator", "revoke_moderator", "raise_hand", "lower_hand", "allow_to_speak", "revoke_allow_to_speak", "react_thumbs_up", "react_celebrate", "react_clap", "clear_reaction".


Response

Return values

  • conference_presence: object

    Server-authoritative conference_presence details. * roomId: string

    Server-authoritative `roomId` value.
    
    • appCallId: string

      Server-authoritative appCallId value. * mediaType: string

      Server-authoritative mediaType value. * displayName: string

      Server-authoritative displayName value. * avatarUrl: string | null

      Server-authoritative avatarUrl value. * conversation: object | null

      Server-authoritative conversation details. * kind: string

      Server-authoritative `kind` value.
      
      • dmUserIds: (integer)[]

        Server-authoritative dmUserIds list. * streamId: integer | null

        Server-authoritative streamId value. * topic: string | null

        Server-authoritative topic value. * title: string

        Server-authoritative title value. * participantCount: integer

      Server-authoritative participantCount value. * isResumable: boolean

      Whether the server-authoritative isResumable condition is true. * participants: (object)[]

      Server-authoritative participants list. * userId: integer

      Server-authoritative `userId` value.
      
      • displayName: string

        Server-authoritative displayName value. * avatarUrl: string | null

        Server-authoritative avatarUrl value. * isSelf: boolean

        Whether the server-authoritative isSelf condition is true. * isMuted: boolean

        Whether the server-authoritative isMuted condition is true. * isSpeaking: boolean

        Whether the server-authoritative isSpeaking condition is true. * isActiveSpeaker: boolean

        Whether the server-authoritative isActiveSpeaker condition is true. * hasVideo: boolean

        Whether the server-authoritative hasVideo condition is true. * isScreenSharing: boolean

        Whether the server-authoritative isScreenSharing condition is true. * metadata: object

        Server-authoritative metadata details. * Server-authoritative mapping value. * isHandRaised: boolean

        Whether the server-authoritative isHandRaised condition is true. * isAllowedToSpeak: boolean

        Whether the server-authoritative isAllowedToSpeak condition is true. * reactionKey: string

        Server-authoritative reactionKey value. * roomContract: object | null

      Server-authoritative roomContract details. * shareUrl: string | null

      Server-authoritative `shareUrl` value.
      
      • scheduledStartAt: string | null

        Server-authoritative scheduledStartAt value. * recordingState: string

        Server-authoritative recordingState value. * audioTopology: string

        Server-authoritative audioTopology value. * participantGainSemantic: string

        Server-authoritative participantGainSemantic value. * joinMuted: boolean | null

        Whether the server-authoritative joinMuted condition is true. * messagesEnabled: boolean | null

        Whether the server-authoritative messagesEnabled condition is true. * canInvite: boolean

        Whether the server-authoritative canInvite condition is true. * canShare: boolean

        Whether the server-authoritative canShare condition is true. * canSchedule: boolean

        Whether the server-authoritative canSchedule condition is true. * canRecord: boolean

        Whether the server-authoritative canRecord condition is true. * canManage: boolean

        Whether the server-authoritative canManage condition is true. * canChangeJoinMuted: boolean

        Whether the server-authoritative canChangeJoinMuted condition is true. * canChangeMessagesEnabled: boolean

        Whether the server-authoritative canChangeMessagesEnabled condition is true. * adminUserIds: (integer)[]

        Server-authoritative adminUserIds list. * metadata: object

      Server-authoritative metadata details. * Server-authoritative mapping value.

Example response(s)

Changes: As of Zulip 7.0 (feature level 167), if any parameters sent in the request are not supported by this endpoint, a successful JSON response will include an ignored_parameters_unsupported array.

A typical successful JSON response may look like:

{
    "conference_presence": {
        "appCallId": "conference-app-call-1",
        "avatarUrl": null,
        "conversation": {
            "kind": "topic",
            "streamId": 9,
            "title": "General > Launch plan",
            "topic": "Launch plan"
        },
        "displayName": "General > Launch plan",
        "isResumable": true,
        "mediaType": "audio",
        "metadata": {
            "conversation_kind": "topic",
            "conversation_stream_id": "9",
            "conversation_topic": "Launch plan",
            "muted_user_ids": "12",
            "participant_user_ids": "10,12"
        },
        "participantCount": 2,
        "participants": [
            {
                "avatarUrl": null,
                "displayName": "King Hamlet",
                "hasVideo": true,
                "isActiveSpeaker": false,
                "isMuted": false,
                "isScreenSharing": false,
                "isSelf": true,
                "isSpeaking": false,
                "metadata": {},
                "userId": 10
            },
            {
                "avatarUrl": null,
                "displayName": "Othello, the Moor of Venice",
                "hasVideo": true,
                "isActiveSpeaker": true,
                "isMuted": true,
                "isScreenSharing": true,
                "isSelf": false,
                "isSpeaking": true,
                "metadata": {},
                "userId": 12
            }
        ],
        "roomContract": {
            "adminUserIds": [
                10,
                12
            ],
            "audioTopology": "confbridge_mixed",
            "canChangeJoinMuted": true,
            "canChangeMessagesEnabled": true,
            "canInvite": true,
            "canManage": true,
            "canShare": true,
            "joinMuted": true,
            "messagesEnabled": false,
            "participantGainSemantic": "participant_global_speaker_gain",
            "shareUrl": "https://chat.example/calls/room-1"
        },
        "roomId": "room-1"
    },
    "msg": "",
    "result": "success"
}