From 3e9e6f2f14fda845e6000cfada07d1bfb176bd21 Mon Sep 17 00:00:00 2001 From: Rigel Kent Date: Thu, 15 Nov 2018 14:10:15 +0100 Subject: [PATCH] migrate Swagger 2.0 spec to OpenAPI 3.0.0 --- README.md | 5 +- package.json | 14 +- scripts/generate-api-doc.sh | 5 - support/doc/api/accounts.yaml | 7 - support/doc/api/commons.yaml | 23 - support/doc/api/html/index.html | 8998 ----------------- support/doc/api/html/javascripts/spectacle.js | 242 - .../doc/api/html/javascripts/spectacle.min.js | 1 - .../doc/api/html/stylesheets/foundation.css | 2285 ----- .../api/html/stylesheets/foundation.min.css | 1 - .../doc/api/html/stylesheets/spectacle.css | 1375 --- .../api/html/stylesheets/spectacle.min.css | 1 - support/doc/api/openapi.yaml | 2046 ++-- support/doc/api/users.yaml | 7 - support/doc/api/video-channels.yaml | 7 - support/doc/api/video-comments.yaml | 13 - support/doc/api/videos.yaml | 87 - support/doc/development/server/code.md | 10 +- yarn.lock | 1795 +--- 19 files changed, 1224 insertions(+), 15698 deletions(-) delete mode 100755 scripts/generate-api-doc.sh delete mode 100644 support/doc/api/accounts.yaml delete mode 100644 support/doc/api/commons.yaml delete mode 100644 support/doc/api/html/index.html delete mode 100644 support/doc/api/html/javascripts/spectacle.js delete mode 100644 support/doc/api/html/javascripts/spectacle.min.js delete mode 100644 support/doc/api/html/stylesheets/foundation.css delete mode 100644 support/doc/api/html/stylesheets/foundation.min.css delete mode 100644 support/doc/api/html/stylesheets/spectacle.css delete mode 100644 support/doc/api/html/stylesheets/spectacle.min.css delete mode 100644 support/doc/api/users.yaml delete mode 100644 support/doc/api/video-channels.yaml delete mode 100644 support/doc/api/video-comments.yaml delete mode 100644 support/doc/api/videos.yaml diff --git a/README.md b/README.md index a13f454e2..3303d8a32 100644 --- a/README.md +++ b/README.md @@ -183,9 +183,8 @@ See [ARCHITECTURE.md](/ARCHITECTURE.md) for a more detailed explanation of the a #### Backend * REST API: - * Quick Start: [/support/doc/api/quickstart.md](/support/doc/api/quickstart.md) - * Swagger/OpenAPI schema: [/support/doc/api/openapi.yaml](/support/doc/api/openapi.yaml) - * HTML explorer: [/support/doc/api/html/index.html](https://htmlpreview.github.io/?https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/api/html/index.html) + * OpenAPI 3.0.0 schema: [/support/doc/api/openapi.yaml](/support/doc/api/openapi.yaml) + * HTML explorer: [docs.joinpeertube.org/api.html](http://docs.joinpeertube.org/api.html) * Servers communicate with each other with [Activity Pub](https://www.w3.org/TR/activitypub/). * Each server has its own users who query it (search videos, query where the diff --git a/package.json b/package.json index 40d0214c9..391e1ff90 100644 --- a/package.json +++ b/package.json @@ -49,14 +49,12 @@ "create-import-video-file-job": "node ./dist/scripts/create-import-video-file-job.js", "test": "scripty", "help": "scripty", - "generate-api-doc": "scripty", "generate-cli-doc": "scripty", "parse-log": "node ./dist/scripts/parse-log.js", "prune-storage": "node ./dist/scripts/prune-storage.js", "optimize-old-videos": "node ./dist/scripts/optimize-old-videos.js", "postinstall": "cd client && yarn install --pure-lockfile", "tsc": "tsc", - "spectacle-docs": "node_modules/spectacle-docs/bin/spectacle.js", "commander": "commander", "ng": "ng", "nodemon": "nodemon", @@ -72,13 +70,21 @@ }, "husky": { "hooks": { - "pre-commit": "lint-staged && ./scripts/openapi-peertube-version.sh" + "pre-commit": "./scripts/openapi-peertube-version.sh && lint-staged" } }, "lint-staged": { "*.scss": [ "sass-lint -c client/.sass-lint.yml", "git add" + ], + "support/doc/api/*.yaml": [ + "node ./node_modules/swagger-cli/bin/swagger-cli.js validate support/doc/api/openapi.yaml", + "git add" + ], + "server/tools/README.md": [ + "npm run generate-cli-doc", + "git add" ] }, "resolutions": { @@ -200,8 +206,8 @@ "nodemon": "^1.11.0", "sass-lint": "^1.12.1", "source-map-support": "^0.5.0", - "spectacle-docs": "^1.0.2", "supertest": "^3.0.0", + "swagger-cli": "^2.2.0", "ts-node": "7.0.1", "tslint": "^5.7.0", "tslint-config-standard": "^8.0.1", diff --git a/scripts/generate-api-doc.sh b/scripts/generate-api-doc.sh deleted file mode 100755 index 7d48db7a5..000000000 --- a/scripts/generate-api-doc.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -set -eu - -npm run spectacle-docs -- -t support/doc/api/html support/doc/api/openapi.yaml diff --git a/support/doc/api/accounts.yaml b/support/doc/api/accounts.yaml deleted file mode 100644 index c5b20040d..000000000 --- a/support/doc/api/accounts.yaml +++ /dev/null @@ -1,7 +0,0 @@ -parameters: - name: - name: name - in: path - required: true - type: string - description: 'The name of the account (chocobozzz or chocobozzz@peertube.cpy.re for example)' \ No newline at end of file diff --git a/support/doc/api/commons.yaml b/support/doc/api/commons.yaml deleted file mode 100644 index c8bab3c80..000000000 --- a/support/doc/api/commons.yaml +++ /dev/null @@ -1,23 +0,0 @@ -parameters: - start: - name: start - in: query - required: false - type: number - description: 'Offset' - count: - name: count - in: query - required: false - type: number - description: 'Number of items' - sort: - name: sort - in: query - required: false - type: string - description: 'Sort column (-createdAt for example)' - -responses: - emptySuccess: - description: 'Successful operation' \ No newline at end of file diff --git a/support/doc/api/html/index.html b/support/doc/api/html/index.html deleted file mode 100644 index 7e53ce675..000000000 --- a/support/doc/api/html/index.html +++ /dev/null @@ -1,8998 +0,0 @@ - - - - - - PeerTube | API Reference - - - - - - - -
- -
- -
-
-

PeerTube - API Reference -

-
-
-
-

Introduction

-

The PeerTube API is built on HTTP(S). Our API is RESTful. It has predictable resource URLs. It returns HTTP response codes to indicate errors. It also accepts and returns JSON in the HTTP body. You can use your favorite HTTP/REST library for your programming language to use PeerTube. No official SDK is currently provided.

-

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 currently be used at a time.

-
-
-
-
API Endpoint
-
https://peertube.example.com/api/v1
- -
Request Content-Types: - application/json -
-
Response Content-Types: - application/json; charset=utf-8 -
-
Schemes: - https -
-
Version: - 1.1.0-alpha.2 -
-
-
-
-
- -

Authentication

-
-
-
-

- OAuth2 - -

-
-

In the header: - Authorization: Bearer <token> -

-

Authenticating via OAuth requires the following steps:

-
    -
  • Have an account with sufficient authorization levels
  • -
  • - Generate a Bearer Token
  • -
  • Make Authenticated Requests
  • -
-
-
-
-
-
type
-
-
oauth2
-
-
-
-
flow
-
-
password
-
-
-
-
tokenUrl
-
-
https://peertube.example.com/api/v1/users/token
-
-
-
-
scopes
-
-
- admin -

Admin scope

- moderator -

Moderator scope

- user -

User scope

-
-
-
-
-
-
-

Accounts

-
-
-

Using some features of PeerTube require authentication, for which Accounts provide different levels of permission as well as associated user information. Accounts also encompass remote accounts discovered across the federation.

-
-
-
- - -
- Accounts - -
- - -

- Get the account by name -

-
-
-
- GET - /accounts/{name} -
-
-
-
-
-
-
-
-
name: - - string - - -
- -
in path
-
-
-

The name of the account (chocobozzz or - chocobozzz@peertube.cpy.re for example)

