Livepeer room API

Operations related to rooms api

Operations 9

POST /room Create a room #
GET /room/{id} Retrieve a room #
DELETE /room/{id} Delete a room #
POST /room/{id}/egress Start room RTMP egress #
DELETE /room/{id}/egress Stop room RTMP egress #
POST /room/{id}/user Create a room user #
GET /room/{id}/user/{userId} Get user details #
PUT /room/{id}/user/{userId} Update a room user #
DELETE /room/{id}/user/{userId} Remove a user from the room #

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/livepeer-room-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

livepeer-room-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Livepeer Room API
  version: 1.0.0
  description: 'Operations tagged room across 2 of this provider''s published API definitions: livepeer-openapi.yml, livepeer-studio-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://livepeer.studio/api
security:
- apiKey: []
tags:
- name: room
  description: Operations related to rooms api
paths:
  /room:
    post:
      deprecated: true
      operationId: createRoom
      x-speakeasy-name-override: create
      summary: Create a room
      tags:
      - room
      description: 'Create a multiparticipant livestreaming room.

        '
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/create-room-response'
                x-speakeasy-name-override: data
      x-codeSamples:
      - lang: go
        label: createRoom
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n    s := livepeergo.New(\n        livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n    )\n\n    ctx := context.Background()\n    res, err := s.Room.Create(ctx)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.CreateRoomResponse != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: createRoom
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.room.create()\n\nif res.create_room_response is not None:\n    # handle response\n    pass"
    servers:
    - url: https://livepeer.studio/api
  /room/{id}:
    get:
      deprecated: true
      operationId: getRoom
      x-speakeasy-name-override: get
      tags:
      - room
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      summary: Retrieve a room
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/room'
                x-speakeasy-name-override: data
      x-codeSamples:
      - lang: go
        label: getRoom
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n    s := livepeergo.New(\n        livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n    )\n\n    ctx := context.Background()\n    res, err := s.Room.Get(ctx, \"<id>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.Room != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: getRoom
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.room.get(id=\"<id>\")\n\nif res.room is not None:\n    # handle response\n    pass"
    delete:
      deprecated: true
      operationId: deleteRoom
      x-speakeasy-name-override: delete
      tags:
      - room
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      summary: Delete a room
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '204':
          description: Success
      x-codeSamples:
      - lang: go
        label: deleteRoom
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n    s := livepeergo.New(\n        livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n    )\n\n    ctx := context.Background()\n    res, err := s.Room.Delete(ctx, \"<id>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: deleteRoom
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.room.delete(id=\"<id>\")\n\nif res is not None:\n    # handle response\n    pass"
    servers:
    - url: https://livepeer.studio/api
  /room/{id}/egress:
    post:
      deprecated: true
      operationId: startRoomEgress
      x-speakeasy-name-override: startEgress
      tags:
      - room
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/room-egress-payload'
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      summary: Start room RTMP egress
      description: 'Create a livestream for your room.

        This allows you to leverage livestreaming features like recording and HLS output.

        '
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '204':
          description: Success
      x-codeSamples:
      - lang: go
        label: startRoomEgress
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"github.com/livepeer/livepeer-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    s := livepeergo.New(\n        livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n    )\n\n    ctx := context.Background()\n    res, err := s.Room.StartEgress(ctx, \"<id>\", components.RoomEgressPayload{\n        StreamID: \"aac12556-4d65-4d34-9fb6-d1f0985eb0a9\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: startRoomEgress
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.room.start_egress(id=\"<id>\", room_egress_payload={\n    \"stream_id\": \"aac12556-4d65-4d34-9fb6-d1f0985eb0a9\",\n})\n\nif res is not None:\n    # handle response\n    pass"
    delete:
      deprecated: true
      operationId: stopRoomEgress
      x-speakeasy-name-override: stopEgress
      summary: Stop room RTMP egress
      tags:
      - room
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '204':
          description: Success
      x-codeSamples:
      - lang: go
        label: stopRoomEgress
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n    s := livepeergo.New(\n        livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n    )\n\n    ctx := context.Background()\n    res, err := s.Room.StopEgress(ctx, \"<id>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: stopRoomEgress
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.room.stop_egress(id=\"<id>\")\n\nif res is not None:\n    # handle response\n    pass"
    servers:
    - url: https://livepeer.studio/api
  /room/{id}/user:
    post:
      deprecated: true
      operationId: createRoomUser
      x-speakeasy-name-override: createUser
      tags:
      - room
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/room-user-payload'
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      summary: Create a room user
      description: 'Call this endpoint to add a user to a room, specifying a display name at a minimum.

        The response will contain a joining URL for Livepeer''s default meeting app.

        Alternatively the joining token can be used with a custom app.

        '
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/room-user-response'
                x-speakeasy-name-override: data
      x-codeSamples:
      - lang: go
        label: createRoomUser
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"github.com/livepeer/livepeer-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    s := livepeergo.New(\n        livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n    )\n\n    ctx := context.Background()\n    res, err := s.Room.CreateUser(ctx, \"<id>\", components.RoomUserPayload{\n        Name: \"name\",\n        CanPublish: livepeergo.Bool(true),\n        CanPublishData: livepeergo.Bool(true),\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.RoomUserResponse != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: createRoomUser
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.room.create_user(id=\"<id>\", room_user_payload={\n    \"name\": \"name\",\n    \"can_publish\": True,\n    \"can_publish_data\": True,\n})\n\nif res.room_user_response is not None:\n    # handle response\n    pass"
    servers:
    - url: https://livepeer.studio/api
  /room/{id}/user/{userId}:
    get:
      operationId: getRoomUser
      x-speakeasy-name-override: getUser
      tags:
      - room
      deprecated: true
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: userId
        in: path
        required: true
        schema:
          type: string
      summary: Get user details
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/get-room-user-response'
                x-speakeasy-name-override: data
      x-codeSamples:
      - lang: go
        label: getRoomUser
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n    s := livepeergo.New(\n        livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n    )\n\n    ctx := context.Background()\n    res, err := s.Room.GetUser(ctx, \"<id>\", \"<value>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.GetRoomUserResponse != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: getRoomUser
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.room.get_user(id=\"<id>\", user_id=\"<value>\")\n\nif res.get_room_user_response is not None:\n    # handle response\n    pass"
    put:
      deprecated: true
      operationId: updateRoomUser
      x-speakeasy-name-override: updateUser
      tags:
      - room
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/room-user-update-payload'
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: userId
        in: path
        required: true
        schema:
          type: string
      summary: Update a room user
      description: Update properties for a user.
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '204':
          description: Success
      x-codeSamples:
      - lang: go
        label: updateRoomUser
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"github.com/livepeer/livepeer-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    s := livepeergo.New(\n        livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n    )\n\n    ctx := context.Background()\n    res, err := s.Room.UpdateUser(ctx, \"<id>\", \"<value>\", components.RoomUserUpdatePayload{\n        CanPublish: livepeergo.Bool(true),\n        CanPublishData: livepeergo.Bool(true),\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: updateRoomUser
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.room.update_user(id=\"<id>\", user_id=\"<value>\", room_user_update_payload={\n    \"can_publish\": True,\n    \"can_publish_data\": True,\n})\n\nif res is not None:\n    # handle response\n    pass"
    delete:
      operationId: deleteRoomUser
      x-speakeasy-name-override: deleteUser
      tags:
      - room
      deprecated: true
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: userId
        in: path
        required: true
        schema:
          type: string
      summary: Remove a user from the room
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '204':
          description: Success
      x-codeSamples:
      - lang: go
        label: deleteRoomUser
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n    s := livepeergo.New(\n        livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n    )\n\n    ctx := context.Background()\n    res, err := s.Room.DeleteUser(ctx, \"<id>\", \"<value>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: deleteRoomUser
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.room.delete_user(id=\"<id>\", user_id=\"<value>\")\n\nif res is not None:\n    # handle response\n    pass"
    servers:
    - url: https://livepeer.studio/api
components:
  schemas:
    get-room-user-response:
      type: object
      properties:
        id:
          type: string
          description: The ID of the user
          example: d32ae9e6-c459-4931-9898-e86e2f5e7e16
        joinedAt:
          type: integer
          description: Timestamp (in milliseconds) at which the user joined
          example: 1687517025261
        name:
          type: string
          description: The display name of the user
          example: name
        isPublisher:
          type: boolean
          description: Whether a user is allowed to publish audio/video tracks
          example: true
          default: true
        metadata:
          type: string
          description: User defined payload to store for the participant
    room:
      type: object
      required:
      - id
      - participants
      - events
      properties:
        id:
          type: string
          readOnly: true
          description: room ID
          example: d32ae9e6-c459-4931-9898-e86e2f5e7e16
        createdAt:
          type: number
          readOnly: true
          description: Timestamp (in milliseconds) at which the room was created
          example: 1587667174725
        updatedAt:
          type: number
          readOnly: true
          description: Timestamp (in milliseconds) at which room was updated
          example: 1587667174725
        egressId:
          type: string
          description: internal ID for egress output
        participants:
          type: object
          additionalProperties:
            type: object
            properties:
              identity:
                type: string
                description: participant ID
              name:
                type: string
                description: user defined participant name
              joinedAt:
                type: integer
                description: the time the participant joined
              leftAt:
                type: integer
                description: the time the participant left
    room-user-response:
      type: object
      properties:
        id:
          type: string
          description: The ID of the user
          example: d32ae9e6-c459-4931-9898-e86e2f5e7e16
        joinUrl:
          type: string
          description: Joining URL - use this for Livepeer's default meeting app (see the multiparticipant streaming guide for more info).
          example: https://meet.livepeer.chat
        token:
          type: string
          description: Joining JWT - this can be used if you have a custom meeting app (see the multiparticipant streaming guide for more info).
          example: token
    room-user-update-payload:
      type: object
      required:
      - canPublish
      additionalProperties: false
      properties:
        canPublish:
          type: boolean
          description: Whether a user is allowed to publish audio/video tracks (i.e. their microphone and webcam)
          example: true
          default: true
        canPublishData:
          type: boolean
          description: Whether a user is allowed to publish data messages to the room
          example: true
          default: true
        metadata:
          type: string
          description: User defined payload to store for the participant
    room-user-payload:
      type: object
      required:
      - name
      additionalProperties: false
      properties:
        name:
          type: string
          description: Display name
          example: name
        canPublish:
          type: boolean
          description: Whether a user is allowed to publish audio/video tracks
          example: true
        canPublishData:
          type: boolean
          description: Whether a user is allowed to publish data messages to the room
          example: true
        metadata:
          type: string
          description: User defined payload to store for the participant
    create-room-response:
      type: object
      properties:
        id:
          type: string
          description: The ID of the room
          example: d32ae9e6-c459-4931-9898-e86e2f5e7e16
    room-egress-payload:
      type: object
      required:
      - streamId
      additionalProperties: false
      properties:
        streamId:
          type: string
          description: The ID of the Livepeer Stream to stream to
          example: aac12556-4d65-4d34-9fb6-d1f0985eb0a9
    error:
      type: object
      properties:
        errors:
          type: array
          minItems: 1
          items:
            type: string
            example:
            - id not provided
            - Account not found
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: JWT
    HTTPBearer:
      type: http
      scheme: bearer
x-refined-from:
- livepeer-openapi.yml
- livepeer-studio-openapi.yml