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

# Issue a room-join token for private browser calling

> Issues a single-call token for browser calling where RevDesk places the call and your browser joins it. You provide a caller ID (from_number, which must be a number you own) and a destination (to_number); RevDesk dials the destination and returns a token your browser uses to join the live call and talk through the mic. Nothing about the underlying network is exposed to the browser. The connection runs entirely on RevDesk's own infrastructure. Pass the returned token and room_url to the RevDesk browser SDK (@revdesk/webrtc) to join.



## OpenAPI

````yaml /openapi.json post /v1/room-token
openapi: 3.1.0
info:
  title: RevDesk v1 API
  version: 1.0.0
  description: >-
    Programmatic access to the RevDesk voice platform — calls, numbers, caller
    trust, and brands.
  contact:
    name: RevDesk
    email: support@revdesk.com
servers:
  - url: https://api.revdesk.com
security:
  - bearerAuth: []
tags:
  - name: Phone Numbers
  - name: Caller IDs
  - name: Enterprise Registration
  - name: Branded Calling
  - name: Calls
  - name: SMS
  - name: WebRTC
  - name: Reputation
  - name: Usage
  - name: Account
  - name: Documents
  - name: Sub-entities
paths:
  /v1/room-token:
    post:
      tags:
        - WebRTC
      summary: Issue a room-join token for private browser calling
      description: >-
        Issues a single-call token for browser calling where RevDesk places the
        call and your browser joins it. You provide a caller ID (from_number,
        which must be a number you own) and a destination (to_number); RevDesk
        dials the destination and returns a token your browser uses to join the
        live call and talk through the mic. Nothing about the underlying network
        is exposed to the browser. The connection runs entirely on RevDesk's own
        infrastructure. Pass the returned token and room_url to the RevDesk
        browser SDK (@revdesk/webrtc) to join.
      operationId: v1_room_token_post
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            UUID — when present, deduplicates repeat submissions. See
            /api-reference/idempotency.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: http://json-schema.org/draft-07/schema#
              type: object
              properties:
                from_number:
                  type: string
                  pattern: ^\+[1-9]\d{1,14}$
                to_number:
                  type: string
                  pattern: ^\+[1-9]\d{1,14}$
                ttl_seconds:
                  type: integer
                  minimum: 30
                  maximum: 600
              required:
                - from_number
                - to_number
              additionalProperties: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $schema: http://json-schema.org/draft-07/schema#
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      token:
                        type: string
                      room_url:
                        type: string
                      room_name:
                        type: string
                      call_id:
                        type: string
                      expires_in:
                        type: number
                      from_number:
                        type: string
                      to_number:
                        type: string
                    required:
                      - token
                      - room_url
                      - room_name
                      - call_id
                      - expires_in
                      - from_number
                      - to_number
                    additionalProperties: false
                required:
                  - data
                additionalProperties: false
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '409':
          description: Conflict (incl. idempotency conflicts)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
components:
  schemas:
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
            message:
              type: string
            fields:
              type: object
              additionalProperties:
                type: string
            doc_url:
              type: string
              format: uri
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````