-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Account - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "displayName": "string",
-  "id": "number",
-  "uuid": "string",
-  "url": "string",
-  "name": "string",
-  "host": "string",
-  "followingCount": "number",
-  "followersCount": "number",
-  "createdAt": "string",
-  "updatedAt": "string",
-  "avatar": {
-    "path": "string",
-    "createdAt": "string",
-    "updatedAt": "string"
-  }
-}
-
- -
-
-
-
-
- - -
- Accounts - - Video - -
- - -

- Get videos for an account, provided the name of that account -

-
-
-
- GET - /accounts/{name}/videos -
-
-
-
-
-
-
-
-
name: - - string - - -
- -
in path
-
-
-

The name of the account (chocobozzz or - chocobozzz@peertube.cpy.re for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Video - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "id": "number",
-  "uuid": "string",
-  "createdAt": "string",
-  "publishedAt": "string",
-  "updatedAt": "string",
-  "category": {
-    "id": "number",
-    "label": "string"
-  },
-  "licence": {
-    "id": "number",
-    "label": "string"
-  },
-  "language": {
-    "id": "string",
-    "label": "string"
-  },
-  "privacy": "string",
-  "description": "string",
-  "duration": "number",
-  "isLocal": "boolean",
-  "name": "string",
-  "thumbnailPath": "string",
-  "previewPath": "string",
-  "embedPath": "string",
-  "views": "number",
-  "likes": "number",
-  "dislikes": "number",
-  "nsfw": "boolean",
-  "account": {
-    "name": "string",
-    "displayName": "string",
-    "url": "string",
-    "host": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  }
-}
-
- -
-
-
-
-
- - -
- Accounts - -
- - -

- Get all accounts -

-
-
-
- GET - /accounts -
-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Account - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - Account - - - -
-
-
-
-
-
Response Content-Types: - application/jsonhttps://peertube.cpy.re/api/v1 -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "displayName": "string",
-    "id": "number",
-    "uuid": "string",
-    "url": "string",
-    "name": "string",
-    "host": "string",
-    "followingCount": "number",
-    "followersCount": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  }
-]
-
- -
-
-
-
-

Config

-
-
-

Each server exposes public information regarding supported videos and options.

-
-
-
- - -
- Config - -
- - -

- Get the configuration of the server -

-
-
-
- GET - /config -
-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - ServerConfig - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "signup": {
-    "allowed": "boolean"
-  },
-  "transcoding": {
-    "enabledResolutions": [
-      "number"
-    ]
-  },
-  "avatar": {
-    "file": {
-      "size": {
-        "max": "number"
-      }
-    },
-    "extensions": [
-      "string"
-    ]
-  },
-  "video": {
-    "file": {
-      "extensions": [
-        "string"
-      ]
-    }
-  }
-}
-
- -
-
-
-
-

Feeds

-
-
-

Feeds of videos and feeds of comments allow to see updates and get them in an aggregator or script of your choice.

-
-
-
- - -
- Feeds - -
- - -

- Get the feed of videos for the server, with optional filter by account name or id -

-
-
-
- GET - /feeds/videos.{format} -
-
-
-
-
-
-
-
-
format: - - string - - xml, - atom, - json - - - xml - -
- -
in path
-
-
-

The format expected (xml defaults to RSS 2.0, atom to ATOM 1.0 and json to JSON FEED 1.0

-
-
-
-
-
accountId: - - number - - -
-
in query
-
-
-

The id of the local account to filter to (beware, users IDs and not actors IDs which will return empty feeds

-
-
-
-
-
accountName: - - string - - -
-
in query
-
-
-

The name of the local account to filter to

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/atom+xml, application/rss+xml, application/json -
-
-
-
-

Job

-
-
-

Jobs are long-running tasks enqueued and processed by the instance itself. No additional worker registration is currently available.

-
-
-
- - -
- Job - -
- - -

- Get list of jobs -

-
-
-
- GET - /jobs -
-
-
-
-
-
-
-
-
state: - - string - - -
- -
in path
-
-
-

The state of the job

-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Job - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - Job - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "state": "string",
-    "category": "string",
-    "handlerName": "string",
-    "handlerInputData": "string",
-    "createdAt": "string",
-    "updatedAt": "string"
-  }
-]
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 - - admin -
-
-
-
-
-

ServerFollowing

-
-
-

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 information across its social graph by posting activities to actors' inbox endpoints.

-
-
-
- - - - - -

- Unfollow a server by hostname -

-
-
-
- DELETE - /server/following/{host} -
-
-
-
-
-
-
-
-
host: - - string - - -
- -
in path
-
-
-

The host to unfollow

-
-
-
-
-
-
-
-
-
-
-
-
201 Created
-
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 - - admin -
-
-
-
-
-
- - - - - -

- Get followers of the server -

-
-
-
- GET - /server/followers -
-
-
-
-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Follow - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - Follow - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "follower": {
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    },
-    "following": {
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    },
-    "score": "number",
-    "state": "string",
-    "createdAt": "string",
-    "updatedAt": "string"
-  }
-]
-
- -
-
-
-
-
- - - - - -

- Get servers followed by the server -

-
-
-
- GET - /server/following -
-
-
-
-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Follow - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - Follow - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "follower": {
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    },
-    "following": {
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    },
-    "score": "number",
-    "state": "string",
-    "createdAt": "string",
-    "updatedAt": "string"
-  }
-]
-
- -
-
-
-
-
- - - - - -

- Follow a server -

-
-
-
- POST - /server/following -
-
-
-
-
-
-
-
-
- - Follow - -
-
-
- -

undefined

- -
-
-
-
-
-
-
Request Content-Types: - application/json -
-
Request Example
-
{
-  "id": "number",
-  "follower": {
-    "id": "number",
-    "uuid": "string",
-    "url": "string",
-    "name": "string",
-    "host": "string",
-    "followingCount": "number",
-    "followersCount": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  },
-  "following": {
-    "id": "number",
-    "uuid": "string",
-    "url": "string",
-    "name": "string",
-    "host": "string",
-    "followingCount": "number",
-    "followersCount": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  },
-  "score": "number",
-  "state": "string",
-  "createdAt": "string",
-  "updatedAt": "string"
-}
-
- -
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 - - admin -
-
-
-
-
-

VideoAbuse

-
-
-

Video abuses deal with reports of local or remote videos alike.

-
-
-
- - -
- VideoAbuse - -
- - -

- Get list of reported video abuses -

-
-
-
- GET - /videos/abuse -
-
-
-
-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - VideoAbuse - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - VideoAbuse - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "reason": "string",
-    "reporterAccount": {
-      "displayName": "string",
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    },
-    "video": {
-      "id": "number",
-      "name": "string",
-      "uuid": "string",
-      "url": "string"
-    },
-    "createdAt": "string"
-  }
-]
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- VideoAbuse - -
- - -

- Report an abuse, on a video by its id -

-
-
-
- POST - /videos/{id}/abuse -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-

Video

-
-
-

Operations dealing with listing, uploading, fetching or modifying videos.

-
-
-
- - -
- Accounts - - Video - -
- - -

- Get videos for an account, provided the name of that account -

-
-
-
- GET - /accounts/{name}/videos -
-
-
-
-
-
-
-
-
name: - - string - - -
- -
in path
-
-
-

The name of the account (chocobozzz or - chocobozzz@peertube.cpy.re for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Video - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "id": "number",
-  "uuid": "string",
-  "createdAt": "string",
-  "publishedAt": "string",
-  "updatedAt": "string",
-  "category": {
-    "id": "number",
-    "label": "string"
-  },
-  "licence": {
-    "id": "number",
-    "label": "string"
-  },
-  "language": {
-    "id": "string",
-    "label": "string"
-  },
-  "privacy": "string",
-  "description": "string",
-  "duration": "number",
-  "isLocal": "boolean",
-  "name": "string",
-  "thumbnailPath": "string",
-  "previewPath": "string",
-  "embedPath": "string",
-  "views": "number",
-  "likes": "number",
-  "dislikes": "number",
-  "nsfw": "boolean",
-  "account": {
-    "name": "string",
-    "displayName": "string",
-    "url": "string",
-    "host": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  }
-}
-
- -
-
-
-
-
- - -
- Video - -
- - -

- Get list of videos -

-
-
-
- GET - /videos -
-
-
-
-
-
-
-
-
category: - - number - - -
-
in query
-
-
-

category id of the video

