]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - support/doc/api/openapi.yaml
Bumped to version v1.4.1
[github/Chocobozzz/PeerTube.git] / support / doc / api / openapi.yaml
index e8e593420292c199f80e289252effdf2f5074b09..30a250c70be0805d24399d4d99462b24deced89d 100644 (file)
-swagger: '2.0'
+openapi: 3.0.0
 info:
   title: PeerTube
-  version: 1.0.0-alpha
-  description: Federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.
-host: peertube.example.com
-basePath: '/api/v1'
-schemes:
-  - https
+  version: 1.4.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). Our API is RESTful. It has predictable
+    resource URLs. It returns HTTP response codes to indicate errors. It also
+    accepts and returns JSON in the HTTP body. You can use your favorite
+    HTTP/REST library for your programming language to use PeerTube. No official
+    SDK is currently provided, but 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.
+
+    # 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.
+
+    # 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: >
+      Using some features of PeerTube require authentication, for which Accounts
+      provide different levels of permission as well as associated user
+      information. Accounts also encompass remote accounts discovered across the federation.
+  - name: Config
+    description: >
+      Each server exposes public information regarding supported videos and
+      options.
+  - name: Feeds
+    description: |
+      Feeds of videos and feeds of comments allow to see updates and get them in
+      an aggregator or script of your choice.
+  - name: Job
+    description: >
+      Jobs are long-running tasks enqueued and processed by the instance
+      itself. No additional worker registration is currently available.
+  - name: Server Following
+    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.
+  - name: Video Abuse
+    description: |
+      Video abuses deal with reports of local or remote videos alike.
+  - name: Video
+    description: |
+      Operations dealing with listing, uploading, fetching or modifying videos.
+  - name: Search
+    description: |
+      The search helps to find _videos_ 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.
+  - name: Video Comment
+    description: >
+      Operations dealing with comments to a video. Comments are organized in
+      threads.
+  - name: Video Channel
+    description: >
+      Operations dealing with creation, modification and video listing of a
+      user's channels.
+  - name: Video Blacklist
+    description: >
+      Operations dealing with blacklisting videos (removing them from view and
+      preventing interactions).
+  - name: Video Rate
+    description: >
+      Voting for a video.
+x-tagGroups:
+  - name: Accounts
+    tags:
+      - Accounts
+      - User
+      - My User
+  - name: Videos
+    tags:
+      - Video
+      - Video Caption
+      - Video Channel
+      - Video Comment
+      - Video Following
+      - Video Rate
+  - name: Moderation
+    tags:
+      - Video Abuse
+      - Video Blacklist
+  - name: Instance Configuration
+    tags:
+      - Config
+      - Server Following
+  - name: Notifications
+    tags:
+      - Feeds
+  - name: Jobs
+    tags:
+      - Job
+  - name: Search
+    tags:
+      - Search
 paths:
-  '/accounts/{id}':
+  '/accounts/{name}':
     get:
       tags:
         - Accounts
-      consumes:
-        - application/json
-      produces:
-        - application/json
+      summary: Get the account by name
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The id of the account'
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $ref: '#/components/parameters/name'
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/sort'
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/Account'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Account'
+  '/accounts/{name}/videos':
+    get:
+      tags:
+        - Accounts
+        - Video
+      summary: 'Get videos for an account, provided the name of that account'
+      parameters:
+        - $ref: '#/components/parameters/name'
+      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: |
+            # pip install httpie
+            http -b GET https://peertube2.cpy.re/api/v1/accounts/{name}/videos
+        - lang: Ruby
+          source: |
+            require 'uri'
+            require 'net/http'
+
+            url = URI("https://peertube2.cpy.re/api/v1/accounts/{name}/videos")
+
+            http = Net::HTTP.new(url.host, url.port)
+            http.use_ssl = true
+            http.verify_mode = OpenSSL::SSL::VERIFY_NONE
+
+            request = Net::HTTP::Post.new(url)
+            request["content-type"] = 'application/json'
+            response = http.request(request)
+            puts response.read_body
+        - lang: Python
+          source: |
+            import http.client
+
+            conn = http.client.HTTPSConnection("https://peertube2.cpy.re/api/v1")
+
+            headers = {
+              'content-type': "application/json"
+            }
+
+            conn.request("POST", "/accounts/{name}/videos", None, headers)
+
+            res = conn.getresponse()
+            data = res.read()
+
+            print(data.decode("utf-8"))
   /accounts:
     get:
       tags:
         - Accounts
-      consumes:
-        - application/json
-      produces:
-        - application/json
+      summary: Get all accounts
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/Account'
+          content:
+            'application/json':
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/Account'
   /config:
     get:
       tags:
         - Config
-      consumes:
-        - application/json
-      produces:
-        - application/json
+      summary: Get the public configuration of the server
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/ServerConfig' 
-  /jobs:
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ServerConfig'
+  /config/about:
     get:
+      summary: Get the instance about page content
       tags:
-        - Job
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Config
+      responses:
+        '200':
+          description: successful operation
+  /config/custom:
+    get:
+      summary: Get the runtime configuration of the server
+      tags:
+        - Config
+      security:
+        - OAuth2:
+            - admin
+      responses:
+        '200':
+          description: successful operation
+    put:
+      summary: Set the runtime configuration of the server
+      tags:
+        - Config
+      security:
+        - OAuth2:
+            - admin
+      responses:
+        '200':
+          description: successful operation
+    delete:
+      summary: Delete the runtime configuration of the server
+      tags:
+        - Config
+      security:
+        - OAuth2:
+            - admin
+      responses:
+        '200':
+          description: successful operation
+  '/feeds/videos.{format}':
+    get:
+      summary: >-
+        Get the feed of videos for the server, with optional filter by account
+        name or id
+      tags:
+        - Feeds
       parameters:
-        - name: state
+        - name: format
           in: path
           required: true
