PeerTube Video Channels API

Operations dealing with the creation, modification and listing of videos within a channel.

Operations 23

GET /api/v1/video-channels List video channels #
POST /api/v1/video-channels Create a video channel #
GET /api/v1/video-channels/{channelHandle} Get a video channel #
PUT /api/v1/video-channels/{channelHandle} Update a video channel #
DELETE /api/v1/video-channels/{channelHandle} Delete a video channel #
GET /api/v1/video-channels/{channelHandle}/videos List videos of a video channel #
GET /api/v1/video-channels/{channelHandle}/activities List activities of a video channel #
GET /api/v1/video-channels/{channelHandle}/video-playlists List playlists of a channel
POST /api/v1/video-channels/{channelHandle}/video-playlists/reorder Reorder channel playlists #
GET /api/v1/video-channels/{channelHandle}/followers List followers of a video channel #
POST /api/v1/video-channels/{channelHandle}/avatar/pick Update channel avatar
DELETE /api/v1/video-channels/{channelHandle}/avatar Delete channel avatar
POST /api/v1/video-channels/{channelHandle}/banner/pick Update channel banner
DELETE /api/v1/video-channels/{channelHandle}/banner Delete channel banner
POST /api/v1/video-channels/{channelHandle}/import-videos Import videos in channel
GET /api/v1/accounts/{name}/video-channels List video channels of an account
GET /api/v1/accounts/{name}/video-channel-syncs List the synchronizations of video channels of an account
GET /api/v1/search/video-channels Search channels #
GET /api/v1/video-channels/{channelHandle}/collaborators List channel collaborators #
POST /api/v1/video-channels/{channelHandle}/collaborators/invite Invite a collaborator #
POST /api/v1/video-channels/{channelHandle}/collaborators/{collaboratorId}/accept Accept a collaboration invitation #
POST /api/v1/video-channels/{channelHandle}/collaborators/{collaboratorId}/reject Reject a collaboration invitation #
DELETE /api/v1/video-channels/{channelHandle}/collaborators/{collaboratorId} Remove a channel collaborator #

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/peertube-video-channels-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

peertube-video-channels-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PeerTube Abuses Video Channels 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 Channels
  description: Operations dealing with the creation, modification and listing of videos within a channel.
