--- /dev/null
+swagger: '2.0'
+info:
+ title: peertube
+ version: 0.0.13-alpha
+ description: Federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.
+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'
+ 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'
+ /jobs:
+ get:
+ tags:
+ - Job
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/Job'
+ '/server/following/{host}':
+ delete:
+ 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
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/Follow'
+ /server/following:
+ get:
+ tags:
+ - ServerFollowing
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/Follow'
+ post:
+ tags:
+ - ServerFollowing
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ parameters:
+ - in: body
+ name: body
+ schema:
+ $ref: '#/definitions/Follow'
+ responses:
+ '204':
+ description: successful operation
+ /users:
+ post:
+ 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'
+ get:
+ tags:
+ - User
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/User'
+ '/users/{id}':
+ delete:
+ 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:
+ 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:
+ 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:
+ tags:
+ - User
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/User'
+ put:
+ 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:
+ tags:
+ - User
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ parameters: []
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: number
+ '/users/me/videos/{videoId}/rating':
+ get:
+ 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:
+ tags:
+ - User
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ 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:
+ 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'
+ /video:
+ get:
+ tags:
+ - Video
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/Video'
+ /video/categories:
+ get:
+ tags:
+ - Video
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ type: string
+ /video/licences:
+ get:
+ tags:
+ - Video
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ type: string
+ /video/languages:
+ get:
+ tags:
+ - Video
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ type: string
+ /video/privacies:
+ get:
+ tags:
+ - Video
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ type: string
+ /video/search:
+ get:
+ tags:
+ - Video
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/Video'
+ "/video/{id}":
+ put:
+ 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'
+ 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:
+ 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
+ "/video/{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
+ "/video/{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
+ /video/upload:
+ post:
+ tags:
+ - Video
+ consumes:
+ - multipart/form-data
+ produces:
+ - application/json
+ parameters:
+ - in: formData
+ name: videofile
+ type: file
+ description: The file to upload.
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ $ref: '#/definitions/VideoUploadResponse'
+ /video/abuse:
+ get:
+ tags:
+ - VideoAbuse
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/VideoAbuse'
+ "/video/{id}/abuse":
+ post:
+ 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
+ "/video/{videoId}/blacklist":
+ post:
+ 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:
+ 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
+ /video/blacklist:
+ get:
+ tags:
+ - VideoBlacklist
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/VideoBlacklist'
+ /video/channels:
+ get:
+ tags:
+ - VideoChannel
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ responses:
+ '200':
+ description: successful operation
+ schema:
+ type: array
+ items:
+ $ref: '#/definitions/VideoChannel'
+ post:
+ tags:
+ - VideoChannel
+ consumes:
+ - application/json
+ produces:
+ - application/json
+ parameters:
+ - in: body
+ name: body
+ schema:
+ $ref: '#/definitions/VideoChannelInput'
+ responses:
+ '204':
+ description: successful operation
+ "/video/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:
+ 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:
+ 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
+ /video/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'
+ "/video/{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 '
+ responses:
+ '200':
+ description: successful operation
+ post:
+ 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
+ "/video/{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
+ "/video/{videoId}/comments/{commentId}":
+ post:
+ 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
+ delete:
+ 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
+ "/video/{id}/rate":
+ put:
+ 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:
+ 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:
+ 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"
+ 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:
+ id:
+ type: number
+ uuid:
+ type: string
+
+#input 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