openapi: 3.0.0
info:
title: PeerTube
- version: 1.1.0-alpha.2
+ version: 1.3.0-rc.1
contact:
name: PeerTube Community
url: 'https://joinpeertube.org'
# Authentication
When you sign up for an account, you are given the possibility to generate
- sessions, and authenticate using this session token. One session token can
+ sessions, and authenticate using this session token. One session token can
currently be used at a time.
# Errors
description: >
Managing servers which the instance interacts with is crucial to the
concept of federation in PeerTube and external video indexation. The PeerTube
- server then deals with inter-server ActivityPub operations and propagates
+ server then deals with inter-server ActivityPub operations and propagates
information across its social graph by posting activities to actors' inbox
endpoints.
- name: Video Abuse
- Video
- Video Channel
- Video Comment
- - Video Abuse
- Video Following
- Video Rate
- name: Moderation
tags:
- Video Abuse
- Video Blacklist
- - name: Public Instance Information
+ - name: Instance Configuration
tags:
- Config
- Server Following
responses:
'200':
description: successful operation
- /jobs:
+ /jobs/{state}:
get:
summary: Get list of jobs
security:
description: The state of the job
schema:
type: string
+ enum:
+ - active
+ - completed
+ - failed
+ - waiting
+ - delayed
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/count'
- $ref: '#/components/parameters/sort'
parameters:
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/usersSort'
responses:
'200':
description: successful operation
get:
summary: Get current user information
security:
- - OAuth2: []
+ - OAuth2:
+ - user
tags:
- User
responses:
put:
summary: Update current user information
security:
- - OAuth2: []
+ - OAuth2:
+ - user
tags:
- User
responses:
get:
summary: Get current user used quota
security:
- - OAuth2: []
+ - OAuth2:
+ - user
tags:
- User
responses:
get:
summary: Get videos of the current user
security:
- - OAuth2: []
+ - OAuth2:
+ - user
+ tags:
+ - User
+ parameters:
+ - $ref: '#/components/parameters/start'
+ - $ref: '#/components/parameters/count'
+ - $ref: '#/components/parameters/sort'
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Video'
+ /users/me/subscriptions:
+ get:
+ summary: Get subscriptions of the current user
+ security:
+ - OAuth2:
+ - user
+ tags:
+ - User
+ parameters:
+ - $ref: '#/components/parameters/start'
+ - $ref: '#/components/parameters/count'
+ - $ref: '#/components/parameters/sort'
+ responses:
+ '200':
+ description: successful operation
+ post:
+ summary: Add subscription to the current user
+ security:
+ - OAuth2:
+ - user
+ tags:
+ - User
+ responses:
+ '200':
+ description: successful operation
+ /users/me/subscriptions/exist:
+ get:
+ summary: Get if subscriptions exist for the current user
+ security:
+ - OAuth2:
+ - user
+ tags:
+ - User
+ parameters:
+ - $ref: '#/components/parameters/subscriptionsUris'
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ /users/me/subscriptions/videos:
+ get:
+ summary: Get videos of subscriptions of the current user
+ security:
+ - OAuth2:
+ - user
tags:
- User
parameters:
type: array
items:
$ref: '#/components/schemas/Video'
+ '/users/me/subscriptions/{uri}':
+ get:
+ summary: Get subscription of the current user for a given uri
+ security:
+ - OAuth2:
+ - user
+ tags:
+ - User
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/VideoChannel'
+ delete:
+ summary: Delete subscription of the current user for a given uri
+ security:
+ - OAuth2:
+ - user
+ tags:
+ - User
+ responses:
+ '200':
+ description: successful operation
/users/register:
post:
summary: Register a user
tags:
- Video
parameters:
- - name: category
- in: query
- required: false
- description: category id of the video
- schema:
- type: number
+ - $ref: '#/components/parameters/categoryOneOf'
+ - $ref: '#/components/parameters/tagsOneOf'
+ - $ref: '#/components/parameters/tagsAllOf'
+ - $ref: '#/components/parameters/licenceOneOf'
+ - $ref: '#/components/parameters/languageOneOf'
+ - $ref: '#/components/parameters/nsfw'
+ - $ref: '#/components/parameters/filter'
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/videosSort'
responses:
'200':
description: successful operation
description: Video name
type: string
tags:
- description: Video tags
- type: string
+ description: Video tags (maximum 5 tags each between 2 and 30 characters)
+ type: array
+ items:
+ type: string
commentsEnabled:
description: Enable or disable comments for this video
type: string
$ref: '#/paths/~1users~1me/put/responses/204'
'/videos/{id}/watching':
put:
- summary: Indicate progress of in watching the video by its id for a user
+ summary: Set watching progress of a video by its id for a user
tags:
- Video
security:
type: string
tags:
description: Video tags
- type: string
+ type: array
+ items:
+ type: string
commentsEnabled:
description: Enable or disable comments for this video
type: string
channelId=$CHANNEL_ID \
name=$NAME \
"Authorization:Bearer $token"
+ /videos/imports:
+ post:
+ summary: Import a torrent or magnetURI or HTTP ressource (if enabled by the instance administrator)
+ security:
+ - OAuth2: []
+ tags:
+ - Video
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/VideoUploadResponse'
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ torrentfile:
+ description: Torrent File
+ type: string
+ format: binary
+ targetUrl:
+ description: HTTP target URL
+ type: string
+ magnetUri:
+ description: Magnet URI
+ type: string
+ channelId:
+ description: Channel id that will contain this video
+ type: number
+ thumbnailfile:
+ description: Video thumbnail file
+ type: string
+ previewfile:
+ description: Video preview file
+ type: string
+ privacy:
+ $ref: '#/components/schemas/VideoPrivacy'
+ category:
+ description: Video category
+ type: string
+ licence:
+ description: Video licence
+ type: string
+ language:
+ description: Video language
+ type: string
+ description:
+ description: Video description
+ type: string
+ waitTranscoding:
+ description: Whether or not we wait transcoding before publish the video
+ type: string
+ support:
+ description: Text describing how to support the video uploader
+ type: string
+ nsfw:
+ description: Whether or not this video contains sensitive content
+ type: string
+ name:
+ description: Video name
+ type: string
+ tags:
+ description: Video tags
+ type: array
+ items:
+ type: string
+ commentsEnabled:
+ description: Enable or disable comments for this video
+ type: string
+ scheduleUpdate: *ref_0
+ required:
+ - channelId
+ - name
/videos/abuse:
get:
summary: Get list of reported video abuses
parameters:
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/abusesSort'
responses:
'200':
description: successful operation
parameters:
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/blacklistsSort'
responses:
'200':
description: successful operation
$ref: '#/paths/~1users~1me/put/responses/204'
requestBody:
$ref: '#/components/requestBodies/VideoChannelInput'
- '/video-channels/{id}':
+ '/video-channels/{channelHandle}':
get:
summary: Get a video channel by its id
tags:
- Video Channel
parameters:
- - $ref: '#/components/parameters/id3'
+ - $ref: '#/components/parameters/channelHandle'
responses:
'200':
description: successful operation
tags:
- Video Channel
parameters:
- - $ref: '#/components/parameters/id3'
+ - $ref: '#/components/parameters/channelHandle'
responses:
'204':
$ref: '#/paths/~1users~1me/put/responses/204'
tags:
- Video Channel
parameters:
- - $ref: '#/components/parameters/id3'
+ - $ref: '#/components/parameters/channelHandle'
responses:
'204':
$ref: '#/paths/~1users~1me/put/responses/204'
- '/video-channels/{id}/videos':
+ '/video-channels/{channelHandle}/videos':
get:
summary: Get videos of a video channel by its id
tags:
- Video Channel
parameters:
- - $ref: '#/components/parameters/id3'
+ - $ref: '#/components/parameters/channelHandle'
responses:
'200':
description: successful operation
type: array
items:
$ref: '#/components/schemas/VideoChannel'
+ '/accounts/{name}/ratings':
+ get:
+ summary: Get ratings of an account by its name
+ security:
+ - OAuth2: []
+ tags:
+ - User
+ parameters:
+ - $ref: '#/components/parameters/start'
+ - $ref: '#/components/parameters/count'
+ - $ref: '#/components/parameters/sort'
+ - name: rating
+ in: query
+ required: false
+ description: Optionaly filter which ratings to retrieve
+ schema:
+ type: string
+ enum:
+ - like
+ - dislike
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/VideoRating'
'/videos/{id}/comment-threads':
get:
summary: Get the comment threads of a video by its id
parameters:
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/videosSearchSort'
- name: search
in: query
required: true
description: Sort column (-createdAt for example)
schema:
type: string
+ videosSort:
+ name: sort
+ in: query
+ required: false
+ description: Sort videos by criteria
+ schema:
+ type: string
+ enum:
+ - -name
+ - -duration
+ - -createdAt
+ - -publishedAt
+ - -views
+ - -likes
+ - -trending
+ videosSearchSort:
+ name: sort
+ in: query
+ required: false
+ description: Sort videos by criteria
+ schema:
+ type: string
+ enum:
+ - -name
+ - -duration
+ - -createdAt
+ - -publishedAt
+ - -views
+ - -likes
+ - -match
+ blacklistsSort:
+ name: sort
+ in: query
+ required: false
+ description: Sort blacklists by criteria
+ schema:
+ type: string
+ enum:
+ - -id
+ - -name
+ - -duration
+ - -views
+ - -likes
+ - -dislikes
+ - -uuid
+ - -createdAt
+ usersSort:
+ name: sort
+ in: query
+ required: false
+ description: Sort users by criteria
+ schema:
+ type: string
+ enum:
+ - -id
+ - -username
+ - -createdAt
+ abusesSort:
+ name: sort
+ in: query
+ required: false
+ description: Sort abuses by criteria
+ schema:
+ type: string
+ enum:
+ - -id
+ - -createdAt
+ - -state
name:
name: name
in: path
description: The video id or uuid
schema:
type: string
- id3:
- name: id
+ channelHandle:
+ name: channelHandle
in: path
required: true
- description: The video channel id or uuid
+ description: "The video channel handle (example: 'my_username@example.com' or 'my_username')"
schema:
type: string
commentId:
description: The comment id
schema:
type: number
+ categoryOneOf:
+ name: categoryOneOf
+ in: query
+ required: false
+ description: category id of the video
+ schema:
+ oneOf:
+ - type: number
+ - type: array
+ items:
+ type: number
+ style: form
+ explode: false
+ tagsOneOf:
+ name: tagsOneOf
+ in: query
+ required: false
+ description: tag(s) of the video
+ schema:
+ oneOf:
+ - type: string
+ - type: array
+ items:
+ type: string
+ style: form
+ explode: false
+ tagsAllOf:
+ name: tagsAllOf
+ in: query
+ required: false
+ description: tag(s) of the video, where all should be present in the video
+ schema:
+ oneOf:
+ - type: string
+ - type: array
+ items:
+ type: string
+ style: form
+ explode: false
+ languageOneOf:
+ name: languageOneOf
+ in: query
+ required: false
+ description: language id of the video
+ schema:
+ oneOf:
+ - type: string
+ - type: array
+ items:
+ type: string
+ style: form
+ explode: false
+ licenceOneOf:
+ name: licenceOneOf
+ in: query
+ required: false
+ description: licence id of the video
+ schema:
+ oneOf:
+ - type: number
+ - type: array
+ items:
+ type: number
+ style: form
+ explode: false
+ nsfw:
+ name: nsfw
+ in: query
+ required: false
+ description: whether to include nsfw videos, if any
+ schema:
+ type: string
+ enum:
+ - 'true'
+ - 'false'
+ filter:
+ name: filter
+ in: query
+ required: false
+ description: >
+ Special filters (local for instance) which might require special rights:
+ * `local` - only videos local to the instance
+ * `all-local` - only videos local to the instance, but showing private and unlisted videos (requires Admin privileges)
+ schema:
+ type: string
+ enum:
+ - local
+ - all-local
+ subscriptionsUris:
+ name: uris
+ in: query
+ required: true
+ description: list of uris to check if each is part of the user subscriptions
+ schema:
+ type: array
+ items:
+ type: string
requestBodies:
VideoChannelInput:
content:
- Administrator
videoQuota:
type: number
+ videoQuotaDaily:
+ type: number
createdAt:
type: string
account:
videoQuota:
type: string
description: 'The user videoQuota '
- role:
+ videoQuotaDaily:
type: string
+ description: 'The user daily video quota '
+ role:
+ type: integer
+ format: int32
+ enum:
+ - 0
+ - 1
+ - 2
description: 'The user role '
required:
- username
- password
- email
- videoQuota
+ - videoQuotaDaily
- role
UpdateUser:
properties:
videoQuota:
type: string
description: 'The updated videoQuota of the user '
+ videoQuotaDaily:
+ type: string
+ description: 'The updated daily video quota of the user '
role:
type: string
description: 'The updated role of the user '
- id
- email
- videoQuota
+ - videoQuotaDaily
- role
UpdateMe:
properties:
required:
- id
- rating
+ VideoRating:
+ properties:
+ video:
+ $ref: '#/components/schemas/Video'
+ rating:
+ type: number
+ description: 'Rating of the video'
+ required:
+ - video
+ - rating
RegisterUser:
properties:
username: