Properties
| Name | Type | Description |
|---|---|---|
| id | object | object id for the video |
| uuid | object | universal identifier for the video, that can be used across instances |
| shortUUID | object | |
| isLive | boolean | |
| liveSchedules | array | |
| createdAt | string | time at which the video object was first drafted |
| publishedAt | string | time at which the video was marked as ready for playback (with restrictions depending on `privacy`). Usually set after a `state` evolution. |
| updatedAt | string | last time the video's metadata was modified |
| originallyPublishedAt | string | used to represent a date of first publication, prior to the practical publication date of `publishedAt` |
| category | object | category in which the video is classified |
| licence | object | licence under which the video is distributed |
| language | object | main language used in the video |
| privacy | object | privacy policy used to distribute the video |
| truncatedDescription | string | truncated description of the video, written in Markdown. |
| duration | integer | duration of the video in seconds |
| aspectRatio | number | **PeerTube >= 6.1** Aspect ratio of the video stream |
| isLocal | boolean | |
| name | string | title of the video |
| thumbnailPath | string | Deprecated in PeerTube v8.1, use thumbnails instead |
| previewPath | string | Deprecated in PeerTube v8.1, use thumbnails instead |
| thumbnails | array | **PeerTube >= 8.1** Array of thumbnails for the video |
| embedPath | string | |
| views | integer | |
| likes | integer | |
| dislikes | integer | |
| comments | integer | **PeerTube >= 7.2** Number of comments on the video |
| nsfw | boolean | |
| nsfwFlags | object | |
| nsfwSummary | string | **PeerTube >= 7.2** More information about the sensitive content of the video |
| waitTranscoding | boolean | |
| state | object | represents the internal state of the video processing within the PeerTube instance |
| scheduledUpdate | object | |
| blacklisted | boolean | |
| blacklistedReason | string | |
| account | object | |
| channel | object | |
| userHistory | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/peertube/main/json-schema/Video.json",
"title": "Video",
"properties": {
"id": {
"description": "object id for the video",
"allOf": [
{
"$ref": "#/components/schemas/id"
}
]
},
"uuid": {
"description": "universal identifier for the video, that can be used across instances",
"allOf": [
{
"$ref": "#/components/schemas/UUIDv4"
}
]
},
"shortUUID": {
"allOf": [
{
"$ref": "#/components/schemas/shortUUID"
}
]
},
"isLive": {
"type": "boolean"
},
"liveSchedules": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LiveSchedule"
}
},
"createdAt": {
"type": "string",
"format": "date-time",
"example": "2017-10-01T10:52:46.396000+00:00",
"description": "time at which the video object was first drafted"
},
"publishedAt": {
"type": "string",
"format": "date-time",
"example": "2018-10-01T10:52:46.396000+00:00",
"description": "time at which the video was marked as ready for playback (with restrictions depending on `privacy`). Usually set after a `state` evolution."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"example": "2021-05-04T08:01:01.502000+00:00",
"description": "last time the video's metadata was modified"
},
"originallyPublishedAt": {
"type": "string",
"nullable": true,
"format": "date-time",
"example": "2010-10-01T10:52:46.396000+00:00",
"description": "used to represent a date of first publication, prior to the practical publication date of `publishedAt`"
},
"category": {
"allOf": [
{
"$ref": "#/components/schemas/VideoConstantNumber-Category"
}
],
"description": "category in which the video is classified"
},
"licence": {
"allOf": [
{
"$ref": "#/components/schemas/VideoConstantNumber-Licence"
}
],
"description": "licence under which the video is distributed"
},
"language": {
"allOf": [
{
"$ref": "#/components/schemas/VideoConstantString-Language"
}
],
"description": "main language used in the video"
},
"privacy": {
"allOf": [
{
"$ref": "#/components/schemas/VideoPrivacyConstant"
}
],
"description": "privacy policy used to distribute the video"
},
"truncatedDescription": {
"type": "string",
"nullable": true,
"example": "**[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\\r\\n\\r\\n\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\\r\\n*A decentralized video hosting network, based on fr...\n",
"minLength": 3,
"maxLength": 250,
"description": "truncated description of the video, written in Markdown.\n"
},
"duration": {
"type": "integer",
"example": 1419,
"format": "seconds",
"description": "duration of the video in seconds"
},
"aspectRatio": {
"type": "number",
"nullable": true,
"format": "float",
"example": 1.778,
"description": "**PeerTube >= 6.1** Aspect ratio of the video stream"
},
"isLocal": {
"type": "boolean"
},
"name": {
"type": "string",
"description": "title of the video",
"example": "What is PeerTube?",
"minLength": 3,
"maxLength": 120
},
"thumbnailPath": {
"description": "Deprecated in PeerTube v8.1, use thumbnails instead",
"deprecated": true,
"type": "string"
},
"previewPath": {
"description": "Deprecated in PeerTube v8.1, use thumbnails instead",
"deprecated": true,
"type": "string"
},
"thumbnails": {
"description": "**PeerTube >= 8.1** Array of thumbnails for the video",
"type": "array",
"items": {
"$ref": "#/components/schemas/Thumbnail"
}
},
"embedPath": {
"type": "string",
"example": "/videos/embed/a65bc12f-9383-462e-81ae-8207e8b434ee"
},
"views": {
"type": "integer",
"example": 1337
},
"likes": {
"type": "integer",
"example": 42
},
"dislikes": {
"type": "integer",
"example": 7
},
"comments": {
"description": "**PeerTube >= 7.2** Number of comments on the video",
"type": "integer"
},
"nsfw": {
"type": "boolean"
},
"nsfwFlags": {
"allOf": [
{
"$ref": "#/components/schemas/NSFWFlag"
}
]
},
"nsfwSummary": {
"type": "string",
"description": "**PeerTube >= 7.2** More information about the sensitive content of the video"
},
"waitTranscoding": {
"type": "boolean",
"nullable": true
},
"state": {
"allOf": [
{
"$ref": "#/components/schemas/VideoStateConstant"
}
],
"description": "represents the internal state of the video processing within the PeerTube instance"
},
"scheduledUpdate": {
"nullable": true,
"allOf": [
{
"$ref": "#/components/schemas/VideoScheduledUpdate"
}
]
},
"blacklisted": {
"nullable": true,
"type": "boolean"
},
"blacklistedReason": {
"nullable": true,
"type": "string"
},
"account": {
"$ref": "#/components/schemas/AccountSummary"
},
"channel": {
"$ref": "#/components/schemas/VideoChannelSummary"
},
"userHistory": {
"nullable": true,
"type": "object",
"properties": {
"currentTime": {
"type": "integer"
}
}
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/Video"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.