aboutsummaryrefslogblamecommitdiffhomepage
path: root/support/doc/api/openapi.yaml
blob: 10f60175dd7b3b0dd84f0dfe7a8a0e97321e5fd0 (plain) (tree)
1
2
3
4
5
6

              
                 
                     
                                                                                                                                               
                          







                                                                 


                   














                                              








                                      
                                      




                                































                                           
                                              



                         
               

                              





















                                                                                                                                     

        

                     





                          




















                                              





                                           
                                       

                             

                     






















                                              









                                      
                                      




                                














                                           









                                      
                                      




                                







                                           

                     















                                           

                     









                          
                                       







                                                 

                     





                          









                                      
                                      




                                








                                           

                     















                                           

                     

















                                           

                     





















                                            

                     













                                           

                     
















                                           

                     













                                           

                     


















                                                  

                     





                          









                                      
                                      




                                

























                                              

                     















                                           
          






                          









                                      
                                      




                                






                                           
                     













                                           
                   













                                           
                    













                                           
                    













                                           
                 






                          









                                      
                                      




                                






                                           
                 
        

                     


               
                             






                          


















                                             
                      



























                                                                             
                                  
                                      























                                           

                     














                                           
                             

















                                           
                       















                                           
                 
         

                     






                             

                         
                    





















                                             
                      





































                                                                             




                                                     
                
        

                     





                          









                                      
                                      




                                






                                              
                       
         

                     














                                           
                                
         

                     















                                           

                     














                                           
                    
        

                     





                          









                                      
                                      




                                






                                                  
                   






                          









                                      
                                      




                                







                                                

                     













                                                   
                          


















                                              

                     



















                                                   

                     














                                           
                                        



















                                                
                                      












                                      








                                      
                                      




                                


                                           
                 
                                                       
         

                     














                                           


                                                           




















                                           

                                                        
                                           
         

                     



















                                           

                                                           
           

                     



















                                           
                      
        

                     















                                           
                      




                    





                      


                                     





                    

                    

                    

                    
               
                                                 
              
                                                 
               
                                                 

                                          







                     













                     
              











                                        





                    


                                     









                        





































                     

                   
                        
               


                        
              






















                                     







                                                      

















































                                    
                                              











                                            
             





















                                
                     







                          

                         






































                                                   
               







                      






                        











                                            
 
                




























































































                                                          
swagger: '2.0'
info:
  title: PeerTube
  version: 1.0.0-beta
  description: Federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.
host: peertube.example.com
securityDefinitions:
  OAuth2:
    description: 'In the header: *Authorization: Bearer mytoken*'
    type: oauth2
    flow: password
    # Not implemented yet
    # authorizationUrl: https://example.com/oauth/authorize
    tokenUrl: https://peertube.example.com/api/v1/users/token
basePath: '/api/v1'
schemes:
  - https
paths:
  '/accounts/{id}':
    get:
      tags:
        - Accounts
      consumes:
        - application/json
      produces:
        - application/json
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Account'
  /accounts:
    get:
      tags:
        - Accounts
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Account'
  /config:
    get:
      tags:
        - Config
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/ServerConfig'
  /feeds/videos.{format}:
    get:
      tags:
        - Feeds
      produces:
        - application/atom+xml
        - application/rss+xml
        - application/json
      parameters:
        - name: format
          in: path
          required: true
          type: string
          enum: ['xml', 'atom' 'json']
          default: 'xml'
          description: 'The format expected (xml defaults to RSS 2.0, atom to ATOM 1.0 and json to JSON FEED 1.0'
        - name: accountId
          in: query
          required: false
          type: number
          description: 'The id of the local account to filter to (beware, users IDs and not actors IDs which will return empty feeds'
        - name: accountName
          in: query
          required: false
          type: string
          description: 'The name of the local account to filter to'
      responses:
        '200':
          description: successful operation
  /jobs:
    get:
      security:
        - OAuth2: [ ]
      tags:
        - Job
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: state
          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
          in: query
          required: false
          type: number
          description: ''
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Job'
  '/server/following/{host}':
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - ServerFollowing
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: host
          in: path
          required: true
          type: string
          description: 'The host to unfollow '
      responses:
        '201':
          description: successful operation
  /server/followers:
    get:
      tags:
        - ServerFollowing
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Follow'
  /server/following:
    get:
      tags:
        - ServerFollowing
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Follow'
    post:
      security:
        - OAuth2: [ ]
      tags:
        - ServerFollowing
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          schema:
            $ref: '#/definitions/Follow'
      responses:
        '204':
          description: successful operation
  /users:
    post:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          required: true
          description: 'User to create'
          schema:
            $ref: '#/definitions/AddUser'
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/AddUserResponse'
    get:
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/User'
  '/users/{id}':
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The user id '
      responses:
        '204':
          description: successful operation
    get:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The user id '
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/User'
    put:
      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'
      responses:
        '204':
          description: successful operation
  /users/me:
    get:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/User'
    put:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/UpdateMe'
      responses:
        '204':
          description: successful operation
  /users/me/video-quota-used:
    get:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: successful operation
          schema:
            type: number
  '/users/me/videos/{videoId}/rating':
    get:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: videoId
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/GetMeVideoRating'
  /users/me/videos:
    get:
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Video'
  /users/register:
    post:
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/RegisterUser'
      responses:
        '204':
          description: successful operation
  /users/me/avatar/pick:
    post:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - multipart/form-data
      produces:
        - application/json
      parameters:
        - in: formData
          name: avatarfile
          type: file
          description: The file to upload.
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Avatar'
  /videos:
    get:
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Video'
  /videos/categories:
    get:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              type: string
  /videos/licences:
    get:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              type: string
  /videos/languages:
    get:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              type: string
  /videos/privacies:
    get:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              type: string
  /videos/search:
    get:
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Video'
  "/videos/{id}":
    put:
      security:
        - OAuth2: [ ]
      tags:
        - Video
      consumes:
        - multipart/form-data
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id'
        - name: thumbnailfile
          in: formData
          type: file
          description: 'Video thumbnail file'
        - name: previewfile
          in: formData
          type: file
          description: 'Video preview file'
        - name: category
          in: formData
          type: number
          description: 'Video category'
        - name: licence
          in: formData
          type: number
          description: 'Video licence'
        - name: language
          in: formData
          type: string
          description: 'Video language'
        - name: description
          in: formData
          type: string
          description: 'Video description'
        - name: support
          in: formData
          type: string
          description: 'Text describing how to support the video uploader'
        - name: nsfw
          in: formData
          type: boolean
          description: 'Whether or not this video contains sensitive content'
        - name: name
          in: formData
          type: string
          description: 'Video name'
        - name: tags
          in: formData
          type: string[]
          description: 'Video tags'
        - name: commentsEnabled
          in: formData
          type: boolean
          description: 'Enable or disable comments for this video'
        - name: privacy
          in: formData
          type: string
          enum: [Public, Unlisted]
          description: 'Video privacy'
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Video'
    get:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Video'
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '204':
          description: successful operation
  "/videos/{id}/description":
    get:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '200':
          description: successful operation
          schema:
            type: string
  "/videos/{id}/views":
    post:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '204':
          description: successful operation
  /videos/upload:
    post:
      security:
        - OAuth2: [ ]
      tags:
        - Video
      consumes:
        - multipart/form-data
      produces:
        - application/json
      parameters:
        - name: videofile
          in: formData
          type: file
          required: true
          description: 'Video file'
        - name: thumbnailfile
          in: formData
          type: file
          required: true
          description: 'Video thumbnail file'
        - name: previewfile
          in: formData
          type: file
          required: true
          description: 'Video preview file'
        - name: category
          in: formData
          type: number
          description: 'Video category'
        - name: licence
          in: formData
          type: number
          description: 'Video licence'
        - name: language
          in: formData
          type: string
          description: 'Video language'
        - name: description
          in: formData
          type: string
          description: 'Video description'
        - name: support
          in: formData
          type: string
          description: 'Text describing how to support the video uploader'
        - name: channelId
          in: formData
          required: true
          type: number
          description: 'Channel id that will contain this video'
        - name: nsfw
          in: formData
          required: true
          type: boolean
          description: 'Whether or not this video contains sensitive content'
        - name: name
          in: formData
          required: true
          type: string
          description: 'Video name'
        - name: tags
          in: formData
          type: string[]
          description: 'Video tags'
        - name: commentsEnabled
          in: formData
          type: boolean
          description: 'Enable or disable comments for this video'
        - name: privacy
          in: formData
          required: true
          type: string
          enum: [Public, Unlisted, Private]
          description: 'Video privacy'
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/VideoUploadResponse'
  /videos/abuse:
    get:
      security:
        - OAuth2: [ ]
      tags:
        - VideoAbuse
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/VideoAbuse'
  "/videos/{id}/abuse":
    post:
      security:
        - OAuth2: [ ]
      tags:
        - VideoAbuse
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '204':
          description: successful operation
  "/videos/{videoId}/blacklist":
    post:
      security:
        - OAuth2: [ ]
      tags:
        - VideoBlacklist
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: videoId
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '204':
          description: successful operation
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - VideoBlacklist
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: videoId
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '204':
          description: successful operation
  /videos/blacklist:
    get:
      security:
        - OAuth2: [ ]
      tags:
        - VideoBlacklist
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/VideoBlacklist'
  /videos/channels:
    get:
      tags:
        - VideoChannel
      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: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/VideoChannel'
    post:
      security:
        - OAuth2: [ ]
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          schema:
            $ref: '#/definitions/VideoChannelInput'
      responses:
        '204':
          description: successful operation
  "/videos/channels/{id}":
    get:
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/VideoChannel'
    put:
      security:
        - OAuth2: [ ]
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id '
        - in: body
          name: body
          schema:
            $ref: '#/definitions/VideoChannelInput'
      responses:
        '204':
          description: successful operation
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '204':
          description: successful operation
  /videos/accounts/{accountId}/channels:
    get:
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: accountId
          in: path
          required: true
          type: string
          description: 'The account id '
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/VideoChannel'
  "/videos/{videoId}/comment-threads":
    get:
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      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
          in: query
          required: false
          type: number
          description: 'stopping page'
        - name: sort
          in: query
          required: false
          type: number
          description: 'sorting'
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/CommentThreadResponse'
    post:
      security:
        - OAuth2: [ ]
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: videoId
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/CommentThreadPostResponse'
  "/videos/{videoId}/comment-threads/{threadId}":
    get:
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      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 '
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/VideoCommentThreadTree'
  "/videos/{videoId}/comments/{commentId}":
    post:
      security:
        - OAuth2: [ ]
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      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 '
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/CommentThreadPostResponse'
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      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 '
      responses:
        '204':
          description: successful operation
  "/videos/{id}/rate":
    put:
      security:
        - OAuth2: [ ]
      tags:
        - VideoRate
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: id
          in: path
          required: true
          type: string
          description: 'The video id '
      responses:
        '204':
          description: successful operation
