swagger: '2.0' info: title: PeerTube version: 0.0.15-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 schema: items: type: array $ref: '#/definitions/VideoComment' 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 schema: $ref: '#/definitions/VideoCommentThreadTree' "/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" 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: 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