SignalWire Room Tokens API

Manage room tokens

Operations 1

POST /api/video/room_tokens Create room token #

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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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.'
      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:
    Video.JoinAsType:
      type: string
      enum:
      - audience
      - member
      description: Join as type 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.
    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.
    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.StatusCode400:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Bad Request
      unevaluatedProperties:
        not: {}
      description: The request is invalid.
    Video.MediaAllowedType:
      type: string
      enum:
      - all
      - video-only
      - audio-only
      description: Media allowed type for room tokens.
    Types.StatusCodes.StatusCode401:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Unauthorized
      unevaluatedProperties:
        not: {}
      description: Access is unauthorized.
    Types.StatusCodes.StatusCode500:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Internal Server Error
      unevaluatedProperties:
        not: {}
      description: An internal server error occurred.
    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
    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.
  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>

        ```'