definitions:
  VideoConstantNumber:
    properties:
      id:
        type: number
      label:
        type: string
  VideoConstantString:
    properties:
      id:
        type: string
      label:
        type: string
  VideoPrivacy:
    type: string
    enum: [Public, Unlisted, Private]
  Video:
    properties:
      id:
        type: number
      uuid:
        type: string
      createdAt:
        type: string
      publishedAt:
        type: string
      updatedAt:
        type: string
      category:
        $ref: "#/definitions/VideoConstantNumber"
      licence:
        $ref: "#/definitions/VideoConstantNumber"
      language:
        $ref: "#/definitions/VideoConstantString"
      privacy:
        $ref: "#/definitions/VideoPrivacy"
      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
      account:
        type: object
        properties:
          name:
            type: string
          displayName:
            type: string
          url:
            type: string
          host:
            type: string
          avatar:
            $ref: "#/definitions/Avatar"
  VideoAbuse:
    properties:
      id:
        type: number
      reason:
        type: string
      reporterAccount:
        $ref: "#/definitions/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
      owner:
        type: object
        properties:
          name:
            type: string
          uuid:
            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:
            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
        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: 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: "#/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

# Api responses
  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: "#/definitions/VideoComment"
  CommentThreadPostResponse:
    properties:
      comment:
        $ref: "#/definitions/VideoComment"

# 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