Fetch built-in call recovery and conference room state

POST https://z.u1v.ru/api/v1/calls/recovery

Fetch authenticated active-call recovery and conference-presence hints for the active Zulip account and device.

This endpoint reuses the current runtime recovery shape so later call UI and group-call phases can restore in-progress calls without relying on local-only state.

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/recovery \
    -u EMAIL_ADDRESS:API_KEY \
    --data-urlencode user_id=42 \
    --data-urlencode device_instance_id=device-1

Parameters

user_id string required

Example: "42"

Authenticated Zulip user ID for the active account.


device_instance_id string required

Example: "device-1"

Active device instance identifier requesting recovery.


Response

Return values

  • pendingAppCallIds: (string)[]

    Server-authoritative pendingAppCallIds list. * pendingRoomIds: (string)[]

    Server-authoritative pendingRoomIds list. * activeCalls: (object)[]

    Server-authoritative activeCalls list. * appCallId: string

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

      Server-authoritative correlationId value. * routeClass: string

      Server-authoritative routeClass value. * mediaType: string

      Server-authoritative mediaType value. * roomId: string | null

      Server-authoritative roomId value. * remoteIdentityUri: string | null

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

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

      Server-authoritative avatarUrl value. * metadata: object

      Server-authoritative metadata details. * Server-authoritative mapping value. * conferenceSubscriptions: (object)[]

    Server-authoritative conferenceSubscriptions list. * roomId: string

    Server-authoritative `roomId` value.
    
    • webSocketUrl: string | null

      Server-authoritative webSocketUrl value. * webSocketHeaders: object

      Server-authoritative webSocketHeaders details. * Server-authoritative mapping value. * subscribeFrame: string | null

      Server-authoritative subscribeFrame value. * heartbeatSeconds: integer | null

      Server-authoritative heartbeatSeconds value. * leaseExpiresAt: string | null

      Server-authoritative leaseExpiresAt value. * renewToken: string | null

      Server-authoritative renewToken value. * metadata: object

      Server-authoritative metadata details. * Server-authoritative mapping value. * conferencePresence: (object)[]

    Server-authoritative conferencePresence list. * 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. * isResumable: boolean

      Whether the server-authoritative isResumable condition is true. * joinedOnCurrentDevice: boolean | null

      Whether the server-authoritative joinedOnCurrentDevice condition is true. * participantCount: integer | null

      Server-authoritative participantCount value. * 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. * isActiveSpeaker: boolean

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

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

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

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

        Whether the server-authoritative isMuted 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. * forceReregister: boolean

    Whether the server-authoritative forceReregister condition is true. * 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:

{
    "activeCalls": [
        {
            "appCallId": "app-call-2",
            "correlationId": "corr-call-2",
            "displayName": "Ophelia",
            "mediaType": "audio",
            "metadata": {},
            "roomId": "room-1",
            "routeClass": "conference"
        }
    ],
    "conferencePresence": [
        {
            "appCallId": "app-call-2",
            "conversation": {
                "kind": "topic",
                "streamId": 9,
                "title": "General > Launch plan",
                "topic": "Launch plan"
            },
            "displayName": "General > Launch plan",
            "isResumable": true,
            "joinedOnCurrentDevice": true,
            "mediaType": "audio",
            "metadata": {
                "conversation_kind": "topic",
                "conversation_stream_id": "9",
                "conversation_topic": "Launch plan"
            },
            "participantCount": 3,
            "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": false,
                    "isScreenSharing": true,
                    "isSelf": false,
                    "isSpeaking": true,
                    "metadata": {},
                    "userId": 12
                }
            ],
            "roomContract": {
                "adminUserIds": [
                    10,
                    12
                ],
                "audioTopology": "confbridge_mixed",
                "canChangeJoinMuted": true,
                "canChangeMessagesEnabled": true,
                "canInvite": true,
                "canManage": true,
                "canRecord": false,
                "canSchedule": true,
                "canShare": true,
                "joinMuted": true,
                "messagesEnabled": false,
                "participantGainSemantic": "participant_global_speaker_gain",
                "recordingState": "available",
                "scheduledStartAt": "2026-04-10T08:30:00Z",
                "shareUrl": "https://chat.example/calls/room-1"
            },
            "roomId": "room-1"
        }
    ],
    "conferenceSubscriptions": [],
    "forceReregister": false,
    "metadata": {
        "deviceInstanceId": "device-1"
    },
    "msg": "",
    "pendingAppCallIds": [
        "app-call-2"
    ],
    "pendingRoomIds": [
        "room-1"
    ],
    "result": "success"
}