Lightstream ProjectService API

The Project Service operates on a Project.

OpenAPI Specification

lightstream-projectservice-api-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: Event AuthenticationService ProjectService API
  version: '2.0'
  description: The Authentication Service provides token services for clients
host: live.api.stream
basePath: /event/v2
schemes:
- https
consumes:
- application/json
produces:
- application/json
tags:
- name: ProjectService
  description: The Project Service operates on a Project.
paths:
  /collection/{collectionId}/project:
    post:
      summary: Create Project
      description: Create a new project
      operationId: ProjectService_CreateProject
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21CreateProjectResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which will own this project
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          type: object
          properties:
            metadata:
              type: object
              example:
                createdBy: Eddie Current
              title: arbitrary metadata to associate with this project
            rendering:
              $ref: '#/definitions/v21Rendering'
              default: '{}'
              title: composition parameters
            encoding:
              $ref: '#/definitions/v21Encoding'
              default: '{}'
              title: encoding parameters
            composition:
              $ref: '#/definitions/v21Composition'
              title: composition/layout source of the broadcast
            maxDuration:
              type: integer
              format: int64
              example: 172800000
              default: '172800000'
              title: maximum duration of project broadcasts (ms)
              maximum: 604800000
            webrtc:
              $ref: '#/definitions/v21WebRtc'
              title: request webrtc services
            location:
              $ref: '#/definitions/v21LatLong'
              title: optimal broadcast location (for routing and delay)
      tags:
      - ProjectService
  /collection/{collectionId}/project/{projectId}:
    get:
      summary: Get Project
      description: Get an existing project
      operationId: ProjectService_GetProject
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21GetProjectResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which owns the project
        in: path
        required: true
        type: string
      - name: projectId
        description: project id
        in: path
        required: true
        type: string
      - name: status
        description: also query project broadcast status.
        in: query
        required: false
        type: boolean
        default: 'false'
      tags:
      - ProjectService
    delete:
      summary: Delete Project
      description: Delete a project
      operationId: ProjectService_DeleteProject
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21DeleteProjectResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which owns the project
        in: path
        required: true
        type: string
      - name: projectId
        description: project id
        in: path
        required: true
        type: string
      - name: force
        description: forcibly end broadcast in progress.
        in: query
        required: false
        type: boolean
        default: 'false'
      tags:
      - ProjectService
    patch:
      summary: Update Project
      description: Updates a project
      operationId: ProjectService_UpdateProject
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21UpdateProjectResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which owns the project
        in: path
        required: true
        type: string
      - name: projectId
        description: project id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          type: object
          properties:
            updateMask:
              type: string
              example: metadata, maxDuration, rendering.video.frameRate
              title: fields to update
              required:
              - update_mask
            metadata:
              type: object
              example:
                createdBy: Eddie Current
              title: arbitrary metadata to associate with this project
            rendering:
              $ref: '#/definitions/v21Rendering'
              title: composition parameters
            encoding:
              $ref: '#/definitions/v21Encoding'
              title: encoding parameters
            composition:
              $ref: '#/definitions/v21Composition'
              title: composition/layout source of the broadcast
            maxDuration:
              type: integer
              format: int64
              example: 172800000
              title: maximum duration of project broadcasts (ms)
              maximum: 604800000
            webrtc:
              $ref: '#/definitions/v21WebRtc'
              title: configuration for webrtc services (if requested)
            location:
              $ref: '#/definitions/v21LatLong'
              title: optimal broadcast location (for routing and delay)
          required:
          - updateMask
      tags:
      - ProjectService
  /collection/{collectionId}/project/{projectId}/broadcast/snapshot:
    get:
      summary: Get Snapshot
      description: Get a snapshot of the current output frame of the broadcast
      operationId: ProjectService_GetProjectBroadcastSnapshot
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21GetProjectBroadcastSnapshotResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which owns the project
        in: path
        required: true
        type: string
      - name: projectId
        description: project id
        in: path
        required: true
        type: string
      - name: format
        description: snapshot binary format.
        in: query
        required: false
        type: string
        enum:
        - IMAGE_FORMAT_JPEG
      tags:
      - ProjectService
      produces:
      - image/jpeg
  /collection/{collectionId}/project/{projectId}/broadcast/start:
    put:
      summary: Start Broadcast
      description: Start broadcasting a project
      operationId: ProjectService_StartProjectBroadcast
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21StartProjectBroadcastResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which owns the project
        in: path
        required: true
        type: string
      - name: projectId
        description: project id
        in: path
        required: true
        type: string
      - name: webrtcStart
        description: also start webrtc room.
        in: query
        required: false
        type: boolean
        default: 'false'
      tags:
      - ProjectService
  /collection/{collectionId}/project/{projectId}/broadcast/status:
    get:
      summary: Get Broadcast Status
      description: Get the broadcast status of the project
      operationId: ProjectService_GetProjectBroadcastStatus
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21GetProjectBroadcastStatusResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which owns the project
        in: path
        required: true
        type: string
      - name: projectId
        description: project id
        in: path
        required: true
        type: string
      tags:
      - ProjectService
  /collection/{collectionId}/project/{projectId}/broadcast/stop:
    put:
      summary: Stop Broadcast
      description: Stop broadcasting a project
      operationId: ProjectService_StopProjectBroadcast
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21StopProjectBroadcastResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which owns the project
        in: path
        required: true
        type: string
      - name: projectId
        description: project id
        in: path
        required: true
        type: string
      - name: webrtcStop
        description: stop the associated webrtc room,.
        in: query
        required: false
        type: boolean
        default: 'false'
      tags:
      - ProjectService
  /collection/{collectionId}/project/{projectId}/webrtc/start:
    put:
      summary: Start WebRTC
      description: Start WebRTC services
      operationId: ProjectService_StartProjectWebRtc
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21StartProjectWebRtcResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which owns the project
        in: path
        required: true
        type: string
      - name: projectId
        description: project id
        in: path
        required: true
        type: string
      tags:
      - ProjectService
  /collection/{collectionId}/project/{projectId}/webrtc/stop:
    put:
      summary: Stop WebRTC
      description: Stop WebRTC services
      operationId: ProjectService_StopProjectWebRtc
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v21StopProjectWebRtcResponse'
        '401':
          description: The access token provided is not valid
          schema: {}
        '403':
          description: The access token provided does not have access to specified resource
          schema: {}
        '404':
          description: The specified resource was not found
          schema: {}
        '429':
          description: The specified service is busy; please use an exponential backoff on subsequent requests.
          schema: {}
        '500':
          description: The specified service is unavailable; please try again later
          schema: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: collectionId
        description: collection which owns the project
        in: path
        required: true
        type: string
      - name: projectId
        description: project id
        in: path
        required: true
        type: string
      tags:
      - ProjectService
