PeerTube Video Playlists API

Operations dealing with playlists of videos. Playlists are bound to users and/or channels.

OpenAPI Specification

peertube-video-playlists-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: PeerTube Abuses Video Playlists API
  version: 8.1.0
  contact:
    name: PeerTube Community
    url: https://joinpeertube.org
  license:
    name: AGPLv3.0
    url: https://github.com/Chocobozzz/PeerTube/blob/master/LICENSE
  x-logo:
    url: https://joinpeertube.org/img/brand.png
    altText: PeerTube Project Homepage
  description: "The PeerTube API is built on HTTP(S) and is RESTful. You can use your favorite\nHTTP/REST library for your programming language to use PeerTube.\n\nSee the [REST API quick start](https://docs.joinpeertube.org/api/rest-getting-started) for a few\nexamples of using the PeerTube API.\n\n# Authentication\n\nWhen you sign up for an account on a PeerTube instance, you are given the possibility\nto generate sessions on it, and authenticate there using an access token. Only __one\naccess token can currently be used at a time__.\n\n## Roles\n\nAccounts are given permissions based on their role. There are three roles on\nPeerTube: Administrator, Moderator, and User. See the [roles guide](https://docs.joinpeertube.org/admin/managing-users#roles) for a detail of their permissions.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call, completed by a [RFC7807-compliant](https://tools.ietf.org/html/rfc7807) response body.\n\n```\nHTTP 1.1 404 Not Found\nContent-Type: application/problem+json; charset=utf-8\n\n{\n  \"detail\": \"Video not found\",\n  \"docs\": \"https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo\",\n  \"status\": 404,\n  \"title\": \"Not Found\",\n  \"type\": \"about:blank\"\n}\n```\n\nWe provide error `type` (following RFC7807) and `code` (internal PeerTube code) values for [a growing number of cases](https://github.com/Chocobozzz/PeerTube/blob/develop/packages/models/src/server/server-error-code.enum.ts),\nbut it is still optional. Types are used to disambiguate errors that bear the same status code\nand are non-obvious:\n\n```\nHTTP 1.1 403 Forbidden\nContent-Type: application/problem+json; charset=utf-8\n\n{\n  \"detail\": \"Cannot get this video regarding follow constraints\",\n  \"docs\": \"https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo\",\n  \"status\": 403,\n  \"title\": \"Forbidden\",\n  \"type\": \"https://docs.joinpeertube.org/api-rest-reference.html#section/Errors/does_not_respect_follow_constraints\"\n}\n```\n\nHere a 403 error could otherwise mean that the video is private or blocklisted.\n\n### Validation errors\n\nEach parameter is evaluated on its own against a set of rules before the route validator\nproceeds with potential testing involving parameter combinations. Errors coming from validation\nerrors appear earlier and benefit from a more detailed error description:\n\n```\nHTTP 1.1 400 Bad Request\nContent-Type: application/problem+json; charset=utf-8\n\n{\n  \"detail\": \"Incorrect request parameters: id\",\n  \"docs\": \"https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo\",\n  \"instance\": \"/api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180\",\n  \"invalid-params\": {\n    \"id\": {\n      \"location\": \"params\",\n      \"msg\": \"Invalid value\",\n      \"param\": \"id\",\n      \"value\": \"9c9de5e8-0a1e-484a-b099-e80766180\"\n    }\n  },\n  \"status\": 400,\n  \"title\": \"Bad Request\",\n  \"type\": \"about:blank\"\n}\n```\n\nWhere `id` is the name of the field concerned by the error, within the route definition.\n`invalid-params.<field>.location` can be either 'params', 'body', 'header', 'query' or 'cookies', and\n`invalid-params.<field>.value` reports the value that didn't pass validation whose `invalid-params.<field>.msg`\nis about.\n\n### Deprecated error fields\n\nSome fields could be included with previous versions. They are still included but their use is deprecated:\n- `error`: superseded by `detail`\n\n# Rate limits\n\nWe are rate-limiting all endpoints of PeerTube's API. Custom values can be set by administrators:\n\n| Endpoint (prefix: `/api/v1`) | Calls         | Time frame   |\n|------------------------------|---------------|--------------|\n| `/*`                         | 50            | 10 seconds   |\n| `POST /users/token`          | 15            | 5 minutes    |\n| `POST /users/register`       | 2<sup>*</sup> | 5 minutes    |\n| `POST /users/ask-send-verify-email` | 3      | 5 minutes    |\n\nDepending on the endpoint, <sup>*</sup>failed requests are not taken into account. A service\nlimit is announced by a `429 Too Many Requests` status code.\n\nYou can get details about the current state of your rate limit by reading the\nfollowing headers:\n\n| Header                  | Description                                                |\n|-------------------------|------------------------------------------------------------|\n| `X-RateLimit-Limit`     | Number of max requests allowed in the current time period  |\n| `X-RateLimit-Remaining` | Number of remaining requests in the current time period    |\n| `X-RateLimit-Reset`     | Timestamp of end of current time period as UNIX timestamp  |\n| `Retry-After`           | Seconds to delay after the first `429` is received         |\n\n# CORS\n\nThis API features [Cross-Origin Resource Sharing (CORS)](https://fetch.spec.whatwg.org/),\nallowing cross-domain communication from the browser for some routes:\n\n| Endpoint                    |\n|------------------------- ---|\n| `/api/*`                    |\n| `/download/*`               |\n| `/lazy-static/*`            |\n| `/.well-known/webfinger`    |\n\nIn addition, all routes serving ActivityPub are CORS-enabled for all origins.\n"
servers:
- url: https://peertube2.cpy.re
  description: Live Test Server (live data - latest nightly version)
- url: https://peertube3.cpy.re
  description: Live Test Server (live data - latest RC version)
- url: https://peertube.cpy.re
  description: Live Test Server (live data - stable version)
tags:
- name: Video Playlists
  description: Operations dealing with playlists of videos. Playlists are bound to users and/or channels.
paths:
  /api/v1/video-channels/{channelHandle}/video-playlists:
    get:
      summary: List playlists of a channel
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/videoPlaylistType'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  total:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/VideoPlaylist'
  /api/v1/video-channels/{channelHandle}/video-playlists/reorder:
    post:
      summary: Reorder channel playlists
      operationId: reorderVideoPlaylistsOfChannel
      security:
      - OAuth2: []
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      responses:
        '204':
          description: successful operation
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                startPosition:
                  type: integer
                  description: Start position of the element to reorder
                  minimum: 1
                insertAfterPosition:
                  type: integer
                  description: New position for the block to reorder, to add the block before the first element
                  minimum: 0
                reorderLength:
                  type: integer
                  description: How many element from `startPosition` to reorder
                  minimum: 1
              required:
              - startPosition
              - insertAfterPosition
  /api/v1/video-playlists/privacies:
    get:
      summary: List available playlist privacy policies
      operationId: getPlaylistPrivacyPolicies
      tags:
      - Video Playlists
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
              examples:
                nightly:
                  externalValue: https://peertube2.cpy.re/api/v1/video-playlists/privacies
  /api/v1/video-playlists:
    get:
      summary: List video playlists
      operationId: getPlaylists
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/videoPlaylistType'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  total:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/VideoPlaylist'
    post:
      summary: Create a video playlist
      description: If the video playlist is set as public, `videoChannelId` is mandatory.
      operationId: addPlaylist
      security:
      - OAuth2: []
      tags:
      - Video Playlists
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  videoPlaylist:
                    type: object
                    properties:
                      id:
                        $ref: '#/components/schemas/VideoPlaylist/properties/id'
                      uuid:
                        $ref: '#/components/schemas/VideoPlaylist/properties/uuid'
                      shortUUID:
                        $ref: '#/components/schemas/VideoPlaylist/properties/shortUUID'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                displayName:
                  description: Video playlist display name
                  type: string
                  minLength: 1
                  maxLength: 120
                thumbnailfile:
                  description: Video playlist thumbnail file
                  type: string
                  format: binary
                privacy:
                  $ref: '#/components/schemas/VideoPlaylistPrivacySet'
                description:
                  description: Video playlist description
                  type: string
                  minLength: 3
                  maxLength: 1000
                videoChannelId:
                  allOf:
                  - $ref: '#/components/schemas/id'
                  description: Video channel in which the playlist will be published
              required:
              - displayName
            encoding:
              thumbnailfile:
                contentType: image/jpeg
  /api/v1/video-playlists/{playlistId}:
    get:
      summary: Get a video playlist
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/playlistId'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoPlaylist'
    put:
      summary: Update a video playlist
      description: If the video playlist is set as public, the playlist must have a assigned channel.
      security:
      - OAuth2: []
      tags:
      - Video Playlists
      responses:
        '204':
          description: successful operation
      parameters:
      - $ref: '#/components/parameters/playlistId'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                displayName:
                  description: Video playlist display name
                  type: string
                  minLength: 1
                  maxLength: 120
                thumbnailfile:
                  description: Video playlist thumbnail file
                  type: string
                  format: binary
                privacy:
                  $ref: '#/components/schemas/VideoPlaylistPrivacySet'
                description:
                  description: Video playlist description
                  type: string
                videoChannelId:
                  allOf:
                  - $ref: '#/components/schemas/id'
                  description: Video channel in which the playlist will be published
            encoding:
              thumbnailfile:
                contentType: image/jpeg
    delete:
      summary: Delete a video playlist
      security:
      - OAuth2: []
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/playlistId'
      responses:
        '204':
          description: successful operation
  /api/v1/video-playlists/{playlistId}/videos:
    get:
      summary: List videos of a playlist
      operationId: getVideoPlaylistVideos
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/playlistId'
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                properties:
                  total:
                    type: integer
                    example: 1
                  data:
                    type: array
                    maxItems: 100
                    items:
                      type: object
                      properties:
                        id:
                          description: Playlist element id
                          allOf:
                          - $ref: '#/components/schemas/id'
                        position:
                          type: integer
                          example: 2
                        startTimestamp:
                          type: integer
                          nullable: true
                          example: 10
                          format: seconds
                        stopTimestamp:
                          type: integer
                          nullable: true
                          example: 41
                          format: seconds
                        video:
                          $ref: '#/components/schemas/Video'
    post:
      summary: Add a video in a playlist
      operationId: addVideoPlaylistVideo
      security:
      - OAuth2: []
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/playlistId'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  videoPlaylistElement:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 2
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                videoId:
                  oneOf:
                  - $ref: '#/components/schemas/Video/properties/uuid'
                  - $ref: '#/components/schemas/Video/properties/id'
                  description: Video to add in the playlist
                startTimestamp:
                  type: integer
                  format: seconds
                  description: Start the video at this specific timestamp
                stopTimestamp:
                  type: integer
                  format: seconds
                  description: Stop the video at this specific timestamp
              required:
              - videoId
  /api/v1/video-playlists/{playlistId}/videos/reorder:
    post:
      summary: Reorder playlist elements
      operationId: reorderVideoPlaylist
      security:
      - OAuth2: []
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/playlistId'
      responses:
        '204':
          description: successful operation
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                startPosition:
                  type: integer
                  description: Start position of the element to reorder
                  minimum: 1
                insertAfterPosition:
                  type: integer
                  description: New position for the block to reorder, to add the block before the first element
                  minimum: 0
                reorderLength:
                  type: integer
                  description: How many element from `startPosition` to reorder
                  minimum: 1
              required:
              - startPosition
              - insertAfterPosition
  /api/v1/video-playlists/{playlistId}/videos/{playlistElementId}:
    put:
      summary: Update a playlist element
      operationId: putVideoPlaylistVideo
      security:
      - OAuth2: []
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/playlistId'
      - $ref: '#/components/parameters/playlistElementId'
      responses:
        '204':
          description: successful operation
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                startTimestamp:
                  type: integer
                  format: seconds
                  description: Start the video at this specific timestamp
                stopTimestamp:
                  type: integer
                  format: seconds
                  description: Stop the video at this specific timestamp
    delete:
      summary: Delete an element from a playlist
      operationId: delVideoPlaylistVideo
      security:
      - OAuth2: []
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/playlistId'
      - $ref: '#/components/parameters/playlistElementId'
      responses:
        '204':
          description: successful operation
  /api/v1/users/me/video-playlists/videos-exist:
    get:
      summary: Check video exists in my playlists
      security:
      - OAuth2: []
      tags:
      - Video Playlists
      parameters:
      - name: videoIds
        in: query
        required: true
        description: The video ids to check
        schema:
          type: array
          items:
            $ref: '#/components/schemas/Video/properties/id'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  videoId:
                    type: array
                    items:
                      type: object
                      properties:
                        playlistElementId:
                          type: integer
                        playlistId:
                          type: integer
                        startTimestamp:
                          type: integer
                          format: seconds
                          nullable: true
                        stopTimestamp:
                          type: integer
                          format: seconds
                          nullable: true
  /api/v1/accounts/{name}/video-playlists:
    get:
      summary: List playlists of an account
      tags:
      - Video Playlists
      parameters:
      - $ref: '#/components/parameters/name'
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/search'
      - $ref: '#/components/parameters/videoPlaylistType'
      - $ref: '#/components/parameters/includeCollaborations'
      - name: channelNameOneOf
        in: query
        required: false
        description: '**PeerTube >= 8.0** Filter on playlists that are published on a channel with one of these names'
        schema:
          oneOf:
          - type: string
          - type: array
            items:
              type: string
        style: form
        explode: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  total:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/VideoPlaylist'
  /api/v1/search/video-playlists:
    get:
      tags:
      - Video Playlists
      summary: Search playlists
      operationId: searchPlaylists
      parameters:
      - name: search
        in: query
        required: true
        description: 'String to search. If the user can make a remote URI search, and the string is an URI then the PeerTube instance will fetch the remote object and add it to its database. Then, you can use the REST API to fetch the complete playlist information and interact with it.

          '
        schema:
          type: string
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/searchTarget'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/host'
      - $ref: '#/components/parameters/uuids'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  total:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/VideoPlaylist'
        '500':
          description: search index unavailable
components:
  schemas:
    VideoPlaylistTypeConstant:
      properties:
        id:
          $ref: '#/components/schemas/VideoPlaylistTypeSet'
        label:
          type: string
    VideoPlaylistTypeSet:
      type: integer
      enum:
      - 1
      - 2
      description: The video playlist type (Regular = `1`, Watch Later = `2`)
    VideoConstantNumber-Licence:
      properties:
        id:
          $ref: '#/components/schemas/VideoLicenceSet'
        label:
          type: string
          example: Attribution - Share Alike
    VideoStateConstant:
      properties:
        id:
          type: integer
          enum:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
          - 8
          - 9
          description: 'The video state:

            - `1`: Published

            - `2`: To transcode

            - `3`: To import

            - `4`: Waiting for live stream

            - `5`: Live ended

            - `6`: To move to an external storage (object storage...)

            - `7`: Transcoding failed

            - `8`: Moving to an external storage failed

            - `9`: To edit using studio edition feature

            '
        label:
          type: string
    VideoConstantString-Language:
      properties:
        id:
          $ref: '#/components/schemas/VideoLanguageSet'
        label:
          type: string
          example: English
    VideoPlaylist:
      properties:
        id:
          $ref: '#/components/schemas/id'
        uuid:
          $ref: '#/components/schemas/UUIDv4'
        shortUUID:
          allOf:
          - $ref: '#/components/schemas/shortUUID'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        description:
          type: string
          minLength: 3
          maxLength: 1000
        displayName:
          type: string
          minLength: 1
          maxLength: 120
        isLocal:
          type: boolean
        videoLength:
          type: integer
          minimum: 0
        thumbnailPath:
          description: Deprecated in PeerTube v8.1, use thumbnails instead
          deprecated: true
          type: string
        thumbnails:
          description: '**PeerTube >= 8.1** Array of thumbnails for the playlist'
          type: array
          items:
            $ref: '#/components/schemas/Thumbnail'
        privacy:
          $ref: '#/components/schemas/VideoPlaylistPrivacyConstant'
        type:
          $ref: '#/components/schemas/VideoPlaylistTypeConstant'
        ownerAccount:
          $ref: '#/components/schemas/AccountSummary'
        videoChannel:
          $ref: '#/components/schemas/VideoChannelSummary'
        videoChannelPosition:
          type: integer
          minimum: 1
          description: Position of the playlist in the channel
    Thumbnail:
      properties:
        fileUrl:
          type: string
        width:
          type: integer
        height:
          type: integer
        aspectRatio:
          type: string
          example: '16:9'
    Video:
      properties:
        id:
          description: object id for the video
          allOf:
          - $ref: '#/components/schemas/id'
        uuid:
          description: universal identifier for the video, that can be used across instances
          allOf:
          - $ref: '#/components/schemas/UUIDv4'
        shortUUID:
          allOf:
          - $ref: '#/components/schemas/shortUUID'
        isLive:
          type: boolean
        liveSchedules:
          type: array
          items:
            $ref: '#/components/schemas/LiveSchedule'
        createdAt:
          type: string
          format: date-time
          example: '2017-10-01T10:52:46.396000+00:00'
          description: time at which the video object was first drafted
        publishedAt:
          type: string
          format: date-time
          example: '2018-10-01T10:52:46.396000+00:00'
          description: time at which the video was marked as ready for playback (with restrictions depending on `privacy`). Usually set after a `state` evolution.
        updatedAt:
          type: string
          format: date-time
          example: '2021-05-04T08:01:01.502000+00:00'
          description: last time the video's metadata was modified
        originallyPublishedAt:
          type: string
          nullable: true
          format: date-time
          example: '2010-10-01T10:52:46.396000+00:00'
          description: used to represent a date of first publication, prior to the practical publication date of `publishedAt`
        category:
          allOf:
          - $ref: '#/components/schemas/VideoConstantNumber-Category'
          description: category in which the video is classified
        licence:
          allOf:
          - $ref: '#/components/schemas/VideoConstantNumber-Licence'
          description: licence under which the video is distributed
        language:
          allOf:
          - $ref: '#/components/schemas/VideoConstantString-Language'
          description: main language used in the video
        privacy:
          allOf:
          - $ref: '#/components/schemas/VideoPrivacyConstant'
          description: privacy policy used to distribute the video
        truncatedDescription:
          type: string
          nullable: true
          example: '**[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n

            **Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\r\n*A decentralized video hosting network, based on fr...

            '
          minLength: 3
          maxLength: 250
          description: 'truncated description of the video, written in Markdown.

            '
        duration:
          type: integer
          example: 1419
          format: seconds
          description: duration of the video in seconds
        aspectRatio:
          type: number
          nullable: true
          format: float
          example: 1.778
          description: '**PeerTube >= 6.1** Aspect ratio of the video stream'
        isLocal:
          type: boolean
        name:
          type: string
          description: title of the video
          example: What is PeerTube?
          minLength: 3
          maxLength: 120
        thumbnailPath:
          description: Deprecated in PeerTube v8.1, use thumbnails instead
          deprecated: true
          type: string
        previewPath:
          description: Deprecated in PeerTube v8.1, use thumbnails instead
          deprecated: true
          type: string
        thumbnails:
          description: '**PeerTube >= 8.1** Array of thumbnails for the video'
          type: array
          items:
            $ref: '#/components/schemas/Thumbnail'
        embedPath:
          type: string
          example: /videos/embed/a65bc12f-9383-462e-81ae-8207e8b434ee
        views:
          type: integer
          example: 1337
        likes:
          type: integer
          example: 42
        dislikes:
          type: integer
          example: 7
        comments:
          description: '**PeerTube >= 7.2** Number of comments on the video'
          type: integer
        nsfw:
          type: boolean
        nsfwFlags:
          allOf:
          - $ref: '#/components/schemas/NSFWFlag'
        nsfwSummary:
          type: string
          description: '**PeerTube >= 7.2** More information about the sensitive content of the video'
        waitTranscoding:
          type: boolean
          nullable: true
        state:
          allOf:
          - $ref: '#/components/schemas/VideoStateConstant'
          description: represents the internal state of the video processing within the PeerTube instance
        scheduledUpdate:
          nullable: true
          allOf:
          - $ref: '#/components/schemas/VideoScheduledUpdate'
        blacklisted:
          nullable: true
          type: boolean
        blacklistedReason:
          nullable: true
          type: string
        account:
          $ref: '#/components/schemas/AccountSummary'
        channel:
          $ref: '#/components/schemas/VideoChannelSummary'
        userHistory:
          nullable: true
          type: object
          properties:
            currentTime:
              type: integer
    VideoPrivacyConstant:
      properties:
        id:
          $ref: '#/components/schemas/VideoPrivacySet'
        label:
          type: string
    id:
      type: integer
      minimum: 1
      example: 42
    LiveSchedule:
      properties:
        startAt:
          type: string
          format: date-time
          description: Date when the stream is scheduled to air at
    ActorImage:
      properties:
        path:
          description: Deprecated in PeerTube v8.0, use fileUrl instead
          deprecated: true
          type: string
        fileUrl:
          description: '**PeerTube >= 7.1**'
          type: string
        width:
          type: integer
        height:
          type: integer
          description: '**PeerTube >= 7.3**'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    VideoPlaylistPrivacySet:
      type: integer
      enum:
      - 1
      - 2
      - 3
      description: Video playlist privacy policy (see [/video-playlists/privacies](#operation/getPlaylistPrivacyPolicies))
    VideoLanguageSet:
      type: string
      description: language id of the video (see [/videos/languages](#operation/getLanguages))
      example: en
    shortUUID:
      type: string
      description: translation of a uuid v4 with a bigger alphabet to have a shorter uuid
      example: 2y84q2MQUMWPbiEcxNXMgC
    VideoChannelSummary:
      properties:
        id:
          $ref: '#/components/schemas/id'
        name:
          type: string
        displayName:
      

# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/peertube/refs/heads/main/openapi/peertube-video-playlists-api-openapi.yml