paths:
  /api/v1/video-channels:
    get:
      summary: List video channels
      operationId: getVideoChannels
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/sort'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoChannelList'
    post:
      summary: Create a video channel
      operationId: addVideoChannel
      security:
      - OAuth2: []
      tags:
      - Video Channels
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  videoChannel:
                    type: object
                    properties:
                      id:
                        $ref: '#/components/schemas/id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoChannelCreate'
  /api/v1/video-channels/{channelHandle}:
    get:
      summary: Get a video channel
      operationId: getVideoChannel
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoChannel'
    put:
      summary: Update a video channel
      operationId: putVideoChannel
      security:
      - OAuth2: []
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      responses:
        '204':
          description: successful operation
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoChannelUpdate'
    delete:
      summary: Delete a video channel
      operationId: delVideoChannel
      security:
      - OAuth2: []
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      responses:
        '204':
          description: successful operation
  /api/v1/video-channels/{channelHandle}/videos:
    get:
      summary: List videos of a video channel
      operationId: getVideoChannelVideos
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/skipCount'
      - $ref: '#/components/parameters/videosSort'
      - $ref: '#/components/parameters/nsfw'
      - $ref: '#/components/parameters/nsfwFlagsIncluded'
      - $ref: '#/components/parameters/nsfwFlagsExcluded'
      - $ref: '#/components/parameters/isLive'
      - $ref: '#/components/parameters/includeScheduledLive'
      - $ref: '#/components/parameters/categoryOneOf'
      - $ref: '#/components/parameters/licenceOneOf'
      - $ref: '#/components/parameters/languageOneOf'
      - $ref: '#/components/parameters/tagsOneOf'
      - $ref: '#/components/parameters/tagsAllOf'
      - $ref: '#/components/parameters/isLocal'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/hasHLSFiles'
      - $ref: '#/components/parameters/hasWebVideoFiles'
      - $ref: '#/components/parameters/host'
      - $ref: '#/components/parameters/autoTagOneOfVideo'
      - $ref: '#/components/parameters/stateOneOfVideo'
      - $ref: '#/components/parameters/privacyOneOf'
      - $ref: '#/components/parameters/excludeAlreadyWatched'
      - $ref: '#/components/parameters/search'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoListResponse'
  /api/v1/video-channels/{channelHandle}/activities:
    get:
      summary: List activities of a video channel
      description: '**PeerTube >= 8.0**'
      operationId: listVideoChannelActivities
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/sort'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelActivityListResponse'
  /api/v1/video-channels/{channelHandle}/video-playlists:
    get:
      summary: List playlists of a channel
      tags:
      - Video Channels
      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 Channels
      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-channels/{channelHandle}/followers:
    get:
      tags:
      - Video Channels
      summary: List followers of a video channel
      security:
      - OAuth2: []
      operationId: getVideoChannelFollowers
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/followersSort'
      - $ref: '#/components/parameters/search'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  total:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Follow'
  /api/v1/video-channels/{channelHandle}/avatar/pick:
    post:
      summary: Update channel avatar
      security:
      - OAuth2: []
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  avatars:
                    type: array
                    items:
                      $ref: '#/components/schemas/ActorImage'
        '413':
          description: image file too large
          headers:
            X-File-Maximum-Size:
              schema:
                type: string
                format: Nginx size
              description: Maximum file size for the avatar
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                avatarfile:
                  description: The file to upload.
                  type: string
                  format: binary
            encoding:
              avatarfile:
                contentType: image/png, image/jpeg
  /api/v1/video-channels/{channelHandle}/avatar:
    delete:
      summary: Delete channel avatar
      security:
      - OAuth2: []
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      responses:
        '204':
          description: successful operation
  /api/v1/video-channels/{channelHandle}/banner/pick:
    post:
      summary: Update channel banner
      security:
      - OAuth2: []
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  banners:
                    type: array
                    items:
                      $ref: '#/components/schemas/ActorImage'
        '413':
          description: image file too large
          headers:
            X-File-Maximum-Size:
              schema:
                type: string
                format: Nginx size
              description: Maximum file size for the banner
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                bannerfile:
                  description: The file to upload.
                  type: string
                  format: binary
            encoding:
              bannerfile:
                contentType: image/png, image/jpeg
  /api/v1/video-channels/{channelHandle}/banner:
    delete:
      summary: Delete channel banner
      security:
      - OAuth2: []
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      responses:
        '204':
          description: successful operation
  /api/v1/video-channels/{channelHandle}/import-videos:
    post:
      summary: Import videos in channel
      description: Import a remote channel/playlist videos into a channel
      security:
      - OAuth2: []
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportVideosInChannelCreate'
      responses:
        '204':
          description: successful operation
  /api/v1/accounts/{name}/video-channels:
    get:
      summary: List video channels of an account
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/name'
      - name: withStats
        in: query
        description: include daily view statistics for the last 30 days and total views (only if authenticated as the account user)
        schema:
          type: boolean
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/search'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/includeCollaborations'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoChannelList'
  /api/v1/accounts/{name}/video-channel-syncs:
    get:
      summary: List the synchronizations of video channels of an account
      tags:
      - Video Channels
      parameters:
      - $ref: '#/components/parameters/name'
      - $ref: '#/components/parameters/start'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/includeCollaborations'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoChannelSyncList'
  /api/v1/search/video-channels:
    get:
      tags:
      - Video Channels
      summary: Search channels
      operationId: searchChannels
      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 channel 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/handles'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoChannelList'
        '500':
          description: search index unavailable
  /api/v1/video-channels/{channelHandle}/collaborators:
    get:
      tags:
      - Video Channels
      summary: List channel collaborators
      description: '**PeerTube >= 8.0**'
      operationId: listVideoChannelCollaborators
      security:
      - OAuth2: []
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  total:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/VideoChannelCollaborator'
  /api/v1/video-channels/{channelHandle}/collaborators/invite:
    post:
      tags:
      - Video Channels
      summary: Invite a collaborator
      operationId: inviteVideoChannelCollaborator
      description: '**PeerTube >= 8.0**  Invite a local user to collaborate on the specified video channel.'
      security:
      - OAuth2: []
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                accountHandle:
                  type: string
                  description: Local user username to invite
      responses:
        '200':
          description: Collaborator invited
          content:
            application/json:
              schema:
                type: object
                properties:
                  collaborator:
                    $ref: '#/components/schemas/VideoChannelCollaborator'
  /api/v1/video-channels/{channelHandle}/collaborators/{collaboratorId}/accept:
    post:
      tags:
      - Video Channels
      summary: Accept a collaboration invitation
      description: '**PeerTube >= 8.0**'
      operationId: acceptVideoChannelCollaborator
      security:
      - OAuth2: []
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      - $ref: '#/components/parameters/collaboratorId'
      responses:
        '204':
          description: Collaboration accepted
  /api/v1/video-channels/{channelHandle}/collaborators/{collaboratorId}/reject:
    post:
      tags:
      - Video Channels
      summary: Reject a collaboration invitation
      description: '**PeerTube >= 8.0**'
      operationId: rejectVideoChannelCollaborator
      security:
      - OAuth2: []
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      - $ref: '#/components/parameters/collaboratorId'
      responses:
        '204':
          description: Collaboration rejected
  /api/v1/video-channels/{channelHandle}/collaborators/{collaboratorId}:
    delete:
      tags:
      - Video Channels
      summary: Remove a channel collaborator
      description: '**PeerTube >= 8.0** Only the channel owner or the collaborator themselves can remove a collaborator from a channel'
      operationId: removeVideoChannelCollaborator
      security:
      - OAuth2: []
      parameters:
      - $ref: '#/components/parameters/channelHandle'
      - $ref: '#/components/parameters/collaboratorId'
      responses:
        '204':
          description: successful operation
components:
  parameters:
    nsfwFlagsIncluded:
      name: nsfwFlagsIncluded
      in: query
      required: false
      schema:
        $ref: '#/components/schemas/NSFWFlag'
    name:
      name: name
      in: path
      required: true
      description: The username or handle of the account
      schema:
        type: string
        example: chocobozzz | chocobozzz@example.org
    tagsAllOf:
      name: tagsAllOf
      in: query
      required: false
      description: tag(s) of the video, where all should be present in the video
      schema:
        oneOf:
        - type: string
        - type: array
          items:
            type: string
      style: form
      explode: true
    nsfwFlagsExcluded:
      name: nsfwFlagsExcluded
      in: query
      required: false
      schema:
        $ref: '#/components/schemas/NSFWFlag'
    autoTagOneOfVideo:
      name: autoTagOneOf
      in: query
      required: false
      description: '**PeerTube >= 6.2** **Admins and moderators only** filter on videos that contain one of these automatic tags'
      schema:
        oneOf:
        - type: string
        - type: array
          items:
            type: string
      style: form
      explode: true
    tagsOneOf:
      name: tagsOneOf
      in: query
      required: false
      description: tag(s) of the video
      schema:
        oneOf:
        - type: string
        - type: array
          maxItems: 5
          items:
            type: string
      style: form
      explode: true
    languageOneOf:
      name: languageOneOf
      in: query
      required: false
      description: language id of the video (see [/videos/languages](#operation/getLanguages)). Use `_unknown` to filter on videos that don't have a video language
      schema:
        oneOf:
        - $ref: '#/components/schemas/VideoLanguageSet'
        - type: array
          items:
            $ref: '#/components/schemas/VideoLanguageSet'
      style: form
      explode: true
    videosSort:
      name: sort
      in: query
      required: false
      schema:
        type: string
        enum:
        - name
        - -duration
        - -createdAt
        - -publishedAt
        - -views
        - -likes
        - -comments
        - -trending
        - -hot
        - -best
        description: "Sort videos by criteria (prefixing with `-` means `DESC` order):\n  * `hot` - Adaptation of Reddit \"hot\" algorithm taking into account video views, likes, dislikes and comments and publication date\n  * `best` - Same than `hot`, but also takes into account user video history\n  * `trending` - Sort videos by recent views (\"recent\" is defined by the admin)\n  * `views` - Sort videos using their `views` counter\n  * `publishedAt` - Sort by video publication date (when it became publicly available)\n"
    searchTarget:
      name: searchTarget
      in: query
      required: false
      description: "If the administrator enabled search index support, you can override the default search target.\n\n**Warning**: If you choose to make an index search, PeerTube will get results from a third party service. It means the instance may not yet know the objects you fetched. If you want to load video/channel information:\n  * If the current user has the ability to make a remote URI search (this information is available in the config endpoint),\n  then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database.\n  After that, you can use the classic REST API endpoints to fetch the complete object or interact with it\n  * If the current user doesn't have the ability to make a remote URI search, then redirect the user on the origin instance or fetch\n  the data from the origin instance API\n"
      schema:
        type: string
        enum:
        - local
        - search-index
    host:
      name: host
      in: query
      required: false
      schema:
        type: string
      description: Find elements owned by this host
    collaboratorId:
      name: collaboratorId
      in: path
      required: true
      description: The collaborator id
      schema:
        $ref: '#/components/schemas/id'
    videoPlaylistType:
      name: playlistType
      in: query
      required: false
      schema:
        $ref: '#/components/schemas/VideoPlaylistTypeSet'
    followersSort:
      name: sort
      in: query
      required: false
      description: Sort followers by criteria
      schema:
        type: string
        enum:
        - createdAt
    stateOneOfVideo:
      name: stateOneOf
      in: query
      required: false
      description: '**PeerTube >= 8.2** **Admins and moderators only** filter on videos that have one of these states'
      schema:
        oneOf:
        - $ref: '#/components/schemas/VideoStateConstant/properties/id'
        - type: array
          items:
            $ref: '#/components/schemas/VideoStateConstant/properties/id'
      style: form
      explode: true
    licenceOneOf:
      name: licenceOneOf
      in: query
      required: false
      description: licence id of the video (see [/videos/licences](#operation/getLicences))
      schema:
        oneOf:
        - $ref: '#/components/schemas/VideoLicenceSet'
        - type: array
          items:
            $ref: '#/components/schemas/VideoLicenceSet'
      style: form
      explode: true
    isLocal:
      name: isLocal
      in: query
      required: false
      schema:
        type: boolean
      description: '**PeerTube >= 4.0** Display only local or remote objects'
    excludeAlreadyWatched:
      name: excludeAlreadyWatched
      in: query
      description: Whether or not to exclude videos that are in the user's video history
      schema:
        type: boolean
    search:
      name: search
      in: query
      required: false
      description: Plain text search, applied to various parts of the model depending on endpoint
      schema:
        type: string
    includeCollaborations:
      name: includeCollaborations
      in: query
      required: false
      description: '**PeerTube >= 8.0** Include objects from collaborated channels'
      schema:
        type: boolean
    includeScheduledLive:
      name: includeScheduledLive
      in: query
      required: false
      description: whether or not include live that are scheduled for later
      schema:
        type: boolean
    hasHLSFiles:
      name: hasHLSFiles
      in: query
      required: false
      schema:
        type: boolean
      description: '**PeerTube >= 4.0** Display only videos that have HLS files'
    start:
      name: start
      in: query
      required: false
      description: Offset used to paginate results
      schema:
        type: integer
        minimum: 0
    categoryOneOf:
      name: categoryOneOf
      in: query
      required: false
      description: category id of the video (see [/videos/categories](#operation/getCategories))
      schema:
        oneOf:
        - $ref: '#/components/schemas/VideoCategorySet'
        - type: array
          items:
            $ref: '#/components/schemas/VideoCategorySet'
      style: form
      explode: true
    skipCount:
      name: skipCount
      in: query
      required: false
      description: if you don't need the `total` in the response
      schema:
        type: string
        enum:
        - 'true'
        - 'false'
        default: 'false'
    hasWebVideoFiles:
      name: hasWebVideoFiles
      in: query
      required: false
      schema:
        type: boolean
      description: '**PeerTube >= 6.0** Display only videos that have Web Video files'
    handles:
      name: handles
      in: query
      required: false
      schema:
        items:
          type: string
      description: Find elements with these handles
    isLive:
      name: isLive
      in: query
      required: false
      description: whether or not the video is a live
      schema:
        type: boolean
    include:
      name: include
      in: query
      required: false
      schema:
        type: integer
        enum:
        - 0
        - 1
        - 2
        - 4
        - 8
        - 16
        - 32
      description: '**Only administrators and moderators can use this parameter**


        Include additional videos in results (can be combined using bitwise or operator)

        - `0` NONE

        - `1` NOT_PUBLISHED_STATE

        - `2` BLACKLISTED

        - `4` BLOCKED_OWNER

        - `8` FILES

        - `16` CAPTIONS

        - `32` VIDEO SOURCE

        '
    privacyOneOf:
      name: privacyOneOf
      in: query
      required: false
      schema:
        $ref: '#/components/schemas/VideoPrivacySet'
      description: '**PeerTube >= 4.0** Display only videos in this specific privacy/privacies'
    count:
      name: count
      in: query
      required: false
      description: Number of items to return
      schema:
        type: integer
        default: 15
        maximum: 100
        minimum: 1
    sort:
      name: sort
      in: query
      required: false
      description: Sort column
      schema:
        type: string
        example: -createdAt
    channelHandle:
      name: channelHandle
      in: path
      required: true
      description: The video channel handle
      schema:
        type: string
        example

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