definitions:
  v21PreviewAddress:
    type: object
    properties:
      webrtc:
        $ref: '#/definitions/v21PreviewWebRtcAddress'
        title: 'hls preview address

          optional PreviewHlsPullAddress hls = 1;

          webrtc preview address'
    title: addresses of source previews
  v21VideoColorSpace:
    type: string
    enum:
    - VIDEO_COLOR_SPACE_YUV420
    title: rendering color space
  v21ProjectBroadcastPhase:
    type: string
    enum:
    - PROJECT_BROADCAST_PHASE_NOT_RUNNING
    - PROJECT_BROADCAST_PHASE_WAITING
    - PROJECT_BROADCAST_PHASE_STARTING
    - PROJECT_BROADCAST_PHASE_RUNNING
    - PROJECT_BROADCAST_PHASE_STOPPING
    - PROJECT_BROADCAST_PHASE_STOPPED
    - PROJECT_BROADCAST_PHASE_ARCHIVED
    description: '- PROJECT_BROADCAST_PHASE_WAITING: broadcast is waiting to be scheduled'
    title: broadcast phase of project
  v21SceneComposition:
    type: object
    properties:
      rendererUrl:
        type: string
        example: https://rainmaker.gg/overlay/e67cfd6ad57560962fddcf63611d2834/1
        title: the url to pass to the studiosdk
      selectedLayoutId:
        type: string
        example: e67cfd6ad57560962fddcf63611d2835
        title: the active "scene" to render
      debug:
        type: boolean
        example: false
        default: 'false'
    title: compose scenes using the browser-based compositor
  v21Region:
    type: string
    enum:
    - REGION_US_EAST_1
    - REGION_US_EAST_2
    - REGION_US_WEST_1
    - REGION_US_WEST_2
    - REGION_US_CENTRAL_1
    - REGION_AP_SOUTHEAST_1
    - REGION_CA_EAST_1
    - REGION_EU_CENTRAL_1
    - REGION_EU_WEST_1
    description: "- REGION_US_EAST_1: US East\n - REGION_US_WEST_1: US West\n - REGION_US_CENTRAL_1: US Central\n - REGION_AP_SOUTHEAST_1: Asia Pacific Southeast\n - REGION_CA_EAST_1: Canada East\n - REGION_EU_CENTRAL_1: Europe Central\n - REGION_EU_WEST_1: Europe West"
    title: region which is hosting broadcast
  v21SourceAddress:
    type: object
    properties:
      rtmpPush:
        $ref: '#/definitions/v21SourceRtmpPushAddress'
        title: rtmp push addressing
      srtPush:
        $ref: '#/definitions/v21SrtPushAddress'
        title: the srt address to publish to
      rtmpPull:
        $ref: '#/definitions/v21RtmpPullAddress'
        title: the rtmp address to pull from
    title: live source address (select one)
  v21GetProjectBroadcastSnapshotResponse:
    type: object
    properties:
      format:
        $ref: '#/definitions/v21ImageFormat'
        example: IMAGE_FORMAT_JPEG
        title: the format of the returned snapshot
      image:
        type: string
        format: byte
        title: the binary snapshot
  v21VideoEncoding:
    type: object
    properties:
      codec:
        $ref: '#/definitions/v21VideoCodec'
        example: VIDEO_CODEC_H264
        default: VIDEO_CODEC_H264
        title: video encoding codec
      rateControl:
        $ref: '#/definitions/v21VideoCodecRateControl'
        default: '{}'
        title: video encoding rate control
      profile:
        $ref: '#/definitions/v21VideoCodecProfile'
        example: VIDEO_CODEC_PROFILE_HIGH
        default: VIDEO_CODEC_PROFILE_HIGH
        title: video encoding codec profile
    title: encoding video parameters
  v21Destination:
    type: object
    properties:
      collectionId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: collection which owns the project which owns the destination
      projectId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: project which owns the destination
      destinationId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: destination id
      metadata:
        type: object
        example:
          createdBy: Eddie Current
        title: arbitrary metadata associated with this destination
      enabled:
        type: boolean
        example: true
        default: 'true'
        title: is output stream enabled?
      address:
        $ref: '#/definitions/v21DestinationAddress'
        title: address of the destination
      timeout:
        type: integer
        format: int64
        example: 5000
        default: '5000'
        title: timeout (ms) to wait before resetting a connection
    title: streaming destination of project
  v21StopProjectWebRtcResponse:
    type: object
  v21GetProjectResponse:
    type: object
    properties:
      project:
        $ref: '#/definitions/v21Project'
        title: the request project
      status:
        $ref: '#/definitions/v21ProjectBroadcastStatus'
        title: the status of the project broadcast (if requested)
  v21ImageFormat:
    type: string
    enum:
    - IMAGE_FORMAT_JPEG
    title: image binary format
  v21DestinationAddress:
    type: object
    properties:
      rtmpPush:
        $ref: '#/definitions/v21DestinationRtmpPushAddress'
        title: rtmp push addressing
      agora:
        $ref: '#/definitions/v21DestinationAgoraPushAddress'
        title: Agora addressing
      s3Storage:
        $ref: '#/definitions/v21S3StorageAddress'
        title: s3 storage addressing
    title: destination address (select one)
  v21VideoCodecRateControl:
    type: object
    properties:
      mode:
        $ref: '#/definitions/v21VideoCodecRateControlMode'
        example: VIDEO_CODEC_RATE_CONTROL_MODE_CBR
        default: VIDEO_CODEC_RATE_CONTROL_MODE_CBR
      targetBitrate:
        type: integer
        format: int64
        example: '3145728'
        title: video encoding target bitrate (bits/s)
        maximum: 20971520
        minimum: 256000
      maxKeyFrameInterval:
        type: integer
        format: int64
        example: 30
        default: '30'
        title: maximum video encoding key frame interval (frames)
        maximum: 30000
        minimum: 1
    title: video encoding CBR rate control params
  v21GuestCode:
    type: object
    properties:
      collectionId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: collection which owns the project
      projectId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: project id
      code:
        type: string
        title: the short url code
      url:
        type: string
        title: the short url
      autoDelete:
        type: string
        format: date-time
        title: auto-delete after time
  v21AudioRendering:
    type: object
    properties:
      channelLayout:
        $ref: '#/definitions/v21AudioChannelLayout'
        example: AUDIO_CHANNEL_LAYOUT_STEREO
        default: AUDIO_CHANNEL_LAYOUT_STEREO
        title: audio channel layout
    title: composition audio parameters
  v21SourceTrigger:
    type: object
    properties:
      sourceId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: the id of the source
        required:
        - source_id
      start:
        $ref: '#/definitions/v21SourceTriggerAction'
        example: SOURCE_TRIGGER_ACTION_OR
        default: SOURCE_TRIGGER_ACTION_IGNORE
        title: source should trigger project(s) to start
      stop:
        $ref: '#/definitions/v21SourceTriggerAction'
        example: SOURCE_TRIGGER_ACTION_OR
        default: SOURCE_TRIGGER_ACTION_IGNORE
        title: source should trigger project(s) to stop
    title: triggers to indicate what actions to take on the project for a given Source
    required:
    - sourceId
  rpcStatus:
    type: object
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string
      details:
        type: array
        items:
          $ref: '#/definitions/protobufAny'
  v21HlsLifecycleVod:
    type: object
    properties:
      maxDuration:
        type: integer
        format: int32
        example: 0
        default: '0'
        title: max duration of the recording in ms (0 is indefinite)
    title: vod hls lifecycle management
  v21HlsLifecycle:
    type: object
    properties:
      vod:
        $ref: '#/definitions/v21HlsLifecycleVod'
        default: '{}'
        title: lifecycle of vod
      live:
        $ref: '#/definitions/v21HlsLifecycleLive'
        title: lifecycle of live
    title: hls lifecycle management
  v21CreateProjectResponse:
    type: object
    properties:
      project:
        $ref: '#/definitions/v21Project'
  v21VideoCodec:
    type: string
    enum:
    - VIDEO_CODEC_H264
    title: video encoding codec
  v21RenderingQuality:
    type: string
    enum:
    - RENDERING_QUALITY_STANDARD
    - RENDERING_QUALITY_HIGH
    title: rendering quality
  v21HlsPackaging:
    type: object
    properties:
      lifecycle:
        $ref: '#/definitions/v21HlsLifecycle'
        default: '{}'
        title: lifecycle of hls segments
      segmentDuration:
        type: integer
        format: int32
        example: 2000
        default: '2000'
        title: duration of segments in ms
        maximum: 18000
        minimum: 2000
    title: hls packaging options
  v21Composition:
    type: object
    properties:
      external:
        $ref: '#/definitions/v21ExternalComposition'
        title: compose using an external renderer
      studioSdk:
        $ref: '#/definitions/v21StudioSdkComposition'
        title: compose using the studiosdk renderer
      scene:
        $ref: '#/definitions/v21SceneComposition'
        default: '{}'
        title: compose scenes using the browser-based compositor
    title: composition source for project (select one)
  v21SourceRtmpPushAddress:
    type: object
    properties:
      enabled:
        type: boolean
        example: true
        default: 'true'
        title: enable source rtmp push address
      key:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: assigned rtmp stream key
        readOnly: true
      url:
        type: string
        example: rtmp://ingest.golightstream.com/api2/7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: assigned rtmp destination url
        readOnly: true
      baseUrl:
        type: string
        example: rtmp://ingest.golightstream.com/api2
        title: base_url without stream key
        readOnly: true
    title: rtmp push source address
  v21SourceTriggerAction:
    type: string
    enum:
    - SOURCE_TRIGGER_ACTION_IGNORE
    - SOURCE_TRIGGER_ACTION_OR
    description: '- SOURCE_TRIGGER_ACTION_OR: SOURCE_TRIGGER_ACTION_AND = 2;'
    title: boolean logic for trigger
  v21ProjectBroadcastStatus:
    type: object
    properties:
      collectionId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: collection which owns the project which owns the broadcast
      projectId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: project which owns the broadcast
      broadcastId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
      duration:
        type: integer
        format: int64
        example: 300000
        title: broadcast duration (ms)
      start:
        type: string
        format: date-time
        example: '1981-08-01T00:01:00Z'
        title: broadcast start timestamp (ISO8601 UTC)
      stop:
        type: string
        format: date-time
        example: '1981-08-01T00:04:21Z'
        title: broadcast stop timestamp (ISO8601 UTC)
      phase:
        $ref: '#/definitions/v21ProjectBroadcastPhase'
        example: PROJECT_BROADCAST_PHASE_UNSPECIFIED
        title: broadcast phase
      region:
        $ref: '#/definitions/v21Region'
        example: REGION_US_EAST
        title: region broadcast is located
      datacenter:
        type: string
        example: nyc1
        title: datacenter broadcast is located
    title: broadcast status
  v21Project:
    type: object
    properties:
      collectionId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: collection which owns the project
      projectId:
        type: string
        example: 7132b004-61e8-49c1-8dc8-4bb3269ce6f
        title: project id
      metadata:
        type: object
        example:
          createdBy: Eddie Current
        title: arbitrary metadata associated with this project
      rendering:
        $ref: '#/definitions/v21Rendering'
        default: '{}'
        title: composition parameters
      encoding:
        $ref: '#/definitions/v21Encoding'
        default: '{}'
        title: encoding parameters
      sources:
        type: array
        items:
          $ref: '#/definitions/v21Source'
        title: collection live sources added to this project
      destinations:
        type: array
        items:
          $ref: '#/definitions/v21Destination'
        title: destinations associated with this project
      composition:
        $ref: '#/definitions/v21Composition'
        default: '{}'
        title: composition/layout source of the broadcast
      maxDuration:
        type: integer
        format: int64
        example: 172800000
        default: '172800000'
        title: maximum duration (ms) of project broadcasts
        maximum: 604800000
      webrtc:
        $ref: '#/definitions/v21WebRtc'
        title: configuration for webrtc services (if requested)
      triggers:
        type: array
        items:
          $ref: '#/definitions/v21ProjectTrigger'
        title: external triggers to start and stop this broadcast
      location:
        $ref: '#/definitions/v21LatLong'
        title: optional optimal location to start broadcast
      guestCodes:
        type: array
        items:
          $ref: '#/definitions/v21GuestCode'
        title: guest codes associated with this project
        readOnly: true
    title: project which owns a broadcast, sources, and destinations
  v21StartProjectWebRtcResponse:
    type: object
  v21HlsLifecycleLive:
    type: object
    properties:
      playlistCount:
        type: integer
        format: int32
        example: 5
        default: '5'
        title: number of entries to advertise in playlist file
        minimum: 2
      fileCount:
        type: integer
        format: int32
        example: 10
        default: '10'
        title: number of files to keep on disk
        minimum: 4
    title: live hls lifecycle management
  v21StudioSdkComposition:
    type: object
    properties:
      rendererUrl:
        type: string
        example: https://rainmaker.gg/overlay/e67cfd6ad57560962fddcf63611d2834/1
        title: the page to render studio kit with. If set, this takes priority over `version`
      version:
        type: string
        example: latest
        default: latest
        title: the version of the studio kit renderer to use. Ignored if renderer_url is set
    title: compose using the studiosdk renderer
  v21AudioEncoding:
    type: object
    properties:
      codec:
        $ref: '#/definitions/v21AudioCodec'
        example: AUDIO_CODEC_AAC
        default: AUDIO_CODEC_AAC
        title: audio encoding codec
    title: encoding audio parameters
  v21PreviewWebRtcAddress:
    type: object
    properties:
      enabled:
        typ

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lightstream/refs/heads/main/openapi/lightstream-projectservice-api-openapi.yml