-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Video - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - Video - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "uuid": "string",
-    "createdAt": "string",
-    "publishedAt": "string",
-    "updatedAt": "string",
-    "category": {
-      "id": "number",
-      "label": "string"
-    },
-    "licence": {
-      "id": "number",
-      "label": "string"
-    },
-    "language": {
-      "id": "string",
-      "label": "string"
-    },
-    "privacy": "string",
-    "description": "string",
-    "duration": "number",
-    "isLocal": "boolean",
-    "name": "string",
-    "thumbnailPath": "string",
-    "previewPath": "string",
-    "embedPath": "string",
-    "views": "number",
-    "likes": "number",
-    "dislikes": "number",
-    "nsfw": "boolean",
-    "account": {
-      "name": "string",
-      "displayName": "string",
-      "url": "string",
-      "host": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    }
-  }
-]
-
- -
-
-
-
-
- - -
- Video - -
- - -

- Get list of video licences known by the server -

-
-
-
- GET - /videos/categories -
-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- -
-
-

successful operation

-
-
-
-
type
-
- string[] - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  "string"
-]
-
- -
-
-
-
-
- - -
- Video - -
- - -

- Get list of video licences known by the server -

-
-
-
- GET - /videos/licences -
-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- -
-
-

successful operation

-
-
-
-
type
-
- string[] - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  "string"
-]
-
- -
-
-
-
-
- - -
- Video - -
- - -

- Get list of languages known by the server -

-
-
-
- GET - /videos/languages -
-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- -
-
-

successful operation

-
-
-
-
type
-
- string[] - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  "string"
-]
-
- -
-
-
-
-
- - -
- Video - -
- - -

- Get list of privacy policies supported by the server -

-
-
-
- GET - /videos/privacies -
-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- -
-
-

successful operation

-
-
-
-
type
-
- string[] - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  "string"
-]
-
- -
-
-
-
-
- - -
- Video - -
- - -

- Update metadata for a video by its id -

-
-
-
- PUT - /videos/{id} -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
thumbnailfile: - - file - - -
-
in formData
-
-
-

Video thumbnail file

-
-
-
-
-
previewfile: - - file - - -
-
in formData
-
-
-

Video preview file

-
-
-
-
-
category: - - number - - -
-
in formData
-
-
-

Video category

-
-
-
-
-
licence: - - number - - -
-
in formData
-
-
-

Video licence

-
-
-
-
-
language: - - string - - -
-
in formData
-
-
-

Video language

-
-
-
-
-
description: - - string - - -
-
in formData
-
-
-

Video description

-
-
-
-
-
waitTranscoding: - - boolean - - -
-
in formData
-
-
-

Whether or not we wait transcoding before publish the video

-
-
-
-
-
support: - - string - - -
-
in formData
-
-
-

Text describing how to support the video uploader

-
-
-
-
-
nsfw: - - boolean - - -
-
in formData
-
-
-

Whether or not this video contains sensitive content

-
-
-
-
-
name: - - string - - -
-
in formData
-
-
-

Video name

-
-
-
-
-
tags: - - string[] - - -
-
in formData
-
-
-

Video tags

-
-
-
-
-
commentsEnabled: - - boolean - - -
-
in formData
-
-
-

Enable or disable comments for this video

-
-
-
-
-
privacy: - - string - - Public, - Unlisted - - - -
-
in formData
-
-
-

Video privacy

-
-
-
-
-
scheduleUpdate: - - object - - -
-
in formData
-
-
-

Schedule an update at a specific datetime

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Video - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "id": "number",
-  "uuid": "string",
-  "createdAt": "string",
-  "publishedAt": "string",
-  "updatedAt": "string",
-  "category": {
-    "id": "number",
-    "label": "string"
-  },
-  "licence": {
-    "id": "number",
-    "label": "string"
-  },
-  "language": {
-    "id": "string",
-    "label": "string"
-  },
-  "privacy": "string",
-  "description": "string",
-  "duration": "number",
-  "isLocal": "boolean",
-  "name": "string",
-  "thumbnailPath": "string",
-  "previewPath": "string",
-  "embedPath": "string",
-  "views": "number",
-  "likes": "number",
-  "dislikes": "number",
-  "nsfw": "boolean",
-  "account": {
-    "name": "string",
-    "displayName": "string",
-    "url": "string",
-    "host": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  }
-}
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- Video - -
- - -

- Get a video by its id -

-
-
-
- GET - /videos/{id} -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Video - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "id": "number",
-  "uuid": "string",
-  "createdAt": "string",
-  "publishedAt": "string",
-  "updatedAt": "string",
-  "category": {
-    "id": "number",
-    "label": "string"
-  },
-  "licence": {
-    "id": "number",
-    "label": "string"
-  },
-  "language": {
-    "id": "string",
-    "label": "string"
-  },
-  "privacy": "string",
-  "description": "string",
-  "duration": "number",
-  "isLocal": "boolean",
-  "name": "string",
-  "thumbnailPath": "string",
-  "previewPath": "string",
-  "embedPath": "string",
-  "views": "number",
-  "likes": "number",
-  "dislikes": "number",
-  "nsfw": "boolean",
-  "account": {
-    "name": "string",
-    "displayName": "string",
-    "url": "string",
-    "host": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  }
-}
-
- -
-
-
-
-
- - -
- Video - -
- - -

- Delete a video by its id -

-
-
-
- DELETE - /videos/{id} -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- Video - -
- - -

- Get a video description by its id -

-
-
-
- GET - /videos/{id}/description -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- -
-
-

successful operation

-
-
-
-
type
-
- string - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
"string"
-
- -
-
-
-
-
- - -
- Video - -
- - -

- Add a view to the video by its id -

-
-
-
- POST - /videos/{id}/views -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
- - -
- Video - -
- - -

- Upload a video file with its metadata -

-
-
-
- POST - /videos/upload -
-
-
-
-
-
-
-
-
videofile: - - file - - -
- -
in formData
-
-
-

Video file

-
-
-
-
-
channelId: - - number - - -
- -
in formData
-
-
-

Channel id that will contain this video

-
-
-
-
-
thumbnailfile: - - file - - -
-
in formData
-
-
-

Video thumbnail file

-
-
-
-
-
previewfile: - - file - - -
-
in formData
-
-
-

Video preview file

-
-
-
-
-
category: - - number - - -
-
in formData
-
-
-

Video category

-
-
-
-
-
licence: - - number - - -
-
in formData
-
-
-

Video licence

-
-
-
-
-
language: - - string - - -
-
in formData
-
-
-

Video language

-
-
-
-
-
description: - - string - - -
-
in formData
-
-
-

Video description

-
-
-
-
-
waitTranscoding: - - boolean - - -
-
in formData
-
-
-

Whether or not we wait transcoding before publish the video

-
-
-
-
-
support: - - string - - -
-
in formData
-
-
-

Text describing how to support the video uploader

-
-
-
-
-
nsfw: - - boolean - - -
-
in formData
-
-
-

Whether or not this video contains sensitive content

-
-
-
-
-
name: - - string - - -
-
in formData
-
-
-

Video name

-
-
-
-
-
tags: - - string[] - - -
-
in formData
-
-
-

Video tags

-
-
-
-
-
commentsEnabled: - - boolean - - -
-
in formData
-
-
-

Enable or disable comments for this video

-
-
-
-
-
privacy: - - string - - Public, - Unlisted - - - -
-
in formData
-
-
-

Video privacy

-
-
-
-
-
scheduleUpdate: - - object - - -
-
in formData
-
-
-

Schedule an update at a specific datetime

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
- - -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "video": {
-    "id": "number",
-    "uuid": "string"
-  }
-}
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-

Search

-
-
-

The search helps to find - videos from within the instance and beyond. Videos from other instances federated by the instance (that is, instances followed by the instance) can be found via keywords and other criteria of the advanced search.

-
-
-
- - -
- Search - -
- - -

- Get the videos corresponding to a given query -

-
-
-
- GET - /search/videos -
-
-
-
-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
search: - - string - - -
- -
in query
-
-
-

String to search

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Video - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - Video - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "uuid": "string",
-    "createdAt": "string",
-    "publishedAt": "string",
-    "updatedAt": "string",
-    "category": {
-      "id": "number",
-      "label": "string"
-    },
-    "licence": {
-      "id": "number",
-      "label": "string"
-    },
-    "language": {
-      "id": "string",
-      "label": "string"
-    },
-    "privacy": "string",
-    "description": "string",
-    "duration": "number",
-    "isLocal": "boolean",
-    "name": "string",
-    "thumbnailPath": "string",
-    "previewPath": "string",
-    "embedPath": "string",
-    "views": "number",
-    "likes": "number",
-    "dislikes": "number",
-    "nsfw": "boolean",
-    "account": {
-      "name": "string",
-      "displayName": "string",
-      "url": "string",
-      "host": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    }
-  }
-]
-
- -
-
-
-
-

VideoComment

-
-
-

Operations dealing with comments to a video. Comments are organized in threads.

-
-
-
- - -
- VideoComment - -
- - -

- Get the comment threads of a video by its id -

-
-
-
- GET - /videos/{id}/comment-threads -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
- - -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "total": "number",
-  "data": [
-    {
-      "id": "number",
-      "url": "string",
-      "text": "string",
-      "threadId": "number",
-      "inReplyToCommentId": "number",
-      "videoId": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "totalReplies": "number",
-      "account": {
-        "displayName": "string",
-        "id": "number",
-        "uuid": "string",
-        "url": "string",
-        "name": "string",
-        "host": "string",
-        "followingCount": "number",
-        "followersCount": "number",
-        "createdAt": "string",
-        "updatedAt": "string",
-        "avatar": {
-          "path": "string",
-          "createdAt": "string",
-          "updatedAt": "string"
-        }
-      }
-    }
-  ]
-}
-
- -
-
-
-
-
- - -
- VideoComment - -
- - -

- Creates a comment thread, on a video by its id -

-
-
-
- POST - /videos/{id}/comment-threads -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
- - -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "comment": {
-    "id": "number",
-    "url": "string",
-    "text": "string",
-    "threadId": "number",
-    "inReplyToCommentId": "number",
-    "videoId": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "totalReplies": "number",
-    "account": {
-      "displayName": "string",
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    }
-  }
-}
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- VideoComment - -
- - -

- Get the comment thread by its id, of a video by its id -

-
-
-
- GET - /videos/{id}/comment-threads/{threadId} -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
threadId: - - number - - -
- -
in path
-
-
-

The thread id (root comment id)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
- - -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "comment": {
-    "id": "number",
-    "url": "string",
-    "text": "string",
-    "threadId": "number",
-    "inReplyToCommentId": "number",
-    "videoId": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "totalReplies": "number",
-    "account": {
-      "displayName": "string",
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    }
-  },
-  "children": [
-    {
-      "comment": {
-        "id": "number",
-        "url": "string",
-        "text": "string",
-        "threadId": "number",
-        "inReplyToCommentId": "number",
-        "videoId": "number",
-        "createdAt": "string",
-        "updatedAt": "string",
-        "totalReplies": "number",
-        "account": {
-          "displayName": "string",
-          "id": "number",
-          "uuid": "string",
-          "url": "string",
-          "name": "string",
-          "host": "string",
-          "followingCount": "number",
-          "followersCount": "number",
-          "createdAt": "string",
-          "updatedAt": "string",
-          "avatar": {
-            "path": "string",
-            "createdAt": "string",
-            "updatedAt": "string"
-          }
-        }
-      },
-      "children": [
-        {
-          "comment": {
-            "id": "number",
-            "url": "string",
-            "text": "string",
-            "threadId": "number",
-            "inReplyToCommentId": "number",
-            "videoId": "number",
-            "createdAt": "string",
-            "updatedAt": "string",
-            "totalReplies": "number",
-            "account": {
-              "id": "number",
-              "uuid": "string",
-              "url": "string",
-              "name": "string",
-              "host": "string",
-              "followingCount": "number",
-              "followersCount": "number",
-              "createdAt": "string",
-              "updatedAt": "string",
-              "avatar": {
-                "path": "string",
-                "createdAt": "string",
-                "updatedAt": "string"
-              }
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
-
- -
-
-
-
-
- - -
- VideoComment - -
- - -

- Creates a comment in a comment thread by its id, of a video by its id -

-
-
-
- POST - /videos/{id}/comments/{commentId} -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
threadId: - - number - - -
- -
in path
-
-
-

The comment id

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
- - -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "comment": {
-    "id": "number",
-    "url": "string",
-    "text": "string",
-    "threadId": "number",
-    "inReplyToCommentId": "number",
-    "videoId": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "totalReplies": "number",
-    "account": {
-      "displayName": "string",
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    }
-  }
-}
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- VideoComment - -
- - -

- Delete a comment in a comment therad by its id, of a video by its id -

-
-
-
- DELETE - /videos/{id}/comments/{commentId} -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
threadId: - - number - - -
- -
in path
-
-
-

The comment id

-
-
-
-
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-

VideoChannel

-
-
-

Operations dealing with creation, modification and video listing of a user's channels.

-
-
-
- - -
- VideoChannel - -
- - -

- Get list of video channels -

-
-
-
- GET - /video-channels -
-
-
-
-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - VideoChannel - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - VideoChannel - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "displayName": "string",
-    "description": "string",
-    "isLocal": "boolean",
-    "ownerAccount": {
-      "id": "number",
-      "uuid": "string"
-    }
-  }
-]
-
- -
-
-
-
-
- - -
- VideoChannel - -
- - -

- Creates a video channel for the current user -

-
-
-
- POST - /video-channels -
-
-
-
-
-
-
-
- -
-
- -

undefined

- -
-
-
-
-
-
-
Request Content-Types: - application/json -
-
Request Example
-
{
-  "name": "string",
-  "description": "string"
-}
-
- -
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- VideoChannel - -
- - -

- Get a video channel by its id -

-
-
-
- GET - /video-channels/{id} -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video channel id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - VideoChannel - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "displayName": "string",
-  "description": "string",
-  "isLocal": "boolean",
-  "ownerAccount": {
-    "id": "number",
-    "uuid": "string"
-  }
-}
-
- -
-
-
-
-
- - -
- VideoChannel - -
- - -

- Update a video channel by its id -

-
-
-
- PUT - /video-channels/{id} -
-
-
-
-
-
-
-
- -
-
- -

undefined

- -
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video channel id or uuid

-
-
-
-
-
-
-
Request Content-Types: - application/json -
-
Request Example
-
{
-  "name": "string",
-  "description": "string"
-}
-
- -
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- VideoChannel - -
- - -

- Delete a video channel by its id -

-
-
-
- DELETE - /video-channels/{id} -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video channel id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- VideoChannel - -
- - -

- Get videos of a video channel by its id -

-
-
-
- GET - /video-channels/{id}/videos -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video channel id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Video - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "id": "number",
-  "uuid": "string",
-  "createdAt": "string",
-  "publishedAt": "string",
-  "updatedAt": "string",
-  "category": {
-    "id": "number",
-    "label": "string"
-  },
-  "licence": {
-    "id": "number",
-    "label": "string"
-  },
-  "language": {
-    "id": "string",
-    "label": "string"
-  },
-  "privacy": "string",
-  "description": "string",
-  "duration": "number",
-  "isLocal": "boolean",
-  "name": "string",
-  "thumbnailPath": "string",
-  "previewPath": "string",
-  "embedPath": "string",
-  "views": "number",
-  "likes": "number",
-  "dislikes": "number",
-  "nsfw": "boolean",
-  "account": {
-    "name": "string",
-    "displayName": "string",
-    "url": "string",
-    "host": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  }
-}
-
- -
-
-
-
-
- - -
- VideoChannel - -
- - -

- Get video channels of an account by its name -

-
-
-
- GET - /accounts/{name}/video-channels -
-
-
-
-
-
-
-
-
name: - - string - - -
- -
in path
-
-
-

The name of the account (chocobozzz or - chocobozzz@peertube.cpy.re for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - VideoChannel - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - VideoChannel - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "displayName": "string",
-    "description": "string",
-    "isLocal": "boolean",
-    "ownerAccount": {
-      "id": "number",
-      "uuid": "string"
-    }
-  }
-]
-
- -
-
-
-
-

User

-
- - -
- User - -
- - -

- Creates user -

-
-
-
- POST - /users -
-
-
-
-
-
-
-
-
- - AddUser - -
-
-
- -

User to create

- -
-
-
-
-
-
-
Request Content-Types: - application/json -
-
Request Example
-
{
-  "username": "string",
-  "password": "string",
-  "email": "string",
-  "videoQuota": "string",
-  "role": "string"
-}
-
- -
-
-
-
-
-
-
-
-
200 OK
-
- - AddUserResponse - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "id": "number",
-  "uuid": "string"
-}
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 - - admin -
-
-
-
-
-
- - -
- User - -
- - -

- Get a list of users -

-
-
-
- GET - /users -
-
-
-
-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - User - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - User - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "username": "string",
-    "email": "string",
-    "displayNSFW": "boolean",
-    "autoPlayVideo": "boolean",
-    "role": "string",
-    "videoQuota": "number",
-    "createdAt": "string",
-    "account": {
-      "displayName": "string",
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    },
-    "videoChannels": [
-      {
-        "displayName": "string",
-        "description": "string",
-        "isLocal": "boolean",
-        "ownerAccount": {
-          "id": "number",
-          "uuid": "string"
-        }
-      }
-    ]
-  }
-]
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- User - -
- - -

- Delete a user by its id -

-
-
-
- DELETE - /users/{id} -
-
-
-
-
-
-
-
-
id: - - number - - -
- -
in path
-
-
-

The user id

-
-
-
-
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 - - admin -
-
-
-
-
-
- - -
- User - -
- - -

- Get user by its id -

-
-
-
- GET - /users/{id} -
-
-
-
-
-
-
-
-
id: - - number - - -
- -
in path
-
-
-

The user id

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - User - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "id": "number",
-  "username": "string",
-  "email": "string",
-  "displayNSFW": "boolean",
-  "autoPlayVideo": "boolean",
-  "role": "string",
-  "videoQuota": "number",
-  "createdAt": "string",
-  "account": {
-    "displayName": "string",
-    "id": "number",
-    "uuid": "string",
-    "url": "string",
-    "name": "string",
-    "host": "string",
-    "followingCount": "number",
-    "followersCount": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  },
-  "videoChannels": [
-    {
-      "displayName": "string",
-      "description": "string",
-      "isLocal": "boolean",
-      "ownerAccount": {
-        "id": "number",
-        "uuid": "string"
-      }
-    }
-  ]
-}
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- User - -
- - -

- Update user profile by its id -

-
-
-
- PUT - /users/{id} -
-
-
-
-
-
-
-
-
- - UpdateUser - -
-
-
- -

undefined

- -
-
-
-
-
-
-
id: - - number - - -
- -
in path
-
-
-

The user id

-
-
-
-
-
-
-
Request Content-Types: - application/json -
-
Request Example
-
{
-  "id": "string",
-  "email": "string",
-  "videoQuota": "string",
-  "role": "string"
-}
-
- -
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- User - -
- - -

- Get current user information -

-
-
-
- GET - /users/me -
-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - User - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - User - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "username": "string",
-    "email": "string",
-    "displayNSFW": "boolean",
-    "autoPlayVideo": "boolean",
-    "role": "string",
-    "videoQuota": "number",
-    "createdAt": "string",
-    "account": {
-      "displayName": "string",
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    },
-    "videoChannels": [
-      {
-        "displayName": "string",
-        "description": "string",
-        "isLocal": "boolean",
-        "ownerAccount": {
-          "id": "number",
-          "uuid": "string"
-        }
-      }
-    ]
-  }
-]
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- User - -
- - -

- Update current user information -

-
-
-
- PUT - /users/me -
-
-
-
-
-
-
-
-
- - UpdateMe - -
-
-
- -

undefined

- -
-
-
-
-
-
-
Request Content-Types: - application/json -
-
Request Example
-
{
-  "password": "string",
-  "email": "string",
-  "displayNSFW": "string",
-  "autoPlayVideo": "string"
-}
-
- -
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- User - -
- - -

- Get current user used quota -

-
-
-
- GET - /users/me/video-quota-used -
-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- -
-
-

successful operation

-
-
-
-
type
-
- number - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
"number"
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- User - -
- - -

- Get rating of video by its id, among those of the current user -

-
-
-
- GET - /users/me/videos/{videoId}/rating -
-
-
-
-
-
-
-
-
videoId: - - string - - -
- -
in path
-
-
-

The video id

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
- - -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "id": "string",
-  "rating": "number"
-}
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- User - -
- - -

- Get videos of the current user -

-
-
-
- GET - /users/me/videos -
-
-
-
-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Video - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - Video - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "uuid": "string",
-    "createdAt": "string",
-    "publishedAt": "string",
-    "updatedAt": "string",
-    "category": {
-      "id": "number",
-      "label": "string"
-    },
-    "licence": {
-      "id": "number",
-      "label": "string"
-    },
-    "language": {
-      "id": "string",
-      "label": "string"
-    },
-    "privacy": "string",
-    "description": "string",
-    "duration": "number",
-    "isLocal": "boolean",
-    "name": "string",
-    "thumbnailPath": "string",
-    "previewPath": "string",
-    "embedPath": "string",
-    "views": "number",
-    "likes": "number",
-    "dislikes": "number",
-    "nsfw": "boolean",
-    "account": {
-      "name": "string",
-      "displayName": "string",
-      "url": "string",
-      "host": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    }
-  }
-]
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-
- - -
- User - -
- - -

- Register a user -

-
-
-
- POST - /users/register -
-
-
-
-
-
-
-
-
- - RegisterUser - -
-
-
- -

undefined

- -
-
-
-
-
-
-
Request Content-Types: - application/json -
-
Request Example
-
{
-  "username": "string",
-  "password": "string",
-  "email": "string"
-}
-
- -
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
- - -
- User - -
- - -

- Update current user avatar -

-
-
-
- POST - /users/me/avatar/pick -
-
-
-
-
-
-
-
-
avatarfile: - - file - - -
-
in formData
-
-
-

The file to upload.

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - Avatar - -
- -
-
-

successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
{
-  "path": "string",
-  "createdAt": "string",
-  "updatedAt": "string"
-}
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-

VideoBlacklist

-
- - - - - -

- Put on blacklist a video by its id -

-
-
-
- POST - /videos/{id}/blacklist -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 - - admin, - moderator -
-
-
-
-
-
- - - - - -

- Delete an entry of the blacklist of a video by its id -

-
-
-
- DELETE - /videos/{id}/blacklist -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 - - admin, - moderator -
-
-
-
-
-
- - - - - -

- Get list of videos on blacklist -

-
-
-
- GET - /videos/blacklist -
-
-
-
-
-
-
-
-
start: - - number - - -
-
in query
-
-
-

Offset

-
-
-
-
-
count: - - number - - -
-
in query
-
-
-

Number of items

-
-
-
-
-
sort: - - string - - -
-
in query
-
-
-

Sort column (-createdAt for example)

-
-
-
-
-
-
-
-
-
-
-
-
200 OK
-
- - VideoBlacklist - -
- -
-
-

successful operation

-
-
-
-
type
-
- - - VideoBlacklist - - - -
-
-
-
-
-
Response Content-Types: - application/json -
-
-
Response Example - (200 OK) -
-
[
-  {
-    "id": "number",
-    "videoId": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "name": "string",
-    "uuid": "string",
-    "description": "string",
-    "duration": "number",
-    "views": "number",
-    "likes": "number",
-    "dislikes": "number",
-    "nsfw": "boolean"
-  }
-]
-
- -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 - - admin, - moderator -
-
-
-
-
-

VideoRate

-
- - -
- VideoRate - -
- - -

- Vote for a video by its id -

-
-
-
- PUT - /videos/{id}/rate -
-
-
-
-
-
-
-
-
id: - - string - - -
- -
in path
-
-
-

The video id or uuid

-
-
-
-
-
-
-
-
-
-
-
-
204 No Content
-
-
-

Successful operation

-
-
-
-
-
-
Response Content-Types: - application/json -
-
-
-
-
-
- - - - - - - - - - - - - -
- OAuth2 -
-
-
-
-
-

Schema Definitions

-
-

- VideoConstantNumber: - -

-
-
-
-
-
- id: - number - -
-
- label: - string - -
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "label": "string"
-}
-
- -
-
-
-
-
-

- VideoConstantString: - -

-
-
-
-
-
- id: - string - -
-
- label: - string - -
-
-
-
-
-
-
Example
-
{
-  "id": "string",
-  "label": "string"
-}
-
- -
-
-
-
-
-

- VideoPrivacy: string - -

-
-
- string - - Public, - Unlisted, - Private - - -
-
-
-
-

- Video: - -

-
-
-
-
-
- id: - number - -
-
- uuid: - string - -
-
- createdAt: - string - -
-
- publishedAt: - string - -
-
- updatedAt: - string - -
-
- category: - - - VideoConstantNumber - - - -
-
- licence: - - - VideoConstantNumber - - - -
-
- language: - - - VideoConstantString - - - -
-
- privacy: - - - VideoPrivacy - - - -
-
- description: - string - -
-
- duration: - number - -
-
- isLocal: - boolean - -
-
- name: - string - -
-
- thumbnailPath: - string - -
-
- previewPath: - string - -
-
- embedPath: - string - -
-
- views: - number - -
-
- likes: - number - -
-
- dislikes: - number - -
-
- nsfw: - boolean - -
-
- account: - object - -
-
-
-
-
- name: - string - -
-
- displayName: - string - -
-
- url: - string - -
-
- host: - string - -
-
- avatar: - - - Avatar - - - -
-
-
-
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "uuid": "string",
-  "createdAt": "string",
-  "publishedAt": "string",
-  "updatedAt": "string",
-  "category": {
-    "id": "number",
-    "label": "string"
-  },
-  "licence": {
-    "id": "number",
-    "label": "string"
-  },
-  "language": {
-    "id": "string",
-    "label": "string"
-  },
-  "privacy": "string",
-  "description": "string",
-  "duration": "number",
-  "isLocal": "boolean",
-  "name": "string",
-  "thumbnailPath": "string",
-  "previewPath": "string",
-  "embedPath": "string",
-  "views": "number",
-  "likes": "number",
-  "dislikes": "number",
-  "nsfw": "boolean",
-  "account": {
-    "name": "string",
-    "displayName": "string",
-    "url": "string",
-    "host": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  }
-}
-
- -
-
-
-
-
-

- VideoAbuse: - -

-
-
-
-
-
- id: - number - -
-
- reason: - string - -
-
- reporterAccount: - - - Account - - - -
-
- video: - object - -
-
-
-
-
- id: - number - -
-
- name: - string - -
-
- uuid: - string - -
-
- url: - string - -
-
-
-
-
- createdAt: - string - -
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "reason": "string",
-  "reporterAccount": {
-    "displayName": "string",
-    "id": "number",
-    "uuid": "string",
-    "url": "string",
-    "name": "string",
-    "host": "string",
-    "followingCount": "number",
-    "followersCount": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  },
-  "video": {
-    "id": "number",
-    "name": "string",
-    "uuid": "string",
-    "url": "string"
-  },
-  "createdAt": "string"
-}
-
- -
-
-
-
-
-

- VideoBlacklist: - -

-
-
-
-
-
- id: - number - -
-
- videoId: - number - -
-
- createdAt: - string - -
-
- updatedAt: - string - -
-
- name: - string - -
-
- uuid: - string - -
-
- description: - string - -
-
- duration: - number - -
-
- views: - number - -
-
- likes: - number - -
-
- dislikes: - number - -
-
- nsfw: - boolean - -
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "videoId": "number",
-  "createdAt": "string",
-  "updatedAt": "string",
-  "name": "string",
-  "uuid": "string",
-  "description": "string",
-  "duration": "number",
-  "views": "number",
-  "likes": "number",
-  "dislikes": "number",
-  "nsfw": "boolean"
-}
-
- -
-
-
-
-
-

- VideoChannel: - -

-
-
-
-
-
- displayName: - string - -
-
- description: - string - -
-
- isLocal: - boolean - -
-
- ownerAccount: - object - -
-
-
-
-
- id: - number - -
-
- uuid: - string - -
-
-
-
-
-
-
-
-
-
Example
-
{
-  "displayName": "string",
-  "description": "string",
-  "isLocal": "boolean",
-  "ownerAccount": {
-    "id": "number",
-    "uuid": "string"
-  }
-}
-
- -
-
-
-
-
-

- VideoComment: - -

-
-
-
-
-
- id: - number - -
-
- url: - string - -
-
- text: - string - -
-
- threadId: - number - -
-
- inReplyToCommentId: - number - -
-
- videoId: - number - -
-
- createdAt: - string - -
-
- updatedAt: - string - -
-
- totalReplies: - number - -
-
- account: - - - Account - - - -
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "url": "string",
-  "text": "string",
-  "threadId": "number",
-  "inReplyToCommentId": "number",
-  "videoId": "number",
-  "createdAt": "string",
-  "updatedAt": "string",
-  "totalReplies": "number",
-  "account": {
-    "displayName": "string",
-    "id": "number",
-    "uuid": "string",
-    "url": "string",
-    "name": "string",
-    "host": "string",
-    "followingCount": "number",
-    "followersCount": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  }
-}
-
- -
-
-
-
-
-

- VideoCommentThreadTree: - -

-
-
-
-
-
- comment: - - - VideoComment - - - -
-
- children: - - - VideoCommentThreadTree - - - -
-
-
- - - VideoCommentThreadTree - - - -
-
-
-
-
-
-
-
-
Example
-
{
-  "comment": {
-    "id": "number",
-    "url": "string",
-    "text": "string",
-    "threadId": "number",
-    "inReplyToCommentId": "number",
-    "videoId": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "totalReplies": "number",
-    "account": {
-      "displayName": "string",
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    }
-  },
-  "children": [
-    {
-      "comment": {
-        "id": "number",
-        "url": "string",
-        "text": "string",
-        "threadId": "number",
-        "inReplyToCommentId": "number",
-        "videoId": "number",
-        "createdAt": "string",
-        "updatedAt": "string",
-        "totalReplies": "number",
-        "account": {
-          "displayName": "string",
-          "id": "number",
-          "uuid": "string",
-          "url": "string",
-          "name": "string",
-          "host": "string",
-          "followingCount": "number",
-          "followersCount": "number",
-          "createdAt": "string",
-          "updatedAt": "string",
-          "avatar": {
-            "path": "string",
-            "createdAt": "string",
-            "updatedAt": "string"
-          }
-        }
-      },
-      "children": [
-        {
-          "comment": {
-            "id": "number",
-            "url": "string",
-            "text": "string",
-            "threadId": "number",
-            "inReplyToCommentId": "number",
-            "videoId": "number",
-            "createdAt": "string",
-            "updatedAt": "string",
-            "totalReplies": "number",
-            "account": {
-              "displayName": "string",
-              "id": "number",
-              "uuid": "string",
-              "url": "string",
-              "name": "string",
-              "host": "string",
-              "followingCount": "number",
-              "followersCount": "number",
-              "createdAt": "string",
-              "updatedAt": "string",
-              "avatar": {
-                "path": "string",
-                "createdAt": "string",
-                "updatedAt": "string"
-              }
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
-
- -
-
-
-
-
-

- Avatar: - -

-
-
-
-
-
- path: - string - -
-
- createdAt: - string - -
-
- updatedAt: - string - -
-
-
-
-
-
-
Example
-
{
-  "path": "string",
-  "createdAt": "string",
-  "updatedAt": "string"
-}
-
- -
-
-
-
-
-

- Actor: - -

-
-
-
-
-
- id: - number - -
-
- uuid: - string - -
-
- url: - string - -
-
- name: - string - -
-
- host: - string - -
-
- followingCount: - number - -
-
- followersCount: - number - -
-
- createdAt: - string - -
-
- updatedAt: - string - -
-
- avatar: - - - Avatar - - - -
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "uuid": "string",
-  "url": "string",
-  "name": "string",
-  "host": "string",
-  "followingCount": "number",
-  "followersCount": "number",
-  "createdAt": "string",
-  "updatedAt": "string",
-  "avatar": {
-    "path": "string",
-    "createdAt": "string",
-    "updatedAt": "string"
-  }
-}
-
- -
-
-
-
-
-

- Account: - -

-
-
-
-
- -
-
-
-
-
- displayName: - string - -
-
-
-
-
-
-
-
-
Example
-
{
-  "displayName": "string",
-  "id": "number",
-  "uuid": "string",
-  "url": "string",
-  "name": "string",
-  "host": "string",
-  "followingCount": "number",
-  "followersCount": "number",
-  "createdAt": "string",
-  "updatedAt": "string",
-  "avatar": {
-    "path": "string",
-    "createdAt": "string",
-    "updatedAt": "string"
-  }
-}
-
- -
-
-
-
-
-

- User: - -

-
-
-
-
-
- id: - number - -
-
- username: - string - -
-
- email: - string - -
-
- displayNSFW: - boolean - -
-
- autoPlayVideo: - boolean - -
-
- role: - string - - User, - Moderator, - Administrator - - -
-
- videoQuota: - number - -
-
- createdAt: - string - -
-
- account: - - - Account - - - -
-
- videoChannels: - - - VideoChannel - - - -
-
-
- - - VideoChannel - - - -
-
-
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "username": "string",
-  "email": "string",
-  "displayNSFW": "boolean",
-  "autoPlayVideo": "boolean",
-  "role": "string",
-  "videoQuota": "number",
-  "createdAt": "string",
-  "account": {
-    "displayName": "string",
-    "id": "number",
-    "uuid": "string",
-    "url": "string",
-    "name": "string",
-    "host": "string",
-    "followingCount": "number",
-    "followersCount": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  },
-  "videoChannels": [
-    {
-      "displayName": "string",
-      "description": "string",
-      "isLocal": "boolean",
-      "ownerAccount": {
-        "id": "number",
-        "uuid": "string"
-      }
-    }
-  ]
-}
-
- -
-
-
-
-
-

- ServerConfig: - -

-
-
-
-
-
- signup: - object - -
-
-
-
-
- allowed: - boolean - -
-
-
-
-
- transcoding: - object - -
-
-
-
-
- enabledResolutions: - number[] - -
-
-
- number - -
-
-
-
-
-
-
- avatar: - object - -
-
-
-
-
- file: - object - -
-
-
-
-
- size: - object - -
-
-
-
-
- max: - number - -
-
-
-
-
-
-
-
- extensions: - string[] - -
-
-
- string - -
-
-
-
-
-
-
- video: - object - -
-
-
-
-
- file: - object - -
-
-
-
-
- extensions: - string[] - -
-
-
- string - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Example
-
{
-  "signup": {
-    "allowed": "boolean"
-  },
-  "transcoding": {
-    "enabledResolutions": [
-      "number"
-    ]
-  },
-  "avatar": {
-    "file": {
-      "size": {
-        "max": "number"
-      }
-    },
-    "extensions": [
-      "string"
-    ]
-  },
-  "video": {
-    "file": {
-      "extensions": [
-        "string"
-      ]
-    }
-  }
-}
-
- -
-
-
-
-
-

- Follow: - -

-
-
-
-
-
- id: - number - -
-
- follower: - - - Actor - - - -
-
- following: - - - Actor - - - -
-
- score: - number - -
-
- state: - string - - pending, - accepted - - -
-
- createdAt: - string - -
-
- updatedAt: - string - -
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "follower": {
-    "id": "number",
-    "uuid": "string",
-    "url": "string",
-    "name": "string",
-    "host": "string",
-    "followingCount": "number",
-    "followersCount": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  },
-  "following": {
-    "id": "number",
-    "uuid": "string",
-    "url": "string",
-    "name": "string",
-    "host": "string",
-    "followingCount": "number",
-    "followersCount": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "avatar": {
-      "path": "string",
-      "createdAt": "string",
-      "updatedAt": "string"
-    }
-  },
-  "score": "number",
-  "state": "string",
-  "createdAt": "string",
-  "updatedAt": "string"
-}
-
- -
-
-
-
-
-

- Job: - -

-
-
-
-
-
- id: - number - -
-
- state: - string - - pending, - processing, - error, - success - - -
-
- category: - string - - transcoding, - activitypub-http - - -
-
- handlerName: - string - -
-
- handlerInputData: - string - -
-
- createdAt: - string - -
-
- updatedAt: - string - -
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "state": "string",
-  "category": "string",
-  "handlerName": "string",
-  "handlerInputData": "string",
-  "createdAt": "string",
-  "updatedAt": "string"
-}
-
- -
-
-
-
-
-

- AddUserResponse: - -

-
-
-
-
-
- id: - number - -
-
- uuid: - string - -
-
-
-
-
-
-
Example
-
{
-  "id": "number",
-  "uuid": "string"
-}
-
- -
-
-
-
-
-

- VideoUploadResponse: - -

-
-
-
-
-
- video: - object - -
-
-
-
-
- id: - number - -
-
- uuid: - string - -
-
-
-
-
-
-
-
-
-
Example
-
{
-  "video": {
-    "id": "number",
-    "uuid": "string"
-  }
-}
-
- -
-
-
-
-
-

- CommentThreadResponse: - -

-
-
-
-
-
- total: - number - -
-
- data: - - - VideoComment - - - -
-
-
- - - VideoComment - - - -
-
-
-
-
-
-
-
-
Example
-
{
-  "total": "number",
-  "data": [
-    {
-      "id": "number",
-      "url": "string",
-      "text": "string",
-      "threadId": "number",
-      "inReplyToCommentId": "number",
-      "videoId": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "totalReplies": "number",
-      "account": {
-        "displayName": "string",
-        "id": "number",
-        "uuid": "string",
-        "url": "string",
-        "name": "string",
-        "host": "string",
-        "followingCount": "number",
-        "followersCount": "number",
-        "createdAt": "string",
-        "updatedAt": "string",
-        "avatar": {
-          "path": "string",
-          "createdAt": "string",
-          "updatedAt": "string"
-        }
-      }
-    }
-  ]
-}
-
- -
-
-
-
-
-

- CommentThreadPostResponse: - -

-
-
-
-
-
- comment: - - - VideoComment - - - -
-
-
-
-
-
-
Example
-
{
-  "comment": {
-    "id": "number",
-    "url": "string",
-    "text": "string",
-    "threadId": "number",
-    "inReplyToCommentId": "number",
-    "videoId": "number",
-    "createdAt": "string",
-    "updatedAt": "string",
-    "totalReplies": "number",
-    "account": {
-      "displayName": "string",
-      "id": "number",
-      "uuid": "string",
-      "url": "string",
-      "name": "string",
-      "host": "string",
-      "followingCount": "number",
-      "followersCount": "number",
-      "createdAt": "string",
-      "updatedAt": "string",
-      "avatar": {
-        "path": "string",
-        "createdAt": "string",
-        "updatedAt": "string"
-      }
-    }
-  }
-}
-
- -
-
-
-
-
-

- AddUser: - -

-
-
-
-
-
- username: - string - - -
-
-

The user username

-
-
- password: - string - - -
-
-

The user password

-
-
- email: - string - - -
-
-

The user email

-
-
- videoQuota: - string - - -
-
-

The user videoQuota

-
-
- role: - string - - -
-
-

The user role

-
-
-
-
-
-
-
Example
-
{
-  "username": "string",
-  "password": "string",
-  "email": "string",
-  "videoQuota": "string",
-  "role": "string"
-}
-
- -
-
-
-
-
-

- UpdateUser: - -

-
-
-
-
-
- id: - string - - -
-
-

The user id

-
-
- email: - string - - -
-
-

The updated email of the user

-
-
- videoQuota: - string - - -
-
-

The updated videoQuota of the user

-
-
- role: - string - - -
-
-

The updated role of the user

-
-
-
-
-
-
-
Example
-
{
-  "id": "string",
-  "email": "string",
-  "videoQuota": "string",
-  "role": "string"
-}
-
- -
-
-
-
-
-

- UpdateMe: - -

-
-
-
-
-
- password: - string - - -
-
-

Your new password

-
-
- email: - string - - -
-
-

Your new email

-
-
- displayNSFW: - string - - -
-
-

Your new displayNSFW

-
-
- autoPlayVideo: - string - - -
-
-

Your new autoPlayVideo

-
-
-
-
-
-
-
Example
-
{
-  "password": "string",
-  "email": "string",
-  "displayNSFW": "string",
-  "autoPlayVideo": "string"
-}
-
- -
-
-
-
-
-

- GetMeVideoRating: - -

-
-
-
-
-
- id: - string - - -
-
-

Id of the video

-
-
- rating: - number - - -
-
-

Rating of the video

-
-
-
-
-
-
-
Example
-
{
-  "id": "string",
-  "rating": "number"
-}
-
- -
-
-
-
-
-

- RegisterUser: - -

-
-
-
-
-
- username: - string - - -
-
-

The username of the user

-
-
- password: - string - - -
-
-

The password of the user

-
-
- email: - string - - -
-
-

The email of the user

-
-
-
-
-
-
-
Example
-
{
-  "username": "string",
-  "password": "string",
-  "email": "string"
-}
-
- -
-
-
-
-
-

- VideoChannelInput: - -

-
-
-
-
-
- name: - string - -
-
- description: - string - -
-
-
-
-
-
-
Example
-
{
-  "name": "string",
-  "description": "string"
-}
-
- -
-
-
-
- -
-
-
- - \ No newline at end of file diff --git a/support/doc/api/html/javascripts/spectacle.js b/support/doc/api/html/javascripts/spectacle.js deleted file mode 100644 index e75fc6a3a..000000000 --- a/support/doc/api/html/javascripts/spectacle.js +++ /dev/null @@ -1,242 +0,0 @@ -$(function() { - // $(document).foundation(); - - var $sidebar = $('#sidebar'); - if ($sidebar.length) { - var $docs = $('#docs'); - var $nav = $sidebar.find('nav'); - - // - // Setup sidebar navigation - var traverse = new Traverse($nav, { - threshold: 10, - barOffset: $sidebar.position().top - }); - - $nav.on('update.traverse', function(event, element) { - $nav.find('section').removeClass('expand'); - var $section = element.parents('section:first'); - if ($section.length) { - $section.addClass('expand'); - } - }); - - // - // Bind the drawer layout - var $drawerLayout = $('.drawer-layout'), - $drawer = $drawerLayout.find('.drawer'), - closeDrawer = function() { - $drawer.removeClass('slide-right slide-left'); - $drawer.find('.drawer-overlay').remove(); - $drawerLayout.removeClass('drawer-open drawer-slide-left-large drawer-slide-right-large'); - return false; - }; - - // Drawer open buttons - $drawerLayout.find('[data-drawer-slide]').click(function(e) { - var $this = $(this), - direction = $this.data('drawer-slide'); - $drawerLayout.addClass('drawer-open'); - $drawer.addClass('slide-' + direction); - - var $overlay = $('') - $drawer.append($overlay); - $overlay.click(closeDrawer); - - return false; - }); - - // Drawer close buttons - $drawerLayout.find('[data-drawer-close]').click(closeDrawer); - } -}); - -/** - * Creates a new instance of Traverse. - * @class - * @fires Traverse#init - * @param {Object} element - jQuery object to add the trigger to. - * @param {Object} options - Overrides to the default plugin settings. - */ -function Traverse(element, options) { - this.$element = element; - this.options = $.extend({}, Traverse.defaults, this.$element.data(), options); - - this._init(); -} - -/** - * Default settings for plugin - */ -Traverse.defaults = { - /** - * Amount of time, in ms, the animated scrolling should take between locations. - * @option - * @example 500 - */ - animationDuration: 500, - /** - * Animation style to use when scrolling between locations. - * @option - * @example 'ease-in-out' - */ - animationEasing: 'linear', - /** - * Number of pixels to use as a marker for location changes. - * @option - * @example 50 - */ - threshold: 50, - /** - * Class applied to the active locations link on the traverse container. - * @option - * @example 'active' - */ - activeClass: 'active', - /** - * Allows the script to manipulate the url of the current page, and if supported, alter the history. - * @option - * @example true - */ - deepLinking: false, - /** - * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar. - * @option - * @example 25 - */ - barOffset: 0 -}; - -/** - * Initializes the Traverse plugin and calls functions to get equalizer functioning on load. - * @private - */ -Traverse.prototype._init = function() { - var id = this.$element[0].id, // || Foundation.GetYoDigits(6, 'traverse'), - _this = this; - this.$targets = $('[data-traverse-target]'); - this.$links = this.$element.find('a'); - this.$element.attr({ - 'data-resize': id, - 'data-scroll': id, - 'id': id - }); - this.$active = $(); - this.scrollPos = parseInt(window.pageYOffset, 10); - - this._events(); -}; - -/** - * Calculates an array of pixel values that are the demarcation lines between locations on the page. - * Can be invoked if new elements are added or the size of a location changes. - * @function - */ -Traverse.prototype.calcPoints = function(){ - var _this = this, - body = document.body, - html = document.documentElement; - - this.points = []; - this.winHeight = Math.round(Math.max(window.innerHeight, html.clientHeight)); - this.docHeight = Math.round(Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight)); - - this.$targets.each(function(){ - var $tar = $(this), - pt = $tar.offset().top; // Math.round($tar.offset().top - _this.options.threshold); - $tar.targetPoint = pt; - _this.points.push(pt); - }); -}; - -/** - * Initializes events for Traverse. - * @private - */ -Traverse.prototype._events = function() { - var _this = this, - $body = $('html, body'), - opts = { - duration: _this.options.animationDuration, - easing: _this.options.animationEasing - }; - - $(window).one('load', function(){ - _this.calcPoints(); - _this._updateActive(); - - $(this).resize(function(e) { - _this.reflow(); - }).scroll(function(e) { - _this._updateActive(); - }); - }) - - this.$element.on('click', 'a[href^="#"]', function(e) { //'click.zf.traverse' - e.preventDefault(); - var arrival = this.getAttribute('href').replace(".", "\\."), - scrollPos = $(arrival).offset().top - _this.options.barOffset; // - _this.options.threshold / 2 - _this.options.barOffset; - - $body.stop(true).animate({ - scrollTop: scrollPos - }, opts); - }); -}; - -/** - * Calls necessary functions to update Traverse upon DOM change - * @function - */ -Traverse.prototype.reflow = function(){ - this.calcPoints(); - this._updateActive(); -}; - -/** - * Updates the visibility of an active location link, - * and updates the url hash for the page, if deepLinking enabled. - * @private - * @function - * @fires Traverse#update - */ - Traverse.prototype._updateActive = function(){ - var winPos = parseInt(window.pageYOffset, 10), - curIdx; - - if(winPos + this.winHeight === this.docHeight){ curIdx = this.points.length - 1; } - else if(winPos < this.points[0]){ curIdx = 0; } - else{ - var isDown = this.scrollPos < winPos, - _this = this, - curVisible = this.points.filter(function(p, i){ - return isDown ? - p <= (winPos + _this.options.barOffset + _this.options.threshold) : - (p - (_this.options.barOffset + _this.options.threshold)) <= winPos; - // p <= (winPos - (offset - _this.options.threshold)) : - // (p - (-offset + _this.options.threshold)) <= winPos; - }); - curIdx = curVisible.length ? curVisible.length - 1 : 0; - } - - var $prev = this.$active; - var $next = this.$links.eq(curIdx); - this.$active.removeClass(this.options.activeClass); - this.$active = $next.addClass(this.options.activeClass); - - if(this.options.deepLinking){ - var hash = this.$active[0].getAttribute('href'); - if(window.history.pushState){ - window.history.pushState(null, null, hash); - }else{ - window.location.hash = hash; - } - } - - this.scrollPos = winPos; - - // Fire event if the active element was changed - var changed = $prev[0] !== $next[0]; - if (changed) { - this.$element.trigger('update.traverse', [this.$active]); - } - }; diff --git a/support/doc/api/html/javascripts/spectacle.min.js b/support/doc/api/html/javascripts/spectacle.min.js deleted file mode 100644 index f8d0b1fbd..000000000 --- a/support/doc/api/html/javascripts/spectacle.min.js +++ /dev/null @@ -1 +0,0 @@ -function Traverse(t,e){this.$element=t,this.options=$.extend({},Traverse.defaults,this.$element.data(),e),this._init()}$(function(){var t=$("#sidebar");if(t.length){$("#docs");var s=t.find("nav");new Traverse(s,{threshold:10,barOffset:t.position().top});s.on("update.traverse",function(t,e){s.find("section").removeClass("expand");var i=e.parents("section:first");i.length&&i.addClass("expand")});var a=$(".drawer-layout"),n=a.find(".drawer"),r=function(){return n.removeClass("slide-right slide-left"),n.find(".drawer-overlay").remove(),a.removeClass("drawer-open drawer-slide-left-large drawer-slide-right-large"),!1};a.find("[data-drawer-slide]").click(function(t){var e=$(this).data("drawer-slide");a.addClass("drawer-open"),n.addClass("slide-"+e);var i=$('');return n.append(i),i.click(r),!1}),a.find("[data-drawer-close]").click(r)}}),Traverse.defaults={animationDuration:500,animationEasing:"linear",threshold:50,activeClass:"active",deepLinking:!1,barOffset:0},Traverse.prototype._init=function(){var t=this.$element[0].id;this.$targets=$("[data-traverse-target]"),this.$links=this.$element.find("a"),this.$element.attr({"data-resize":t,"data-scroll":t,id:t}),this.$active=$(),this.scrollPos=parseInt(window.pageYOffset,10),this._events()},Traverse.prototype.calcPoints=function(){var i=this,t=document.body,e=document.documentElement;this.points=[],this.winHeight=Math.round(Math.max(window.innerHeight,e.clientHeight)),this.docHeight=Math.round(Math.max(t.scrollHeight,t.offsetHeight,e.clientHeight,e.scrollHeight,e.offsetHeight)),this.$targets.each(function(){var t=$(this),e=t.offset().top;t.targetPoint=e,i.points.push(e)})},Traverse.prototype._events=function(){var s=this,a=$("html, body"),n={duration:s.options.animationDuration,easing:s.options.animationEasing};$(window).one("load",function(){s.calcPoints(),s._updateActive(),$(this).resize(function(t){s.reflow()}).scroll(function(t){s._updateActive()})}),this.$element.on("click",'a[href^="#"]',function(t){t.preventDefault();var e=this.getAttribute("href").replace(".","\\."),i=$(e).offset().top-s.options.barOffset;a.stop(!0).animate({scrollTop:i},n)})},Traverse.prototype.reflow=function(){this.calcPoints(),this._updateActive()},Traverse.prototype._updateActive=function(){var t,i=parseInt(window.pageYOffset,10);if(i+this.winHeight===this.docHeight)t=this.points.length-1;else if(i