> ## Documentation Index
> Fetch the complete documentation index at: https://docs.upliftai.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Listen in on a live call

> Get a LiveKit token for the room a live call is already running in. The listener joins hidden and subscribe-only — they can hear the call but not speak into it — and the token expires ten minutes after it is issued. Live transcription arrives on the `lk.transcription` text stream from the moment you connect, with nothing backfilled.



## OpenAPI

````yaml /voice-agents/api-reference/openapi.yaml post /realtime-assistants/sessions/{sessionId}/listen
openapi: 3.1.0
info:
  title: UpliftAI Voice Agents API
  version: '1.0'
  description: >-
    Build voice assistants, start conversations on the web or the phone, run
    calling campaigns, and receive outcomes by webhook. All endpoints take a
    bearer API key unless noted otherwise.
servers:
  - url: https://api.upliftai.org/v1
security:
  - apiKey: []
tags:
  - name: Assistants
  - name: Authoring an assistant
  - name: Starting a conversation
  - name: Sessions & call records
  - name: Campaigns
  - name: Campaign outcomes
  - name: Contacts
  - name: Google Sheet sources
  - name: Integrations & delivery health
paths:
  /realtime-assistants/sessions/{sessionId}/listen:
    post:
      tags:
        - Sessions & call records
      summary: Listen in on a live call
      description: >-
        Get a LiveKit token for the room a live call is already running in. The
        listener joins hidden and subscribe-only — they can hear the call but
        not speak into it — and the token expires ten minutes after it is
        issued. Live transcription arrives on the `lk.transcription` text stream
        from the moment you connect, with nothing backfilled.
      operationId: listenToSession
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            The session to listen to. Ids come from the dispatch that started
            the call or the assistant's session list.
          schema:
            type: string
            format: uuid
          example: 425700ce-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      responses:
        '200':
          description: A listener token for the call's existing room.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionToken'
              example:
                token: >-
                  eyJhbGciOiJIUzI1NiJ9.eyJ2aWRlbyI6eyJyb29tSm9pbiI6dHJ1ZSwicm9vbSI6IndlYi00MjU3MDBjZS14eHh4…xxxx
                wsUrl: wss://upliftai-prod-yd34to8b.livekit.cloud
                roomName: web-425700ce-xxxx-xxxx-xxxx-xxxxxxxxxxxx
        '400':
          description: >-
            The session has no room to join — it has already ended, or has not
            reached one yet.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: 'Session is not live (state: completed)'
                error: Bad Request
                statusCode: 400
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: No such session in the API key's project.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: 'Session not found: 00000000-0000-4000-8000-000000000000'
                error: Not Found
                statusCode: 404
components:
  schemas:
    SessionToken:
      type: object
      properties:
        token:
          type: string
          description: >-
            LiveKit access token. Hand it to a LiveKit client SDK along with
            `wsUrl`.
        wsUrl:
          type: string
          format: uri
          description: LiveKit WebSocket URL the client connects to.
        roomName:
          type: string
          description: The room this token opens. Server-generated — treat it as opaque.
    Error:
      type: object
      properties:
        message:
          description: >-
            One message per failed field for validation errors, a single string
            otherwise.
          oneOf:
            - type: string
            - type: array
              items:
                type: string
        error:
          type: string
        statusCode:
          type: integer
  responses:
    Unauthorized:
      description: A bearer key was sent but is not recognized.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: invalid authorization
            error: Unauthorized
            statusCode: 401
    Forbidden:
      description: No API key sent, or the key lacks permission for this resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Forbidden resource
            error: Forbidden
            statusCode: 403
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: Project API key (`sk_api_…`).

````