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

# Get the live view

> Mint an opaque, expiring view-only viewer URL for a ready session: the same live video as the owner viewer, without input. This is what a watch link opens. The session owner may call it with a bearer credential; a watch link's holder passes its view grant as the token query parameter. Treat the URL as a secret and never log it. Embedding is restricted to the Phone Harness dashboard origin. Reconnection does not extend the phone deadline.



## OpenAPI

````yaml /openapi.json get /sessions/{sid}/viewer
openapi: 3.1.0
info:
  title: Phone Harness API
  version: '2026-09-14'
  description: >-
    Public account and disposable Android session API. Open beta. Create
    responses are asynchronous; session duration includes provisioning, while
    billing begins at readiness. This specification documents the current
    supported client contract, not internal management interfaces. All example
    IDs, links, timestamps, limits, prices and digests are illustrative, not
    live credentials, measurements, or account entitlements.
  contact:
    name: Phone Harness support
    email: support@phone-harness.com
servers:
  - url: https://api.phone-harness.com
    description: Production beta
security:
  - ApiKey: []
tags:
  - name: Sessions
  - name: Phone
  - name: ADB
  - name: Account
  - name: History
  - name: Service
paths:
  /sessions/{sid}/viewer:
    get:
      tags:
        - Phone
      summary: Get the live view
      description: >-
        Mint an opaque, expiring view-only viewer URL for a ready session: the
        same live video as the owner viewer, without input. This is what a watch
        link opens. The session owner may call it with a bearer credential; a
        watch link's holder passes its view grant as the token query parameter.
        Treat the URL as a secret and never log it. Embedding is restricted to
        the Phone Harness dashboard origin. Reconnection does not extend the
        phone deadline.
      operationId: get-viewer
      parameters:
        - name: sid
          in: path
          required: true
          schema:
            type: string
          description: Session ID returned by POST /sessions.
        - name: token
          in: query
          required: false
          schema:
            type: string
          description: >-
            The session's view grant from its watch_url. Used instead of a
            bearer credential by watch link holders.
      responses:
        '200':
          description: View-only viewer capability; private, no-store.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OwnerViewer'
              example:
                url: https://viewer.example.com/opaque-view-capability?mode=view
                expires_at: 1800000900
        '401':
          description: Bad or missing bearer credential.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Account access denied or rental access unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            No live session visible to the caller, or the session's provider has
            no live viewer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: >-
            Session is not ready, is closing, or the requested action conflicts
            with current state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Unexpected service error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - ApiKey: []
        - {}
components:
  schemas:
    OwnerViewer:
      type: object
      properties:
        url:
          type: string
          description: >-
            Opaque sensitive viewer capability. Current embedding is restricted
            to the configured Phone Harness dashboard origin.
          format: uri
        expires_at:
          type: number
          description: >-
            Viewer expiry; no later than the session expiry. Unix time in
            seconds.
      required:
        - url
        - expires_at
    Error:
      type: object
      properties:
        error:
          type: string
          description: Human-readable public error.
        code:
          type: string
          description: Present only for errors with a stable code.
        state:
          type: string
        unsupported:
          type: boolean
        outcome:
          type: string
          enum:
            - unknown
            - installed
        id:
          type: string
          description: Session ID if a create receipt exists.
        request_key:
          type: string
        cleanup_complete:
          type: boolean
        balance_cents:
          type: integer
        session:
          type: string
        session_limit:
          type: integer
        active_session_count:
          type: integer
        available_session_slots:
          type: integer
      required:
        - error
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      description: >-
        Phone Harness account API key (pck_…). The dashboard may use a Clerk
        session JWT with the same header. Never put an account key in a URL.

````