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/{name}':
    get:
      tags:
        - Accounts
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "accounts.yaml#/parameters/name"
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Account'
  '/accounts/{name}/videos':
    get:
      tags:
        - Accounts
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "accounts.yaml#/parameters/name"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Video'
  /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 state of the job'
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      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:
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Follow'
  /server/following:
    get:
      tags:
        - ServerFollowing
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      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':
          $ref: "commons.yaml#/responses/emptySuccess"
  /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:
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      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:
        - $ref: "users.yaml#/parameters/id"
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
    get:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "users.yaml#/parameters/id"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/User'
    put:
      security:
        - OAuth2: [ ]
      tags:
        - User
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "users.yaml#/parameters/id"
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/UpdateUser'
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
  /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':
          $ref: "commons.yaml#/responses/emptySuccess"
  /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:
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      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':
          $ref: "commons.yaml#/responses/emptySuccess"
  /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: category
          in: query
          required: false
          type: number
          description: category id of the video
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      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:
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      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:
        - $ref: "videos.yaml#/parameters/id"
        - $ref: "videos.yaml#/parameters/thumbnailfile"
        - $ref: "videos.yaml#/parameters/previewfile"
        - $ref: "videos.yaml#/parameters/category"
        - $ref: "videos.yaml#/parameters/licence"
        - $ref: "videos.yaml#/parameters/language"
        - $ref: "videos.yaml#/parameters/description"
        - $ref: "videos.yaml#/parameters/waitTranscoding"
        - $ref: "videos.yaml#/parameters/support"
        - $ref: "videos.yaml#/parameters/nsfw"
        - $ref: "videos.yaml#/parameters/name"
        - $ref: "videos.yaml#/parameters/tags"
        - $ref: "videos.yaml#/parameters/commentsEnabled"
        - $ref: "videos.yaml#/parameters/privacy"
        - $ref: "videos.yaml#/parameters/scheduleUpdate"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Video'
    get:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Video'
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
  "/videos/{id}/description":
    get:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
      responses:
        '200':
          description: successful operation
          schema:
            type: string
  "/videos/{id}/views":
    post:
      tags:
        - Video
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
  /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: channelId
          in: formData
          required: true
          type: number
          description: 'Channel id that will contain this video'
        - $ref: "videos.yaml#/parameters/thumbnailfile"
        - $ref: "videos.yaml#/parameters/previewfile"
        - $ref: "videos.yaml#/parameters/category"
        - $ref: "videos.yaml#/parameters/licence"
        - $ref: "videos.yaml#/parameters/language"
        - $ref: "videos.yaml#/parameters/description"
        - $ref: "videos.yaml#/parameters/waitTranscoding"
        - $ref: "videos.yaml#/parameters/support"
        - $ref: "videos.yaml#/parameters/nsfw"
        - $ref: "videos.yaml#/parameters/name"
        - $ref: "videos.yaml#/parameters/tags"
        - $ref: "videos.yaml#/parameters/commentsEnabled"
        - $ref: "videos.yaml#/parameters/privacy"
        - $ref: "videos.yaml#/parameters/scheduleUpdate"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/VideoUploadResponse'
  /videos/abuse:
    get:
      security:
        - OAuth2: [ ]
      tags:
        - VideoAbuse
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      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:
        - $ref: "videos.yaml#/parameters/id"
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
  "/videos/{id}/blacklist":
    post:
      security:
        - OAuth2: [ ]
      tags:
        - VideoBlacklist
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - VideoBlacklist
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
  /videos/blacklist:
    get:
      security:
        - OAuth2: [ ]
      tags:
        - VideoBlacklist
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/VideoBlacklist'
  /video-channels:
    get:
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      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':
          $ref: "commons.yaml#/responses/emptySuccess"
  "/video-channels/{id}":
    get:
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "video-channels.yaml#/parameters/id"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/VideoChannel'
    put:
      security:
        - OAuth2: [ ]
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "video-channels.yaml#/parameters/id"
        - in: body
          name: body
          schema:
            $ref: '#/definitions/VideoChannelInput'
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "video-channels.yaml#/parameters/id"
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
  "/video-channels/{id}/videos":
    get:
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "video-channels.yaml#/parameters/id"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Video'
  /accounts/{name}/video-channels:
    get:
      tags:
        - VideoChannel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "accounts.yaml#/parameters/name"
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/VideoChannel'
  "/videos/{id}/comment-threads":
    get:
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
        - $ref: "commons.yaml#/parameters/start"
        - $ref: "commons.yaml#/parameters/count"
        - $ref: "commons.yaml#/parameters/sort"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/CommentThreadResponse'
    post:
      security:
        - OAuth2: [ ]
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/CommentThreadPostResponse'
  "/videos/{id}/comment-threads/{threadId}":
    get:
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
        - $ref: "video-comments.yaml#/parameters/threadId"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/VideoCommentThreadTree'
  "/videos/{id}/comments/{commentId}":
    post:
      security:
        - OAuth2: [ ]
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
        - $ref: "video-comments.yaml#/parameters/commentId"
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/CommentThreadPostResponse'
    delete:
      security:
        - OAuth2: [ ]
      tags:
        - VideoComment
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
        - $ref: "video-comments.yaml#/parameters/commentId"
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
  "/videos/{id}/rate":
    put:
      security:
        - OAuth2: [ ]
      tags:
        - VideoRate
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - $ref: "videos.yaml#/parameters/id"
      responses:
        '204':
          $ref: "commons.yaml#/responses/emptySuccess"
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
      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: "#/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