SignalWire Room Tokens API

Manage room tokens

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/signalwire-room-tokens-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

signalwire-room-tokens-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: SignalWire REST Room Tokens API
  version: 1.0.0
  contact:
    name: SignalWire
    url: https://support.signalwire.com/portal/en/newticket?departmentId=1029313000000006907&layoutId=1029313000000074011
    email: support@signalwire.com
  license:
    name: MIT
    url: https://github.com/signalwire/docs/blob/main/LICENSE
  termsOfService: https://signalwire.com/legal/signalwire-cloud-agreement
  description: Manage room tokens
servers:
- url: https://{space_name}.signalwire.com
  description: SignalWire API
  variables:
    space_name:
      default: '{Your_Space_Name}'
      description: Your SignalWire Space name
security:
- SignalWireBasicAuth: []
tags:
- name: Room Tokens
  description: Manage room tokens
  externalDocs:
    url: https://signalwire.com/docs/apis
    description: Developer documentation on SignalWire REST APIs
paths:
  /api/video/room_tokens:
    post:
      operationId: create_room_token
      summary: Create room token
      description: 'Generate a Room Token allowing a client to join a Room.


        #### Permissions


        The API token used to authenticate must have the following scope(s) enabled to make a successful request: _Video_.


        [Learn more about API scopes](/docs/platform/your-signalwire-api-space).'
      parameters: []
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Video.RoomTokenResponse'
        '400':
          description: The request is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode400'
        '401':
          description: Access is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode401'
        '422':
          description: The request contains invalid parameters. See errors for details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Video.VideoStatusCode422'
        '500':
          description: An internal server error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode500'
      tags:
      - Room Tokens
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Video.CreateRoomTokenRequest'
components:
  schemas:
    Types.StatusCodes.StatusCode401:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Unauthorized
      unevaluatedProperties:
        not: {}
      description: Access is unauthorized.
    Video.CreateRoomTokenRequest:
      type: object
      required:
      - room_name
      properties:
        room_name:
          type: string
          maxLength: 100
          pattern: ^[A-Za-z0-9_-]+$
          description: 'Room''s unique named identifier. Allowed characters: A-Za-z0-9_-. Up to 100 characters. The room does not have to exist when the token is created, but must exist prior to joining, or ensure auto_create_room is set to true.'
          examples:
          - my_room
        user_name:
          type: string
          maxLength: 100
          description: A display name to use for the user. Up to 100 characters. (If not supplied, a random alphanumeric string will be returned for each authorization with this token.)
          examples:
          - John Smith
        permissions:
          type: array
          items:
            $ref: '#/components/schemas/Video.RoomTokenPermission'
          description: A list of permissions, which define what user can do once they join the room. If `join_as` is `audience`, permissions are set to an empty array regardless of the value provided.
          examples:
          - - room.self.audio_mute
            - room.self.audio_unmute
            - room.self.video_mute
            - room.self.video_unmute
            - room.self.deaf
            - room.self.undeaf
            - room.self.set_input_volume
            - room.self.set_output_volume
            - room.self.set_input_sensitivity
          default:
          - room.self.audio_mute
          - room.self.audio_unmute
          - room.self.video_mute
          - room.self.video_unmute
          - room.self.deaf
          - room.self.undeaf
          - room.self.set_input_volume
          - room.self.set_output_volume
          - room.self.set_input_sensitivity
          - room.self.screenshare
          - room.self.additional_source
        join_from:
          type: string
          format: date-time
          description: 'The user can''t join the room before this time. Expects RFC 3339 datetime: `2022-01-01T23:59:60Z`. Date only: `2022-01-01` will be converted to `2022-01-01T00:00:00Z`'
          examples:
          - '2022-01-01T00:00:00Z'
        join_until:
          type: string
          format: date-time
          description: 'The user can''t join the room after this time. Expects RFC 3339 datetime: `2022-01-01T23:59:60Z`. Date only: `2022-01-01` will be converted to `2022-01-01T00:00:00Z`'
          examples:
          - '2022-12-31T23:59:59Z'
        remove_at:
          type: string
          format: date-time
          description: 'Remove user from the room at this time. Expects RFC 3339 datetime: `2022-01-01T23:59:60Z`. Date only: `2022-01-01` will be converted to `2022-01-01T00:00:00Z`'
          examples:
          - '2022-12-31T23:59:59Z'
        remove_after_seconds_elapsed:
          type: integer
          format: int32
          maximum: 200000
          description: Remove user after they are in the room for N seconds.
          exclusiveMinimum: 0
          examples:
          - 900
        join_audio_muted:
          type: boolean
          description: Whether the user joins the room with their audio muted.
          examples:
          - false
          default: false
        join_video_muted:
          type: boolean
          description: Whether the user joins the room with their video muted.
          examples:
          - false
          default: false
        auto_create_room:
          type: boolean
          description: By default, if the user tries to use this token to join a room that doesn't exist, it will be created with default configuration. Set this to false to require the room to exist beforehand.
          examples:
          - true
          default: true
        enable_room_previews:
          type: boolean
          description: Whether to generate a video with a preview of the content of the room. This parameter has effect only if this token auto-creates the room, thus it will be ignored if the room already exists.
          examples:
          - true
          default: false
        room_display_name:
          type: string
          maxLength: 200
          description: Display name used if a room is auto-created when the token joins. Maximum of 200 characters. Defaults to the value of room_name.
          examples:
          - My Room
        end_room_session_on_leave:
          type: boolean
          description: Whether to end the room session when the member using this token leaves the room.
          examples:
          - false
          default: false
        join_as:
          allOf:
          - $ref: '#/components/schemas/Video.JoinAsType'
          description: Whether the user should join as a member or as a non-interactive audience participant. Audience participants cannot send audio or video.
          examples:
          - member
          default: member
        media_allowed:
          allOf:
          - $ref: '#/components/schemas/Video.MediaAllowedType'
          description: Indicates what media the user is allowed to receive.
          examples:
          - video-only
          default: all
        room_meta:
          type: object
          unevaluatedProperties: {}
          description: Set the room meta. Maximum of 2000 characters when serialized to JSON.
          examples:
          - topic: team-meeting
        meta:
          type: object
          unevaluatedProperties: {}
          description: Set the member meta. Maximum of 2000 characters when serialized to JSON.
          examples:
          - name: John Smith
        sync_audio_video:
          type: boolean
          description: Enable/disable jitter buffer audio-video sync.
          examples:
          - true
          default: false
      unevaluatedProperties:
        not: {}
      description: Request body for creating a room token.
    Video.MediaAllowedType:
      type: string
      enum:
      - all
      - video-only
      - audio-only
      description: Media allowed type for room tokens.
    Video.JoinAsType:
      type: string
      enum:
      - audience
      - member
      description: Join as type for room tokens.
    Video.RoomTokenResponse:
      type: object
      required:
      - token
      properties:
        token:
          type: string
          description: A Room Token to be used by clients to connect to the Room.
          examples:
          - eyJ0eXAiOiJWUlQiLCJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE2MjIxMjAxMjMsImp0aSI6ImRmMzFjYTQ4LWRiZGMtNGJjZi1hYWU2LTQ1NWEwOGM5NDg2YSIsInN1YiI6IjBjOTdmNjM1LTFjMTMtNGZjMS04NmY3LWJiMmJlODU5ZDhiOSIsInUiOiJKb2huIERvZSIsInIiOiJteV9zdXBlcl9hd2Vzb21lX3Jvb20iLCJzIjpbInJvb20uc2VsZi5hdWRpb191bm11dGUiXSwiYWNyIjp0cnVlLCJqZiI6MTYyMDg5NjQwMCwianUiOjE2MjA5MDU5NjgsInJhdCI6MTYyMDkwMDAwMCwicnNlIjo5MDB9.5mu_H2PjQLtNBbMsBlS0c91EgsDjJzvZUFgj5-tP4VA0VoHZPIGgV_DLRGKt-BqG-DqC5LhpsdMWEFjhVkTBpQ
      unevaluatedProperties:
        not: {}
      description: Room token response object.
    Types.StatusCodes.StatusCode500:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Internal Server Error
      unevaluatedProperties:
        not: {}
      description: An internal server error occurred.
    Video.RoomTokenPermission:
      type: string
      enum:
      - room.member.audio_mute
      - room.member.audio_unmute
      - room.member.video_mute
      - room.member.video_unmute
      - room.member.deaf
      - room.member.undeaf
      - room.member.set_input_volume
      - room.member.set_output_volume
      - room.member.set_input_sensitivity
      - room.member.set_position
      - room.member.set_meta
      - room.member.raisehand
      - room.member.lowerhand
      - room.member.remove
      - room.member.promote
      - room.member.demote
      - room.hide_video_muted
      - room.list_available_layouts
      - room.lock
      - room.playback
      - room.playback_seek
      - room.prioritize_handraise
      - room.recording
      - room.set_layout
      - room.set_position
      - room.set_meta
      - room.show_video_muted
      - room.stream
      - room.unlock
      - room.self.audio_mute
      - room.self.audio_unmute
      - room.self.video_mute
      - room.self.video_unmute
      - room.self.deaf
      - room.self.undeaf
      - room.self.set_input_volume
      - room.self.set_output_volume
      - room.self.set_input_sensitivity
      - room.self.set_position
      - room.self.set_meta
      - room.self.raisehand
      - room.self.lowerhand
      - room.self.screenshare
      - room.self.additional_source
      description: Valid permission scopes for room tokens.
    Types.StatusCodes.RestApiErrorItem:
      type: object
      required:
      - type
      - code
      - message
      - url
      properties:
        type:
          type: string
          description: The category of error.
          examples:
          - validation_error
        code:
          type: string
          description: A specific error code.
          examples:
          - invalid_parameter
        message:
          type: string
          description: A description of what caused the error.
          examples:
          - Name must be present
        attribute:
          anyOf:
          - type: string
          - type: 'null'
          description: The request parameter that caused the error, if applicable.
          examples:
          - name
        url:
          type: string
          description: A link to documentation about this error.
          examples:
          - https://signalwire.com/docs/apis/error-codes
      unevaluatedProperties:
        not: {}
      description: Details about a specific error.
    Types.StatusCodes.StatusCode400:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Bad Request
      unevaluatedProperties:
        not: {}
      description: The request is invalid.
    Video.VideoStatusCode422:
      type: object
      required:
      - errors
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Types.StatusCodes.RestApiErrorItem'
          description: List of validation errors.
      unevaluatedProperties:
        not: {}
      description: The request contains invalid parameters. See errors for details.
      examples:
      - statusCode: 422
        errors:
        - type: validation_error
          code: invalid_parameter
          message: Name must be present
          attribute: name
          url: https://signalwire.com/docs/apis/error-codes
  securitySchemes:
    SignalWireBasicAuth:
      type: http
      scheme: Basic
      description: 'SignalWire Basic Authentication using Project ID and API Token.


        The client sends HTTP requests with the Authorization header containing

        the word Basic followed by a space and a base64-encoded string of project_id:token.

        The project ID will be used as the username and the API token as the password.


        Example:

        ```

        Authorization: Basic base64(project_id:token)

        ```'
      x-fern-basic:
        username:
          name: project_id
          env: SIGNALWIRE_PROJECT_ID
        password:
          name: api_token
          env: SIGNALWIRE_API_TOKEN
    SignalWireBearerAuth:
      type: http
      scheme: Bearer
      description: 'SignalWire Bearer Token Authentication for subscriber endpoints.

        The client sends HTTP requests with the Authorization header containing

        the word Bearer followed by a space and the subscriber token.


        Example:

        ```

        Authorization: Bearer <subscriber_token>

        ```'