SignalWire Room Recordings API

Manage room recordings

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-recordings-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-recordings-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: SignalWire REST Room Recordings 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 recordings
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 Recordings
  description: Manage room recordings
  externalDocs:
    url: https://signalwire.com/docs/apis
    description: Developer documentation on SignalWire REST APIs
paths:
  /api/video/room_recordings:
    get:
      operationId: list_room_recordings
      summary: List room recordings
      description: 'A list of all Room Recordings.


        #### 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:
      - $ref: '#/components/parameters/Video.ListRoomRecordingsRequest.media_ttl'
      - $ref: '#/components/parameters/Video.ListRoomRecordingsRequest.page_number'
      - $ref: '#/components/parameters/Video.ListRoomRecordingsRequest.page_size'
      - $ref: '#/components/parameters/Video.ListRoomRecordingsRequest.page_token'
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Video.ListRoomRecordingsResponse'
        '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 Recordings
  /api/video/room_recordings/{id}:
    get:
      operationId: get_room_recording
      summary: Get room recording
      description: 'A detailed summary of a particular Room Recording.


        #### 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:
      - $ref: '#/components/parameters/Video.RoomRecordingPathID'
      - name: media_ttl
        in: query
        required: false
        description: Generated media links will be valid for this many seconds. Default is 900 (15 minutes).
        schema:
          type: integer
          format: int32
          minimum: 0
        explode: false
      responses:
        '200':
          description: Room recording response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Video.RoomRecording'
        '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'
        '404':
          description: The server cannot find the requested resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode404'
        '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 Recordings
    delete:
      operationId: delete_room_recording
      summary: Delete room recording
      description: 'Delete a Room Recording.


        #### 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:
      - $ref: '#/components/parameters/Video.RoomRecordingPathID'
      responses:
        '204':
          description: 'There is no content to send for this request, but the headers may be useful. '
        '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'
        '404':
          description: The server cannot find the requested resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode404'
        '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 Recordings
  /api/video/room_recordings/{id}/events:
    get:
      operationId: list_room_recording_events
      summary: List room recording events
      description: 'A list of Events for a particular Room Recording.


        #### 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:
      - $ref: '#/components/parameters/Video.RoomRecordingPathID'
      - $ref: '#/components/parameters/Video.ListRoomRecordingEventsRequest.page_number'
      - $ref: '#/components/parameters/Video.ListRoomRecordingEventsRequest.page_size'
      - $ref: '#/components/parameters/Video.ListRoomRecordingEventsRequest.page_token'
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Video.ListRoomRecordingEventsResponse'
        '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 Recordings
components:
  schemas:
    Types.StatusCodes.StatusCode401:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Unauthorized
      unevaluatedProperties:
        not: {}
      description: Access is unauthorized.
    Video.RoomRecording:
      type: object
      required:
      - id
      - room_session_id
      - status
      - started_at
      - finished_at
      - duration
      - size_in_bytes
      - format
      - cost_in_dollars
      - uri
      - created_at
      - updated_at
      properties:
        id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: Unique ID of the Room Recording.
          examples:
          - c22d24f6-5a47-4597-9a23-c7d01e696b92
        room_session_id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: Unique ID of the Room Session the Room Recording was made in.
          examples:
          - a1b2c3d4-5e6f-7890-abcd-ef1234567890
        status:
          anyOf:
          - $ref: '#/components/schemas/Video.RoomRecordingStatus'
          - type: 'null'
          description: Status of the recording.
          examples:
          - completed
        started_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          description: Timestamp of when the Room Recording started.
          examples:
          - '2022-01-01T10:00:00Z'
        finished_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          description: Timestamp of when the Room Recording stopped.
          examples:
          - '2022-01-01T11:00:00Z'
        duration:
          anyOf:
          - type: integer
            format: int32
          - type: 'null'
          description: The length of the Room Recording in seconds.
          examples:
          - 120
        size_in_bytes:
          anyOf:
          - type: integer
            format: int32
          - type: 'null'
          description: The number of bytes of the Room Recording file.
          examples:
          - 20971520
        format:
          anyOf:
          - type: string
          - type: 'null'
          description: The MIME type of the Room Recording file.
          examples:
          - video/mp4
        cost_in_dollars:
          type: number
          format: double
          description: The cost of the recording in dollars.
          examples:
          - 0.05
        uri:
          anyOf:
          - type: string
          - type: 'null'
          description: A temporary URL for accessing the recording file. By default, valid for 15 minutes.
          examples:
          - https://files.signalwire.com/temporary/link/to/the/recording/file
        created_at:
          type: string
          format: date-time
          description: Timestamp when the recording was created.
          examples:
          - '2022-01-01T10:00:00Z'
        updated_at:
          type: string
          format: date-time
          description: Timestamp when the recording was last updated.
          examples:
          - '2022-01-01T11:00:00Z'
      unevaluatedProperties:
        not: {}
      description: Room recording response object.
    Video.ListRoomRecordingsResponse:
      type: object
      required:
      - links
      - data
      properties:
        links:
          allOf:
          - $ref: '#/components/schemas/Video.PaginationLinks'
          description: Pagination links.
        data:
          type: array
          items:
            $ref: '#/components/schemas/Video.RoomRecording'
          description: List of room recordings.
      unevaluatedProperties:
        not: {}
      description: List room recordings response.
    Types.StatusCodes.StatusCode400:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Bad Request
      unevaluatedProperties:
        not: {}
      description: The request is invalid.
    uuid:
      type: string
      format: uuid
      description: Universal Unique Identifier.
    Types.StatusCodes.StatusCode404:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Not Found
      unevaluatedProperties:
        not: {}
      description: The server cannot find the requested resource.
    Video.ListRoomRecordingEventsResponse:
      type: object
      required:
      - links
      - data
      properties:
        links:
          allOf:
          - $ref: '#/components/schemas/Video.PaginationLinks'
          description: Pagination links.
        data:
          type: array
          items:
            $ref: '#/components/schemas/Video.RoomSessionEvent'
          description: List of room recording events.
      unevaluatedProperties:
        not: {}
      description: List room recording events response.
    Types.StatusCodes.StatusCode500:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Internal Server Error
      unevaluatedProperties:
        not: {}
      description: An internal server error occurred.
    Video.RoomSessionEvent:
      type: object
      required:
      - id
      - project_id
      - room_id
      - room_session_id
      - level
      - name
      - payload
      - created_at
      properties:
        id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: Unique ID of the event.
          examples:
          - e44f56a8-7c69-6153-b45c-ab3456789012
        project_id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The ID of the project.
          examples:
          - a1b2c3d4-5e6f-7890-abcd-ef1234567890
        room_id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The ID of the room.
          examples:
          - b2c3d4e5-6f70-8901-bcde-f12345678901
        room_session_id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The ID of the room session.
          examples:
          - c22d24f6-5a47-4597-9a23-c7d01e696b92
        room_recording_id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The ID of the associated room recording. Only present for recording-related events.
          examples:
          - d33e35f7-6b58-5042-a34b-ef2345678901
        room_participant_id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The ID of the associated room participant. Only present for participant-related events.
          examples:
          - e44f68a9-7c69-6153-b56d-ef3456789012
        level:
          type: string
          description: The severity level of the event.
          examples:
          - info
        name:
          type: string
          description: The name of the event.
          examples:
          - room.started
        payload:
          type: object
          unevaluatedProperties: {}
          description: Event-specific payload data.
        created_at:
          type: string
          format: date-time
          description: Timestamp when the event was created.
          examples:
          - '2022-01-01T10:00:00Z'
      unevaluatedProperties:
        not: {}
      description: Room session event response object.
    Video.PaginationLinks:
      type: object
      required:
      - self
      - first
      properties:
        self:
          type: string
          description: Link to the current page.
          examples:
          - https://example.signalwire.com/api/video/rooms?page=2
        first:
          type: string
          description: Link to the first page.
          examples:
          - https://example.signalwire.com/api/video/rooms?page=1
        next:
          type: string
          description: Link to the next page.
          examples:
          - https://example.signalwire.com/api/video/rooms?page=3
        prev:
          type: string
          description: Link to the previous page.
          examples:
          - https://example.signalwire.com/api/video/rooms?page=1
      unevaluatedProperties:
        not: {}
      description: Pagination links for list responses.
    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.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.RoomRecordingStatus:
      type: string
      enum:
      - recording
      - paused
      - processing
      - completed
      description: Status of a room recording.
  parameters:
    Video.ListRoomRecordingsRequest.media_ttl:
      name: media_ttl
      in: query
      required: false
      description: Generated media links will be valid for this many seconds. Default is 900 (15 minutes).
      schema:
        type: integer
        format: int32
        minimum: 0
      explode: false
    Video.ListRoomRecordingsRequest.page_number:
      name: page_number
      in: query
      required: false
      description: Page number to return. Requires `page_token` for values greater than 0.
      schema:
        type: integer
        format: int32
        minimum: 0
        default: 0
      explode: false
    Video.ListRoomRecordingEventsRequest.page_token:
      name: page_token
      in: query
      required: false
      description: Token for cursor-based pagination. Required when `page_number` is greater than 0.
      schema:
        type: string
      explode: false
    Video.ListRoomRecordingsRequest.page_size:
      name: page_size
      in: query
      required: false
      description: Specify the number of results to return on a single page. The default page size is `50` and the maximum is `1000`.
      schema:
        type: integer
        format: int32
        minimum: 1
        maximum: 1000
        default: 50
      explode: false
    Video.ListRoomRecordingsRequest.page_token:
      name: page_token
      in: query
      required: false
      description: Token for cursor-based pagination. Required when `page_number` is greater than 0.
      schema:
        type: string
      explode: false
    Video.RoomRecordingPathID:
      name: id
      in: path
      required: true
      description: Unique ID of the Room Recording.
      schema:
        $ref: '#/components/schemas/uuid'
    Video.ListRoomRecordingEventsRequest.page_size:
      name: page_size
      in: query
      required: false
      description: Specify the number of results to return on a single page. The default page size is `50` and the maximum is `1000`.
      schema:
        type: integer
        format: int32
        minimum: 1
        maximum: 1000
        default: 50
      explode: false
    Video.ListRoomRecordingEventsRequest.page_number:
      name: page_number
      in: query
      required: false
      description: Page number to return. Requires `page_token` for values greater than 0.
      schema:
        type: integer
        format: int32
        minimum: 0
        default: 0
      explode: false
  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>

        ```'