PeerTube API Reference

Federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.

API Endpoint
https://peertube.example.com/api/v1
Schemes: https
Version: 1.0.0-beta

Accounts

GET /accounts/{id}

id

The id of the account

type
string
in
path
start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query
200 OK

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"
  }
}

GET /accounts

200 OK

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"
    }
  }
]

Config

GET /config

200 OK

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"
      ]
    }
  }
}

Job

Job

GET /jobs

state

The id of the account

type
string
in
path
start

starting page

type
number
in
query
count

(no description)

type
number
in
query
sort

sorting

type
number
in
query
200 OK
Job

successful operation

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

ServerFollowing

DELETE /server/following/{host}

host

The host to unfollow

type
string
in
path
201 Created

successful operation

Response Content-Types: application/json

GET /server/followers

start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query
200 OK

successful operation

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 /server/following

start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query
200 OK

successful operation

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"
  }
]

POST /server/following

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

User

POST /users

User to create

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

successful operation

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

GET /users

start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query
200 OK

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",
        "owner": {
          "name": "string",
          "uuid": "string"
        },
        "videos": [
          {
            "id": "number",
            "uuid": "string",
            "createdAt": "string",
            "publishedAt": "string",
            "updatedAt": "string",
            "category": {
              "id": "number",
              "label": "string"
            },
            "licence": {
              "id": "number",
              "label": "string"
            },
            "language": {
              "id": "number",
              "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"
              }
            }
          }
        ]
      }
    ]
  }
]

DELETE /users/{id}

id

The user id

type
string
in
path
204 No Content

successful operation

Response Content-Types: application/json

GET /users/{id}

id

The user id

type
string
in
path
200 OK

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",
      "owner": {
        "name": "string",
        "uuid": "string"
      },
      "videos": [
        {
          "id": "number",
          "uuid": "string",
          "createdAt": "string",
          "publishedAt": "string",
          "updatedAt": "string",
          "category": {
            "id": "number",
            "label": "string"
          },
          "licence": {
            "id": "number",
            "label": "string"
          },
          "language": {
            "id": "number",
            "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"
            }
          }
        }
      ]
    }
  ]
}

PUT /users/{id}

undefined
id

The user id

type
string
in
path
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

GET /users/me

200 OK

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",
        "owner": {
          "name": "string",
          "uuid": "string"
        },
        "videos": [
          {
            "id": "number",
            "uuid": "string",
            "createdAt": "string",
            "publishedAt": "string",
            "updatedAt": "string",
            "category": {
              "id": "number",
              "label": "string"
            },
            "licence": {
              "id": "number",
              "label": "string"
            },
            "language": {
              "id": "number",
              "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"
              }
            }
          }
        ]
      }
    ]
  }
]

PUT /users/me

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

GET /users/me/video-quota-used

200 OK

successful operation

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

GET /users/me/videos/{videoId}/rating

videoId

The video id

type
string
in
path

successful operation

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

GET /users/me/videos

start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query
200 OK

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": "number",
      "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"
      }
    }
  }
]

POST /users/register

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

successful operation

Response Content-Types: application/json

POST /users/me/avatar/pick

avatarfile

The file to upload.

type
file
in
formData
200 OK

successful operation

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

Video

GET /videos

start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query
200 OK

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": "number",
      "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"
      }
    }
  }
]

GET /videos/categories

200 OK

successful operation

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

GET /videos/licences

200 OK

successful operation

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

GET /videos/languages

200 OK

successful operation

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

GET /videos/privacies

200 OK

successful operation

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

GET /videos/search

start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query
200 OK

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": "number",
      "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"
      }
    }
  }
]

PUT /videos/{id}

id

The video id

type
string
in
path
thumbnailfile

Video thumbnail file

type
file
in
formData
previewfile

Video preview file

type
file
in
formData
category

Video category

type
number
in
formData
licence

Video licence

type
number
in
formData
language

Video language

type
number
in
formData
description

Video description

type
string
in
formData
support

Text describing how to support the video uploader

type
string
in
formData
nsfw

Whether or not this video contains sensitive content

type
boolean
in
formData
name

Video name

type
string
in
formData
tags

Video tags

type
string[]
in
formData
commentsEnabled

Enable or disable comments for this video

type
boolean
in
formData
privacy

Video privacy

type
string Public, Unlisted, Private
in
formData
200 OK

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": "number",
    "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"
    }
  }
}

GET /videos/{id}

id

The video id

type
string
in
path
200 OK

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": "number",
    "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"
    }
  }
}

DELETE /videos/{id}

id

The video id

type
string
in
path
204 No Content

successful operation

Response Content-Types: application/json

GET /videos/{id}/description

id

The video id

type
string
in
path
200 OK

successful operation

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

POST /videos/{id}/views

id

The video id

type
string
in
path
204 No Content

successful operation

Response Content-Types: application/json

POST /videos/upload

videofile

Video file

type
file
in
formData
thumbnailfile

Video thumbnail file

type
file
in
formData
previewfile

Video preview file

type
file
in
formData
category

Video category

type
number
in
formData
licence

Video licence

type
number
in
formData
language

Video language

type
number
in
formData
description

Video description

type
string
in
formData
support

Text describing how to support the video uploader

type
string
in
formData
channelId

Channel id that will contain this video

type
number
in
formData
nsfw

Whether or not this video contains sensitive content

type
boolean
in
formData
name

Video name

type
string
in
formData
tags

Video tags

type
string[]
in
formData
commentsEnabled

Enable or disable comments for this video

type
boolean
in
formData
privacy

Video privacy

type
string Public, Unlisted, Private
in
formData

successful operation

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

VideoAbuse

GET /videos/abuse

start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query
200 OK

successful operation

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"
  }
]

POST /videos/{id}/abuse

id

The video id

type
string
in
path
204 No Content

successful operation

Response Content-Types: application/json

VideoBlacklist

POST /videos/{videoId}/blacklist

videoId

The video id

type
string
in
path
204 No Content

successful operation

Response Content-Types: application/json

DELETE /videos/{videoId}/blacklist

videoId

The video id

type
string
in
path
204 No Content

successful operation

Response Content-Types: application/json

GET /videos/blacklist

start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query

successful operation

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"
  }
]

VideoChannel

GET /videos/channels

start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query
200 OK

successful operation

Response Content-Types: application/json
Response Example (200 OK)
[
  {
    "displayName": "string",
    "description": "string",
    "isLocal": "boolean",
    "owner": {
      "name": "string",
      "uuid": "string"
    },
    "videos": [
      {
        "id": "number",
        "uuid": "string",
        "createdAt": "string",
        "publishedAt": "string",
        "updatedAt": "string",
        "category": {
          "id": "number",
          "label": "string"
        },
        "licence": {
          "id": "number",
          "label": "string"
        },
        "language": {
          "id": "number",
          "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"
          }
        }
      }
    ]
  }
]

POST /videos/channels

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

successful operation

Response Content-Types: application/json

GET /videos/channels/{id}

id

The video id

type
string
in
path
200 OK

successful operation

Response Content-Types: application/json
Response Example (200 OK)
{
  "displayName": "string",
  "description": "string",
  "isLocal": "boolean",
  "owner": {
    "name": "string",
    "uuid": "string"
  },
  "videos": [
    {
      "id": "number",
      "uuid": "string",
      "createdAt": "string",
      "publishedAt": "string",
      "updatedAt": "string",
      "category": {
        "id": "number",
        "label": "string"
      },
      "licence": {
        "id": "number",
        "label": "string"
      },
      "language": {
        "id": "number",
        "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"
        }
      }
    }
  ]
}

PUT /videos/channels/{id}

undefined
id

The video id

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

successful operation

Response Content-Types: application/json

DELETE /videos/channels/{id}

id

The video id

type
string
in
path
204 No Content

successful operation

Response Content-Types: application/json

GET /videos/accounts/{accountId}/channels

accountId

The account id

type
string
in
path
200 OK

successful operation

Response Content-Types: application/json
Response Example (200 OK)
[
  {
    "displayName": "string",
    "description": "string",
    "isLocal": "boolean",
    "owner": {
      "name": "string",
      "uuid": "string"
    },
    "videos": [
      {
        "id": "number",
        "uuid": "string",
        "createdAt": "string",
        "publishedAt": "string",
        "updatedAt": "string",
        "category": {
          "id": "number",
          "label": "string"
        },
        "licence": {
          "id": "number",
          "label": "string"
        },
        "language": {
          "id": "number",
          "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

GET /videos/{videoId}/comment-threads

videoId

The video id

type
string
in
path
start

starting page

type
number
in
query
stop

stopping page

type
number
in
query
sort

sorting

type
number
in
query

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"
        }
      }
    }
  ]
}

POST /videos/{videoId}/comment-threads

videoId

The video id

type
string
in
path

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"
      }
    }
  }
}

GET /videos/{videoId}/comment-threads/{threadId}

videoId

The video id

type
string
in
path
threadId

The thread id

type
string
in
path

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"
              }
            }
          }
        }
      ]
    }
  ]
}

POST /videos/{videoId}/comments/{commentId}

videoId

The video id

type
string
in
path
commentId

The comment id

type
string
in
path

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"
      }
    }
  }
}

DELETE /videos/{videoId}/comments/{commentId}

videoId

The video id

type
string
in
path
commentId

The comment id

type
string
in
path
204 No Content

successful operation

Response Content-Types: application/json

VideoRate

PUT /videos/{id}/rate

id

The video id

type
string
in
path
204 No Content

successful operation

Response Content-Types: application/json

Schema Definitions

VideoConstant:

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

VideoPrivacy: string

string Public, Unlisted, Private

Video:

id: number
uuid: string
createdAt: string
publishedAt: string
updatedAt: string
category: VideoConstant
licence: VideoConstant
language: VideoConstant
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
Example
{
  "id": "number",
  "uuid": "string",
  "createdAt": "string",
  "publishedAt": "string",
  "updatedAt": "string",
  "category": {
    "id": "number",
    "label": "string"
  },
  "licence": {
    "id": "number",
    "label": "string"
  },
  "language": {
    "id": "number",
    "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
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
owner: object
videos: Video
Example
{
  "displayName": "string",
  "description": "string",
  "isLocal": "boolean",
  "owner": {
    "name": "string",
    "uuid": "string"
  },
  "videos": [
    {
      "id": "number",
      "uuid": "string",
      "createdAt": "string",
      "publishedAt": "string",
      "updatedAt": "string",
      "category": {
        "id": "number",
        "label": "string"
      },
      "licence": {
        "id": "number",
        "label": "string"
      },
      "language": {
        "id": "number",
        "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:

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:

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
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",
      "owner": {
        "name": "string",
        "uuid": "string"
      },
      "videos": [
        {
          "id": "number",
          "uuid": "string",
          "createdAt": "string",
          "publishedAt": "string",
          "updatedAt": "string",
          "category": {
            "id": "number",
            "label": "string"
          },
          "licence": {
            "id": "number",
            "label": "string"
          },
          "language": {
            "id": "number",
            "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"
            }
          }
        }
      ]
    }
  ]
}

ServerConfig:

signup: object
transcoding: object
avatar: object
video: object
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
Example
{
  "video": {
    "id": "number",
    "uuid": "string"
  }
}

CommentThreadResponse:

total: number
data: 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"
}