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

The id of the account

start
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

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

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

The id of the account

start
in query
number

starting page

count
in query
number

(no description)

sort
in query
number

sorting

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

ServerFollowing

DELETE /server/following/{host}

host
in path
string

The host to unfollow

201 Created

successful operation

Response Content-Types: application/json

GET /server/followers

start
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

200 OK

successful operation

type
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
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

200 OK

successful operation

type
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
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

200 OK

successful operation

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

The user id

204 No Content

successful operation

Response Content-Types: application/json

GET /users/{id}

id
in path
string

The user id

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

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

GET /users/me

200 OK

successful operation

type
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

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

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

videoId
in path
string

The video id

successful operation

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

GET /users/me/videos

start
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

200 OK

successful operation

type
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
in formData
file

The file to upload.

200 OK

successful operation

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

Video

GET /videos

start
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

200 OK

successful operation

type
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

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

GET /videos/licences

200 OK

successful operation

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

GET /videos/languages

200 OK

successful operation

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

GET /videos/privacies

200 OK

successful operation

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

GET /videos/search

start
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

200 OK

successful operation

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

The video id

thumbnailfile
in formData
file

Video thumbnail file

previewfile
in formData
file

Video preview file

category
in formData
number

Video category

licence
in formData
number

Video licence

language
in formData
number

Video language

description
in formData
string

Video description

support
in formData
string

Text describing how to support the video uploader

nsfw
in formData
boolean

Whether or not this video contains sensitive content

name
in formData
string

Video name

tags
in formData
string[]

Video tags

commentsEnabled
in formData
boolean

Enable or disable comments for this video

privacy
in formData
string Public, Unlisted

Video privacy

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

The video id

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

The video id

204 No Content

successful operation

Response Content-Types: application/json

GET /videos/{id}/description

id
in path
string

The video id

200 OK

successful operation

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

POST /videos/{id}/views

id
in path
string

The video id

204 No Content

successful operation

Response Content-Types: application/json

POST /videos/upload

videofile
in formData
file

Video file

thumbnailfile
in formData
file

Video thumbnail file

previewfile
in formData
file

Video preview file

category
in formData
number

Video category

licence
in formData
number

Video licence

language
in formData
number

Video language

description
in formData
string

Video description

support
in formData
string

Text describing how to support the video uploader

channelId
in formData
number

Channel id that will contain this video

nsfw
in formData
boolean

Whether or not this video contains sensitive content

name
in formData
string

Video name

tags
in formData
string[]

Video tags

commentsEnabled
in formData
boolean

Enable or disable comments for this video

privacy
in formData
string Public, Unlisted, Private

Video privacy

successful operation

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

VideoAbuse

GET /videos/abuse

start
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

200 OK

successful operation

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

The video id

204 No Content

successful operation

Response Content-Types: application/json

VideoBlacklist

POST /videos/{videoId}/blacklist

videoId
in path
string

The video id

204 No Content

successful operation

Response Content-Types: application/json

DELETE /videos/{videoId}/blacklist

videoId
in path
string

The video id

204 No Content

successful operation

Response Content-Types: application/json

GET /videos/blacklist

start
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

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
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

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

The video id

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

The video id

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

The video id

204 No Content

successful operation

Response Content-Types: application/json

GET /videos/accounts/{accountId}/channels

accountId
in path
string

The account id

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

The video id

start
in query
number

starting page

stop
in query
number

stopping page

sort
in query
number

sorting

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

The video id

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

The video id

threadId
in path
string

The thread id

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

The video id

commentId
in path
string

The comment id

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

The video id

commentId
in path
string

The comment id

204 No Content

successful operation

Response Content-Types: application/json

VideoRate

PUT /videos/{id}/rate

id
in path
string

The video id

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