-          type: string
-          description: 'The id of the account'
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: count
+          description: >-
+            The format expected (xml defaults to RSS 2.0, atom to ATOM 1.0 and
+            json to JSON FEED 1.0
+          schema:
+            type: string
+            enum:
+              - xml
+              - atom
+              - json
+            default: xml
+        - name: accountId
           in: query
           required: false
-          type: number
-          description: ''
-        - name: sort
+          description: >-
+            The id of the local account to filter to (beware, users IDs and not
+            actors IDs which will return empty feeds
+          schema:
+            type: number
+        - name: accountName
           in: query
           required: false
-          type: number
-          description: 'sorting'
+          description: The name of the local account to filter to
+          schema:
+            type: string
       responses:
         '200':
           description: successful operation
+  /jobs/{state}:
+    get:
+      summary: Get list of jobs
+      security:
+        - OAuth2:
+            - admin
+      tags:
+        - Job
+      parameters:
+        - name: state
+          in: path
+          required: true
+          description: The state of the job
           schema:
-            type: array
-            items:
-              $ref: '#/definitions/Job' 
+            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: array
+                items:
+                  $ref: '#/components/schemas/Job'
   '/server/following/{host}':
     delete:
+      security:
+        - OAuth2:
+            - admin
       tags:
-        - ServerFollowing
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Server Following
+      summary: Unfollow a server by hostname
       parameters:
         - name: host
           in: path
           required: true
-          type: string
           description: 'The host to unfollow '
+          schema:
+            type: string
       responses:
         '201':
           description: successful operation
   /server/followers:
     get:
       tags:
-        - ServerFollowing
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Server Following
+      summary: Get followers of the server
       parameters:
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/sort'
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/Follow'
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/Follow'
   /server/following:
     get:
       tags:
-        - ServerFollowing
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Server Following
+      summary: Get servers followed by the server
       parameters:
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/sort'
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/Follow'
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/Follow'
     post:
+      security:
+        - OAuth2:
+            - admin
       tags:
-        - ServerFollowing
-      consumes:
-        - application/json
-      produces:
-        - application/json
-      parameters:
-        - in: body
-          name: body
-          schema:
-            $ref: '#/definitions/Follow'
+        - Server Following
+      summary: Follow a server
       responses:
         '204':
-          description: successful operation
+          $ref: '#/paths/~1users~1me/put/responses/204'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Follow'
   /users:
     post:
+      summary: Creates user
+      security:
+        - OAuth2:
+            - admin
       tags:
         - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
-      parameters:
-        - in: body
-          name: body
-          required: true
-          schema:
-            $ref: '#/definitions/AddUser'
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/AddUserResponse'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/AddUserResponse'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/AddUser'
+        description: User to create
+        required: true
     get:
+      summary: Get a list of users
+      security:
+        - OAuth2: []
       tags:
         - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
       parameters:
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/usersSort'
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/User'
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/User'
   '/users/{id}':
     delete:
+      summary: Delete a user by its id
+      security:
+        - OAuth2:
+            - admin
       tags:
         - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The user id '
+        - $ref: '#/components/parameters/id'
       responses:
         '204':
-          description: successful operation
+          $ref: '#/paths/~1users~1me/put/responses/204'
     get:
+      summary: Get user by its id
+      security:
+        - OAuth2: []
       tags:
         - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The user id '
+        - $ref: '#/components/parameters/id'
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/User'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/User'
     put:
+      summary: Update user profile by its id
+      security:
+        - OAuth2: []
       tags:
         - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The user id '
-        - in: body
-          name: body
-          required: true
-          schema:
-            $ref: '#/definitions/UpdateUser'
+        - $ref: '#/components/parameters/id'
       responses:
         '204':
-          description: successful operation
+          $ref: '#/paths/~1users~1me/put/responses/204'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UpdateUser'
+        required: true
+  /users/register:
+    post:
+      summary: Register a user
+      tags:
+        - User
+      responses:
+        '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RegisterUser'
+        required: true
   /users/me:
     get:
+      summary: Get current user information
+      security:
+        - OAuth2:
+          - user
       tags:
-        - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - My User
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/User'
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/User'
     put:
+      summary: Update current user information
+      security:
+        - OAuth2:
+          - user
       tags:
-        - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
-      parameters:
-        - in: body
-          name: body
-          required: true
-          schema:
-            $ref: '#/definitions/UpdateMe'
+        - 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 current user
+      security:
+        - OAuth2:
+            - user
+      tags:
+        - 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 current user used quota
+      security:
+        - OAuth2:
+          - user
       tags:
-        - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
-      parameters: []
+        - My User
       responses:
         '200':
           description: successful operation
-          schema:
-            type: number
+          content:
+            application/json:
+              schema:
+                type: number
   '/users/me/videos/{videoId}/rating':
     get:
+      summary: 'Get rating of video by its id, among those of the current user'
+      security:
+        - OAuth2: []
       tags:
-        - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - My User
       parameters:
         - name: videoId
           in: path
           required: true
-          type: string
           description: 'The video id '
+          schema:
+            type: string
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/GetMeVideoRating'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GetMeVideoRating'
   /users/me/videos:
     get:
+      summary: Get videos of the current user
+      security:
+        - OAuth2:
+          - user
       tags:
-        - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - My User
       parameters:
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $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 subscriptions of the current user
+      security:
+        - OAuth2:
+            - user
+      tags:
+        - My User
+      parameters:
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/sort'
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/Video'
-  /users/register:
     post:
+      summary: Add subscription to the current user
+      security:
+        - OAuth2:
+            - user
       tags:
-        - User
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - My User
+      responses:
+        '200':
+          description: successful operation
+  /users/me/subscriptions/exist:
+    get:
+      summary: Get if subscriptions exist for the current user
+      security:
+        - OAuth2:
+            - user
+      tags:
+        - My User
       parameters:
-        - in: body
-          name: body
-          required: true
-          schema:
-            $ref: '#/definitions/RegisterUser'
+        - $ref: '#/components/parameters/subscriptionsUris'
       responses:
-        '204':
+        '200':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                type: object
+  /users/me/subscriptions/videos:
+    get:
+      summary: Get videos of subscriptions of the current user
+      security:
+        - OAuth2:
+          - user
+      tags:
+        - 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/VideoListResponse'
+  '/users/me/subscriptions/{subscriptionHandle}':
+    get:
+      summary: Get subscription of the current user for a given uri
+      security:
+        - OAuth2:
+            - user
+      tags:
+        - My User
+      parameters:
+        - $ref: '#/components/parameters/subscriptionHandle'
+      responses:
+        '200':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VideoChannel'
+    delete:
+      summary: Delete subscription of the current user for a given uri
+      security:
+        - OAuth2:
+            - user
+      tags:
+        - My User
+      parameters:
+        - $ref: '#/components/parameters/subscriptionHandle'
+      responses:
+        '200':
           description: successful operation
   /users/me/avatar/pick:
     post:
+      summary: Update current user avatar
+      security:
+        - OAuth2: []
       tags:
-        - User
-      consumes:
-        - multipart/form-data
-      produces:
-        - application/json
-      parameters:
-        - in: formData
-          name: avatarfile
-          type: file
-          description: The file to upload.
+        - My User
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/Avatar'
+          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:
+              profileImage:
+                # only accept png/jpeg
+                contentType: image/png, image/jpeg
   /videos:
     get:
+      summary: Get list of videos
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
       parameters:
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $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/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/videosSort'
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/Video'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VideoListResponse'
   /videos/categories:
     get:
+      summary: Get list of video categories known by the server
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              type: string
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  type: string
   /videos/licences:
     get:
+      summary: Get list of video licences known by the server
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              type: string
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  type: string
   /videos/languages:
     get:
+      summary: Get list of languages known by the server
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              type: string
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  type: string
   /videos/privacies:
     get:
+      summary: Get list of privacy policies supported by the server
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              type: string
-  /videos/search:
-    get:
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  type: string
+  '/videos/{id}':
+    put:
+      summary: Update metadata for a video by its id
+      security:
+        - OAuth2: []
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
       parameters:
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
-        '200':
+        '204':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/Video'
-  "/videos/{id}":
-    put:
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              type: object
+              properties:
+                thumbnailfile:
+                  description: Video thumbnail file
+                  type: string
+                previewfile:
+                  description: Video preview file
+                  type: string
+                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: Text describing how to support the video uploader
+                  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
+                originallyPublishedAt:
+                  description: Date when the content was originally published
+                  type: string
+                  format: date-time
+                scheduleUpdate:
+                  $ref: '#/components/schemas/VideoScheduledUpdate'
+    get:
+      summary: Get a video by its id
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/Video'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VideoDetails'
+    delete:
+      summary: Delete a video by its id
+      security:
+        - OAuth2: []
+      tags:
+        - Video
+      parameters:
+        - $ref: '#/components/parameters/idOrUUID'
+      responses:
+        '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  '/videos/{id}/description':
     get:
+      summary: Get a video description by its id
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/Video'
-    delete:
+          content:
+            application/json:
+              schema:
+                type: string
+  '/videos/{id}/views':
+    post:
+      summary: Add a view to the video by its id
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '204':
-          description: successful operation
-  "/videos/{id}/description":
-    get:
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  '/videos/{id}/watching':
+    put:
+      summary: Set watching progress of a video by its id for a user
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
+      security:
+        - OAuth2: []
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserWatchingVideo'
+        required: true
+      responses:
+        '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  /videos/ownership:
+    get:
+      summary: Get list of video ownership changes requests
+      tags:
+        - Video
+      security:
+        - OAuth2: []
       responses:
         '200':
           description: successful operation
-          schema:
-            type: string
-  "/videos/{id}/views":
+  '/videos/ownership/{id}/accept':
     post:
+      summary: Refuse ownership change request for video by its id
       tags:
         - Video
-      consumes:
-        - application/json
-      produces:
-        - application/json
+      security:
+        - OAuth2: []
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '204':
-          description: successful operation
-  /videos/upload:
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  '/videos/ownership/{id}/refuse':
+    post:
+      summary: Accept ownership change request for video by its id
+      tags:
+        - Video
+      security:
+        - OAuth2: []
+      parameters:
+        - $ref: '#/components/parameters/idOrUUID'
+      responses:
+        '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  '/videos/{id}/give-ownership':
     post:
+      summary: Request change of ownership for a video you own, by its id
       tags:
         - Video
-      consumes:
-        - multipart/form-data
-      produces:
-        - application/json
+      security:
+        - OAuth2: []
       parameters:
-        - in: formData
-          name: videofile
-          type: file
-          description: The file to upload.
+        - $ref: '#/components/parameters/idOrUUID'
+      requestBody:
+        required: true
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              type: object
+              properties:
+                username:
+                  type: string
+              required:
+                - username
+      responses:
+        '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+        '400':
+          description: 'Changing video ownership to a remote account is not supported yet'
+  /videos/upload:
+    post:
+      summary: Upload a video file with its metadata
+      security:
+        - OAuth2: []
+      tags:
+        - Video
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/VideoUploadResponse'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VideoUploadResponse'
+      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: number
+                thumbnailfile:
+                  description: Video thumbnail file
+                  type: string
+                previewfile:
+                  description: Video preview file
+                  type: string
+                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: Text describing how to support the video uploader
+                  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
+                originallyPublishedAt:
+                  description: Date when the content was originally published
+                  type: string
+                  format: date-time
+                scheduleUpdate:
+                  $ref: '#/components/schemas/VideoScheduledUpdate'
+              required:
+                - videofile
+                - channelId
+                - name
+      x-code-samples:
+        - lang: Shell
+          source: |
+            ## DEPENDENCIES: httpie, jq
+            # pip install httpie
+            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=$(http -b GET "$API_PATH/oauth-clients/local" | jq -r ".client_id")
+            client_secret=$(http -b GET "$API_PATH/oauth-clients/local" | jq -r ".client_secret")
+            token=$(http -b --form POST "$API_PATH/users/token" \
+              client_id="$client_id" client_secret="$client_secret" grant_type=password response_type=code \
+              username=$USERNAME \
+              password=$PASSWORD \
+              | jq -r ".access_token")
+            ## VIDEO UPLOAD
+            http -b --form POST "$API_PATH/videos/upload" \
+              videofile@$FILE_PATH \
+              channelId=$CHANNEL_ID \
+              name=$NAME \
+              "Authorization:Bearer $token"
+  /videos/imports:
+    post:
+      summary: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)
+      security:
+        - OAuth2: []
+      tags:
+        - Video
+      responses:
+        '200':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VideoUploadResponse'
+      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: number
+                thumbnailfile:
+                  description: Video thumbnail file
+                  type: string
+                previewfile:
+                  description: Video preview file
+                  type: string
+                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: Text describing how to support the video uploader
+                  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
   /videos/abuse:
     get:
+      summary: Get list of reported video abuses
+      security:
+        - OAuth2: []
       tags:
-        - VideoAbuse
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Abuse
       parameters:
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/abusesSort'
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/VideoAbuse'
-  "/videos/{id}/abuse":
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/VideoAbuse'
+  '/videos/{id}/abuse':
     post:
+      summary: 'Report an abuse, on a video by its id'
+      security:
+        - OAuth2: []
       tags:
-        - VideoAbuse
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Abuse
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '204':
-          description: successful operation
-  "/videos/{videoId}/blacklist":
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  '/videos/{id}/blacklist':
     post:
+      summary: Put on blacklist a video by its id
+      security:
+        - OAuth2:
+            - admin
+            - moderator
       tags:
-        - VideoBlacklist
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Blacklist
       parameters:
-        - name: videoId
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '204':
-          description: successful operation
+          $ref: '#/paths/~1users~1me/put/responses/204'
     delete:
+      summary: Delete an entry of the blacklist of a video by its id
+      security:
+        - OAuth2:
+            - admin
+            - moderator
       tags:
-        - VideoBlacklist
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Blacklist
       parameters:
-        - name: videoId
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '204':
-          description: successful operation
+          $ref: '#/paths/~1users~1me/put/responses/204'
   /videos/blacklist:
     get:
+      summary: Get list of videos on blacklist
+      security:
+        - OAuth2:
+            - admin
+            - moderator
       tags:
-        - VideoBlacklist
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Blacklist
       parameters:
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/blacklistsSort'
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/VideoBlacklist'
-  /videos/channels:
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/VideoBlacklist'
+  /videos/{id}/captions:
     get:
+      summary: Get list of video's captions
       tags:
-        - VideoChannel
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Caption
       parameters:
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
-          in: query
-          required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/VideoChannel'
-    post:
+          content:
+            application/json:
+              schema:
+                type: object
+                properties:
+                  total:
+                    type: integer
+                  data:
+                    type: array
+                    items:
+                      $ref: '#/components/schemas/VideoCaption'
+  /videos/{id}/captions/{captionLanguage}:
+    put:
+      summary: Add or replace a video caption
       tags:
-        - VideoChannel
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Caption
       parameters:
-        - in: body
-          name: body
-          schema:
-            $ref: '#/definitions/VideoChannelInput'
+        - $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
+      responses:
+        '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+    delete:
+      summary: Delete a video caption
+      tags:
+        - Video Caption
+      parameters:
+        - $ref: '#/components/parameters/idOrUUID'
+        - $ref: '#/components/parameters/captionLanguage'
       responses:
         '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  /video-channels:
+    get:
+      summary: Get list of video channels
+      tags:
+        - Video Channel
+      parameters:
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/sort'
+      responses:
+        '200':
           description: successful operation
-  "/videos/channels/{id}":
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/VideoChannel'
+    post:
+      summary: Creates a video channel for the current user
+      security:
+        - OAuth2: []
+      tags:
+        - Video Channel
+      responses:
+        '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/VideoChannelCreate'
+  '/video-channels/{channelHandle}':
     get:
+      summary: Get a video channel by its id
       tags:
-        - VideoChannel
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Channel
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/channelHandle'
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/VideoChannel'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VideoChannel'
     put:
+      summary: Update a video channel by its id
+      security:
+        - OAuth2: []
       tags:
-        - VideoChannel
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Channel
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
-        - in: body
-          name: body
-          schema:
-            $ref: '#/definitions/VideoChannelInput'
+        - $ref: '#/components/parameters/channelHandle'
       responses:
         '204':
-          description: successful operation
+          $ref: '#/paths/~1users~1me/put/responses/204'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/VideoChannelUpdate'
     delete:
+      summary: Delete a video channel by its id
+      security:
+        - OAuth2: []
       tags:
-        - VideoChannel
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Channel
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/channelHandle'
       responses:
         '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  '/video-channels/{channelHandle}/videos':
+    get:
+      summary: Get videos of a video channel by its id
+      tags:
+        - Video
+        - Video Channel
+      parameters:
+        - $ref: '#/components/parameters/channelHandle'
+      responses:
+        '200':
           description: successful operation
-  /videos/accounts/{accountId}/channels:
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VideoListResponse'
+  '/accounts/{name}/video-channels':
     get:
+      summary: Get video channels of an account by its name
       tags:
-        - VideoChannel
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Channel
       parameters:
-        - name: accountId
-          in: path
-          required: true
-          type: string
-          description: 'The account id '
+        - $ref: '#/components/parameters/name'
       responses:
         '200':
           description: successful operation
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/VideoChannel'
-  "/videos/{videoId}/comment-threads":
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/VideoChannel'
+  '/accounts/{name}/ratings':
     get:
+      summary: Get ratings of an account by its name
+      security:
+        - OAuth2: []
       tags:
-        - VideoComment
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - User
       parameters:
-        - name: videoId
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
-        - name: start
-          in: query
-          required: false
-          type: number
-          description: 'starting page'
-        - name: stop
+        - $ref: '#/components/parameters/name'
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/sort'
+        - name: rating
           in: query
           required: false
-          type: number
-          description: 'stoping page'
-        - name: sort
-          in: query
-          required: false
-          type: number
-          description: 'sorting'
+          description: Optionally filter which ratings to retrieve
+          schema:
+            type: string
+            enum:
+              - like
+              - dislike
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/CommentThreadResponse'
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/VideoRating'
+  '/videos/{id}/comment-threads':
+    get:
+      summary: Get the comment threads of a video by its id
+      tags:
+        - Video Comment
+      parameters:
+        - $ref: '#/components/parameters/idOrUUID'
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/sort'
+      responses:
+        '200':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CommentThreadResponse'
     post:
+      summary: 'Creates a comment thread, on a video by its id'
+      security:
+        - OAuth2: []
       tags:
-        - VideoComment
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Comment
       parameters:
-        - name: videoId
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/CommentThreadPostResponse'
-  "/videos/{videoId}/comment-threads/{threadId}":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CommentThreadPostResponse'
+  '/videos/{id}/comment-threads/{threadId}':
     get:
+      summary: 'Get the comment thread by its id, of a video by its id'
       tags:
-        - VideoComment
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Comment
       parameters:
-        - name: videoId
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
-        - name: threadId
-          in: path
-          required: true
-          type: string
-          description: 'The thread id '
+        - $ref: '#/components/parameters/idOrUUID'
+        - $ref: '#/components/parameters/threadId'
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/VideoCommentThreadTree'
-  "/videos/{videoId}/comments/{commentId}":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VideoCommentThreadTree'
+  '/videos/{id}/comments/{commentId}':
     post:
+      summary: 'Creates a comment in a comment thread by its id, of a video by its id'
+      security:
+        - OAuth2: []
       tags:
-        - VideoComment
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Comment
       parameters:
-        - name: videoId
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
-        - name: commentId
-          in: path
-          required: true
-          type: string
-          description: 'The comment id '
+        - $ref: '#/components/parameters/idOrUUID'
+        - $ref: '#/components/parameters/commentId'
       responses:
         '200':
           description: successful operation
-          schema:
-            $ref: '#/definitions/CommentThreadPostResponse'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CommentThreadPostResponse'
     delete:
+      summary: 'Delete a comment in a comment thread by its id, of a video by its id'
+      security:
+        - OAuth2: []
       tags:
-        - VideoComment
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Comment
       parameters:
-        - name: videoId
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
-        - name: commentId
-          in: path
-          required: true
-          type: string
-          description: 'The comment id '
+        - $ref: '#/components/parameters/idOrUUID'
+        - $ref: '#/components/parameters/commentId'
       responses:
         '204':
-          description: successful operation
-  "/videos/{id}/rate":
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  '/videos/{id}/rate':
     put:
+      summary: Vote for a video by its id
+      security:
+        - OAuth2: []
       tags:
-        - VideoRate
-      consumes:
-        - application/json
-      produces:
-        - application/json
+        - Video Rate
       parameters:
-        - name: id
-          in: path
-          required: true
-          type: string
-          description: 'The video id '
+        - $ref: '#/components/parameters/idOrUUID'
       responses:
         '204':
+          $ref: '#/paths/~1users~1me/put/responses/204'
+  /search/videos:
+    get:
+      tags:
+        - Search
+      summary: Get the videos corresponding to a given query
+      parameters:
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/videosSearchSort'
+        - name: search
+          in: query
+          required: true
+          description: String to search
+          schema:
+            type: string
+      responses:
+        '200':
           description: successful operation
-definitions:
-  Video:
-    properties:
-      id:
-        type: number
-      uuid:
-        type: string
-      accountName:
-        type: string
-      createdAt:
-        type: string
-      updatedAt:
-        type: string
-      categoryLabel:
-        type: string
-      category:
-        type: number
-      licenceLabel:
-        type: string
-      licence:
-        type: number
-      languageLabel:
-        type: string
-      language:
-        type: number
-      description:
-        type: string
-      duration:
-        type: number
-      isLocal:
-        type: boolean
-      name:
-        type: string
-      serverHost:
-        type: string
-      thumbnailPath:
-        type: string
-      previewPath:
-        type: string
-      embedPath:
-        type: string
-      views:
-        type: number
-      likes:
-        type: number
-      dislikes:
-        type: number
-      nsfw:
-        type: boolean
-  VideoAbuse:
-    properties:
-      id:
-        type: number
-      reason:
-        type: string
-      reporterUsername:
-        type: string
-      reporterServerHost:
-        type: string
-      videoId:
-        type: number
-      videoUUID:
-        type: string
-      videoName:
-        type: string
-      createdAt:
-        type: string
-  VideoBlacklist:
-    properties:
-      id:
-        type: number
-      videoId:
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VideoListResponse'
+servers:
+  - url: 'https://peertube.cpy.re/api/v1'
+    description: Live Test Server (live data - stable version)
+  - url: 'https://peertube2.cpy.re/api/v1'
+    description: Live Test Server (live data - bleeding edge version)
+  - url: 'https://peertube3.cpy.re/api/v1'
+    description: Live Test Server (live data - bleeding edge version)
+components:
+  parameters:
+    start:
+      name: start
+      in: query
+      required: false
+      description: Offset
+      schema:
         type: number
-      createdAt:
-        type: string
-      updatedAt:
-        type: string
-      name:
-        type: string
-      uuid:
-        type: string
-      description:
-        type: string
-      duration:
+    count:
+      name: count
+      in: query
+      required: false
+      description: Number of items
+      schema:
         type: number
-      views:
+    sort:
+      name: sort
+      in: query
+      required: false
+      description: Sort column (-createdAt for example)
+      schema:
+        type: string
+    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
+    blacklistsSort:
+      name: sort
+      in: query
+      required: false
+      description: Sort blacklists by criteria
+      schema:
+        type: string
+        enum:
+        - -id
+        - -name
+        - -duration
+        - -views
+        - -likes
+        - -dislikes
+        - -uuid
+        - -createdAt
+    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
+    name:
+      name: name
+      in: path
+      required: true
+      description: >-
+        The name of the account (chocobozzz or chocobozzz@peertube.cpy.re for
+        example)
+      schema:
+        type: string
+    id:
+      name: id
+      in: path
+      required: true
+      description: The user id
+      schema:
         type: number
-      likes:
+    idOrUUID:
+      name: id
+      in: path
+      required: true
+      description: The video id or uuid
+      schema:
+        type: string
+    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 (example: 'my_username@example.com' or 'my_username')"
+      schema:
+        type: string
+    subscriptionHandle:
+      name: subscriptionHandle
+      in: path
+      required: true
+      description: "The subscription handle (example: 'my_username@example.com' or 'my_username')"
+      schema:
+        type: string
+    threadId:
+      name: threadId
+      in: path
+      required: true
+      description: The thread id (root comment id)
+      schema:
         type: number
-      dislikes:
+    commentId:
+      name: commentId
+      in: path
+      required: true
+      description: The comment id
+      schema:
         type: number
-      nsfw:
-        type: boolean
-  VideoChannel:
-    properties:
-      displayName:
-        type: string
-      description:
-        type: string
-      isLocal:
-        type: boolean
-      owner:
-        type: object
-        properties: 
-          name: 
+    categoryOneOf:
+      name: categoryOneOf
+      in: query
+      required: false
+      description: category id of the video
+      schema:
+        oneOf:
+        - type: number
+        - type: array
+          items:
+            type: number
+      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
-          uuid: 
+      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
-      videos:
-        type: array
-        items: 
-          $ref: "#/definitions/Video"
-  VideoComment:
-    properties:
-      id:
-        type: number
-      url:
-        type: string
-      text:
-        type: string
-      threadId:
-        type: number
-      inReplyToCommentId:
-        type: number
-      videoId:
-        type: number
-      createdAt:
-        type: string
-      updatedAt:
-        type: string
-      totalReplies:
-        type: number
-      account:
-        $ref: "#/definitions/Account"
-  VideoCommentThreadTree:
-    properties:
-      comment:
-        $ref: "#/definitions/VideoComment"
-      children:
-        type: array
-        items:
-          $ref: "#/definitions/VideoCommentThreadTree"
-  Avatar:
-    properties:
-      path:
-        type: string
-      createdAt:
-        type: string
-      updatedAt:
-        type: string
-  Actor:
-    properties:
-      id:
-        type: number
-      uuid:
-        type: string
-      url:
-        type: string
-      name:
-        type: string
-      host:
-        type: string
-      followingCount:
-        type: number
-      followersCount:
-        type: number
-      createdAt:
-        type: string
-      updatedAt:
-        type: string
-      avatar:
-        $ref: "#/definitions/Avatar"
-  Account:
-    allOf:
-      - $ref: "#/definitions/Actor"
-      - properties:
-          displayName:
+      style: form
+      explode: false
+    languageOneOf:
+      name: languageOneOf
+      in: query
+      required: false
+      description: language id of the video
+      schema:
+        oneOf:
+        - type: string
+        - type: array
+          items:
             type: string
-  User:
-    properties:
-      id:
-        type: number
-      username:
-        type: string
-      email:
-        type: string
-      displayNSFW:
-        type: boolean
-      autoPlayVideo:
-        type: boolean
-      role:
-        type: string
-        enum: [User, Moderator, Administrator] 
-      videoQuota:
-        type: number
-      createdAt:
-        type: string
-      account:
-        $ref: "#/definitions/Account"
-      videoChannels:
-        type:  array
+      style: form
+      explode: false
+    licenceOneOf:
+      name: licenceOneOf
+      in: query
+      required: false
+      description: licence id of the video
+      schema:
+        oneOf:
+        - type: number
+        - type: array
+          items:
+            type: number
+      style: form
+      explode: 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:
-          $ref: "#/definitions/VideoChannel"
-  ServerConfig:
-    properties:
-      signup: 
-        type: object
-        properties:
-          allowed:
-            type: boolean
-      transcoding:
-        type: object
-        properties:
-          enabledResolutions:
-            type: array
-            items:
-              type: number
-      avatar:
-        type: object
-        properties:
-          file:
+          type: string
+  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: number
+        label:
+          type: string
+    VideoConstantString:
+      properties:
+        id:
+          type: string
+        label:
+          type: string
+    VideoPrivacySet:
+      type: integer
+      enum:
+        - 1
+        - 2
+        - 3
+      description: 'The video privacy (Public = 1, Unlisted = 2, Private = 3)'
+    VideoPrivacyConstant:
+      properties:
+        id:
+          type: integer
+          enum:
+            - 1
+            - 2
+            - 3
+        label:
+          type: string
+    VideoStateConstant:
+      properties:
+        id:
+          type: integer
+          enum:
+            - 1
+            - 2
+            - 3
+          description: 'The video state (Published = 1, to transcode = 2, to import = 3)'
+        label:
+          type: string
+    VideoResolutionConstant:
+      properties:
+        id:
+          type: integer
+          description: 'Video resolution (240, 360, 720 ...)'
+        label:
+          type: string
+    VideoScheduledUpdate:
+      properties:
+        privacy:
+          $ref: '#/components/schemas/VideoPrivacySet'
+          description: Video privacy target
+        updateAt:
+          type: string
+          format: date
+          description: When to update the video
+      required:
+        - updateAt
+    VideoAccountSummary:
+      properties:
+        id:
+          type: number
+        name:
+          type: string
+        displayName:
+          type: string
+        url:
+          type: string
+        host:
+          type: string
+        avatar:
+          nullable: true
+          $ref: '#/components/schemas/Avatar'
+    VideoChannelSummary:
+      properties:
+        id:
+          type: number
+        name:
+          type: string
+        displayName:
+          type: string
+        url:
+          type: string
+        host:
+          type: string
+        avatar:
+          nullable: true
+          $ref: '#/components/schemas/Avatar'
+    PlaylistElement:
+      properties:
+        position:
+          type: number
+        startTimestamp:
+          type: number
+        stopTimestamp:
+          type: number
+        video:
+          nullable: true
+          $ref: '#/components/schemas/Video'
+    VideoFile:
+      properties:
+        magnetUri:
+          type: string
+        resolution:
+          $ref: '#/components/schemas/VideoResolutionConstant'
+        size:
+          type: number
+          description: 'Video file size in bytes'
+        torrentUrl:
+          type: string
+        torrentDownaloadUrl:
+          type: string
+        fileUrl:
+          type: string
+        fileDownloadUrl:
+          type: string
+        fps:
+          type: number
+    VideoStreamingPlaylists:
+      properties:
+        id:
+          type: number
+        type:
+          type: number
+          enum:
+            - 1
+          description: 'Playlist type (HLS = 1)'
+        playlistUrl:
+          type: string
+        segmentsSha256Url:
+          type: string
+        redundancies:
+          type: array
+          items:
             type: object
             properties:
-              size:
-                type: object
-                properties:
-                  max:
-                    type: number
-          extensions: 
-            type: array
-            items:
+              baseUrl:
+                type: string
+    Video:
+      properties:
+        id:
+          type: number
+        uuid:
+          type: string
+        createdAt:
+          type: string
+        publishedAt:
+          type: string
+        updatedAt:
+          type: string
+        originallyPublishedAt:
+          type: string
+        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: number
+        isLocal:
+          type: boolean
+        name:
+          type: string
+        thumbnailPath:
+          type: string
+        previewPath:
+          type: string
+        embedPath:
+          type: string
+        views:
+          type: number
+        likes:
+          type: number
+        dislikes:
+          type: number
+        nsfw:
+          type: boolean
+        waitTranscoding:
+          type: boolean
+          nullable: true
+        state:
+          $ref: '#/components/schemas/VideoStateConstant'
+        scheduledUpdate:
+          nullable: true
+          $ref: '#/components/schemas/VideoScheduledUpdate'
+        blacklisted:
+          nullable: true
+          type: boolean
+        blacklistedReason:
+          nullable: true
+          type: string
+        account:
+          $ref: '#/components/schemas/VideoAccountSummary'
+        channel:
+          $ref: '#/components/schemas/VideoChannelSummary'
+        userHistory:
+          nullable: true
+          type: object
+          properties:
+            currentTime:
+              type: number
+    VideoDetails:
+      allOf:
+        - $ref: '#/components/schemas/Video'
+        - type: object
+          properties:
+            descriptionPath:
               type: string
-      video:
-        type: object
-        properties:
-          file:
-            type: object
-            properties: 
-              extensions: 
-                type: array
-                items:
-                  type: string
-  Follow:
-    properties:
-      id:
-        type: number
-      follower:
-        $ref: "#/definitions/Actor"
-      following:
-        $ref: "#/definitions/Actor"
-      score:
-        type: number
-      state:
-        type: string
-        enum: [pending, accepted]
-      createdAt:
-        type: string
-      updatedAt:
-        type: string
-  Job:
-    properties:
-      id:
-        type: number
-      state:
-        type: string
-        enum: [pending, processing, error, success]
-      category:
-        type: string
-        enum: [transcoding, activitypub-http]
-      handlerName:
-        type: string
-      handlerInputData:
-        type: string
-      createdAt:
-        type: string
-      updatedAt:
-        type: string
+            support:
+              type: string
+            channel:
+              $ref: '#/components/schemas/VideoChannel'
+            account:
+              $ref: '#/components/schemas/Account'
+            tags:
+              type: array
+              items:
+                type: string
+            files:
+              type: array
+              items:
+                $ref: '#/components/schemas/VideoFile'
+            commentsEnabled:
+              type: boolean
+            downloadEnabled:
+              type: boolean
+            trackerUrls:
+              type: array
+              items:
+                type: string
+            streamingPlaylists:
+              type: array
+              items:
+                $ref: '#/components/schemas/VideoStreamingPlaylists'
+    VideoImportStateConstant:
+      properties:
+        id:
+          type: integer
+          enum:
+            - 1
+            - 2
+            - 3
+          description: 'The video import state (Pending = 1, Success = 2, Failed = 3)'
+        label:
+          type: string
+    VideoImport:
+      properties:
+        id:
+          type: number
+        targetUrl:
+          type: string
+        magnetUri:
+          type: string
+        torrentName:
+          type: string
+        state:
+          type: object
+          properties:
+            id:
+              $ref: '#/components/schemas/VideoImportStateConstant'
+            label:
+              type: string
+        error:
+          type: string
+        createdAt:
+          type: string
+        updatedAt:
+          type: string
+        video:
+          $ref: '#/components/schemas/Video'
+    VideoAbuse:
+      properties:
+        id:
+          type: number
+        reason:
+          type: string
+        reporterAccount:
+          $ref: '#/components/schemas/Account'
+        video:
+          type: object
+          properties:
+            id:
+              type: number
+            name:
+              type: string
+            uuid:
+              type: string
+            url:
+              type: string
+        createdAt:
+          type: string
+    VideoBlacklist:
+      properties:
+        id:
+          type: number
+        videoId:
+          type: number
+        createdAt:
+          type: string
+        updatedAt:
+          type: string
+        name:
+          type: string
+        uuid:
+          type: string
+        description:
+          type: string
+        duration:
+          type: number
+        views:
+          type: number
+        likes:
+          type: number
+        dislikes:
+          type: number
+        nsfw:
+          type: boolean
+    VideoChannel:
+      properties:
+        displayName:
+          type: string
+        description:
+          type: string
+        isLocal:
+          type: boolean
+        ownerAccount:
+          type: object
+          properties:
+            id:
+              type: number
+            uuid:
+              type: string
+    VideoComment:
+      properties:
+        id:
+          type: number
+        url:
+          type: string
+        text:
+          type: string
+        threadId:
+          type: number
+        inReplyToCommentId:
+          type: number
+        videoId:
+          type: number
+        createdAt:
+          type: string
+        updatedAt:
+          type: string
+        totalReplies:
+          type: number
+        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
+        updatedAt:
+          type: string
+    Actor:
+      properties:
+        id:
+          type: number
+        uuid:
+          type: string
+        url:
+          type: string
+        name:
+          type: string
+        host:
+          type: string
+        followingCount:
+          type: number
+        followersCount:
+          type: number
+        createdAt:
+          type: string
+        updatedAt:
+          type: string
+        avatar:
+          $ref: '#/components/schemas/Avatar'
+    Account:
+      allOf:
+        - $ref: '#/components/schemas/Actor'
+        - properties:
+            displayName:
+              type: string
+    User:
+      properties:
+        id:
+          type: number
+        username:
+          type: string
+        email:
+          type: string
+        displayNSFW:
+          type: boolean
+        autoPlayVideo:
+          type: boolean
+        role:
+          type: integer
+          enum:
+            - 0
+            - 1
+            - 2
+          description: 'The user role (Admin = 0, Moderator = 1, User = 2)'
+        roleLabel:
+          type: string
+          enum:
+            - User
+            - Moderator
+            - Administrator
+        videoQuota:
+          type: number
+        videoQuotaDaily:
+          type: number
+        createdAt:
+          type: string
+        account:
+          $ref: '#/components/schemas/Account'
+        videoChannels:
+          type: array
+          items:
+            $ref: '#/components/schemas/VideoChannel'
+    UserWatchingVideo:
+      properties:
+        currentTime:
+          type: number
+    ServerConfig:
+      properties:
+        signup:
+          type: object
+          properties:
+            allowed:
+              type: boolean
+        transcoding:
+          type: object
+          properties:
+            enabledResolutions:
+              type: array
+              items:
+                type: number
+        avatar:
+          type: object
+          properties:
+            file:
+              type: object
+              properties:
+                size:
+                  type: object
+                  properties:
+                    max:
+                      type: number
+            extensions:
+              type: array
+              items:
+                type: string
+        video:
+          type: object
+          properties:
+            file:
+              type: object
+              properties:
+                extensions:
+                  type: array
+                  items:
+                    type: string
+    Follow:
+      properties:
+        id:
+          type: number
+        follower:
+          $ref: '#/components/schemas/Actor'
+        following:
+          $ref: '#/components/schemas/Actor'
+        score:
+          type: number
+        state:
+          type: string
+          enum:
+            - pending
+            - accepted
+        createdAt:
+          type: string
+        updatedAt:
+          type: string
+    Job:
+      properties:
+        id:
+          type: number
+        state:
+          type: string
+          enum:
+            - pending
+            - processing
+            - error
+            - success
+        category:
+          type: string
+          enum:
+            - transcoding
+            - activitypub-http
+        handlerName:
+          type: string
+        handlerInputData:
+          type: string
+        createdAt:
+          type: string
+        updatedAt:
+          type: string
+    AddUserResponse:
+      properties:
+        id:
+          type: number
+        uuid:
+          type: string
+    VideoUploadResponse:
+      properties:
+        video:
+          type: object
+          properties:
+            id:
+              type: number
+            uuid:
+              type: string
+    CommentThreadResponse:
+      properties:
+        total:
+          type: number
+        data:
+          type: array
+          items:
+            $ref: '#/components/schemas/VideoComment'
+    CommentThreadPostResponse:
+      properties:
+        comment:
+          $ref: '#/components/schemas/VideoComment'
+    VideoListResponse:
+      properties:
+        total:
+          type: number
+        data:
+          type: array
+          items:
+            $ref: '#/components/schemas/Video'
+    AddUser:
+      properties:
+        username:
+          type: string
+          description: 'The user username '
+        password:
+          type: string
+          description: 'The user password '
+        email:
+          type: string
+          description: 'The user email '
+        videoQuota:
+          type: string
+          description: 'The user videoQuota '
+        videoQuotaDaily:
+          type: string
+          description: 'The user daily video quota '
+        role:
+          type: integer
+          enum:
+            - 0
+            - 1
+            - 2
+          description: 'The user role (Admin = 0, Moderator = 1, User = 2)'
+      required:
+        - username
+        - password
+        - email
+        - videoQuota
+        - videoQuotaDaily
+        - role
+    UpdateUser:
+      properties:
+        id:
+          type: string
+          description: 'The user id '
+        email:
+          type: string
+          description: 'The updated email of the user '
+        videoQuota:
+          type: string
+          description: 'The updated videoQuota of the user '
+        videoQuotaDaily:
+          type: string
+          description: 'The updated daily video quota of the user '
+        role:
+          type: integer
+          enum:
+            - 0
+            - 1
+            - 2
+          description: 'The user role (Admin = 0, Moderator = 1, User = 2)'
+      required:
+        - id
+        - email
+        - videoQuota
+        - videoQuotaDaily
+        - role
+    UpdateMe:
+      properties:
+        password:
+          type: string
+          description: 'Your new password '
+        email:
+          type: string
+          description: 'Your new email '
+        displayNSFW:
+          type: string
+          description: 'Your new displayNSFW '
+        autoPlayVideo:
+          type: string
+          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 '
+        password:
+          type: string
+          description: 'The password of the user '
+        email:
+          type: string
+          description: 'The email of the user '
+        displayName:
+          type: string
+          description: 'The user display name'
+        channel:
+          type: object
+          properties:
+            name:
+              type: string
+              description: 'The default channel name'
+            displayName:
+              type: string
+              description: 'The default channel display name'
 
-#Api responses
-  AddUserResponse:
-    properties:
-      id:
-        type: number
-      uuid:
-        type: string
-  VideoUploadResponse:
-    properties:
-      id:
-        type: number
-      uuid:
-        type: string
-  CommentThreadResponse:
-    properties:
-      total:
-        type: number
-      data:
-        type: array
-        items:
-          $ref: "#/definitions/VideoComment"
-  CommentThreadPostResponse:
-    properties:
-      comment:
-        $ref: "#/definitions/VideoComment"
+      required:
+        - username
+        - password
+        - email
+    VideoChannelCreate:
+      properties:
+        name:
+          type: string
+        displayName:
+          type: string
+        description:
+          type: string
+        support:
+          type: string
+      required:
+        - name
+        - displayName
+    VideoChannelUpdate:
+      properties:
+        displayName:
+          type: string
+        description:
+          type: string
+        support:
+          type: string
+        bulkVideosSupportUpdate:
+          type: boolean
+          description: 'Update all videos support field of this channel'
 
-#request bodies
-  AddUser:
-    properties:
-      username:
-        type: string
-        description: 'The user username '
-      password:
-        type: string
-        description: 'The user password '
-      email:
-        type: string
-        description: 'The user email '
-      videoQuota:
-        type: string
-        description: 'The user videoQuota '
-      role:
-        type: string
-        description: 'The user role '
-    required:
-      - username
-      - password
-      - email
-      - videoQuota
-      - role
-  UpdateUser:
-    properties:
-      id:
-        type: string
-        description: 'The user id '
-      email:
-        type: string
-        description: 'The updated email of the user '
-      videoQuota:
-        type: string
-        description: 'The updated videoQuota of the user '
-      role:
-        type: string
-        description: 'The updated role of the user '
-    required:
-      - id
-      - email
-      - videoQuota
-      - role
-  UpdateMe:
-    properties:
-      password:
-        type: string
-        description: 'Your new password '
-      email:
-        type: string
-        description: 'Your new email '
-      displayNSFW:
-        type: string
-        description: 'Your new displayNSFW '
-      autoPlayVideo:
-        type: string
-        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
-  RegisterUser:
-    properties:
-      username:
-        type: string
-        description: 'The username of the user '
-      password:
-        type: string
-        description: 'The password of the user '
-      email:
-        type: string
-        description: 'The email of the user '
-    required:
-      - username
-      - password
-      - email
-  VideoChannelInput:
-    properties:
-      name:
-        type: string
-      description:
-        type: string