swagger: '2.0'
info:
title: PeerTube
- version: 1.0.0-alpha
+ 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
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
description: successful operation
schema:
$ref: '#/definitions/Account'
+ '/accounts/{id}/videos':
+ 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/Video'
/accounts:
get:
tags:
'200':
description: successful operation
schema:
- $ref: '#/definitions/ServerConfig'
+ $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:
schema:
type: array
items:
- $ref: '#/definitions/Job'
+ $ref: '#/definitions/Job'
'/server/following/{host}':
delete:
+ security:
+ - OAuth2: [ ]
tags:
- ServerFollowing
consumes:
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
items:
$ref: '#/definitions/Follow'
post:
+ security:
+ - OAuth2: [ ]
tags:
- ServerFollowing
consumes:
description: successful operation
/users:
post:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
- in: body
name: body
required: true
+ description: 'User to create'
schema:
$ref: '#/definitions/AddUser'
responses:
schema:
$ref: '#/definitions/AddUserResponse'
get:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
$ref: '#/definitions/User'
'/users/{id}':
delete:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
'204':
description: successful operation
get:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
schema:
$ref: '#/definitions/User'
put:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
description: successful operation
/users/me:
get:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
items:
$ref: '#/definitions/User'
put:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
description: successful operation
/users/me/video-quota-used:
get:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
type: number
'/users/me/videos/{videoId}/rating':
get:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
$ref: '#/definitions/GetMeVideoRating'
/users/me/videos:
get:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
description: successful operation
/users/me/avatar/pick:
post:
+ security:
+ - OAuth2: [ ]
tags:
- User
consumes:
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
$ref: '#/definitions/Video'
"/videos/{id}":
put:
+ security:
+ - OAuth2: [ ]
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: 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'
delete:
+ security:
+ - OAuth2: [ ]
tags:
- Video
consumes:
description: successful operation
/videos/upload:
post:
+ security:
+ - OAuth2: [ ]
tags:
- Video
consumes:
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: 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
$ref: '#/definitions/VideoUploadResponse'
/videos/abuse:
get:
+ security:
+ - OAuth2: [ ]
tags:
- VideoAbuse
consumes:
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
$ref: '#/definitions/VideoAbuse'
"/videos/{id}/abuse":
post:
+ security:
+ - OAuth2: [ ]
tags:
- VideoAbuse
consumes:
description: successful operation
"/videos/{videoId}/blacklist":
post:
+ security:
+ - OAuth2: [ ]
tags:
- VideoBlacklist
consumes:
'204':
description: successful operation
delete:
+ security:
+ - OAuth2: [ ]
tags:
- VideoBlacklist
consumes:
description: successful operation
/videos/blacklist:
get:
+ security:
+ - OAuth2: [ ]
tags:
- VideoBlacklist
consumes:
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
type: array
items:
$ref: '#/definitions/VideoBlacklist'
- /videos/channels:
+ /video-channels:
get:
tags:
- VideoChannel
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
type: array
items:
$ref: '#/definitions/VideoChannel'
+ /accounts/{accountId}/video-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'
post:
+ security:
+ - OAuth2: [ ]
tags:
- VideoChannel
consumes:
produces:
- application/json
parameters:
+ - name: accountId
+ in: path
+ required: true
+ type: string
+ description: 'The account id '
- in: body
name: body
schema:
responses:
'204':
description: successful operation
- "/videos/channels/{id}":
+ "/account/{accountId}/video-channels/{id}":
get:
tags:
- VideoChannel
produces:
- application/json
parameters:
+ - name: accountId
+ in: path
+ required: true
+ type: string
+ description: 'The account id '
- name: id
in: path
required: true
type: string
- description: 'The video id '
+ description: 'The video channel id '
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/VideoChannel'
put:
+ security:
+ - OAuth2: [ ]
tags:
- VideoChannel
consumes:
produces:
- application/json
parameters:
+ - name: accountId
+ in: path
+ required: true
+ type: string
+ description: 'The account id '
- name: id
in: path
required: true
type: string
- description: 'The video id '
+ description: 'The video channel id '
- in: body
name: body
schema:
'204':
description: successful operation
delete:
+ security:
+ - OAuth2: [ ]
tags:
- VideoChannel
consumes:
produces:
- application/json
parameters:
+ - name: accountId
+ in: path
+ required: true
+ type: string
+ description: 'The account id '
- name: id
in: path
required: true
type: string
- description: 'The video id '
+ description: 'The video channel id '
responses:
'204':
description: successful operation
- /videos/accounts/{accountId}/channels:
+ "/account/{accountId}/video-channels/{id}/videos":
get:
tags:
- VideoChannel
required: true
type: string
description: 'The account id '
+ - name: id
+ in: path
+ required: true
+ type: string
+ description: 'The video channel id '
responses:
'200':
description: successful operation
schema:
- type: array
- items:
- $ref: '#/definitions/VideoChannel'
+ $ref: '#/definitions/Video'
"/videos/{videoId}/comment-threads":
get:
tags:
in: query
required: false
type: number
- description: 'stoping page'
+ description: 'stopping page'
- name: sort
in: query
required: false
schema:
$ref: '#/definitions/CommentThreadResponse'
post:
+ security:
+ - OAuth2: [ ]
tags:
- VideoComment
consumes:
$ref: '#/definitions/VideoCommentThreadTree'
"/videos/{videoId}/comments/{commentId}":
post:
+ security:
+ - OAuth2: [ ]
tags:
- VideoComment
consumes:
schema:
$ref: '#/definitions/CommentThreadPostResponse'
delete:
+ security:
+ - OAuth2: [ ]
tags:
- VideoComment
consumes:
description: successful operation
"/videos/{id}/rate":
put:
+ security:
+ - OAuth2: [ ]
tags:
- VideoRate
consumes:
'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: string
createdAt:
type: string
- updatedAt:
+ publishedAt:
type: string
- categoryLabel:
+ updatedAt:
type: string
category:
- type: number
- licenceLabel:
- type: string
+ $ref: "#/definitions/VideoConstantNumber"
licence:
- type: number
- languageLabel:
- type: string
+ $ref: "#/definitions/VideoConstantNumber"
language:
- type: number
+ $ref: "#/definitions/VideoConstantString"
+ privacy:
+ $ref: "#/definitions/VideoPrivacy"
description:
type: string
duration:
nsfw:
type: boolean
account:
- name: string
- displayName: string
- url: string
- host: string
- avatar:
- $ref: "#/definitions/Avatar"
+ 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: string
isLocal:
type: boolean
- owner:
+ ownerAccount:
type: object
- properties:
- name:
- type: string
- uuid:
+ properties:
+ id:
+ type: number
+ uuid:
type: string
- videos:
- type: array
- items:
- $ref: "#/definitions/Video"
VideoComment:
properties:
id:
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:
- type: number
- uuid:
- type: string
+ video:
+ type: object
+ properties:
+ id:
+ type: number
+ uuid:
+ type: string
CommentThreadResponse:
properties:
total:
comment:
$ref: "#/definitions/VideoComment"
-#request bodies
+# Request bodies
AddUser:
properties:
username: