mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			5428 lines
		
	
	
		
			150 KiB
		
	
	
	
		
			YAML
		
	
	
			
		
		
	
	
			5428 lines
		
	
	
		
			150 KiB
		
	
	
	
		
			YAML
		
	
	
| openapi: 3.0.0
 | |
| info:
 | |
|   title: PeerTube
 | |
|   version: 2.4.0-rc.1
 | |
|   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: |
 | |
|     # Introduction
 | |
| 
 | |
|     The PeerTube API is built on HTTP(S) and is RESTful. You can use your favorite
 | |
|     HTTP/REST library for your programming language to use PeerTube. The spec API is fully compatible with
 | |
|     [openapi-generator](https://github.com/OpenAPITools/openapi-generator/wiki/API-client-generator-HOWTO)
 | |
|     which generates a client SDK in the language of your choice - we generate some client SDKs automatically:
 | |
| 
 | |
|     - [Python](https://framagit.org/framasoft/peertube/clients/python)
 | |
|     - [Go](https://framagit.org/framasoft/peertube/clients/go)
 | |
|     - [Kotlin](https://framagit.org/framasoft/peertube/clients/kotlin)
 | |
| 
 | |
|     See the [Quick Start guide](https://docs.joinpeertube.org/#/api-rest-getting-started) so you can play with the PeerTube API.
 | |
| 
 | |
|     # Authentication
 | |
| 
 | |
|     When you sign up for an account, you are given the possibility to generate
 | |
|     sessions, and authenticate using this session token. One session token can
 | |
|     currently be used at a time.
 | |
| 
 | |
|     ## Roles
 | |
| 
 | |
|     Accounts are given permissions based on their role. There are three roles on
 | |
|     PeerTube: Administrator, Moderator, and User. See the [roles guide](https://docs.joinpeertube.org/#/admin-managing-users?id=roles) for a detail of their permissions.
 | |
| 
 | |
|     # Errors
 | |
| 
 | |
|     The API uses standard HTTP status codes to indicate the success or failure
 | |
|     of the API call. The body of the response will be JSON in the following
 | |
|     format.
 | |
| 
 | |
|     ```
 | |
|     {
 | |
|       "code": "unauthorized_request", // example inner error code
 | |
|       "error": "Token is invalid." // example exposed error message
 | |
|     }
 | |
|     ```    
 | |
| externalDocs:
 | |
|   url: https://docs.joinpeertube.org/api-rest-reference.html
 | |
| tags:
 | |
|   - name: Accounts
 | |
|     description: >
 | |
|       Accounts encompass remote accounts discovered across the federation,
 | |
|       and correspond to the main Actor, along with video channels a user can create, which
 | |
|       are also Actors.
 | |
| 
 | |
|       When a comment is posted, it is done with your Account's Actor.      
 | |
|   - name: Users
 | |
|     description: >
 | |
|       Using some features of PeerTube require authentication, for which User
 | |
|       provide different levels of permission as well as associated user
 | |
|       information. Each user has a corresponding local Account for federation.      
 | |
|   - name: My User
 | |
|     description: >
 | |
|       Operations related to your own User, when logged-in.      
 | |
|   - name: My Subscriptions
 | |
|     description: >
 | |
|       Operations related to your subscriptions to video channels, their
 | |
|       new videos, and how to keep up to date with their latest publications!      
 | |
|   - name: My Notifications
 | |
|     description: >
 | |
|       Notifications following new videos, follows or reports. They allow you
 | |
|       to keep track of the interactions and overall important information that
 | |
|       concerns you. You MAY set per-notification type delivery preference, to
 | |
|       receive the info either by mail, by in-browser notification or both.      
 | |
|   - name: Config
 | |
|     description: >
 | |
|       Each server exposes public information regarding supported videos and
 | |
|       options.      
 | |
|   - name: Job
 | |
|     description: >
 | |
|       Jobs are long-running tasks enqueued and processed by the instance
 | |
|       itself. No additional worker registration is currently available.      
 | |
|   - name: Instance Follows
 | |
|     description: >
 | |
|       Managing servers which the instance interacts with is crucial to the
 | |
|       concept of federation in PeerTube and external video indexation. The PeerTube
 | |
|       server then deals with inter-server ActivityPub operations and propagates
 | |
|       information across its social graph by posting activities to actors' inbox
 | |
|       endpoints.      
 | |
|     externalDocs:
 | |
|       url: https://docs.joinpeertube.org/#/admin-following-instances?id=instances-follows
 | |
|   - name: Instance Redundancy
 | |
|     description: >
 | |
|       Redundancy is part of the inter-server solidarity that PeerTube fosters.
 | |
|       Manage the list of instances you wish to help by seeding their videos according
 | |
|       to the policy of video selection of your choice. Note that you have a similar functionality
 | |
|       to mirror individual videos, see `Video Mirroring`.      
 | |
|     externalDocs:
 | |
|       url: https://docs.joinpeertube.org/#/admin-following-instances?id=instances-redundancy
 | |
|   - name: Plugins
 | |
|     description: >
 | |
|       Managing plugins installed from a local path or from NPM, or search for new ones.      
 | |
|     externalDocs:
 | |
|       url: https://docs.joinpeertube.org/#/api-plugins
 | |
|   - name: Abuses
 | |
|     description: |
 | |
|       Abuses deal with reports of local or remote videos/comments/accounts alike.      
 | |
|   - name: Video
 | |
|     description: |
 | |
|       Operations dealing with listing, uploading, fetching or modifying videos.      
 | |
|   - name: Search
 | |
|     description: |
 | |
|       The search helps to find _videos_ or _channels_ from within the instance and beyond.
 | |
|       Videos from other instances federated by the instance (that is, instances
 | |
|       followed by the instance) can be found via keywords and other criteria of
 | |
|       the advanced search.
 | |
| 
 | |
|       Administrators can also enable the use of a remote search system, indexing
 | |
|       videos and channels not could be not federated by the instance.      
 | |
|   - name: Video Comments
 | |
|     description: >
 | |
|       Operations dealing with comments to a video. Comments are organized in
 | |
|       threads.      
 | |
|   - name: Video Playlists
 | |
|     description: >
 | |
|       Operations dealing with playlists of videos. Playlists are bound to users
 | |
|       and/or channels.      
 | |
|   - name: Video Channels
 | |
|     description: >
 | |
|       Operations dealing with the creation, modification and listing of videos within a channel.      
 | |
|   - name: Video Blocks
 | |
|     description: >
 | |
|       Operations dealing with blocking videos (removing them from view and
 | |
|       preventing interactions).      
 | |
|   - name: Video Rates
 | |
|     description: >
 | |
|       Like/dislike a video.      
 | |
|   - name: Feeds
 | |
|     description: >
 | |
|       Server syndication feeds      
 | |
| x-tagGroups:
 | |
|   - name: Accounts
 | |
|     tags:
 | |
|       - Accounts
 | |
|       - Users
 | |
|       - My User
 | |
|       - My Subscriptions
 | |
|       - My Notifications
 | |
|   - name: Videos
 | |
|     tags:
 | |
|       - Video
 | |
|       - Video Captions
 | |
|       - Video Channels
 | |
|       - Video Comments
 | |
|       - Video Rates
 | |
|       - Video Playlists
 | |
|       - Video Ownership Change
 | |
|       - Video Mirroring
 | |
|       - Feeds
 | |
|   - name: Search
 | |
|     tags:
 | |
|       - Search
 | |
|   - name: Moderation
 | |
|     tags:
 | |
|       - Abuses
 | |
|       - Video Blocks
 | |
|       - Account Blocks
 | |
|       - Server Blocks
 | |
|   - name: Instance Configuration
 | |
|     tags:
 | |
|       - Config
 | |
|       - Instance Follows
 | |
|       - Instance Redundancy
 | |
|       - Plugins
 | |
|   - name: Jobs
 | |
|     tags:
 | |
|       - Job
 | |
| paths:
 | |
|   '/accounts/{name}':
 | |
|     get:
 | |
|       tags:
 | |
|         - Accounts
 | |
|       summary: Get an account
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/name'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/Account'
 | |
|         '404':
 | |
|           description: account not found
 | |
|   '/accounts/{name}/videos':
 | |
|     get:
 | |
|       tags:
 | |
|         - Accounts
 | |
|         - Video
 | |
|       summary: 'List videos of an account'
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/name'
 | |
|         - $ref: '#/components/parameters/categoryOneOf'
 | |
|         - $ref: '#/components/parameters/tagsOneOf'
 | |
|         - $ref: '#/components/parameters/tagsAllOf'
 | |
|         - $ref: '#/components/parameters/licenceOneOf'
 | |
|         - $ref: '#/components/parameters/languageOneOf'
 | |
|         - $ref: '#/components/parameters/nsfw'
 | |
|         - $ref: '#/components/parameters/filter'
 | |
|         - $ref: '#/components/parameters/skipCount'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/videosSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoListResponse'
 | |
|       x-code-samples:
 | |
|         - lang: JavaScript
 | |
|           source: |
 | |
|             fetch('https://peertube2.cpy.re/api/v1/accounts/{name}/videos')
 | |
|             .then(function(response) {
 | |
|               return response.json()
 | |
|             }).then(function(data) {
 | |
|               console.log(data)
 | |
|             })            
 | |
|         - lang: Shell
 | |
|           source: |
 | |
|             ## DEPENDENCIES: jq
 | |
|             curl -s https://peertube2.cpy.re/api/v1/accounts/{name}/videos | jq            
 | |
|         - lang: Ruby
 | |
|           source: |
 | |
|             require 'net/http'
 | |
|             require 'json'
 | |
| 
 | |
|             uri = URI.parse("https://peertube2.cpy.re/api/v1/accounts/{name}/videos")
 | |
| 
 | |
|             http = Net::HTTP.new(uri.host, uri.port)
 | |
|             http.use_ssl = true
 | |
| 
 | |
|             response = http.get(uri.request_uri)
 | |
| 
 | |
|             puts JSON.parse(response.read_body)            
 | |
|         - lang: Python
 | |
|           source: |
 | |
|             import requests
 | |
| 
 | |
|             r = requests.get("https://peertube2.cpy.re/api/v1//accounts/{name}/videos")
 | |
|             json = r.json()
 | |
| 
 | |
|             print(json)            
 | |
|   /accounts:
 | |
|     get:
 | |
|       tags:
 | |
|         - Accounts
 | |
|       summary: List accounts
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             'application/json':
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/Account'
 | |
|   /config:
 | |
|     get:
 | |
|       tags:
 | |
|         - Config
 | |
|       summary: Get instance public configuration
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/ServerConfig'
 | |
|   /config/about:
 | |
|     get:
 | |
|       summary: Get instance "About" information
 | |
|       tags:
 | |
|         - Config
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/ServerConfigAbout'
 | |
|   /config/custom:
 | |
|     get:
 | |
|       summary: Get instance runtime configuration
 | |
|       tags:
 | |
|         - Config
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/ServerConfigCustom'
 | |
|     put:
 | |
|       summary: Set instance runtime configuration
 | |
|       tags:
 | |
|         - Config
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|         '400':
 | |
|           x-summary: field inconsistencies
 | |
|           description: >
 | |
|             Arises when:
 | |
|               - the emailer is disabled and the instance is open to registrations
 | |
|               - webtorrent and hls are disabled with transcoding enabled - you need at least one enabled            
 | |
|     delete:
 | |
|       summary: Delete instance runtime configuration
 | |
|       tags:
 | |
|         - Config
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|   /jobs/{state}:
 | |
|     get:
 | |
|       summary: List instance jobs
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|       tags:
 | |
|         - Job
 | |
|       parameters:
 | |
|         - name: state
 | |
|           in: path
 | |
|           required: true
 | |
|           description: The state of the job
 | |
|           schema:
 | |
|             type: string
 | |
|             enum:
 | |
|               - active
 | |
|               - completed
 | |
|               - failed
 | |
|               - waiting
 | |
|               - delayed
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|                 properties:
 | |
|                   total:
 | |
|                     type: integer
 | |
|                     example: 1
 | |
|                   data:
 | |
|                     type: array
 | |
|                     maxItems: 100
 | |
|                     items:
 | |
|                       $ref: '#/components/schemas/Job'
 | |
|   '/server/following/{host}':
 | |
|     delete:
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       tags:
 | |
|         - Instance Follows
 | |
|       summary: Unfollow a server
 | |
|       parameters:
 | |
|         - name: host
 | |
|           in: path
 | |
|           required: true
 | |
|           description: 'The host to unfollow '
 | |
|           schema:
 | |
|             type: string
 | |
|             format: hostname
 | |
|       responses:
 | |
|         '201':
 | |
|           description: successful operation
 | |
|   /server/followers:
 | |
|     get:
 | |
|       tags:
 | |
|         - Instance Follows
 | |
|       summary: List instance followers
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/Follow'
 | |
|   /server/following:
 | |
|     get:
 | |
|       tags:
 | |
|         - Instance Follows
 | |
|       summary: List instances followed by the server
 | |
|       parameters:
 | |
|         - name: state
 | |
|           in: query
 | |
|           schema:
 | |
|             type: string
 | |
|             enum:
 | |
|               - pending
 | |
|               - accepted
 | |
|         - name: actorType
 | |
|           in: query
 | |
|           schema:
 | |
|             type: string
 | |
|             enum:
 | |
|               - Person
 | |
|               - Application
 | |
|               - Group
 | |
|               - Service
 | |
|               - Organization
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/Follow'
 | |
|     post:
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|       tags:
 | |
|         - Instance Follows
 | |
|       summary: Follow a server
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '500':
 | |
|           description: cannot follow a non-HTTPS server
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 hosts:
 | |
|                   type: array
 | |
|                   items:
 | |
|                     type: string
 | |
|                     format: hostname
 | |
|                   uniqueItems: true
 | |
|   /users:
 | |
|     post:
 | |
|       summary: Create a user
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|       tags:
 | |
|         - Users
 | |
|       responses:
 | |
|         '200':
 | |
|           description: user created
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/AddUserResponse'
 | |
|           links:
 | |
|             # GET /users/{id}
 | |
|             GetUserId:
 | |
|               operationId: getUserId
 | |
|               parameters:
 | |
|                 id: '$response.body#/user/id'
 | |
|             # PUT /users/{id}
 | |
|             PutUserId:
 | |
|               operationId: putUserId
 | |
|               parameters:
 | |
|                 id: '$response.body#/user/id'
 | |
|             # DELETE /users/{id}
 | |
|             DelUserId:
 | |
|               operationId: delUserId
 | |
|               parameters:
 | |
|                 id: '$response.body#/user/id'
 | |
|         '403':
 | |
|           description: insufficient authority to create an admin or moderator
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               $ref: '#/components/schemas/AddUser'
 | |
|         description: User to create
 | |
|         required: true
 | |
|     get:
 | |
|       summary: List users
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       tags:
 | |
|         - Users
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/usersSearch'
 | |
|         - $ref: '#/components/parameters/usersBlocked'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/usersSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/User'
 | |
|   '/users/{id}':
 | |
|     parameters:
 | |
|       - $ref: '#/components/parameters/id'
 | |
|     delete:
 | |
|       summary: Delete a user
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|       tags:
 | |
|         - Users
 | |
|       operationId: delUserId
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|     get:
 | |
|       summary: Get a user
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Users
 | |
|       operationId: getUserId
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/User'
 | |
|     put:
 | |
|       summary: Update a user
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Users
 | |
|       operationId: putUserId
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               $ref: '#/components/schemas/UpdateUser'
 | |
|         required: true
 | |
|   /users/register:
 | |
|     post:
 | |
|       summary: Register a user
 | |
|       tags:
 | |
|         - Users
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               $ref: '#/components/schemas/RegisterUser'
 | |
|         required: true
 | |
|   /users/me:
 | |
|     get:
 | |
|       summary: Get my user information
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - user
 | |
|       tags:
 | |
|         - My User
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/User'
 | |
|     put:
 | |
|       summary: Update my user information
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - user
 | |
|       tags:
 | |
|         - My User
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               $ref: '#/components/schemas/UpdateMe'
 | |
|         required: true
 | |
|   /users/me/videos/imports:
 | |
|     get:
 | |
|       summary: Get video imports of my user
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - user
 | |
|       tags:
 | |
|         - Videos
 | |
|         - My User
 | |
|       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/VideoImport'
 | |
|   /users/me/video-quota-used:
 | |
|     get:
 | |
|       summary: Get my user used quota
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - user
 | |
|       tags:
 | |
|         - My User
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: number
 | |
|   '/users/me/videos/{videoId}/rating':
 | |
|     get:
 | |
|       summary: Get rate of my user for a video
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - My User
 | |
|         - Video Rates
 | |
|       parameters:
 | |
|         - name: videoId
 | |
|           in: path
 | |
|           required: true
 | |
|           description: 'The video id '
 | |
|           schema:
 | |
|             type: string
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/GetMeVideoRating'
 | |
|   /users/me/videos:
 | |
|     get:
 | |
|       summary: Get videos of my user
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - user
 | |
|       tags:
 | |
|         - My User
 | |
|         - Videos
 | |
|       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/VideoListResponse'
 | |
|   /users/me/subscriptions:
 | |
|     get:
 | |
|       summary: Get my user subscriptions
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - user
 | |
|       tags:
 | |
|         - My Subscriptions
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|     post:
 | |
|       tags:
 | |
|         - My Subscriptions
 | |
|       summary: Add subscription to my user
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - user
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 uri:
 | |
|                   type: string
 | |
|                   format: uri
 | |
|                   description: uri of the video channels to subscribe to
 | |
|               required:
 | |
|                 - uri
 | |
|             examples:
 | |
|               default:
 | |
|                 value:
 | |
|                   uri: 008a0e54-375d-49d0-8379-143202e24152@video.lqdn.fr
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|   /users/me/subscriptions/exist:
 | |
|     get:
 | |
|       summary: Get if subscriptions exist for my user
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - user
 | |
|       tags:
 | |
|         - My Subscriptions
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/subscriptionsUris'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|   /users/me/subscriptions/videos:
 | |
|     get:
 | |
|       summary: List videos of subscriptions of my user
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - user
 | |
|       tags:
 | |
|         - My Subscriptions
 | |
|         - Videos
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/categoryOneOf'
 | |
|         - $ref: '#/components/parameters/tagsOneOf'
 | |
|         - $ref: '#/components/parameters/tagsAllOf'
 | |
|         - $ref: '#/components/parameters/licenceOneOf'
 | |
|         - $ref: '#/components/parameters/languageOneOf'
 | |
|         - $ref: '#/components/parameters/nsfw'
 | |
|         - $ref: '#/components/parameters/filter'
 | |
|         - $ref: '#/components/parameters/skipCount'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/videosSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoListResponse'
 | |
|   '/users/me/subscriptions/{subscriptionHandle}':
 | |
|     get:
 | |
|       summary: Get subscription of my user
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - user
 | |
|       tags:
 | |
|         - My Subscriptions
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/subscriptionHandle'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoChannel'
 | |
|     delete:
 | |
|       summary: Delete subscription of my user
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - user
 | |
|       tags:
 | |
|         - My Subscriptions
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/subscriptionHandle'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|   /users/me/notifications:
 | |
|     get:
 | |
|       summary: List my notifications
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - My Notifications
 | |
|       parameters:
 | |
|         - name: unread
 | |
|           in: query
 | |
|           description: only list unread notifications
 | |
|           schema:
 | |
|             type: boolean
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/NotificationListResponse'
 | |
|   /users/me/notifications/read:
 | |
|     post:
 | |
|       summary: Mark notifications as read by their id
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - My Notifications
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 ids:
 | |
|                   type: array
 | |
|                   description: ids of the notifications to mark as read
 | |
|                   items:
 | |
|                     type: integer
 | |
|               required:
 | |
|                 - ids
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|   /users/me/notifications/read-all:
 | |
|     post:
 | |
|       summary: Mark all my notification as read
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - My Notifications
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|   /users/me/notification-settings:
 | |
|     put:
 | |
|       summary: Update my notification settings
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - My Notifications
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 newVideoFromSubscription:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 newCommentOnMyVideo:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 abuseAsModerator:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 videoAutoBlacklistAsModerator:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 blacklistOnMyVideo:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 myVideoPublished:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 myVideoImportFinished:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 newFollow:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 newUserRegistration:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 commentMention:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 newInstanceFollower:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|                 autoInstanceFollowing:
 | |
|                   $ref: '#/components/schemas/NotificationSettingValue'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|   /users/me/avatar/pick:
 | |
|     post:
 | |
|       summary: Update my user avatar
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - My User
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/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
 | |
|   /videos/ownership:
 | |
|     get:
 | |
|       summary: List video ownership changes
 | |
|       tags:
 | |
|         - Video Ownership Change
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|   '/videos/ownership/{id}/accept':
 | |
|     post:
 | |
|       summary: Accept ownership change request
 | |
|       tags:
 | |
|         - Video Ownership Change
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '403':
 | |
|           description: cannot terminate an ownership change of another user
 | |
|         '404':
 | |
|           description: video owneship change not found
 | |
|   '/videos/ownership/{id}/refuse':
 | |
|     post:
 | |
|       summary: Refuse ownership change request
 | |
|       tags:
 | |
|         - Video Ownership Change
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '403':
 | |
|           description: cannot terminate an ownership change of another user
 | |
|         '404':
 | |
|           description: video owneship change not found
 | |
|   '/videos/{id}/give-ownership':
 | |
|     post:
 | |
|       summary: Request ownership change
 | |
|       tags:
 | |
|         - Video Ownership Change
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       requestBody:
 | |
|         required: true
 | |
|         content:
 | |
|           application/x-www-form-urlencoded:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 username:
 | |
|                   type: string
 | |
|               required:
 | |
|                 - username
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '400':
 | |
|           description: changing video ownership to a remote account is not supported yet
 | |
|         '404':
 | |
|           description: video not found
 | |
|   /videos:
 | |
|     get:
 | |
|       summary: List videos
 | |
|       tags:
 | |
|         - Video
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/categoryOneOf'
 | |
|         - $ref: '#/components/parameters/tagsOneOf'
 | |
|         - $ref: '#/components/parameters/tagsAllOf'
 | |
|         - $ref: '#/components/parameters/licenceOneOf'
 | |
|         - $ref: '#/components/parameters/languageOneOf'
 | |
|         - $ref: '#/components/parameters/nsfw'
 | |
|         - $ref: '#/components/parameters/filter'
 | |
|         - $ref: '#/components/parameters/skipCount'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/videosSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoListResponse'
 | |
|   /videos/categories:
 | |
|     get:
 | |
|       summary: List available video categories
 | |
|       tags:
 | |
|         - Video
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   type: string
 | |
|               examples:
 | |
|                 nightly:
 | |
|                   externalValue: https://peertube2.cpy.re/api/v1/videos/categories
 | |
|   /videos/licences:
 | |
|     get:
 | |
|       summary: List available video licences
 | |
|       tags:
 | |
|         - Video
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   type: string
 | |
|               examples:
 | |
|                 nightly:
 | |
|                   externalValue: https://peertube2.cpy.re/api/v1/videos/licences
 | |
|   /videos/languages:
 | |
|     get:
 | |
|       summary: List available video languages
 | |
|       tags:
 | |
|         - Video
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   type: string
 | |
|               examples:
 | |
|                 nightly:
 | |
|                   externalValue: https://peertube2.cpy.re/api/v1/videos/languages
 | |
|   /videos/privacies:
 | |
|     get:
 | |
|       summary: List available video privacies
 | |
|       tags:
 | |
|         - Video
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   type: string
 | |
|               examples:
 | |
|                 nightly:
 | |
|                   externalValue: https://peertube2.cpy.re/api/v1/videos/privacies
 | |
|   '/videos/{id}':
 | |
|     put:
 | |
|       summary: Update a video
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|       requestBody:
 | |
|         content:
 | |
|           multipart/form-data:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 thumbnailfile:
 | |
|                   description: Video thumbnail file
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 previewfile:
 | |
|                   description: Video preview file
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 category:
 | |
|                   description: Video category
 | |
|                   type: integer
 | |
|                   example: 4
 | |
|                 licence:
 | |
|                   description: Video licence
 | |
|                   type: integer
 | |
|                   example: 2
 | |
|                 language:
 | |
|                   description: Video language
 | |
|                   type: string
 | |
|                 privacy:
 | |
|                   $ref: '#/components/schemas/VideoPrivacySet'
 | |
|                 description:
 | |
|                   description: Video description
 | |
|                   type: string
 | |
|                 waitTranscoding:
 | |
|                   description: Whether or not we wait transcoding before publish the video
 | |
|                   type: string
 | |
|                 support:
 | |
|                   description: A text tell the audience how to support the video creator
 | |
|                   example: Please support my work on <insert crowdfunding plateform>! <3
 | |
|                   type: string
 | |
|                 nsfw:
 | |
|                   description: Whether or not this video contains sensitive content
 | |
|                   type: boolean
 | |
|                 name:
 | |
|                   description: Video name
 | |
|                   type: string
 | |
|                 tags:
 | |
|                   description: Video tags (maximum 5 tags each between 2 and 30 characters)
 | |
|                   type: array
 | |
|                   minItems: 1
 | |
|                   maxItems: 5
 | |
|                   items:
 | |
|                     type: string
 | |
|                     minLength: 2
 | |
|                     maxLength: 30
 | |
|                 commentsEnabled:
 | |
|                   description: Enable or disable comments for this video
 | |
|                   type: boolean
 | |
|                 originallyPublishedAt:
 | |
|                   description: Date when the content was originally published
 | |
|                   type: string
 | |
|                   format: date-time
 | |
|                 scheduleUpdate:
 | |
|                   $ref: '#/components/schemas/VideoScheduledUpdate'
 | |
|             encoding:
 | |
|               thumbnailfile:
 | |
|                 contentType: image/jpeg
 | |
|               previewfile:
 | |
|                 contentType: image/jpeg
 | |
|     get:
 | |
|       summary: Get a video
 | |
|       tags:
 | |
|         - Video
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoDetails'
 | |
|     delete:
 | |
|       summary: Delete a video
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|   '/videos/{id}/description':
 | |
|     get:
 | |
|       summary: Get complete video description
 | |
|       tags:
 | |
|         - Video
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: string
 | |
|   '/videos/{id}/views':
 | |
|     post:
 | |
|       summary: Add a view to a video
 | |
|       tags:
 | |
|         - Video
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|   '/videos/{id}/watching':
 | |
|     put:
 | |
|       summary: Set watching progress of a video
 | |
|       tags:
 | |
|         - Video
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               $ref: '#/components/schemas/UserWatchingVideo'
 | |
|         required: true
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|   /videos/upload:
 | |
|     post:
 | |
|       summary: Upload a video
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoUploadResponse'
 | |
|         '403':
 | |
|           description: user video quota is exceeded with this video
 | |
|         '408':
 | |
|           description: upload has timed out
 | |
|         '422':
 | |
|           description: invalid input file
 | |
|       requestBody:
 | |
|         content:
 | |
|           multipart/form-data:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 videofile:
 | |
|                   description: Video file
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 channelId:
 | |
|                   description: Channel id that will contain this video
 | |
|                   type: integer
 | |
|                 thumbnailfile:
 | |
|                   description: Video thumbnail file
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 previewfile:
 | |
|                   description: Video preview file
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 privacy:
 | |
|                   $ref: '#/components/schemas/VideoPrivacySet'
 | |
|                 category:
 | |
|                   description: Video category
 | |
|                   type: integer
 | |
|                   example: 4
 | |
|                 licence:
 | |
|                   description: Video licence
 | |
|                   type: string
 | |
|                 language:
 | |
|                   description: Video language
 | |
|                   type: integer
 | |
|                   example: 2
 | |
|                 description:
 | |
|                   description: Video description
 | |
|                   type: string
 | |
|                 waitTranscoding:
 | |
|                   description: Whether or not we wait transcoding before publish the video
 | |
|                   type: string
 | |
|                 support:
 | |
|                   description: A text tell the audience how to support the video creator
 | |
|                   example: Please support my work on <insert crowdfunding plateform>! <3
 | |
|                   type: string
 | |
|                 nsfw:
 | |
|                   description: Whether or not this video contains sensitive content
 | |
|                   type: boolean
 | |
|                 name:
 | |
|                   description: Video name
 | |
|                   type: string
 | |
|                 tags:
 | |
|                   description: Video tags (maximum 5 tags each between 2 and 30 characters)
 | |
|                   type: array
 | |
|                   minItems: 1
 | |
|                   maxItems: 5
 | |
|                   uniqueItems: true
 | |
|                   items:
 | |
|                     type: string
 | |
|                     minLength: 2
 | |
|                     maxLength: 30
 | |
|                 commentsEnabled:
 | |
|                   description: Enable or disable comments for this video
 | |
|                   type: boolean
 | |
|                 originallyPublishedAt:
 | |
|                   description: Date when the content was originally published
 | |
|                   type: string
 | |
|                   format: date-time
 | |
|                 scheduleUpdate:
 | |
|                   $ref: '#/components/schemas/VideoScheduledUpdate'
 | |
|               required:
 | |
|                 - videofile
 | |
|                 - channelId
 | |
|                 - name
 | |
|             encoding:
 | |
|               videofile:
 | |
|                 contentType: video/mp4, video/webm, video/ogg, video/avi, video/quicktime, video/x-msvideo, video/x-flv, video/x-matroska, application/octet-stream
 | |
|               thumbnailfile:
 | |
|                 contentType: image/jpeg
 | |
|               previewfile:
 | |
|                 contentType: image/jpeg
 | |
|       x-code-samples:
 | |
|         - lang: Shell
 | |
|           source: |
 | |
|             ## DEPENDENCIES: jq
 | |
|             USERNAME="<your_username>"
 | |
|             PASSWORD="<your_password>"
 | |
|             FILE_PATH="<your_file_path>"
 | |
|             CHANNEL_ID="<your_channel_id>"
 | |
|             NAME="<video_name>"
 | |
| 
 | |
|             API_PATH="https://peertube2.cpy.re/api/v1"
 | |
|             ## AUTH
 | |
|             client_id=$(curl -s "$API_PATH/oauth-clients/local" | jq -r ".client_id")
 | |
|             client_secret=$(curl -s "$API_PATH/oauth-clients/local" | jq -r ".client_secret")
 | |
|             token=$(curl -s "$API_PATH/users/token" \
 | |
|               --data client_id="$client_id" \
 | |
|               --data client_secret="$client_secret" \
 | |
|               --data grant_type=password \
 | |
|               --data response_type=code \
 | |
|               --data username="$USERNAME" \
 | |
|               --data password="$PASSWORD" \
 | |
|               | jq -r ".access_token")
 | |
|             ## VIDEO UPLOAD
 | |
|             curl -s "$API_PATH/videos/upload" \
 | |
|               -H "Authorization: Bearer $token" \
 | |
|               --max-time 600 \
 | |
|               --form videofile=@"$FILE_PATH" \
 | |
|               --form channelId=$CHANNEL_ID \
 | |
|               --form name="$NAME"            
 | |
|   /videos/imports:
 | |
|     post:
 | |
|       summary: Import a video
 | |
|       description: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video
 | |
|       requestBody:
 | |
|         content:
 | |
|           multipart/form-data:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 torrentfile:
 | |
|                   description: Torrent File
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 targetUrl:
 | |
|                   description: HTTP target URL
 | |
|                   type: string
 | |
|                 magnetUri:
 | |
|                   description: Magnet URI
 | |
|                   type: string
 | |
|                 channelId:
 | |
|                   description: Channel id that will contain this video
 | |
|                   type: integer
 | |
|                 thumbnailfile:
 | |
|                   description: Video thumbnail file
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 previewfile:
 | |
|                   description: Video preview file
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 privacy:
 | |
|                   $ref: '#/components/schemas/VideoPrivacySet'
 | |
|                 category:
 | |
|                   description: Video category
 | |
|                   type: string
 | |
|                 licence:
 | |
|                   description: Video licence
 | |
|                   type: string
 | |
|                 language:
 | |
|                   description: Video language
 | |
|                   type: string
 | |
|                 description:
 | |
|                   description: Video description
 | |
|                   type: string
 | |
|                 waitTranscoding:
 | |
|                   description: Whether or not we wait transcoding before publish the video
 | |
|                   type: string
 | |
|                 support:
 | |
|                   description: A text tell the audience how to support the video creator
 | |
|                   example: Please support my work on <insert crowdfunding plateform>! <3
 | |
|                   type: string
 | |
|                 nsfw:
 | |
|                   description: Whether or not this video contains sensitive content
 | |
|                   type: string
 | |
|                 name:
 | |
|                   description: Video name
 | |
|                   type: string
 | |
|                 tags:
 | |
|                   description: Video tags (maximum 5 tags each between 2 and 30 characters)
 | |
|                   type: array
 | |
|                   minItems: 1
 | |
|                   maxItems: 5
 | |
|                   items:
 | |
|                     type: string
 | |
|                     minLength: 2
 | |
|                     maxLength: 30
 | |
|                 commentsEnabled:
 | |
|                   description: Enable or disable comments for this video
 | |
|                   type: string
 | |
|                 scheduleUpdate:
 | |
|                   $ref: '#/components/schemas/VideoScheduledUpdate'
 | |
|               required:
 | |
|                 - channelId
 | |
|                 - name
 | |
|             encoding:
 | |
|               torrentfile:
 | |
|                 contentType: application/x-bittorrent
 | |
|               thumbnailfile:
 | |
|                 contentType: image/jpeg
 | |
|               previewfile:
 | |
|                 contentType: image/jpeg
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoUploadResponse'
 | |
|         '409':
 | |
|           description: HTTP or Torrent/magnetURI import not enabled
 | |
|         '400':
 | |
|           description: '`magnetUri` or `targetUrl` or a torrent file missing'
 | |
| 
 | |
|   /users/me/abuses:
 | |
|     get:
 | |
|       summary: List my abuses
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Abuses
 | |
|         - My User
 | |
|       parameters:
 | |
|         - name: id
 | |
|           in: query
 | |
|           description: only list the report with this id
 | |
|           schema:
 | |
|             type: integer
 | |
|         - name: state
 | |
|           in: query
 | |
|           schema:
 | |
|             $ref: '#/components/schemas/AbuseStateSet'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/abusesSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/Abuse'
 | |
| 
 | |
|   /abuses:
 | |
|     get:
 | |
|       summary: List abuses
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|           - moderator
 | |
|       tags:
 | |
|         - Abuses
 | |
|       parameters:
 | |
|         - name: id
 | |
|           in: query
 | |
|           description: only list the report with this id
 | |
|           schema:
 | |
|             type: integer
 | |
|         - name: predefinedReason
 | |
|           in: query
 | |
|           description: predefined reason the listed reports should contain
 | |
|           schema:
 | |
|             $ref: '#/components/schemas/PredefinedAbuseReasons'
 | |
|         - name: search
 | |
|           in: query
 | |
|           description: plain search that will match with video titles, reporter names and more
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: state
 | |
|           in: query
 | |
|           schema:
 | |
|             $ref: '#/components/schemas/AbuseStateSet'
 | |
|         - name: searchReporter
 | |
|           in: query
 | |
|           description: only list reports of a specific reporter
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: searchReportee
 | |
|           description: only list reports of a specific reportee
 | |
|           in: query
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: searchVideo
 | |
|           in: query
 | |
|           description: only list reports of a specific video
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: searchVideoChannel
 | |
|           in: query
 | |
|           description: only list reports of a specific video channel
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: videoIs
 | |
|           in: query
 | |
|           description: only list blacklisted or deleted videos
 | |
|           schema:
 | |
|             type: string
 | |
|             enum:
 | |
|             - 'deleted'
 | |
|             - 'blacklisted'
 | |
|         - name: filter
 | |
|           in: query
 | |
|           description: only list account, comment or video reports
 | |
|           schema:
 | |
|             type: string
 | |
|             enum:
 | |
|             - 'video'
 | |
|             - 'comment'
 | |
|             - 'account'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/abusesSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/Abuse'
 | |
| 
 | |
|     post:
 | |
|       summary: Report an abuse
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Abuses
 | |
|       requestBody:
 | |
|         required: true
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 reason:
 | |
|                   description: Reason why the user reports this video
 | |
|                   type: string
 | |
|                   minLength: 4
 | |
|                 predefinedReasons:
 | |
|                   $ref: '#/components/schemas/PredefinedAbuseReasons'
 | |
| 
 | |
|                 video:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     id:
 | |
|                       description: Video id to report
 | |
|                       type: number
 | |
|                     startAt:
 | |
|                       type: integer
 | |
|                       description: Timestamp in the video that marks the beginning of the report
 | |
|                       minimum: 0
 | |
|                     endAt:
 | |
|                       type: integer
 | |
|                       description: Timestamp in the video that marks the ending of the report
 | |
|                       minimum: 0
 | |
|                 comment:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     id:
 | |
|                       description: Comment id to report
 | |
|                       type: number
 | |
|                 account:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     id:
 | |
|                       description: Account id to report
 | |
|                       type: number
 | |
|               required:
 | |
|                 - reason
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '400':
 | |
|           description: incorrect request parameters
 | |
|   '/abuses/{abuseId}':
 | |
|     put:
 | |
|       summary: Update an abuse
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|           - moderator
 | |
|       tags:
 | |
|         - Abuses
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/abuseId'
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 state:
 | |
|                   $ref: '#/components/schemas/AbuseStateSet'
 | |
|                 moderationComment:
 | |
|                   type: string
 | |
|                   description: Update the report comment visible only to the moderation team
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: abuse not found
 | |
|     delete:
 | |
|       tags:
 | |
|         - Abuses
 | |
|       summary: Delete an abuse
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|             - moderator
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/abuseId'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: block not found
 | |
|   '/abuses/{abuseId}/messages':
 | |
|     get:
 | |
|       summary: List messages of an abuse
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Abuses
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/abuseId'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/AbuseMessage'
 | |
| 
 | |
|     post:
 | |
|       summary: Add message to an abuse
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Abuses
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/abuseId'
 | |
|       requestBody:
 | |
|         required: true
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 message:
 | |
|                   description: Message to send
 | |
|                   type: string
 | |
|               required:
 | |
|                 - message
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|         '400':
 | |
|           description: incorrect request parameters
 | |
|   '/abuses/{abuseId}/messages/{abuseMessageId}':
 | |
|     delete:
 | |
|       summary: Delete an abuse message
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Abuses
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/abuseId'
 | |
|         - $ref: '#/components/parameters/abuseMessageId'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
| 
 | |
|   '/videos/{id}/blacklist':
 | |
|     post:
 | |
|       summary: Block a video
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|             - moderator
 | |
|       tags:
 | |
|         - Video Blocks
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|     delete:
 | |
|       summary: Unblock a video by its id
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|             - moderator
 | |
|       tags:
 | |
|         - Video Blocks
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: block not found
 | |
|   /videos/blacklist:
 | |
|     get:
 | |
|       tags:
 | |
|         - Video Blocks
 | |
|       summary: List video blocks
 | |
|       security:
 | |
|         - OAuth2:
 | |
|             - admin
 | |
|             - moderator
 | |
|       parameters:
 | |
|         - name: type
 | |
|           in: query
 | |
|           description: >
 | |
|             list only blocks that match this type:
 | |
| 
 | |
|             - `1`: manual block
 | |
| 
 | |
|             - `2`: automatic block that needs review            
 | |
|           schema:
 | |
|             type: integer
 | |
|             enum:
 | |
|               - 1
 | |
|               - 2
 | |
|         - name: search
 | |
|           in: query
 | |
|           description: plain search that will match with video titles, and more
 | |
|           schema:
 | |
|             type: string
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/blacklistsSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|                 properties:
 | |
|                   total:
 | |
|                     type: integer
 | |
|                     example: 1
 | |
|                   data:
 | |
|                     type: array
 | |
|                     items:
 | |
|                       $ref: '#/components/schemas/VideoBlacklist'
 | |
|   /videos/{id}/captions:
 | |
|     get:
 | |
|       summary: List captions of a video
 | |
|       tags:
 | |
|         - Video Captions
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|                 properties:
 | |
|                   total:
 | |
|                     type: integer
 | |
|                     example: 1
 | |
|                   data:
 | |
|                     type: array
 | |
|                     items:
 | |
|                       $ref: '#/components/schemas/VideoCaption'
 | |
|   /videos/{id}/captions/{captionLanguage}:
 | |
|     put:
 | |
|       summary: Add or replace a video caption
 | |
|       tags:
 | |
|         - Video Captions
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|         - $ref: '#/components/parameters/captionLanguage'
 | |
|       requestBody:
 | |
|         content:
 | |
|           multipart/form-data:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 captionfile:
 | |
|                   description: The file to upload.
 | |
|                   type: string
 | |
|                   format: binary
 | |
|             encoding:
 | |
|               captionfile:
 | |
|                 contentType: text/vtt, application/x-subrip, text/plain
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: video or language not found
 | |
|     delete:
 | |
|       summary: Delete a video caption
 | |
|       tags:
 | |
|         - Video Captions
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|         - $ref: '#/components/parameters/captionLanguage'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: video or language or caption for that language not found
 | |
|   /video-channels:
 | |
|     get:
 | |
|       summary: List video channels
 | |
|       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:
 | |
|                 type: object
 | |
|                 properties:
 | |
|                   total:
 | |
|                     type: integer
 | |
|                     example: 1
 | |
|                   data:
 | |
|                     type: array
 | |
|                     items:
 | |
|                       $ref: '#/components/schemas/VideoChannel'
 | |
|     post:
 | |
|       summary: Create a video channel
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Channels
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               $ref: '#/components/schemas/VideoChannelCreate'
 | |
|   '/video-channels/{channelHandle}':
 | |
|     get:
 | |
|       summary: Get a video channel
 | |
|       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
 | |
|       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
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Channels
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/channelHandle'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|   '/video-channels/{channelHandle}/videos':
 | |
|     get:
 | |
|       summary: List videos of a video channel
 | |
|       tags:
 | |
|         - Video
 | |
|         - Video Channels
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/channelHandle'
 | |
|         - $ref: '#/components/parameters/categoryOneOf'
 | |
|         - $ref: '#/components/parameters/tagsOneOf'
 | |
|         - $ref: '#/components/parameters/tagsAllOf'
 | |
|         - $ref: '#/components/parameters/licenceOneOf'
 | |
|         - $ref: '#/components/parameters/languageOneOf'
 | |
|         - $ref: '#/components/parameters/nsfw'
 | |
|         - $ref: '#/components/parameters/filter'
 | |
|         - $ref: '#/components/parameters/skipCount'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/videosSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoListResponse'
 | |
| 
 | |
|   /video-playlists/privacies:
 | |
|     get:
 | |
|       summary: List available playlist privacies
 | |
|       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
 | |
| 
 | |
|   /video-playlists:
 | |
|     get:
 | |
|       summary: List video playlists
 | |
|       tags:
 | |
|         - Video Playlists
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       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, the videoChannelId is mandatory.'
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Playlists
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|                 properties:
 | |
|                   videoPlaylist:
 | |
|                     type: object
 | |
|                     properties:
 | |
|                       id:
 | |
|                         type: integer
 | |
|                       uuid:
 | |
|                         type: string
 | |
|       requestBody:
 | |
|         content:
 | |
|           multipart/form-data:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 displayName:
 | |
|                   description: Video playlist display name
 | |
|                   type: string
 | |
|                 thumbnailfile:
 | |
|                   description: Video playlist thumbnail file
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 privacy:
 | |
|                   $ref: '#/components/schemas/VideoPlaylistPrivacySet'
 | |
|                 description:
 | |
|                   description: Video playlist description
 | |
|                   type: string
 | |
|                 videoChannelId:
 | |
|                   description: Video channel in which the playlist will be published
 | |
|                   type: integer
 | |
|               required:
 | |
|                 - displayName
 | |
|             encoding:
 | |
|               thumbnailfile:
 | |
|                 contentType: image/jpeg
 | |
| 
 | |
|   /video-playlists/{id}:
 | |
|     get:
 | |
|       summary: Get a video playlist
 | |
|       tags:
 | |
|         - Video Playlists
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       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/idOrUUID'
 | |
|       requestBody:
 | |
|         content:
 | |
|           multipart/form-data:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 displayName:
 | |
|                   description: Video playlist display name
 | |
|                   type: string
 | |
|                 thumbnailfile:
 | |
|                   description: Video playlist thumbnail file
 | |
|                   type: string
 | |
|                   format: binary
 | |
|                 privacy:
 | |
|                   $ref: '#/components/schemas/VideoPlaylistPrivacySet'
 | |
|                 description:
 | |
|                   description: Video playlist description
 | |
|                   type: string
 | |
|                 videoChannelId:
 | |
|                   description: Video channel in which the playlist will be published
 | |
|                   type: integer
 | |
|             encoding:
 | |
|               thumbnailfile:
 | |
|                 contentType: image/jpeg
 | |
|     delete:
 | |
|       summary: Delete a video playlist
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Playlists
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
| 
 | |
|   /video-playlists/{id}/videos:
 | |
|     get:
 | |
|       summary: 'List videos of a playlist'
 | |
|       tags:
 | |
|         - Videos
 | |
|         - Video Playlists
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoListResponse'
 | |
|     post:
 | |
|       summary: 'Add a video in a playlist'
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Videos
 | |
|         - Video Playlists
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|                 properties:
 | |
|                   videoPlaylistElement:
 | |
|                     type: object
 | |
|                     properties:
 | |
|                       id:
 | |
|                         type: integer
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 videoId:
 | |
|                   type: integer
 | |
|                   description: 'Video to add in the playlist'
 | |
|                 startTimestamp:
 | |
|                   type: integer
 | |
|                   description: 'Start the video at this specific timestamp (in seconds)'
 | |
|                 stopTimestamp:
 | |
|                   type: integer
 | |
|                   description: 'Stop the video at this specific timestamp (in seconds)'
 | |
|               required:
 | |
|                 - videoId
 | |
| 
 | |
|   /video-playlists/{id}/videos/reorder:
 | |
|     post:
 | |
|       summary: 'Reorder a playlist'
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Playlists
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       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
 | |
| 
 | |
|   /video-playlists/{id}/videos/{playlistElementId}:
 | |
|     put:
 | |
|       summary: 'Update a playlist element'
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Playlists
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|         - $ref: '#/components/parameters/playlistElementId'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 startTimestamp:
 | |
|                   type: integer
 | |
|                   description: 'Start the video at this specific timestamp (in seconds)'
 | |
|                 stopTimestamp:
 | |
|                   type: integer
 | |
|                   description: 'Stop the video at this specific timestamp (in seconds)'
 | |
|     delete:
 | |
|       summary: 'Delete an element from a playlist'
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Playlists
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|         - $ref: '#/components/parameters/playlistElementId'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
| 
 | |
|   '/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:
 | |
|               type: integer
 | |
|       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
 | |
|                         stopTimestamp:
 | |
|                           type: integer
 | |
| 
 | |
|   '/accounts/{name}/video-channels':
 | |
|     get:
 | |
|       summary: List video channels of an account
 | |
|       tags:
 | |
|         - Video Channels
 | |
|         - Accounts
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/name'
 | |
|         - name: withStats
 | |
|           in: query
 | |
|           description: include view statistics for the last 30 days (only if authentified as the account user)
 | |
|           schema:
 | |
|             type: boolean
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/VideoChannel'
 | |
|   '/accounts/{name}/ratings':
 | |
|     get:
 | |
|       summary: List ratings of an account
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Accounts
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/name'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|         - name: rating
 | |
|           in: query
 | |
|           required: false
 | |
|           description: Optionally filter which ratings to retrieve
 | |
|           schema:
 | |
|             type: string
 | |
|             enum:
 | |
|               - like
 | |
|               - dislike
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/VideoRating'
 | |
|   '/videos/{id}/comment-threads':
 | |
|     get:
 | |
|       summary: List threads of a video
 | |
|       tags:
 | |
|         - Video Comments
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/commentsSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/CommentThreadResponse'
 | |
|     post:
 | |
|       summary: Create a thread
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Comments
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/CommentThreadPostResponse'
 | |
|         '404':
 | |
|           description: video does not exist
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 text:
 | |
|                   type: string
 | |
|                   description: 'Text comment'
 | |
|               required:
 | |
|                 - text
 | |
| 
 | |
|   '/videos/{id}/comment-threads/{threadId}':
 | |
|     get:
 | |
|       summary: Get a thread
 | |
|       tags:
 | |
|         - Video Comments
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|         - $ref: '#/components/parameters/threadId'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoCommentThreadTree'
 | |
|   '/videos/{id}/comments/{commentId}':
 | |
|     post:
 | |
|       summary: Reply to a thread of a video
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Comments
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|         - $ref: '#/components/parameters/commentId'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/CommentThreadPostResponse'
 | |
|         '404':
 | |
|           description: thread or video does not exist
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 text:
 | |
|                   type: string
 | |
|                   description: 'Text comment'
 | |
|               required:
 | |
|                 - text
 | |
| 
 | |
|     delete:
 | |
|       summary: Delete a comment or a reply
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Comments
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|         - $ref: '#/components/parameters/commentId'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '403':
 | |
|           description: cannot remove comment of another user
 | |
|         '404':
 | |
|           description: comment or video does not exist
 | |
|         '409':
 | |
|           description: comment is already deleted
 | |
|   '/videos/{id}/rate':
 | |
|     put:
 | |
|       summary: Like/dislike a video
 | |
|       security:
 | |
|         - OAuth2: []
 | |
|       tags:
 | |
|         - Video Rates
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/idOrUUID'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: video does not exist
 | |
|   /search/videos:
 | |
|     get:
 | |
|       tags:
 | |
|         - Search
 | |
|       summary: Search videos
 | |
|       parameters:
 | |
|         - name: search
 | |
|           in: query
 | |
|           required: true
 | |
|           allowEmptyValue: false
 | |
|           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 video information and interact with it.            
 | |
|           schema:
 | |
|             type: string
 | |
|         - $ref: '#/components/parameters/categoryOneOf'
 | |
|         - $ref: '#/components/parameters/tagsOneOf'
 | |
|         - $ref: '#/components/parameters/tagsAllOf'
 | |
|         - $ref: '#/components/parameters/licenceOneOf'
 | |
|         - $ref: '#/components/parameters/languageOneOf'
 | |
|         - $ref: '#/components/parameters/nsfw'
 | |
|         - $ref: '#/components/parameters/filter'
 | |
|         - $ref: '#/components/parameters/skipCount'
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/searchTarget'
 | |
|         - $ref: '#/components/parameters/videosSearchSort'
 | |
|         - name: startDate
 | |
|           in: query
 | |
|           description: Get videos that are published after this date
 | |
|           schema:
 | |
|             type: string
 | |
|             format: date-time
 | |
|         - name: endDate
 | |
|           in: query
 | |
|           description: Get videos that are published before this date
 | |
|           schema:
 | |
|             type: string
 | |
|             format: date-time
 | |
|         - name: originallyPublishedStartDate
 | |
|           in: query
 | |
|           description: Get videos that are originally published after this date
 | |
|           schema:
 | |
|             type: string
 | |
|             format: date-time
 | |
|         - name: originallyPublishedEndDate
 | |
|           in: query
 | |
|           description: Get videos that are originally published before this date
 | |
|           schema:
 | |
|             type: string
 | |
|             format: date-time
 | |
|         - name: durationMin
 | |
|           in: query
 | |
|           description: Get videos that have this minimum duration
 | |
|           schema:
 | |
|             type: integer
 | |
|         - name: durationMax
 | |
|           in: query
 | |
|           description: Get videos that have this maximum duration
 | |
|           schema:
 | |
|             type: integer
 | |
|       callbacks:
 | |
|         'searchTarget === search-index':
 | |
|           $ref: '#/components/callbacks/searchIndex'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoListResponse'
 | |
|         '500':
 | |
|           description: search index unavailable
 | |
|   /search/video-channels:
 | |
|     get:
 | |
|       tags:
 | |
|         - Search
 | |
|       summary: Search channels
 | |
|       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'
 | |
|       callbacks:
 | |
|         'searchTarget === search-index':
 | |
|           $ref: '#/components/callbacks/searchIndex'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/VideoChannel'
 | |
|         '500':
 | |
|           description: search index unavailable
 | |
|   /blocklist/accounts:
 | |
|     get:
 | |
|       tags:
 | |
|         - Account Blocks
 | |
|       summary: List account blocks
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|     post:
 | |
|       tags:
 | |
|         - Account Blocks
 | |
|       summary: Block an account
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 accountName:
 | |
|                   type: string
 | |
|                   example: chocobozzz@example.org
 | |
|                   description: account to block, in the form `username@domain`
 | |
|               required:
 | |
|                 - accountName
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|         '409':
 | |
|           description: self-blocking forbidden
 | |
|   '/blocklist/accounts/{accountName}':
 | |
|     delete:
 | |
|       tags:
 | |
|         - Account Blocks
 | |
|       summary: Unblock an account by its handle
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - name: accountName
 | |
|           in: path
 | |
|           required: true
 | |
|           description: account to unblock, in the form `username@domain`
 | |
|           schema:
 | |
|             type: string
 | |
|       responses:
 | |
|         '201':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: account or account block does not exist
 | |
|   /blocklist/servers:
 | |
|     get:
 | |
|       tags:
 | |
|         - Server Blocks
 | |
|       summary: List server blocks
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|     post:
 | |
|       tags:
 | |
|         - Server Blocks
 | |
|       summary: Block a server
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 host:
 | |
|                   type: string
 | |
|                   format: hostname
 | |
|                   description: server domain to block
 | |
|               required:
 | |
|                 - host
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|         '409':
 | |
|           description: self-blocking forbidden
 | |
|   '/blocklist/servers/{host}':
 | |
|     delete:
 | |
|       tags:
 | |
|         - Server Blocks
 | |
|       summary: Unblock a server by its domain
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - name: host
 | |
|           in: path
 | |
|           required: true
 | |
|           description: server domain to unblock
 | |
|           schema:
 | |
|             type: string
 | |
|             format: hostname
 | |
|       responses:
 | |
|         '201':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: account block does not exist
 | |
|   /redundancy/{host}:
 | |
|     put:
 | |
|       tags:
 | |
|         - Instance Redundancy
 | |
|       summary: Update a server redundancy policy
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - name: host
 | |
|           in: path
 | |
|           required: true
 | |
|           description: server domain to mirror
 | |
|           schema:
 | |
|             type: string
 | |
|             format: hostname
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 redundancyAllowed:
 | |
|                   type: boolean
 | |
|                   description: allow mirroring of the host's local videos
 | |
|               required:
 | |
|                 - redundancyAllowed
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: server is not already known
 | |
|   /redundancy/videos:
 | |
|     get:
 | |
|       tags:
 | |
|         - Video Mirroring
 | |
|       summary: List videos being mirrored
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - name: target
 | |
|           in: query
 | |
|           required: true
 | |
|           description: direction of the mirror
 | |
|           schema:
 | |
|             type: string
 | |
|             enum:
 | |
|               - my-videos
 | |
|               - remote-videos
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/videoRedundanciesSort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: array
 | |
|                 items:
 | |
|                   $ref: '#/components/schemas/VideoRedundancy'
 | |
|     post:
 | |
|       tags:
 | |
|         - Video Mirroring
 | |
|       summary: Mirror a video
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 videoId:
 | |
|                   type: integer
 | |
|               required:
 | |
|                 - videoId
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '400':
 | |
|           description: cannot mirror a local video
 | |
|         '404':
 | |
|           description: video does not exist
 | |
|         '409':
 | |
|           description: video is already mirrored
 | |
|   /redundancy/videos/{redundancyId}:
 | |
|     delete:
 | |
|       tags:
 | |
|         - Video Mirroring
 | |
|       summary: Delete a mirror done on a video
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - name: redundancyId
 | |
|           in: path
 | |
|           required: true
 | |
|           description: id of an existing redundancy on a video
 | |
|           schema:
 | |
|             type: string
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: video redundancy not found
 | |
|   '/feeds/video-comments.{format}':
 | |
|     get:
 | |
|       tags:
 | |
|         - Feeds
 | |
|       summary: List comments on videos
 | |
|       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)
 | |
|       parameters:
 | |
|         - name: format
 | |
|           in: path
 | |
|           required: true
 | |
|           description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
 | |
|           schema:
 | |
|             type: string
 | |
|             enum:
 | |
|               - xml
 | |
|               - rss
 | |
|               - rss2
 | |
|               - atom
 | |
|               - atom1
 | |
|               - json
 | |
|               - json1
 | |
|         - name: videoId
 | |
|           in: query
 | |
|           description: 'limit listing to a specific video'
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: accountId
 | |
|           in: query
 | |
|           description: 'limit listing to a specific account'
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: accountName
 | |
|           in: query
 | |
|           description: 'limit listing to a specific account'
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: videoChannelId
 | |
|           in: query
 | |
|           description: 'limit listing to a specific video channel'
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: videoChannelName
 | |
|           in: query
 | |
|           description: 'limit listing to a specific video channel'
 | |
|           schema:
 | |
|             type: string
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|           headers:
 | |
|             Cache-Control:
 | |
|               schema:
 | |
|                 type: string
 | |
|                 default: 'max-age=900' # 15 min cache
 | |
|           content:
 | |
|             application/xml:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoCommentsForXML'
 | |
|             application/rss+xml:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoCommentsForXML'
 | |
|             text/xml:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoCommentsForXML'
 | |
|             application/atom+xml:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideoCommentsForXML'
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|         '400':
 | |
|           x-summary: field inconsistencies
 | |
|           description: >
 | |
|             Arises when:
 | |
|               - videoId filter is mixed with a channel filter            
 | |
|         '404':
 | |
|           description: video, video channel or account not found
 | |
|         '406':
 | |
|           description: accept header unsupported
 | |
|   '/feeds/videos.{format}':
 | |
|     get:
 | |
|       tags:
 | |
|         - Feeds
 | |
|       summary: List videos
 | |
|       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)
 | |
|       parameters:
 | |
|         - name: format
 | |
|           in: path
 | |
|           required: true
 | |
|           description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
 | |
|           schema:
 | |
|             type: string
 | |
|             enum:
 | |
|               - xml
 | |
|               - rss
 | |
|               - rss2
 | |
|               - atom
 | |
|               - atom1
 | |
|               - json
 | |
|               - json1
 | |
|         - name: accountId
 | |
|           in: query
 | |
|           description: 'limit listing to a specific account'
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: accountName
 | |
|           in: query
 | |
|           description: 'limit listing to a specific account'
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: videoChannelId
 | |
|           in: query
 | |
|           description: 'limit listing to a specific video channel'
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: videoChannelName
 | |
|           in: query
 | |
|           description: 'limit listing to a specific video channel'
 | |
|           schema:
 | |
|             type: string
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|         - $ref: '#/components/parameters/nsfw'
 | |
|         - $ref: '#/components/parameters/filter'
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|           headers:
 | |
|             Cache-Control:
 | |
|               schema:
 | |
|                 type: string
 | |
|                 default: 'max-age=900' # 15 min cache
 | |
|           content:
 | |
|             application/xml:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideosForXML'
 | |
|               examples:
 | |
|                 nightly:
 | |
|                   externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
 | |
|             application/rss+xml:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideosForXML'
 | |
|             text/xml:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideosForXML'
 | |
|             application/atom+xml:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/VideosForXML'
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|         '404':
 | |
|           description: video channel or account not found
 | |
|         '406':
 | |
|           description: accept header unsupported
 | |
|   /plugins:
 | |
|     get:
 | |
|       tags:
 | |
|         - Plugins
 | |
|       summary: List plugins
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - name: pluginType
 | |
|           in: query
 | |
|           schema:
 | |
|             type: integer
 | |
|         - name: uninstalled
 | |
|           in: query
 | |
|           schema:
 | |
|             type: boolean
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/PluginResponse'
 | |
|   /plugins/available:
 | |
|     get:
 | |
|       tags:
 | |
|         - Plugins
 | |
|       summary: List available plugins
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - name: search
 | |
|           in: query
 | |
|           schema:
 | |
|             type: string
 | |
|         - name: pluginType
 | |
|           in: query
 | |
|           schema:
 | |
|             type: integer
 | |
|         - name: currentPeerTubeEngine
 | |
|           in: query
 | |
|           schema:
 | |
|             type: string
 | |
|         - $ref: '#/components/parameters/start'
 | |
|         - $ref: '#/components/parameters/count'
 | |
|         - $ref: '#/components/parameters/sort'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/PluginResponse'
 | |
|         '503':
 | |
|           description: plugin index unavailable
 | |
|   /plugins/install:
 | |
|     post:
 | |
|       tags:
 | |
|         - Plugins
 | |
|       summary: Install a plugin
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               oneOf:
 | |
|                 - type: object
 | |
|                   properties:
 | |
|                     npmName:
 | |
|                       type: string
 | |
|                       example: peertube-plugin-auth-ldap
 | |
|                   required:
 | |
|                     - npmName
 | |
|                   additionalProperties: false
 | |
|                 - type: object
 | |
|                   properties:
 | |
|                     path:
 | |
|                       type: string
 | |
|                   required:
 | |
|                     - path
 | |
|                   additionalProperties: false
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '400':
 | |
|           description: should have either `npmName` or `path` set
 | |
|   /plugins/update:
 | |
|     post:
 | |
|       tags:
 | |
|         - Plugins
 | |
|       summary: Update a plugin
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               oneOf:
 | |
|                 - type: object
 | |
|                   properties:
 | |
|                     npmName:
 | |
|                       type: string
 | |
|                       example: peertube-plugin-auth-ldap
 | |
|                   required:
 | |
|                     - npmName
 | |
|                   additionalProperties: false
 | |
|                 - type: object
 | |
|                   properties:
 | |
|                     path:
 | |
|                       type: string
 | |
|                   required:
 | |
|                     - path
 | |
|                   additionalProperties: false
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '400':
 | |
|           description: should have either `npmName` or `path` set
 | |
|         '404':
 | |
|           description: existing plugin not found
 | |
|   /plugins/uninstall:
 | |
|     post:
 | |
|       tags:
 | |
|         - Plugins
 | |
|       summary: Uninstall a plugin
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 npmName:
 | |
|                   type: string
 | |
|                   description: name of the plugin/theme in its package.json
 | |
|                   example: peertube-plugin-auth-ldap
 | |
|               required:
 | |
|                 - npmName
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: existing plugin not found
 | |
|   /plugins/{npmName}:
 | |
|     get:
 | |
|       tags:
 | |
|         - Plugins
 | |
|       summary: Get a plugin
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/npmName'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 $ref: '#/components/schemas/Plugin'
 | |
|         '404':
 | |
|           description: plugin not found
 | |
|   /plugins/{npmName}/settings:
 | |
|     put:
 | |
|       tags:
 | |
|         - Plugins
 | |
|       summary: Set a plugin's settings
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/npmName'
 | |
|       requestBody:
 | |
|         content:
 | |
|           application/json:
 | |
|             schema:
 | |
|               type: object
 | |
|               properties:
 | |
|                 settings:
 | |
|                   type: object
 | |
|                   additionalProperties: true
 | |
|       responses:
 | |
|         '204':
 | |
|           description: successful operation
 | |
|         '404':
 | |
|           description: plugin not found
 | |
|   /plugins/{npmName}/public-settings:
 | |
|     get:
 | |
|       tags:
 | |
|         - Plugins
 | |
|       summary: Get a plugin's public settings
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/npmName'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|                 additionalProperties: true
 | |
|         '404':
 | |
|           description: plugin not found
 | |
|   /plugins/{npmName}/registered-settings:
 | |
|     get:
 | |
|       tags:
 | |
|         - Plugins
 | |
|       summary: Get a plugin's registered settings
 | |
|       security:
 | |
|         - OAuth2:
 | |
|           - admin
 | |
|       parameters:
 | |
|         - $ref: '#/components/parameters/npmName'
 | |
|       responses:
 | |
|         '200':
 | |
|           description: successful operation
 | |
|           content:
 | |
|             application/json:
 | |
|               schema:
 | |
|                 type: object
 | |
|                 additionalProperties: true
 | |
|         '404':
 | |
|           description: plugin not found
 | |
| servers:
 | |
|   - url: 'https://peertube2.cpy.re/api/v1'
 | |
|     description: Live Test Server (live data - latest nightly version)
 | |
|   - url: 'https://peertube3.cpy.re/api/v1'
 | |
|     description: Live Test Server (live data - latest RC version)
 | |
|   - url: 'https://peertube.cpy.re/api/v1'
 | |
|     description: Live Test Server (live data - stable version)
 | |
| components:
 | |
|   parameters:
 | |
|     start:
 | |
|       name: start
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Offset used to paginate results
 | |
|       schema:
 | |
|         type: integer
 | |
|         minimum: 0
 | |
|     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
 | |
|     search:
 | |
|       name: search
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Plain text search, applied to various parts of the model depending on endpoint
 | |
|       schema:
 | |
|         type: string
 | |
|     searchTarget:
 | |
|       name: searchTarget
 | |
|       in: query
 | |
|       required: false
 | |
|       description: >
 | |
|         If the administrator enabled search index support, you can override the default search target.
 | |
| 
 | |
| 
 | |
|         **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:
 | |
|           * If the current user has the ability to make a remote URI search (this information is available in the config endpoint),
 | |
|           then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database.
 | |
|           After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
 | |
|           * 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
 | |
|           the data from the origin instance API        
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|           - 'local'
 | |
|           - 'search-index'
 | |
|     videosSort:
 | |
|       name: sort
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Sort videos by criteria
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|         - name
 | |
|         - -duration
 | |
|         - -createdAt
 | |
|         - -publishedAt
 | |
|         - -views
 | |
|         - -likes
 | |
|         - -trending
 | |
|     videosSearchSort:
 | |
|       name: sort
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Sort videos by criteria
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|         - name
 | |
|         - -duration
 | |
|         - -createdAt
 | |
|         - -publishedAt
 | |
|         - -views
 | |
|         - -likes
 | |
|         - -match
 | |
|     commentsSort:
 | |
|       name: sort
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Sort comments by criteria
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|         - -createdAt
 | |
|         - -totalReplies
 | |
|     blacklistsSort:
 | |
|       name: sort
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Sort blacklists by criteria
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|         - -id
 | |
|         - name
 | |
|         - -duration
 | |
|         - -views
 | |
|         - -likes
 | |
|         - -dislikes
 | |
|         - -uuid
 | |
|         - -createdAt
 | |
|     usersSearch:
 | |
|       name: search
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Plain text search that will match with user usernames or emails
 | |
|       schema:
 | |
|         type: string
 | |
|     usersBlocked:
 | |
|       name: blocked
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Filter results down to (un)banned users
 | |
|       schema:
 | |
|         type: boolean
 | |
|     usersSort:
 | |
|       name: sort
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Sort users by criteria
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|         - -id
 | |
|         - -username
 | |
|         - -createdAt
 | |
|     abusesSort:
 | |
|       name: sort
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Sort abuses by criteria
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|         - -id
 | |
|         - -createdAt
 | |
|         - -state
 | |
|     videoRedundanciesSort:
 | |
|       name: sort
 | |
|       in: query
 | |
|       required: false
 | |
|       description: Sort abuses by criteria
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|         - name
 | |
|     name:
 | |
|       name: name
 | |
|       in: path
 | |
|       required: true
 | |
|       description: The name of the account
 | |
|       schema:
 | |
|         type: string
 | |
|         example: chocobozzz | chocobozzz@example.org
 | |
|     id:
 | |
|       name: id
 | |
|       in: path
 | |
|       required: true
 | |
|       description: The user id
 | |
|       schema:
 | |
|         type: integer
 | |
|         minimum: 0
 | |
|         example: 42
 | |
|     idOrUUID:
 | |
|       name: id
 | |
|       in: path
 | |
|       required: true
 | |
|       description: The object id or uuid
 | |
|       schema:
 | |
|         oneOf:
 | |
|           - type: integer
 | |
|             minimum: 0
 | |
|             example: 42
 | |
|           - type: string
 | |
|             format: uuid
 | |
|             example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|     playlistElementId:
 | |
|       name: playlistElementId
 | |
|       in: path
 | |
|       required: true
 | |
|       description: Playlist element id
 | |
|       schema:
 | |
|         type: integer
 | |
|     abuseId:
 | |
|       name: abuseId
 | |
|       in: path
 | |
|       required: true
 | |
|       description: Abuse id
 | |
|       schema:
 | |
|         type: integer
 | |
|     abuseMessageId:
 | |
|       name: abuseMessageId
 | |
|       in: path
 | |
|       required: true
 | |
|       description: Abuse message id
 | |
|       schema:
 | |
|         type: integer
 | |
|     captionLanguage:
 | |
|       name: captionLanguage
 | |
|       in: path
 | |
|       required: true
 | |
|       description: The caption language
 | |
|       schema:
 | |
|         type: string
 | |
|     channelHandle:
 | |
|       name: channelHandle
 | |
|       in: path
 | |
|       required: true
 | |
|       description: The video channel handle
 | |
|       schema:
 | |
|         type: string
 | |
|         example: my_username | my_username@example.com
 | |
|     subscriptionHandle:
 | |
|       name: subscriptionHandle
 | |
|       in: path
 | |
|       required: true
 | |
|       description: The subscription handle
 | |
|       schema:
 | |
|         type: string
 | |
|         example: my_username | my_username@example.com
 | |
|     threadId:
 | |
|       name: threadId
 | |
|       in: path
 | |
|       required: true
 | |
|       description: The thread id (root comment id)
 | |
|       schema:
 | |
|         type: integer
 | |
|     commentId:
 | |
|       name: commentId
 | |
|       in: path
 | |
|       required: true
 | |
|       description: The comment id
 | |
|       schema:
 | |
|         type: integer
 | |
|     categoryOneOf:
 | |
|       name: categoryOneOf
 | |
|       in: query
 | |
|       required: false
 | |
|       description: category id of the video (see [/videos/categories](#tag/Video/paths/~1videos~1categories/get))
 | |
|       schema:
 | |
|         oneOf:
 | |
|         - type: integer
 | |
|         - type: array
 | |
|           items:
 | |
|             type: integer
 | |
|       style: form
 | |
|       explode: false
 | |
|     tagsOneOf:
 | |
|       name: tagsOneOf
 | |
|       in: query
 | |
|       required: false
 | |
|       description: tag(s) of the video
 | |
|       schema:
 | |
|         oneOf:
 | |
|         - type: string
 | |
|         - type: array
 | |
|           items:
 | |
|             type: string
 | |
|       style: form
 | |
|       explode: false
 | |
|     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: false
 | |
|     languageOneOf:
 | |
|       name: languageOneOf
 | |
|       in: query
 | |
|       required: false
 | |
|       description: language id of the video (see [/videos/languages](#tag/Video/paths/~1videos~1languages/get)). Use `_unknown` to filter on videos that don't have a video language
 | |
|       schema:
 | |
|         oneOf:
 | |
|         - type: string
 | |
|         - type: array
 | |
|           items:
 | |
|             type: string
 | |
|       style: form
 | |
|       explode: false
 | |
|     licenceOneOf:
 | |
|       name: licenceOneOf
 | |
|       in: query
 | |
|       required: false
 | |
|       description: licence id of the video (see [/videos/licences](#tag/Video/paths/~1videos~1licences/get))
 | |
|       schema:
 | |
|         oneOf:
 | |
|         - type: integer
 | |
|         - type: array
 | |
|           items:
 | |
|             type: integer
 | |
|       style: form
 | |
|       explode: false
 | |
|     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'
 | |
|     nsfw:
 | |
|       name: nsfw
 | |
|       in: query
 | |
|       required: false
 | |
|       description: whether to include nsfw videos, if any
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|         - 'true'
 | |
|         - 'false'
 | |
|     filter:
 | |
|       name: filter
 | |
|       in: query
 | |
|       required: false
 | |
|       description: >
 | |
|         Special filters (local for instance) which might require special rights:
 | |
|          * `local` - only videos local to the instance
 | |
|          * `all-local` - only videos local to the instance, but showing private and unlisted videos (requires Admin privileges)        
 | |
|       schema:
 | |
|         type: string
 | |
|         enum:
 | |
|         - local
 | |
|         - all-local
 | |
|     subscriptionsUris:
 | |
|       name: uris
 | |
|       in: query
 | |
|       required: true
 | |
|       description: list of uris to check if each is part of the user subscriptions
 | |
|       schema:
 | |
|         type: array
 | |
|         items:
 | |
|           type: string
 | |
|           format: uri
 | |
|     npmName:
 | |
|       name: npmName
 | |
|       in: path
 | |
|       required: true
 | |
|       description: name of the plugin/theme on npmjs.com or in its package.json
 | |
|       schema:
 | |
|         type: string
 | |
|         example: peertube-plugin-auth-ldap
 | |
|   securitySchemes:
 | |
|     OAuth2:
 | |
|       description: >
 | |
|         In the header: *Authorization: Bearer <token\>*
 | |
| 
 | |
| 
 | |
|         Authenticating via OAuth requires the following steps:
 | |
| 
 | |
| 
 | |
|         - Have an account with sufficient authorization levels
 | |
| 
 | |
|         - [Generate](https://docs.joinpeertube.org/#/api-rest-getting-started) a
 | |
|         Bearer Token
 | |
| 
 | |
|         - Make Authenticated Requests        
 | |
|       type: oauth2
 | |
|       flows:
 | |
|         password:
 | |
|           tokenUrl: 'https://peertube.example.com/api/v1/users/token'
 | |
|           scopes:
 | |
|             admin: Admin scope
 | |
|             moderator: Moderator scope
 | |
|             user: User scope
 | |
|   schemas:
 | |
|     VideoConstantNumber:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         label:
 | |
|           type: string
 | |
|     VideoConstantString:
 | |
|       properties:
 | |
|         id:
 | |
|           type: string
 | |
|         label:
 | |
|           type: string
 | |
| 
 | |
|     VideoPlaylistPrivacySet:
 | |
|       type: integer
 | |
|       enum:
 | |
|         - 1
 | |
|         - 2
 | |
|         - 3
 | |
|       description: 'The video playlist privacy (Public = `1`, Unlisted = `2`, Private = `3`)'
 | |
|     VideoPlaylistPrivacyConstant:
 | |
|       properties:
 | |
|         id:
 | |
|           $ref: '#/components/schemas/VideoPlaylistPrivacySet'
 | |
|         label:
 | |
|           type: string
 | |
| 
 | |
|     VideoPlaylistTypeSet:
 | |
|       type: integer
 | |
|       enum:
 | |
|         - 1
 | |
|         - 2
 | |
|       description: 'The video playlist type (Regular = `1`, Watch Later = `2`)'
 | |
|     VideoPlaylistTypeConstant:
 | |
|       properties:
 | |
|         id:
 | |
|           $ref: '#/components/schemas/VideoPlaylistTypeSet'
 | |
|         label:
 | |
|           type: string
 | |
| 
 | |
|     VideoPrivacySet:
 | |
|       type: integer
 | |
|       enum:
 | |
|         - 1
 | |
|         - 2
 | |
|         - 3
 | |
|         - 4
 | |
|       description: 'The video privacy (Public = `1`, Unlisted = `2`, Private = `3`, Internal = `4`)'
 | |
|     VideoPrivacyConstant:
 | |
|       properties:
 | |
|         id:
 | |
|           $ref: '#/components/schemas/VideoPrivacySet'
 | |
|         label:
 | |
|           type: string
 | |
| 
 | |
|     NSFWPolicy:
 | |
|       type: string
 | |
|       enum:
 | |
|         - display
 | |
|         - blur
 | |
|         - do_not_list
 | |
| 
 | |
|     UserRole:
 | |
|       type: integer
 | |
|       enum:
 | |
|         - 0
 | |
|         - 1
 | |
|         - 2
 | |
|       description: 'The user role (Admin = `0`, Moderator = `1`, User = `2`)'
 | |
|       example: 2
 | |
| 
 | |
|     VideoStateConstant:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           enum:
 | |
|             - 1
 | |
|             - 2
 | |
|             - 3
 | |
|           description: 'The video state (Published = `1`, to transcode = `2`, to import = `3`)'
 | |
|         label:
 | |
|           type: string
 | |
| 
 | |
|     AbuseStateSet:
 | |
|       type: integer
 | |
|       enum:
 | |
|         - 1
 | |
|         - 2
 | |
|         - 3
 | |
|       description: 'The abuse state (Pending = `1`, Rejected = `2`, Accepted = `3`)'
 | |
|     AbuseStateConstant:
 | |
|       properties:
 | |
|         id:
 | |
|           $ref: '#/components/schemas/AbuseStateSet'
 | |
|         label:
 | |
|           type: string
 | |
|     AbusePredefinedReasons:
 | |
|       type: array
 | |
|       items:
 | |
|         type: string
 | |
|         enum:
 | |
|         - violentOrAbusive
 | |
|         - hatefulOrAbusive
 | |
|         - spamOrMisleading
 | |
|         - privacy
 | |
|         - rights
 | |
|         - serverRules
 | |
|         - thumbnails
 | |
|         - captions
 | |
|       example: [spamOrMisleading]
 | |
| 
 | |
|     VideoResolutionConstant:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           description: 'Video resolution (240, 360, 720 ...)'
 | |
|           example: 240
 | |
|         label:
 | |
|           type: string
 | |
|           example: 240p
 | |
|     VideoScheduledUpdate:
 | |
|       properties:
 | |
|         privacy:
 | |
|           $ref: '#/components/schemas/VideoPrivacySet'
 | |
|         updateAt:
 | |
|           type: string
 | |
|           format: date
 | |
|           description: When to update the video
 | |
|       required:
 | |
|         - updateAt
 | |
|     AccountSummary:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         name:
 | |
|           type: string
 | |
|         displayName:
 | |
|           type: string
 | |
|         url:
 | |
|           type: string
 | |
|           format: url
 | |
|         host:
 | |
|           type: string
 | |
|           format: hostname
 | |
|         avatar:
 | |
|           nullable: true
 | |
|           allOf:
 | |
|             - $ref: '#/components/schemas/Avatar'
 | |
|     VideoChannelSummary:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         name:
 | |
|           type: string
 | |
|         displayName:
 | |
|           type: string
 | |
|         url:
 | |
|           type: string
 | |
|           format: url
 | |
|         host:
 | |
|           type: string
 | |
|           format: hostname
 | |
|         avatar:
 | |
|           nullable: true
 | |
|           allOf:
 | |
|             - $ref: '#/components/schemas/Avatar'
 | |
|     PlaylistElement:
 | |
|       properties:
 | |
|         position:
 | |
|           type: integer
 | |
|         startTimestamp:
 | |
|           type: integer
 | |
|         stopTimestamp:
 | |
|           type: integer
 | |
|         video:
 | |
|           nullable: true
 | |
|           allOf:
 | |
|             - $ref: '#/components/schemas/Video'
 | |
|     VideoFile:
 | |
|       properties:
 | |
|         magnetUri:
 | |
|           type: string
 | |
|         resolution:
 | |
|           $ref: '#/components/schemas/VideoResolutionConstant'
 | |
|         size:
 | |
|           type: integer
 | |
|           description: 'Video file size in bytes'
 | |
|         torrentUrl:
 | |
|           type: string
 | |
|           format: url
 | |
|         torrentDownloadUrl:
 | |
|           type: string
 | |
|           format: url
 | |
|         fileUrl:
 | |
|           type: string
 | |
|           format: url
 | |
|         fileDownloadUrl:
 | |
|           type: string
 | |
|           format: url
 | |
|         fps:
 | |
|           type: number
 | |
|         metadataUrl:
 | |
|           type: string
 | |
|           format: url
 | |
|     VideoStreamingPlaylists:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         type:
 | |
|           type: integer
 | |
|           enum:
 | |
|             - 1
 | |
|           description: 'Playlist type (HLS = `1`)'
 | |
|         playlistUrl:
 | |
|           type: string
 | |
|           format: url
 | |
|         segmentsSha256Url:
 | |
|           type: string
 | |
|           format: url
 | |
|         files:
 | |
|           type: array
 | |
|           description: 'Video files associated to this playlist. The difference with the root "files" property is that these files are fragmented, so they can be used in this streaming playlist (HLS etc)'
 | |
|           items:
 | |
|             $ref: '#/components/schemas/VideoFile'
 | |
|         redundancies:
 | |
|           type: array
 | |
|           items:
 | |
|             type: object
 | |
|             properties:
 | |
|               baseUrl:
 | |
|                 type: string
 | |
|                 format: url
 | |
|     VideoInfo:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         uuid:
 | |
|           type: string
 | |
|           format: uuid
 | |
|           example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|         name:
 | |
|           type: string
 | |
|     Video:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           example: 8
 | |
|         uuid:
 | |
|           type: string
 | |
|           format: uuid
 | |
|           example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         publishedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         originallyPublishedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         category:
 | |
|           $ref: '#/components/schemas/VideoConstantNumber'
 | |
|         licence:
 | |
|           $ref: '#/components/schemas/VideoConstantNumber'
 | |
|         language:
 | |
|           $ref: '#/components/schemas/VideoConstantString'
 | |
|         privacy:
 | |
|           $ref: '#/components/schemas/VideoPrivacyConstant'
 | |
|         description:
 | |
|           type: string
 | |
|         duration:
 | |
|           type: integer
 | |
|           example: 1419
 | |
|         isLocal:
 | |
|           type: boolean
 | |
|         name:
 | |
|           type: string
 | |
|           example: What is PeerTube?
 | |
|         thumbnailPath:
 | |
|           type: string
 | |
|           example: /static/thumbnails/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
 | |
|         previewPath:
 | |
|           type: string
 | |
|           example: /lazy-static/previews/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
 | |
|         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
 | |
|         nsfw:
 | |
|           type: boolean
 | |
|         waitTranscoding:
 | |
|           type: boolean
 | |
|           nullable: true
 | |
|         state:
 | |
|           $ref: '#/components/schemas/VideoStateConstant'
 | |
|         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
 | |
|     VideoDetails:
 | |
|       allOf:
 | |
|         - $ref: '#/components/schemas/Video'
 | |
|         - type: object
 | |
|           properties:
 | |
|             descriptionPath:
 | |
|               type: string
 | |
|             support:
 | |
|               type: string
 | |
|               description: A text tell the audience how to support the video creator
 | |
|               example: Please support my work on <insert crowdfunding plateform>! <3
 | |
|             channel:
 | |
|               $ref: '#/components/schemas/VideoChannel'
 | |
|             account:
 | |
|               $ref: '#/components/schemas/Account'
 | |
|             tags:
 | |
|               type: array
 | |
|               items:
 | |
|                 type: string
 | |
|               example: [flowers, gardening]
 | |
|             files:
 | |
|               type: array
 | |
|               description: 'WebTorrent/raw video files. Can be empty if WebTorrent is disabled on the server. In this case, video files will be in the "streamingPlaylists[].files" property'
 | |
|               items:
 | |
|                 $ref: '#/components/schemas/VideoFile'
 | |
|             commentsEnabled:
 | |
|               type: boolean
 | |
|             downloadEnabled:
 | |
|               type: boolean
 | |
|             trackerUrls:
 | |
|               type: array
 | |
|               items:
 | |
|                 type: string
 | |
|                 format: url
 | |
|             streamingPlaylists:
 | |
|               type: array
 | |
|               items:
 | |
|                 $ref: '#/components/schemas/VideoStreamingPlaylists'
 | |
|     FileRedundancyInformation:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         fileUrl:
 | |
|           type: string
 | |
|           format: url
 | |
|         strategy:
 | |
|           type: string
 | |
|           enum:
 | |
|             - manual
 | |
|             - most-views
 | |
|             - trending
 | |
|             - recently-added
 | |
|         size:
 | |
|           type: integer
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         expiresOn:
 | |
|           type: string
 | |
|           format: date-time
 | |
|     VideoRedundancy:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         name:
 | |
|           type: string
 | |
|         url:
 | |
|           type: string
 | |
|           format: url
 | |
|         uuid:
 | |
|           type: string
 | |
|           format: uuid
 | |
|           example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|         redundancies:
 | |
|           type: object
 | |
|           properties:
 | |
|             files:
 | |
|               type: array
 | |
|               items:
 | |
|                 $ref: '#/components/schemas/FileRedundancyInformation'
 | |
|             streamingPlaylists:
 | |
|               type: array
 | |
|               items:
 | |
|                 $ref: '#/components/schemas/FileRedundancyInformation'
 | |
|     VideoImportStateConstant:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           enum:
 | |
|             - 1
 | |
|             - 2
 | |
|             - 3
 | |
|           description: 'The video import state (Pending = `1`, Success = `2`, Failed = `3`)'
 | |
|         label:
 | |
|           type: string
 | |
|           example: Pending
 | |
|     VideoImport:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           example: 2
 | |
|         targetUrl:
 | |
|           type: string
 | |
|           format: url
 | |
|           example: https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|         magnetUri:
 | |
|           type: string
 | |
|           format: uri
 | |
|           example: magnet:?xs=https%3A%2F%2Fframatube.org%2Fstatic%2Ftorrents%2F9c9de5e8-0a1e-484a-b099-e80766180a6d-240.torrent&xt=urn:btih:38b4747ff788b30bf61f59d1965cd38f9e48e01f&dn=What+is+PeerTube%3F&tr=wss%3A%2F%2Fframatube.org%2Ftracker%2Fsocket&tr=https%3A%2F%2Fframatube.org%2Ftracker%2Fannounce&ws=https%3A%2F%2Fframatube.org%2Fstatic%2Fwebseed%2F9c9de5e8-0a1e-484a-b099-e80766180a6d-240.mp4
 | |
|         torrentName:
 | |
|           type: string
 | |
|         state:
 | |
|           $ref: '#/components/schemas/VideoImportStateConstant'
 | |
|         error:
 | |
|           type: string
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         video:
 | |
|           $ref: '#/components/schemas/Video'
 | |
|     Abuse:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           example: 7
 | |
|         reason:
 | |
|           type: string
 | |
|           example: The video is a spam
 | |
|         predefinedReasons:
 | |
|           $ref: '#/components/schemas/AbusePredefinedReasons'
 | |
|         reporterAccount:
 | |
|           $ref: '#/components/schemas/Account'
 | |
|         state:
 | |
|           $ref: '#/components/schemas/AbuseStateConstant'
 | |
|         moderationComment:
 | |
|           type: string
 | |
|           example: Decided to ban the server since it spams us regularly
 | |
|         video:
 | |
|           type: object
 | |
|           properties:
 | |
|             id:
 | |
|               type: integer
 | |
|             name:
 | |
|               type: string
 | |
|             uuid:
 | |
|               type: string
 | |
|               format: uuid
 | |
|               example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|     AbuseMessage:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         message:
 | |
|           type: string
 | |
|         byModerator:
 | |
|           type: boolean
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         account:
 | |
|           $ref: '#/components/schemas/AccountSummary'
 | |
|     VideoBlacklist:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         videoId:
 | |
|           type: integer
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         name:
 | |
|           type: string
 | |
|         uuid:
 | |
|           type: string
 | |
|           format: uuid
 | |
|           example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|         description:
 | |
|           type: string
 | |
|         duration:
 | |
|           type: integer
 | |
|         views:
 | |
|           type: integer
 | |
|         likes:
 | |
|           type: integer
 | |
|         dislikes:
 | |
|           type: integer
 | |
|         nsfw:
 | |
|           type: boolean
 | |
|     VideoChannel:
 | |
|       properties:
 | |
|         displayName:
 | |
|           type: string
 | |
|         description:
 | |
|           type: string
 | |
|         isLocal:
 | |
|           type: boolean
 | |
|         ownerAccount:
 | |
|           type: object
 | |
|           properties:
 | |
|             id:
 | |
|               type: integer
 | |
|             uuid:
 | |
|               type: string
 | |
|               format: uuid
 | |
|               example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|     VideoPlaylist:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         description:
 | |
|           type: string
 | |
|         uuid:
 | |
|           type: string
 | |
|           format: uuid
 | |
|           example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|         displayName:
 | |
|           type: string
 | |
|         isLocal:
 | |
|           type: boolean
 | |
|         videoLength:
 | |
|           type: integer
 | |
|         thumbnailPath:
 | |
|           type: string
 | |
|         privacy:
 | |
|           $ref: '#/components/schemas/VideoPlaylistPrivacyConstant'
 | |
|         type:
 | |
|           $ref: '#/components/schemas/VideoPlaylistTypeConstant'
 | |
|         ownerAccount:
 | |
|           $ref: '#/components/schemas/AccountSummary'
 | |
|         videoChannel:
 | |
|           $ref: '#/components/schemas/VideoChannelSummary'
 | |
|     VideoComment:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         url:
 | |
|           type: string
 | |
|           format: url
 | |
|         text:
 | |
|           type: string
 | |
|         threadId:
 | |
|           type: integer
 | |
|         inReplyToCommentId:
 | |
|           type: integer
 | |
|         videoId:
 | |
|           type: integer
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         totalRepliesFromVideoAuthor:
 | |
|           type: integer
 | |
|         totalReplies:
 | |
|           type: integer
 | |
|         account:
 | |
|           $ref: '#/components/schemas/Account'
 | |
|     VideoCommentThreadTree:
 | |
|       properties:
 | |
|         comment:
 | |
|           $ref: '#/components/schemas/VideoComment'
 | |
|         children:
 | |
|           type: array
 | |
|           items:
 | |
|             $ref: '#/components/schemas/VideoCommentThreadTree'
 | |
|     VideoCaption:
 | |
|       properties:
 | |
|         language:
 | |
|           $ref: '#/components/schemas/VideoConstantString'
 | |
|         captionPath:
 | |
|           type: string
 | |
|     Avatar:
 | |
|       properties:
 | |
|         path:
 | |
|           type: string
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|     ActorInfo:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           example: 11
 | |
|         name:
 | |
|           type: string
 | |
|         displayName:
 | |
|           type: string
 | |
|         host:
 | |
|           type: string
 | |
|           format: hostname
 | |
|         avatar:
 | |
|           nullable: true
 | |
|           type: object
 | |
|           properties:
 | |
|             path:
 | |
|               type: string
 | |
|     Actor:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           example: 11
 | |
|         url:
 | |
|           type: string
 | |
|           format: url
 | |
|         name:
 | |
|           type: string
 | |
|         host:
 | |
|           type: string
 | |
|           format: hostname
 | |
|         followingCount:
 | |
|           type: integer
 | |
|         followersCount:
 | |
|           type: integer
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         avatar:
 | |
|           $ref: '#/components/schemas/Avatar'
 | |
|     Account:
 | |
|       allOf:
 | |
|         - $ref: '#/components/schemas/Actor'
 | |
|         - properties:
 | |
|             userId:
 | |
|               type: string
 | |
|               example: 2
 | |
|             displayName:
 | |
|               type: string
 | |
|             description:
 | |
|               type: string
 | |
|     UserWatchingVideo:
 | |
|       properties:
 | |
|         currentTime:
 | |
|           type: integer
 | |
|           description: timestamp within the video, in seconds
 | |
|           example: 5
 | |
|     ServerConfig:
 | |
|       properties:
 | |
|         instance:
 | |
|           type: object
 | |
|           properties:
 | |
|             name:
 | |
|               type: string
 | |
|             shortDescription:
 | |
|               type: string
 | |
|             defaultClientRoute:
 | |
|               type: string
 | |
|             isNSFW:
 | |
|               type: boolean
 | |
|             defaultNSFWPolicy:
 | |
|               type: string
 | |
|             customizations:
 | |
|               type: object
 | |
|               properties:
 | |
|                 javascript:
 | |
|                   type: string
 | |
|                 css:
 | |
|                   type: string
 | |
|         search:
 | |
|           type: object
 | |
|           properties:
 | |
|             remoteUri:
 | |
|               type: object
 | |
|               properties:
 | |
|                 users:
 | |
|                   type: boolean
 | |
|                 anonymous:
 | |
|                   type: boolean
 | |
|         plugin:
 | |
|           type: object
 | |
|           properties:
 | |
|             registered:
 | |
|               type: array
 | |
|               items:
 | |
|                 type: string
 | |
|         theme:
 | |
|           type: object
 | |
|           properties:
 | |
|             registered:
 | |
|               type: array
 | |
|               items:
 | |
|                 type: string
 | |
|         email:
 | |
|           type: object
 | |
|           properties:
 | |
|             enabled:
 | |
|               type: boolean
 | |
|         contactForm:
 | |
|           type: object
 | |
|           properties:
 | |
|             enabled:
 | |
|               type: boolean
 | |
|         serverVersion:
 | |
|           type: string
 | |
|         serverCommit:
 | |
|           type: string
 | |
|         signup:
 | |
|           type: object
 | |
|           properties:
 | |
|             allowed:
 | |
|               type: boolean
 | |
|             allowedForCurrentIP:
 | |
|               type: boolean
 | |
|             requiresEmailVerification:
 | |
|               type: boolean
 | |
|         transcoding:
 | |
|           type: object
 | |
|           properties:
 | |
|             hls:
 | |
|               type: object
 | |
|               properties:
 | |
|                 enabled:
 | |
|                   type: boolean
 | |
|             webtorrent:
 | |
|               type: object
 | |
|               properties:
 | |
|                 enabled:
 | |
|                   type: boolean
 | |
|             enabledResolutions:
 | |
|               type: array
 | |
|               items:
 | |
|                 type: integer
 | |
|         import:
 | |
|           type: object
 | |
|           properties:
 | |
|             videos:
 | |
|               type: object
 | |
|               properties:
 | |
|                 http:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     enabled:
 | |
|                       type: boolean
 | |
|                 torrent:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     enabled:
 | |
|                       type: boolean
 | |
|         autoBlacklist:
 | |
|           type: object
 | |
|           properties:
 | |
|             videos:
 | |
|               type: object
 | |
|               properties:
 | |
|                 ofUsers:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     enabled:
 | |
|                       type: boolean
 | |
|         avatar:
 | |
|           type: object
 | |
|           properties:
 | |
|             file:
 | |
|               type: object
 | |
|               properties:
 | |
|                 size:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     max:
 | |
|                       type: integer
 | |
|             extensions:
 | |
|               type: array
 | |
|               items:
 | |
|                 type: string
 | |
|         video:
 | |
|           type: object
 | |
|           properties:
 | |
|             image:
 | |
|               type: object
 | |
|               properties:
 | |
|                 extensions:
 | |
|                   type: array
 | |
|                   items:
 | |
|                     type: string
 | |
|                 size:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     max:
 | |
|                       type: integer
 | |
|             file:
 | |
|               type: object
 | |
|               properties:
 | |
|                 extensions:
 | |
|                   type: array
 | |
|                   items:
 | |
|                     type: string
 | |
|         videoCaption:
 | |
|           type: object
 | |
|           properties:
 | |
|             file:
 | |
|               type: object
 | |
|               properties:
 | |
|                 size:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     max:
 | |
|                       type: integer
 | |
|                 extensions:
 | |
|                   type: array
 | |
|                   items:
 | |
|                     type: string
 | |
|         user:
 | |
|           type: object
 | |
|           properties:
 | |
|             videoQuota:
 | |
|               type: integer
 | |
|             videoQuotaDaily:
 | |
|               type: integer
 | |
|         trending:
 | |
|           type: object
 | |
|           properties:
 | |
|             videos:
 | |
|               type: object
 | |
|               properties:
 | |
|                 intervalDays:
 | |
|                   type: integer
 | |
|         tracker:
 | |
|           type: object
 | |
|           properties:
 | |
|             enabled:
 | |
|               type: boolean
 | |
|         followings:
 | |
|           type: object
 | |
|           properties:
 | |
|             instance:
 | |
|               type: object
 | |
|               properties:
 | |
|                 autoFollowIndex:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     indexUrl:
 | |
|                       type: string
 | |
|                       format: url
 | |
|     ServerConfigAbout:
 | |
|       properties:
 | |
|         instance:
 | |
|           type: object
 | |
|           properties:
 | |
|             name:
 | |
|               type: string
 | |
|             shortDescription:
 | |
|               type: string
 | |
|             description:
 | |
|               type: string
 | |
|             terms:
 | |
|               type: string
 | |
|     ServerConfigCustom:
 | |
|       properties:
 | |
|         instance:
 | |
|           type: object
 | |
|           properties:
 | |
|             name:
 | |
|               type: string
 | |
|             shortDescription:
 | |
|               type: string
 | |
|             description:
 | |
|               type: string
 | |
|             terms:
 | |
|               type: string
 | |
|             defaultClientRoute:
 | |
|               type: string
 | |
|             isNSFW:
 | |
|               type: boolean
 | |
|             defaultNSFWPolicy:
 | |
|               type: string
 | |
|             customizations:
 | |
|               type: object
 | |
|               properties:
 | |
|                 javascript:
 | |
|                   type: string
 | |
|                 css:
 | |
|                   type: string
 | |
|         theme:
 | |
|           type: object
 | |
|           properties:
 | |
|             default:
 | |
|               type: string
 | |
|         services:
 | |
|           type: object
 | |
|           properties:
 | |
|             twitter:
 | |
|               type: object
 | |
|               properties:
 | |
|                 username:
 | |
|                   type: string
 | |
|                 whitelisted:
 | |
|                   type: boolean
 | |
|         cache:
 | |
|           type: object
 | |
|           properties:
 | |
|             previews:
 | |
|               type: object
 | |
|               properties:
 | |
|                 size:
 | |
|                   type: integer
 | |
|             captions:
 | |
|               type: object
 | |
|               properties:
 | |
|                 size:
 | |
|                   type: integer
 | |
|         signup:
 | |
|           type: object
 | |
|           properties:
 | |
|             enabled:
 | |
|               type: boolean
 | |
|             limit:
 | |
|               type: integer
 | |
|             requiresEmailVerification:
 | |
|               type: boolean
 | |
|         admin:
 | |
|           type: object
 | |
|           properties:
 | |
|             email:
 | |
|               type: string
 | |
|               format: email
 | |
|         contactForm:
 | |
|           type: object
 | |
|           properties:
 | |
|             enabled:
 | |
|               type: boolean
 | |
|         user:
 | |
|           type: object
 | |
|           properties:
 | |
|             videoQuota:
 | |
|               type: integer
 | |
|             videoQuotaDaily:
 | |
|               type: integer
 | |
|         transcoding:
 | |
|           type: object
 | |
|           properties:
 | |
|             enabled:
 | |
|               type: boolean
 | |
|             allowAdditionalExtensions:
 | |
|               type: boolean
 | |
|             allowAudioFiles:
 | |
|               type: boolean
 | |
|             threads:
 | |
|               type: integer
 | |
|             resolutions:
 | |
|               type: object
 | |
|               properties:
 | |
|                 240p:
 | |
|                   type: boolean
 | |
|                 360p:
 | |
|                   type: boolean
 | |
|                 480p:
 | |
|                   type: boolean
 | |
|                 720p:
 | |
|                   type: boolean
 | |
|                 1080p:
 | |
|                   type: boolean
 | |
|                 2160p:
 | |
|                   type: boolean
 | |
|             hls:
 | |
|               type: object
 | |
|               properties:
 | |
|                 enabled:
 | |
|                   type: boolean
 | |
|         import:
 | |
|           type: object
 | |
|           properties:
 | |
|             videos:
 | |
|               type: object
 | |
|               properties:
 | |
|                 http:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     enabled:
 | |
|                       type: boolean
 | |
|                 torrent:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     enabled:
 | |
|                       type: boolean
 | |
|         autoBlacklist:
 | |
|           type: object
 | |
|           properties:
 | |
|             videos:
 | |
|               type: object
 | |
|               properties:
 | |
|                 ofUsers:
 | |
|                   type: object
 | |
|                   properties:
 | |
|                     enabled:
 | |
|                       type: boolean
 | |
|         followers:
 | |
|           type: object
 | |
|           properties:
 | |
|             instance:
 | |
|               type: object
 | |
|               properties:
 | |
|                 enabled:
 | |
|                   type: boolean
 | |
|                 manualApproval:
 | |
|                   type: boolean
 | |
|     Follow:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         follower:
 | |
|           $ref: '#/components/schemas/Actor'
 | |
|         following:
 | |
|           $ref: '#/components/schemas/Actor'
 | |
|         score:
 | |
|           type: number
 | |
|           description: score reflecting the reachability of the actor, with steps of `10` and a base score of `1000`.
 | |
|         state:
 | |
|           type: string
 | |
|           enum:
 | |
|             - pending
 | |
|             - accepted
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
| 
 | |
|     PredefinedAbuseReasons:
 | |
|       description: Reason categories that help triage reports
 | |
|       type: array
 | |
|       items:
 | |
|         type: string
 | |
|         enum:
 | |
|         - violentOrAbusive
 | |
|         - hatefulOrAbusive
 | |
|         - spamOrMisleading
 | |
|         - privacy
 | |
|         - rights
 | |
|         - serverRules
 | |
|         - thumbnails
 | |
|         - captions
 | |
| 
 | |
|     Job:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           minimum: 0
 | |
|           example: 42
 | |
|         state:
 | |
|           type: string
 | |
|           enum:
 | |
|             - active
 | |
|             - completed
 | |
|             - failed
 | |
|             - waiting
 | |
|             - delayed
 | |
|         type:
 | |
|           type: string
 | |
|           enum:
 | |
|             - activitypub-http-unicast
 | |
|             - activitypub-http-broadcast
 | |
|             - activitypub-http-fetcher
 | |
|             - activitypub-follow
 | |
|             - video-file-import
 | |
|             - video-transcoding
 | |
|             - email
 | |
|             - video-import
 | |
|             - videos-views
 | |
|             - activitypub-refresher
 | |
|             - video-redundancy
 | |
|         data:
 | |
|           type: object
 | |
|           additionalProperties: true
 | |
|         error:
 | |
|           type: object
 | |
|           additionalProperties: true
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         finishedOn:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         processedOn:
 | |
|           type: string
 | |
|           format: date-time
 | |
|     AddUserResponse:
 | |
|       properties:
 | |
|         user:
 | |
|           type: object
 | |
|           properties:
 | |
|             id:
 | |
|               type: integer
 | |
|               example: 8
 | |
|             account:
 | |
|               type: object
 | |
|               properties:
 | |
|                 id:
 | |
|                   type: integer
 | |
|                   example: 37
 | |
|     VideoUploadResponse:
 | |
|       properties:
 | |
|         video:
 | |
|           type: object
 | |
|           properties:
 | |
|             id:
 | |
|               type: integer
 | |
|               example: 8
 | |
|             uuid:
 | |
|               type: string
 | |
|               format: uuid
 | |
|               example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
 | |
|     CommentThreadResponse:
 | |
|       properties:
 | |
|         total:
 | |
|           type: integer
 | |
|           example: 1
 | |
|         data:
 | |
|           type: array
 | |
|           maxItems: 100
 | |
|           items:
 | |
|             $ref: '#/components/schemas/VideoComment'
 | |
|     CommentThreadPostResponse:
 | |
|       properties:
 | |
|         comment:
 | |
|           $ref: '#/components/schemas/VideoComment'
 | |
|     VideoListResponse:
 | |
|       properties:
 | |
|         total:
 | |
|           type: integer
 | |
|           example: 1
 | |
|         data:
 | |
|           type: array
 | |
|           maxItems: 100
 | |
|           items:
 | |
|             $ref: '#/components/schemas/Video'
 | |
|     User:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|           readOnly: true
 | |
|         username:
 | |
|           type: string
 | |
|           description: The user username
 | |
|           minLength: 1
 | |
|           maxLength: 50
 | |
|         email:
 | |
|           type: string
 | |
|           format: email
 | |
|           description: The user email
 | |
|         theme:
 | |
|           type: string
 | |
|           description: Theme enabled by this user
 | |
|         emailVerified:
 | |
|           type: boolean
 | |
|           description: Has the user confirmed their email address?
 | |
|         nsfwPolicy:
 | |
|           $ref: '#/components/schemas/NSFWPolicy'
 | |
|         webtorrentEnabled:
 | |
|           type: boolean
 | |
|           description: Enable P2P in the player
 | |
|         autoPlayVideo:
 | |
|           type: boolean
 | |
|           description: Automatically start playing the video on the watch page
 | |
|         role:
 | |
|           $ref: '#/components/schemas/UserRole'
 | |
|         roleLabel:
 | |
|           type: string
 | |
|           enum:
 | |
|             - User
 | |
|             - Moderator
 | |
|             - Administrator
 | |
|         videoQuota:
 | |
|           type: integer
 | |
|           description: The user video quota
 | |
|         videoQuotaDaily:
 | |
|           type: integer
 | |
|           description: The user daily video quota
 | |
|         videosCount:
 | |
|           type: integer
 | |
|         abusesCount:
 | |
|           type: integer
 | |
|         abusesAcceptedCount:
 | |
|           type: integer
 | |
|         abusesCreatedCount:
 | |
|           type: integer
 | |
|         videoCommentsCount:
 | |
|           type: integer
 | |
|         noInstanceConfigWarningModal:
 | |
|           type: boolean
 | |
|         noWelcomeModal:
 | |
|           type: boolean
 | |
|         blocked:
 | |
|           type: boolean
 | |
|         blockedReason:
 | |
|           type: string
 | |
|         createdAt:
 | |
|           type: string
 | |
|         account:
 | |
|           $ref: '#/components/schemas/Account'
 | |
|         videoChannels:
 | |
|           type: array
 | |
|           items:
 | |
|             $ref: '#/components/schemas/VideoChannel'
 | |
|     AddUser:
 | |
|       properties:
 | |
|         username:
 | |
|           type: string
 | |
|           description: The user username
 | |
|           minLength: 1
 | |
|           maxLength: 50
 | |
|         password:
 | |
|           type: string
 | |
|           format: password
 | |
|           description: The user password. If the smtp server is configured, you can leave empty and an email will be sent
 | |
|           minLength: 6
 | |
|           maxLength: 255
 | |
|         email:
 | |
|           type: string
 | |
|           format: email
 | |
|           description: The user email
 | |
|         videoQuota:
 | |
|           type: integer
 | |
|           description: The user video quota
 | |
|         videoQuotaDaily:
 | |
|           type: integer
 | |
|           description: The user daily video quota
 | |
|         role:
 | |
|           $ref: '#/components/schemas/UserRole'
 | |
|       required:
 | |
|         - username
 | |
|         - password
 | |
|         - email
 | |
|         - videoQuota
 | |
|         - videoQuotaDaily
 | |
|         - role
 | |
|     UpdateUser:
 | |
|       properties:
 | |
|         id:
 | |
|           type: string
 | |
|           description: The user id
 | |
|         email:
 | |
|           type: string
 | |
|           format: email
 | |
|           description: The updated email of the user
 | |
|         videoQuota:
 | |
|           type: integer
 | |
|           description: The updated video quota of the user
 | |
|         videoQuotaDaily:
 | |
|           type: integer
 | |
|           description: The updated daily video quota of the user
 | |
|         role:
 | |
|           $ref: '#/components/schemas/UserRole'
 | |
|       required:
 | |
|         - id
 | |
|         - email
 | |
|         - videoQuota
 | |
|         - videoQuotaDaily
 | |
|         - role
 | |
|     UpdateMe:
 | |
|       properties:
 | |
|         password:
 | |
|           type: string
 | |
|           format: password
 | |
|           description: Your new password
 | |
|           minLength: 6
 | |
|           maxLength: 255
 | |
|         email:
 | |
|           type: string
 | |
|           format: email
 | |
|           description: Your new email
 | |
|         displayNSFW:
 | |
|           type: string
 | |
|           description: Your new displayNSFW
 | |
|           enum:
 | |
|             - 'true'
 | |
|             - 'false'
 | |
|             - both
 | |
|         autoPlayVideo:
 | |
|           type: boolean
 | |
|           description: Your new autoPlayVideo
 | |
|       required:
 | |
|         - password
 | |
|         - email
 | |
|         - displayNSFW
 | |
|         - autoPlayVideo
 | |
|     GetMeVideoRating:
 | |
|       properties:
 | |
|         id:
 | |
|           type: string
 | |
|           description: Id of the video
 | |
|         rating:
 | |
|           type: number
 | |
|           description: Rating of the video
 | |
|       required:
 | |
|         - id
 | |
|         - rating
 | |
|     VideoRating:
 | |
|       properties:
 | |
|         video:
 | |
|           $ref: '#/components/schemas/Video'
 | |
|         rating:
 | |
|           type: number
 | |
|           description: 'Rating of the video'
 | |
|       required:
 | |
|         - video
 | |
|         - rating
 | |
|     RegisterUser:
 | |
|       properties:
 | |
|         username:
 | |
|           type: string
 | |
|           description: The username of the user
 | |
|           minLength: 1
 | |
|           maxLength: 50
 | |
|           pattern: '/^[a-z0-9._]{1,50}$/'
 | |
|         password:
 | |
|           type: string
 | |
|           format: password
 | |
|           description: The password of the user
 | |
|           minLength: 6
 | |
|           maxLength: 255
 | |
|         email:
 | |
|           type: string
 | |
|           format: email
 | |
|           description: The email of the user
 | |
|         displayName:
 | |
|           type: string
 | |
|           description: The user display name
 | |
|           minLength: 1
 | |
|           maxLength: 120
 | |
|         channel:
 | |
|           type: object
 | |
|           properties:
 | |
|             name:
 | |
|               type: string
 | |
|               description: The name for the default channel
 | |
|               pattern: '/^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\-_.:]+$/'
 | |
|             displayName:
 | |
|               type: string
 | |
|               description: The display name for the default channel
 | |
|               minLength: 1
 | |
|               maxLength: 120
 | |
|       required:
 | |
|         - username
 | |
|         - password
 | |
|         - email
 | |
|     VideoChannelCreate:
 | |
|       properties:
 | |
|         name:
 | |
|           type: string
 | |
|         displayName:
 | |
|           type: string
 | |
|         description:
 | |
|           type: string
 | |
|         support:
 | |
|           type: string
 | |
|           description: 'A text shown by default on all videos of this channel, to tell the audience how to support it'
 | |
|           example: Please support my work on <insert crowdfunding plateform>! <3
 | |
|       required:
 | |
|         - name
 | |
|         - displayName
 | |
|     VideoChannelUpdate:
 | |
|       properties:
 | |
|         displayName:
 | |
|           type: string
 | |
|         description:
 | |
|           type: string
 | |
|         support:
 | |
|           type: string
 | |
|           description: 'A text shown by default on all videos of this channel, to tell the audience how to support it'
 | |
|           example: Please support my work on <insert crowdfunding plateform>! <3
 | |
|         bulkVideosSupportUpdate:
 | |
|           type: boolean
 | |
|           description: 'Update the support field for all videos of this channel'
 | |
| 
 | |
|     MRSSPeerLink:
 | |
|       type: object
 | |
|       xml:
 | |
|         name: 'media:peerLink'
 | |
|       properties:
 | |
|         href:
 | |
|           type: string
 | |
|           xml:
 | |
|             attribute: true
 | |
|         type:
 | |
|           type: string
 | |
|           enum:
 | |
|             - application/x-bittorrent
 | |
|           xml:
 | |
|             attribute: true
 | |
|     MRSSGroupContent:
 | |
|       type: object
 | |
|       xml:
 | |
|         name: 'media:content'
 | |
|       properties:
 | |
|         url:
 | |
|           type: string
 | |
|           format: url
 | |
|           xml:
 | |
|             attribute: true
 | |
|         fileSize:
 | |
|           type: integer
 | |
|           xml:
 | |
|             attribute: true
 | |
|         type:
 | |
|           type: string
 | |
|           xml:
 | |
|             attribute: true
 | |
|         framerate:
 | |
|           type: integer
 | |
|           xml:
 | |
|             attribute: true
 | |
|         duration:
 | |
|           type: integer
 | |
|           xml:
 | |
|             attribute: true
 | |
|         height:
 | |
|           type: integer
 | |
|           xml:
 | |
|             attribute: true
 | |
|         lang:
 | |
|           type: string
 | |
|           xml:
 | |
|             attribute: true
 | |
|     VideoCommentsForXML:
 | |
|       type: array
 | |
|       xml:
 | |
|         wrapped: true
 | |
|         name: 'channel'
 | |
|       items:
 | |
|         type: object
 | |
|         xml:
 | |
|           name: 'item'
 | |
|         properties:
 | |
|           link:
 | |
|             type: string
 | |
|             format: url
 | |
|           guid:
 | |
|             type: string
 | |
|           pubDate:
 | |
|             type: string
 | |
|             format: date-time
 | |
|           'content:encoded':
 | |
|             type: string
 | |
|           'dc:creator':
 | |
|             type: string
 | |
|     VideosForXML:
 | |
|       type: array
 | |
|       xml:
 | |
|         wrapped: true
 | |
|         name: 'channel'
 | |
|       items:
 | |
|         type: object
 | |
|         xml:
 | |
|           name: 'item'
 | |
|         properties:
 | |
|           link:
 | |
|             type: string
 | |
|             format: url
 | |
|             description: video watch page URL
 | |
|           guid:
 | |
|             type: string
 | |
|             description: video canonical URL
 | |
|           pubDate:
 | |
|             type: string
 | |
|             format: date-time
 | |
|             description: video publication date
 | |
|           description:
 | |
|             type: string
 | |
|             description: video description
 | |
|           'content:encoded':
 | |
|             type: string
 | |
|             description: video description
 | |
|           'dc:creator':
 | |
|             type: string
 | |
|             description: publisher user name
 | |
|           'media:category':
 | |
|             type: integer
 | |
|             description: video category (MRSS)
 | |
|           'media:community':
 | |
|             type: object
 | |
|             description: see [media:community](https://www.rssboard.org/media-rss#media-community) (MRSS)
 | |
|             properties:
 | |
|               'media:statistics':
 | |
|                 type: object
 | |
|                 properties:
 | |
|                   views:
 | |
|                     type: integer
 | |
|                     xml:
 | |
|                       attribute: true
 | |
|           'media:embed':
 | |
|             type: object
 | |
|             properties:
 | |
|               url:
 | |
|                 type: string
 | |
|                 format: url
 | |
|                 description: video embed path, relative to the canonical URL domain (MRSS)
 | |
|                 xml:
 | |
|                   attribute: true
 | |
|           'media:player':
 | |
|             type: object
 | |
|             properties:
 | |
|               url:
 | |
|                 type: string
 | |
|                 format: url
 | |
|                 description: video watch path, relative to the canonical URL domain (MRSS)
 | |
|                 xml:
 | |
|                   attribute: true
 | |
|           'media:thumbnail':
 | |
|             type: object
 | |
|             properties:
 | |
|               url:
 | |
|                 type: string
 | |
|                 format: url
 | |
|                 xml:
 | |
|                   attribute: true
 | |
|               height:
 | |
|                 type: integer
 | |
|                 xml:
 | |
|                   attribute: true
 | |
|               width:
 | |
|                 type: integer
 | |
|                 xml:
 | |
|                   attribute: true
 | |
|           'media:title':
 | |
|             type: string
 | |
|             description: see [media:title](https://www.rssboard.org/media-rss#media-title) (MRSS). We only use `plain` titles.
 | |
|           'media:description':
 | |
|             type: string
 | |
|           'media:rating':
 | |
|             type: string
 | |
|             enum:
 | |
|               - nonadult
 | |
|               - adult
 | |
|             description: see [media:rating](https://www.rssboard.org/media-rss#media-rating) (MRSS)
 | |
|           'enclosure':
 | |
|             type: object
 | |
|             description: main streamable file for the video
 | |
|             properties:
 | |
|               url:
 | |
|                 type: string
 | |
|                 format: url
 | |
|                 xml:
 | |
|                   attribute: true
 | |
|               type:
 | |
|                 type: string
 | |
|                 enum:
 | |
|                   - application/x-bittorrent
 | |
|                 xml:
 | |
|                   attribute: true
 | |
|               length:
 | |
|                 type: integer
 | |
|                 xml:
 | |
|                   attribute: true
 | |
|           'media:group':
 | |
|             type: array
 | |
|             description: list of streamable files for the video. see [media:peerLink](https://www.rssboard.org/media-rss#media-peerlink) and [media:content](https://www.rssboard.org/media-rss#media-content) or  (MRSS)
 | |
|             items:
 | |
|               anyOf:
 | |
|                 - $ref: '#/components/schemas/MRSSPeerLink'
 | |
|                 - $ref: '#/components/schemas/MRSSGroupContent'
 | |
|     NotificationSettingValue:
 | |
|       type: integer
 | |
|       description: >
 | |
|         Notification type
 | |
| 
 | |
|         - `0` NONE
 | |
| 
 | |
|         - `1` WEB
 | |
| 
 | |
|         - `2` EMAIL        
 | |
|       enum:
 | |
|         - 0
 | |
|         - 1
 | |
|         - 3
 | |
|     Notification:
 | |
|       properties:
 | |
|         id:
 | |
|           type: integer
 | |
|         type:
 | |
|           type: integer
 | |
|           description: >
 | |
|             Notification type, following the `UserNotificationType` enum:
 | |
| 
 | |
|             - `1` NEW_VIDEO_FROM_SUBSCRIPTION
 | |
| 
 | |
|             - `2` NEW_COMMENT_ON_MY_VIDEO
 | |
| 
 | |
|             - `3` NEW_ABUSE_FOR_MODERATORS
 | |
| 
 | |
|             - `4` BLACKLIST_ON_MY_VIDEO
 | |
| 
 | |
|             - `5` UNBLACKLIST_ON_MY_VIDEO
 | |
| 
 | |
|             - `6` MY_VIDEO_PUBLISHED
 | |
| 
 | |
|             - `7` MY_VIDEO_IMPORT_SUCCESS
 | |
| 
 | |
|             - `8` MY_VIDEO_IMPORT_ERROR
 | |
| 
 | |
|             - `9` NEW_USER_REGISTRATION
 | |
| 
 | |
|             - `10` NEW_FOLLOW
 | |
| 
 | |
|             - `11` COMMENT_MENTION
 | |
| 
 | |
|             - `12` VIDEO_AUTO_BLACKLIST_FOR_MODERATORS
 | |
| 
 | |
|             - `13` NEW_INSTANCE_FOLLOWER
 | |
| 
 | |
|             - `14` AUTO_INSTANCE_FOLLOWING            
 | |
|         read:
 | |
|           type: boolean
 | |
|         video:
 | |
|           nullable: true
 | |
|           allOf:
 | |
|             - $ref: '#/components/schemas/VideoInfo'
 | |
|             - type: object
 | |
|               properties:
 | |
|                 channel:
 | |
|                   $ref: '#/components/schemas/ActorInfo'
 | |
|         videoImport:
 | |
|           nullable: true
 | |
|           type: object
 | |
|           properties:
 | |
|             id:
 | |
|               type: integer
 | |
|             video:
 | |
|               nullable: true
 | |
|               $ref: '#/components/schemas/VideoInfo'
 | |
|             torrentName:
 | |
|               type: string
 | |
|               nullable: true
 | |
|             magnetUri:
 | |
|               type: string
 | |
|               format: uri
 | |
|               nullable: true
 | |
|             targetUri:
 | |
|               type: string
 | |
|               format: uri
 | |
|               nullable: true
 | |
|         comment:
 | |
|           nullable: true
 | |
|           type: object
 | |
|           properties:
 | |
|             id:
 | |
|               type: integer
 | |
|             threadId:
 | |
|               type: integer
 | |
|             video:
 | |
|               $ref: '#/components/schemas/VideoInfo'
 | |
|             account:
 | |
|               $ref: '#/components/schemas/ActorInfo'
 | |
|         videoAbuse:
 | |
|           nullable: true
 | |
|           type: object
 | |
|           properties:
 | |
|             id:
 | |
|               type: integer
 | |
|             video:
 | |
|               allOf:
 | |
|                 - $ref: '#/components/schemas/VideoInfo'
 | |
|         videoBlacklist:
 | |
|           nullable: true
 | |
|           type: object
 | |
|           properties:
 | |
|             id:
 | |
|               type: integer
 | |
|             video:
 | |
|               allOf:
 | |
|                 - $ref: '#/components/schemas/VideoInfo'
 | |
|         account:
 | |
|           nullable: true
 | |
|           allOf:
 | |
|             - $ref: '#/components/schemas/ActorInfo'
 | |
|         actorFollow:
 | |
|           type: object
 | |
|           nullable: true
 | |
|           properties:
 | |
|             id:
 | |
|               type: integer
 | |
|             follower:
 | |
|               $ref: '#/components/schemas/ActorInfo'
 | |
|             state:
 | |
|               type: string
 | |
|               enum:
 | |
|                 - pending
 | |
|                 - accepted
 | |
|             following:
 | |
|               type: object
 | |
|               properties:
 | |
|                 type:
 | |
|                   type: string
 | |
|                   enum:
 | |
|                     - account
 | |
|                     - channel
 | |
|                     - instance
 | |
|                 name:
 | |
|                   type: string
 | |
|                 displayName:
 | |
|                   type: string
 | |
|                 host:
 | |
|                   type: string
 | |
|                   format: hostname
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|     NotificationListResponse:
 | |
|       properties:
 | |
|         total:
 | |
|           type: integer
 | |
|           example: 1
 | |
|         data:
 | |
|           type: array
 | |
|           maxItems: 100
 | |
|           items:
 | |
|             $ref: '#/components/schemas/Notification'
 | |
|     Plugin:
 | |
|       properties:
 | |
|         name:
 | |
|           type: string
 | |
|           example: peertube-plugin-auth-ldap
 | |
|         type:
 | |
|           type: integer
 | |
|           description: >
 | |
|             - `1`: PLUGIN
 | |
| 
 | |
|             - `2`: THEME            
 | |
|           enum:
 | |
|             - 1
 | |
|             - 2
 | |
|         latestVersion:
 | |
|           type: string
 | |
|           example: 0.0.3
 | |
|         version:
 | |
|           type: string
 | |
|           example: 0.0.1
 | |
|         enabled:
 | |
|           type: boolean
 | |
|         uninstalled:
 | |
|           type: boolean
 | |
|         peertubeEngine:
 | |
|           type: string
 | |
|           example: 2.2.0
 | |
|         description:
 | |
|           type: string
 | |
|         homepage:
 | |
|           type: string
 | |
|           format: url
 | |
|           example: https://framagit.org/framasoft/peertube/official-plugins/tree/master/peertube-plugin-auth-ldap
 | |
|         settings:
 | |
|           type: object
 | |
|           additionalProperties: true
 | |
|         createdAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|         updatedAt:
 | |
|           type: string
 | |
|           format: date-time
 | |
|     PluginResponse:
 | |
|       properties:
 | |
|         total:
 | |
|           type: integer
 | |
|           example: 1
 | |
|         data:
 | |
|           type: array
 | |
|           maxItems: 100
 | |
|           items:
 | |
|             $ref: '#/components/schemas/Plugin'
 | |
|   callbacks:
 | |
|     searchIndex:
 | |
|       'https://search.example.org/api/v1/search/videos':
 | |
|         post:
 | |
|           summary: third-party search index MAY be used instead of the local index, if enabled by the instance admin. see `searchTarget`
 | |
|           responses:
 | |
|             '200':
 | |
|               description: successful operation
 | |
|               content:
 | |
|                 application/json:
 | |
|                   schema:
 | |
|                     $ref: '#/components/schemas/VideoListResponse'
 |