swagger: '2.0'
info:
- title: peertube
- version: 0.0.13-alpha
+ 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
+basePath: '/api/v1'
+schemes:
+ - https
paths:
'/accounts/{id}':
get:
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
'200':
description: successful operation
schema:
- $ref: '#/definitions/ServerConfig'
+ $ref: '#/definitions/ServerConfig'
/jobs:
get:
tags:
- 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'
+ $ref: '#/definitions/Job'
'/server/following/{host}':
delete:
tags:
- 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
- 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
- in: body
name: body
required: true
+ description: 'User to create'
schema:
$ref: '#/definitions/AddUser'
responses:
- 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
- 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
description: successful operation
schema:
$ref: '#/definitions/Avatar'
- /video:
+ /videos:
get:
tags:
- Video
- 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
type: array
items:
$ref: '#/definitions/Video'
- /video/categories:
+ /videos/categories:
get:
tags:
- Video
type: array
items:
type: string
- /video/licences:
+ /videos/licences:
get:
tags:
- Video
type: array
items:
type: string
- /video/languages:
+ /videos/languages:
get:
tags:
- Video
type: array
items:
type: string
- /video/privacies:
+ /videos/privacies:
get:
tags:
- Video
type: array
items:
type: string
- /video/search:
+ /videos/search:
get:
tags:
- Video
- 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
type: array
items:
$ref: '#/definitions/Video'
- "/video/{id}":
+ "/videos/{id}":
put:
tags:
- Video
consumes:
- - application/json
+ - multipart/form-data
produces:
- application/json
parameters:
in: path
required: true
type: string
- description: 'The video id '
+ 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: number
+ 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, Private]
+ description: 'Video privacy'
responses:
'200':
description: successful operation
responses:
'204':
description: successful operation
- "/video/{id}/description":
+ "/videos/{id}/description":
get:
tags:
- Video
description: successful operation
schema:
type: string
- "/video/{id}/views":
+ "/videos/{id}/views":
post:
tags:
- Video
responses:
'204':
description: successful operation
- /video/upload:
+ /videos/upload:
post:
tags:
- Video
produces:
- application/json
parameters:
- - in: formData
- name: videofile
+ - name: videofile
+ in: formData
type: file
- description: The file to upload.
+ 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: number
+ 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'
- /video/abuse:
+ /videos/abuse:
get:
tags:
- VideoAbuse
- 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
type: array
items:
$ref: '#/definitions/VideoAbuse'
- "/video/{id}/abuse":
+ "/videos/{id}/abuse":
post:
tags:
- VideoAbuse
responses:
'204':
description: successful operation
- "/video/{videoId}/blacklist":
+ "/videos/{videoId}/blacklist":
post:
tags:
- VideoBlacklist
responses:
'204':
description: successful operation
- /video/blacklist:
+ /videos/blacklist:
get:
tags:
- VideoBlacklist
- 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
type: array
items:
$ref: '#/definitions/VideoBlacklist'
- /video/channels:
+ /videos/channels:
get:
tags:
- VideoChannel
- 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
responses:
'204':
description: successful operation
- "/video/channels/{id}":
+ "/videos/channels/{id}":
get:
tags:
- VideoChannel
responses:
'204':
description: successful operation
- /video/accounts/{accountId}/channels:
+ /videos/accounts/{accountId}/channels:
get:
tags:
- VideoChannel
type: array
items:
$ref: '#/definitions/VideoChannel'
- "/video/{videoId}/comment-threads":
+ "/videos/{videoId}/comment-threads":
get:
tags:
- VideoComment
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:
tags:
- VideoComment
responses:
'200':
description: successful operation
- "/video/{videoId}/comment-threads/{threadId}":
+ schema:
+ $ref: '#/definitions/CommentThreadPostResponse'
+ "/videos/{videoId}/comment-threads/{threadId}":
get:
tags:
- VideoComment
responses:
'200':
description: successful operation
- "/video/{videoId}/comments/{commentId}":
+ schema:
+ $ref: '#/definitions/VideoCommentThreadTree'
+ "/videos/{videoId}/comments/{commentId}":
post:
tags:
- VideoComment
responses:
'200':
description: successful operation
+ schema:
+ $ref: '#/definitions/CommentThreadPostResponse'
delete:
tags:
- VideoComment
responses:
'204':
description: successful operation
- "/video/{id}/rate":
+ "/videos/{id}/rate":
put:
tags:
- VideoRate
'204':
description: successful operation
definitions:
+ VideoConstant:
+ properties:
+ id:
+ type: number
+ label:
+ type: string
+ VideoPrivacy:
+ type: string
+ enum: [Public, Unlisted, Private]
Video:
properties:
id:
type: number
uuid:
type: string
- accountName:
- type: string
createdAt:
type: string
- updatedAt:
+ publishedAt:
type: string
- categoryLabel:
+ updatedAt:
type: string
category:
- type: number
- licenceLabel:
- type: string
+ $ref: "#/definitions/VideoConstant"
licence:
- type: number
- languageLabel:
- type: string
+ $ref: "#/definitions/VideoConstant"
language:
- type: number
+ $ref: "#/definitions/VideoConstant"
+ privacy:
+ $ref: "#/definitions/VideoPrivacy"
description:
type: string
duration:
type: boolean
name:
type: string
- serverHost:
- type: string
thumbnailPath:
type: string
previewPath:
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
- reporterUsername:
- type: string
- reporterServerHost:
- type: string
- videoId:
- type: number
- videoUUID:
- type: string
- videoName:
- 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:
type: boolean
owner:
type: object
- properties:
- name:
+ properties:
+ name:
type: string
- uuid:
+ uuid:
type: string
videos:
type: array
- items:
+ items:
$ref: "#/definitions/Video"
VideoComment:
properties:
type: number
account:
$ref: "#/definitions/Account"
+ VideoCommentThreadTree:
+ properties:
+ comment:
+ $ref: "#/definitions/VideoComment"
+ children:
+ type: array
+ items:
+ $ref: "#/definitions/VideoCommentThreadTree"
Avatar:
properties:
path:
type: boolean
role:
type: string
- enum: [User, Moderator, Administrator]
+ enum: [User, Moderator, Administrator]
videoQuota:
type: number
createdAt:
$ref: "#/definitions/VideoChannel"
ServerConfig:
properties:
- signup:
+ signup:
type: object
properties:
allowed:
properties:
max:
type: number
- extensions:
+ extensions:
type: array
items:
type: string
properties:
file:
type: object
- properties:
- extensions:
+ properties:
+ extensions:
type: array
items:
type: string
updatedAt:
type: string
-#Api responses
+# Api responses
AddUserResponse:
properties:
id:
type: string
VideoUploadResponse:
properties:
- id:
+ video:
+ type: object
+ properties:
+ id:
+ type: number
+ uuid:
+ type: string
+ CommentThreadResponse:
+ properties:
+ total:
type: number
- uuid:
- type: string
+ data:
+ type: array
+ items:
+ $ref: "#/definitions/VideoComment"
+ CommentThreadPostResponse:
+ properties:
+ comment:
+ $ref: "#/definitions/VideoComment"
-#input bodies
+# Request bodies
AddUser:
properties:
username: