@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Vimeo API
@base https://api.vimeo.com
@version 3.4
@auth Bearer bearer | OAuth2
@endpoints 328
@hint download_for_search
@toc root(1), categories(6), channels(43), contentratings(1), creativecommons(1), groups(9), languages(1), me(79), oauth(4), ondemand(41), tags(2), tokens(1), tutorial(1), users(88), videos(50)

@group root
@endpoint GET /
@optional {openapi: bool}
@returns(200)

@endgroup

@group categories
@endpoint GET /categories
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(last_video_featured_time/name)}
@returns(200)

@endpoint GET /categories/{category}
@required {category: str}
@returns(200)
@errors {404}

@endpoint GET /categories/{category}/channels
@required {category: str}
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date/followers/videos)}
@returns(200)
@errors {404}

@endpoint GET /categories/{category}/groups
@required {category: str}
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date/members/videos)}
@returns(200)
@errors {404}

@endpoint GET /categories/{category}/videos
@required {category: str}
@optional {direction: str(asc/desc), filter: str(conditional_featured/embeddable), filter_embeddable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/duration/featured/likes/plays/relevant)}
@returns(200)
@errors {404}

@endpoint GET /categories/{category}/videos/{video_id}
@required {category: str, video_id: num}
@returns(200)
@errors {404}

@endgroup

@group channels
@endpoint GET /channels
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, query: str, sort: str(alphabetical/date/followers/relevant/videos)}
@returns(200)
@errors {400}

@endpoint POST /channels
@returns(200)
@errors {400, 403}

@endpoint DELETE /channels/{channel_id}
@required {channel_id: num}
@returns(204)
@errors {403}

@endpoint GET /channels/{channel_id}
@required {channel_id: num}
@returns(200)

@endpoint PATCH /channels/{channel_id}
@required {channel_id: num}
@returns(200)
@errors {400}

@endpoint GET /channels/{channel_id}/categories
@required {channel_id: num}
@returns(200)
@errors {404}

@endpoint PUT /channels/{channel_id}/categories
@required {channel_id: num, channels: [str]}
@returns(204)
@errors {400, 401, 403, 404}

@endpoint DELETE /channels/{channel_id}/categories/{category}
@required {category: str, channel_id: num}
@returns(204)
@errors {401, 403, 404}

@endpoint PUT /channels/{channel_id}/categories/{category}
@required {category: str, channel_id: num}
@returns(204)
@errors {400, 401, 403, 404}

@endpoint DELETE /channels/{channel_id}/moderators
@required {channel_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /channels/{channel_id}/moderators
@required {channel_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)

@endpoint PATCH /channels/{channel_id}/moderators
@required {channel_id: num, user_uri: str}
@returns(200)
@errors {400, 403, 404}

@endpoint PUT /channels/{channel_id}/moderators
@required {channel_id: num, user_uri: str}
@returns(200)
@errors {400, 403, 404}

@endpoint GET /channels/{channel_id}/moderators/{user_id}
@required {channel_id: num, user_id: num}
@returns(200)

@endpoint DELETE /channels/{channel_id}/moderators/{user_id}
@required {channel_id: num, user_id: num}
@returns(204)
@errors {403, 404}

@endpoint PUT /channels/{channel_id}/moderators/{user_id}
@required {channel_id: num, user_id: num}
@errors {403, 404}

@endpoint GET /channels/{channel_id}/privacy/users
@required {channel_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num}
@returns(200)
@errors {401, 403, 404}

@endpoint PUT /channels/{channel_id}/privacy/users
@required {channel_id: num}
@returns(200)
@errors {400, 401, 403, 404}

@endpoint DELETE /channels/{channel_id}/privacy/users/{user_id}
@required {channel_id: num, user_id: num}
@returns(204)
@errors {401, 403, 404}

@endpoint PUT /channels/{channel_id}/privacy/users/{user_id}
@required {channel_id: num, user_id: num}
@returns(200)
@errors {401, 403, 404}

@endpoint GET /channels/{channel_id}/tags
@required {channel_id: num}
@returns(200)
@errors {400}

@endpoint PUT /channels/{channel_id}/tags
@required {channel_id: num}
@returns(200)
@errors {400, 401, 403}

@endpoint DELETE /channels/{channel_id}/tags/{word}
@required {channel_id: num, word: str}
@returns(204)
@errors {400, 401, 403}

@endpoint GET /channels/{channel_id}/tags/{word}
@required {channel_id: num, word: str}
@returns(204)
@errors {400, 404}

@endpoint PUT /channels/{channel_id}/tags/{word}
@required {channel_id: num, word: str}
@returns(204)
@errors {400, 401, 403}

@endpoint GET /channels/{channel_id}/users
@required {channel_id: num, filter: str}
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)
@errors {404}

@endpoint DELETE /channels/{channel_id}/videos
@required {channel_id: num, video_uri: str}
@returns(204) {categories: [map], content_rating: [str], context: map{action: str, resource: map?, resource_type: str}, created_time: str, description: str?, duration: num, embed: any, height: num, language: str?, last_user_action_event_date: str?, license: str, link: str, metadata: map{connections: map{available_albums: map{options: [str], total: num, uri: str}, available_channels: map{options: [str], total: num, uri: str}, comments: map{options: [str], total: num, uri: str}, credits: map?{options: [str], total: num, uri: str}, likes: map{options: [str], total: num, uri: str}, ondemand: map{options: [str], resource_key: str, uri: str}, pictures: map{options: [str], total: num, uri: str}, playback: map{options: [str], uri: str}, recommendations: map?{options: [str], uri: str}, related: map?{options: [str], uri: str}, season: map{name: str, options: [str], uri: str}, texttracks: map{options: [str], total: num, uri: str}, trailer: map{options: [str], resource_key: str, uri: str}, users_with_access: map{options: [str], total: num, uri: str}, versions: map{current_uri: str, options: [str], resource_key: str, total: num, uri: str}}, interactions: map{buy: map?{currency: str?, display_price: str?, download: str, drm: bool, link: str?, price: num?, purchase_time: str?, stream: str, uri: str?}, channel: map?{options: [str], uri: str}, like: map{added: bool, added_time: str, options: [str], uri: str}, rent: map?{currency: str?, display_price: str?, drm: bool, expires_time: str?, link: str?, price: num?, purchase_time: str?, stream: str, uri: str?}, report: map{options: [str], reason: [str], uri: str}, subscribe: map?{drm: bool, expires_time: str, purchase_time: str, stream: str}, watched: map{added: bool, added_time: str, options: [str], uri: str}, watchlater: map{added: bool, added_time: str, options: [str], uri: str}}}, modified_time: str, name: str, parent_folder: any?, password: str, pictures: any, privacy: map{add: bool, comments: str, download: bool, embed: str, view: str}, release_time: str, resource_key: str, spatial: map{director_timeline: [map], field_of_view: num?, projection: str?, stereo_format: str?}, stats: map{plays: num?}, status: str?, tags: [map], transcode: map?{status: str}, type: str, upload: map?{approach: str, complete_uri: str, form: str, link: str, redirect_url: str, size: num, status: str, upload_link: str}, uri: str, user: any?, width: num}
@errors {403, 404}

@endpoint GET /channels/{channel_id}/videos
@required {channel_id: num}
@optional {containing_uri: str, direction: str(asc/desc), filter: str, filter_embeddable: bool, page: num, per_page: num, query: str, sort: str(added/alphabetical/comments/date/default/duration/likes/manual/modified_time/plays)}
@returns(200)
@errors {304, 400, 404}

@endpoint PUT /channels/{channel_id}/videos
@required {channel_id: num, video_uri: str}
@returns(200)
@errors {403, 404}

@endpoint DELETE /channels/{channel_id}/videos/{video_id}
@required {channel_id: num, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /channels/{channel_id}/videos/{video_id}
@required {channel_id: num, video_id: num}
@returns(200)
@errors {404}

@endpoint PUT /channels/{channel_id}/videos/{video_id}
@required {channel_id: num, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /channels/{channel_id}/videos/{video_id}/comments
@required {channel_id: num, video_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num}
@returns(200)

@endpoint POST /channels/{channel_id}/videos/{video_id}/comments
@required {channel_id: num, video_id: num}
@returns(201)
@errors {400, 401, 403}

@endpoint GET /channels/{channel_id}/videos/{video_id}/credits
@required {channel_id: num, video_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)

@endpoint POST /channels/{channel_id}/videos/{video_id}/credits
@required {channel_id: num, video_id: num}
@returns(201)
@errors {400, 403}

@endpoint GET /channels/{channel_id}/videos/{video_id}/likes
@required {channel_id: num, video_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(alphabetical/date)}
@returns(200)

@endpoint GET /channels/{channel_id}/videos/{video_id}/pictures
@required {channel_id: num, video_id: num}
@optional {page: num, per_page: num}
@returns(200)

@endpoint POST /channels/{channel_id}/videos/{video_id}/pictures
@required {channel_id: num, video_id: num}
@returns(201)

@endpoint GET /channels/{channel_id}/videos/{video_id}/privacy/users
@required {channel_id: num, video_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {400}

@endpoint PUT /channels/{channel_id}/videos/{video_id}/privacy/users
@required {channel_id: num, video_id: num}
@returns(200)

@endpoint GET /channels/{channel_id}/videos/{video_id}/texttracks
@required {channel_id: num, video_id: num}
@returns(200)
@errors {404}

@endpoint POST /channels/{channel_id}/videos/{video_id}/texttracks
@required {channel_id: num, video_id: num}
@returns(201)
@errors {403}

@endgroup

@group contentratings
@endpoint GET /contentratings
@returns(200)

@endgroup

@group creativecommons
@endpoint GET /creativecommons
@returns(200)

@endgroup

@group groups
@endpoint GET /groups
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, query: str, sort: str(alphabetical/date/followers/relevant/videos)}
@returns(200)

@endpoint POST /groups
@returns(200)
@errors {400, 403}

@endpoint DELETE /groups/{group_id}
@required {group_id: num}
@returns(204)
@errors {403}

@endpoint GET /groups/{group_id}
@required {group_id: num}
@returns(200)

@endpoint GET /groups/{group_id}/users
@required {group_id: num}
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)
@errors {404}

@endpoint GET /groups/{group_id}/videos
@required {group_id: num}
@optional {direction: str(asc/desc), filter: str, filter_embeddable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/duration/likes/plays)}
@returns(200)
@errors {304, 404}

@endpoint DELETE /groups/{group_id}/videos/{video_id}
@required {group_id: num, video_id: num}
@returns(204)
@errors {403}

@endpoint GET /groups/{group_id}/videos/{video_id}
@required {group_id: num, video_id: num}
@returns(200)
@errors {404}

@endpoint PUT /groups/{group_id}/videos/{video_id}
@required {group_id: num, video_id: num}
@returns(200)
@returns(202)
@errors {403}

@endgroup

@group languages
@endpoint GET /languages
@optional {filter: str}
@returns(200)

@endgroup

@group me
@endpoint GET /me
@returns(200)

@endpoint PATCH /me
@returns(200)

@endpoint GET /me/albums
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date/duration/videos)}
@returns(200)
@errors {400}

@endpoint POST /me/albums
@returns(201)
@errors {400, 403}

@endpoint DELETE /me/albums/{album_id}
@required {album_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /me/albums/{album_id}
@required {album_id: num}
@returns(200)
@errors {404}

@endpoint PATCH /me/albums/{album_id}
@required {album_id: num}
@returns(200)
@errors {400, 403, 404}

@endpoint GET /me/albums/{album_id}/videos
@required {album_id: num}
@optional {containing_uri: str, direction: str(asc/desc), filter: str, filter_embeddable: bool, page: num, password: str, per_page: num, query: str, sort: str(alphabetical/comments/date/default/duration/likes/manual/modified_time/plays), weak_search: bool}
@returns(200)
@errors {404}

@endpoint PUT /me/albums/{album_id}/videos
@required {album_id: num, videos: str}
@returns(201)
@errors {403, 404}

@endpoint DELETE /me/albums/{album_id}/videos/{video_id}
@required {album_id: num, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /me/albums/{album_id}/videos/{video_id}
@required {album_id: num, video_id: num}
@optional {password: str}
@returns(200)
@errors {404}

@endpoint PUT /me/albums/{album_id}/videos/{video_id}
@required {album_id: num, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint POST /me/albums/{album_id}/videos/{video_id}/set_album_thumbnail
@required {album_id: num, video_id: num}
@optional {time_code: num}
@returns(200) {allow_continuous_play: bool, allow_downloads: bool, allow_share: bool, autoplay: bool, brand_color: str?, created_time: str, custom_logo: any?, description: str?, domain: str?, duration: num, embed: map{html: str?}, embed_brand_color: bool?, embed_custom_logo: bool?, hide_nav: bool, hide_vimeo_logo: bool?, layout: str, link: str, loop: bool, metadata: map{connections: map{videos: map{options: [str], total: num, uri: str}}, interactions: map?{add_custom_thumbnails: map{options: [str], uri: str}, add_logos: map{options: [str], uri: str}, add_to: map?{options: [str], uri: str}, add_videos: map{options: [str], uri: str}}}, modified_time: str, name: str, pictures: any, privacy: map{password: str, view: str}, resource_key: str, review_mode: bool, share_link: str, sort: str, theme: str, uri: str, url: str?, use_custom_domain: bool, user: any, web_brand_color: bool, web_custom_logo: bool}
@errors {403, 404, 500}

@endpoint GET /me/appearances
@optional {direction: str(asc/desc), filter: str, filter_embeddable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/duration/likes/plays)}
@returns(200)

@endpoint GET /me/categories
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(alphabetical/date/name)}
@returns(200)
@errors {403}

@endpoint DELETE /me/categories/{category}
@required {category: str}
@returns(204)

@endpoint GET /me/categories/{category}
@required {category: str}
@returns(204)

@endpoint PUT /me/categories/{category}
@required {category: num}
@returns(204)

@endpoint GET /me/channels
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, query: str, sort: str(alphabetical/date/followers/videos)}
@returns(200)
@errors {304}

@endpoint DELETE /me/channels/{channel_id}
@required {channel_id: num}
@returns(204)
@errors {404}

@endpoint GET /me/channels/{channel_id}
@required {channel_id: num}
@returns(204)
@errors {404}

@endpoint PUT /me/channels/{channel_id}
@required {channel_id: num}
@returns(204)
@errors {404}

@endpoint GET /me/customlogos
@returns(200)
@errors {403}

@endpoint POST /me/customlogos
@returns(201)
@errors {403}

@endpoint GET /me/customlogos/{logo_id}
@required {logo_id: num}
@returns(200)
@errors {403}

@endpoint GET /me/feed
@optional {offset: str, page: num, per_page: num, type: str(appears/category_featured/channel/facebook_feed/following/group/likes/ondemand_publish/share/tagged_with/twitter_timeline/uploads)}
@returns(200)

@endpoint GET /me/followers
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)

@endpoint GET /me/following
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)

@endpoint POST /me/following
@required {users: [str]}
@returns(204)
@errors {400, 401, 403, 429, 500}

@endpoint DELETE /me/following/{follow_user_id}
@required {follow_user_id: num}
@returns(204)

@endpoint GET /me/following/{follow_user_id}
@required {follow_user_id: num}
@returns(204)
@errors {404}

@endpoint PUT /me/following/{follow_user_id}
@required {follow_user_id: num}
@returns(204)
@errors {403}

@endpoint GET /me/groups
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, query: str, sort: str(alphabetical/date/members/videos)}
@returns(200)

@endpoint DELETE /me/groups/{group_id}
@required {group_id: num}
@returns(204)
@errors {403}

@endpoint PUT /me/groups/{group_id}
@required {group_id: num}
@returns(204)
@errors {403}

@endpoint GET /me/groups/{group_id}
@required {group_id: num}
@returns(204)
@errors {404}

@endpoint GET /me/likes
@optional {filter: str, filter_embeddable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/duration/likes/plays)}
@returns(200)

@endpoint DELETE /me/likes/{video_id}
@required {video_id: num}
@returns(204)
@errors {403}

@endpoint GET /me/likes/{video_id}
@required {video_id: num}
@returns(204)
@errors {404}

@endpoint PUT /me/likes/{video_id}
@required {video_id: num}
@returns(204)
@errors {400, 403}

@endpoint GET /me/ondemand/pages
@optional {direction: str(asc/desc), filter: str(film/series), page: num, per_page: num, sort: str(added/alphabetical/date/modified_time/name/publish.time/rating)}
@returns(200)
@errors {404}

@endpoint POST /me/ondemand/pages
@required {content_rating: str(drugs/language/nudity/safe/unrated/violence), description: str, name: str, type: str(film/series)}
@optional {accepted_currencies: str(AUD/CAD/CHF/DKK/EUR/GBP/JPY/KRW/NOK/PLN/SEK/USD), buy: map{active: bool, download: bool, price: map}, domain_link: str, episodes: map{buy: map, rent: map}, link: str, rent: map{active: bool, period: str, price: map}, subscription: map{monthly: map}}
@returns(201) {background: any?, colors: map{primary: str, secondary: str}, content_rating: [str], created_time: str, description: str?, domain_link: str?, episodes: map{buy: map{active: bool, price: num?}, rent: map{active: bool, period: str?, price: num?}}, film: any, genres: [map], link: str, metadata: map{connections: map{metadata: map{connections: map}}, interactions: any}, modified_time: str, name: str, pictures: any?, preorder: map{active: bool, cancel_time: str, publish_time: str, time: str}, published: map{enabled: bool, time: str}, rating: num?, resource_key: str, sku: str?, subscription: map?{active: bool, link: str?, period: str, price: map}, theme: str, thumbnail: any?, trailer: any?, type: str, uri: str, user: any?}

@endpoint GET /me/ondemand/purchases
@optional {direction: str(asc/desc), filter: str(all/expiring_soon/film/important/purchased/rented/series/subscription/unwatched/watched), page: num, per_page: num, sort: str(added/alphabetical/date/name/purchase_time/rating/release_date)}
@returns(200)
@errors {403}

@endpoint GET /me/ondemand/purchases/{ondemand_id}
@required {ondemand_id: num}
@returns(200)
@errors {403, 404}

@endpoint GET /me/pictures
@optional {page: num, per_page: num}
@returns(200)

@endpoint POST /me/pictures
@returns(200)

@endpoint DELETE /me/pictures/{portraitset_id}
@required {portraitset_id: num}
@returns(204)

@endpoint GET /me/pictures/{portraitset_id}
@required {portraitset_id: num}
@returns(200)

@endpoint PATCH /me/pictures/{portraitset_id}
@required {portraitset_id: num}
@returns(200)

@endpoint GET /me/portfolios
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)

@endpoint GET /me/portfolios/{portfolio_id}
@required {portfolio_id: num}
@returns(200)

@endpoint GET /me/portfolios/{portfolio_id}/videos
@required {portfolio_id: num}
@optional {containing_uri: str, filter: str, filter_embeddable: bool, page: num, per_page: num, sort: str(alphabetical/comments/date/default/likes/manual/plays)}
@returns(200)

@endpoint DELETE /me/portfolios/{portfolio_id}/videos/{video_id}
@required {portfolio_id: num, video_id: num}
@returns(204)
@errors {404}

@endpoint GET /me/portfolios/{portfolio_id}/videos/{video_id}
@required {portfolio_id: num, video_id: num}
@returns(200)

@endpoint PUT /me/portfolios/{portfolio_id}/videos/{video_id}
@required {portfolio_id: num, video_id: num}
@returns(204)
@errors {404}

@endpoint GET /me/presets
@optional {page: num, per_page: num}
@returns(200)

@endpoint GET /me/presets/{preset_id}
@required {preset_id: num}
@returns(200)

@endpoint PATCH /me/presets/{preset_id}
@required {preset_id: num}
@returns(200)
@errors {400, 404}

@endpoint GET /me/presets/{preset_id}/videos
@required {preset_id: num}
@optional {page: num, per_page: num}
@returns(200)

@endpoint GET /me/projects
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(date/default/modified_time/name)}
@returns(200)
@errors {401}

@endpoint POST /me/projects
@required {name: str}
@returns(201) {created_time: str, metadata: map{connections: map{videos: map{options: [str], total: num, uri: str}}}, modified_time: str, name: str, resource_key: str, uri: str, user: any}
@errors {400, 401, 403}

@endpoint DELETE /me/projects/{project_id}
@required {project_id: num}
@optional {should_delete_clips: bool}
@returns(204)
@errors {401, 403, 404}

@endpoint GET /me/projects/{project_id}
@required {project_id: num}
@returns(200) {created_time: str, metadata: map{connections: map{videos: map{options: [str], total: num, uri: str}}}, modified_time: str, name: str, resource_key: str, uri: str, user: any}
@errors {401, 404}

@endpoint PATCH /me/projects/{project_id}
@required {project_id: num, name: str}
@returns(200) {created_time: str, metadata: map{connections: map{videos: map{options: [str], total: num, uri: str}}}, modified_time: str, name: str, resource_key: str, uri: str, user: any}
@errors {400, 401, 403, 404}

@endpoint DELETE /me/projects/{project_id}/videos
@required {project_id: num, uris: str}
@optional {should_delete_clips: bool}
@returns(204)
@errors {400, 401, 404}

@endpoint GET /me/projects/{project_id}/videos
@required {project_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(alphabetical/date/default/duration/last_user_action_event_date)}
@returns(200)
@errors {401, 404}

@endpoint PUT /me/projects/{project_id}/videos
@required {project_id: num, uris: str}
@returns(204)
@errors {400, 401, 404}

@endpoint DELETE /me/projects/{project_id}/videos/{video_id}
@required {project_id: num, video_id: num}
@returns(204)
@errors {400, 401, 404}

@endpoint PUT /me/projects/{project_id}/videos/{video_id}
@required {project_id: num, video_id: num}
@returns(204)
@errors {404}

@endpoint GET /me/videos
@optional {containing_uri: str, direction: str(asc/desc), filter: str(app_only/embeddable/featured/playable), filter_embeddable: bool, filter_playable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/default/duration/last_user_action_event_date/likes/modified_time/plays)}
@returns(200)
@errors {304}

@endpoint POST /me/videos
@returns(201)
@errors {400, 401, 403, 500}

@endpoint GET /me/videos/{video_id}
@required {video_id: num}
@returns(200)
@errors {404}

@endpoint DELETE /me/watched/videos
@returns(204)

@endpoint GET /me/watched/videos
@optional {page: num, per_page: num}
@returns(200)
@errors {403}

@endpoint DELETE /me/watched/videos/{video_id}
@required {video_id: num}
@returns(204)

@endpoint GET /me/watchlater
@optional {direction: str(asc/desc), filter: str, filter_embeddable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/duration/likes/plays)}
@returns(200)
@errors {304}

@endpoint DELETE /me/watchlater/{video_id}
@required {video_id: num}
@returns(204)

@endpoint GET /me/watchlater/{video_id}
@required {video_id: num}
@returns(200)
@errors {404}

@endpoint PUT /me/watchlater/{video_id}
@required {video_id: num}
@returns(204)

@endgroup

@group oauth
@endpoint POST /oauth/access_token
@returns(200)
@errors {400}

@endpoint POST /oauth/authorize/client
@returns(200)
@errors {401}

@endpoint POST /oauth/authorize/vimeo_oauth1
@returns(200)
@errors {400}

@endpoint GET /oauth/verify
@returns(200)
@errors {401}

@endgroup

@group ondemand
@endpoint GET /ondemand/genres
@returns(200)

@endpoint GET /ondemand/genres/{genre_id}
@required {genre_id: str}
@returns(200)
@errors {404}

@endpoint GET /ondemand/genres/{genre_id}/pages
@required {genre_id: str}
@optional {direction: str(asc/desc), filter: str(country/my_region), page: num, per_page: num, query: str, sort: str(alphabetical/date/name/publish.time/videos)}
@returns(200)

@endpoint GET /ondemand/genres/{genre_id}/pages/{ondemand_id}
@required {genre_id: str, ondemand_id: num}
@returns(200)
@errors {404}

@endpoint DELETE /ondemand/pages/{ondemand_id}
@required {ondemand_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}
@required {ondemand_id: num}
@returns(200)
@errors {404}

@endpoint PATCH /ondemand/pages/{ondemand_id}
@required {ondemand_id: num}
@returns(200)
@errors {403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/backgrounds
@required {ondemand_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {404}

@endpoint POST /ondemand/pages/{ondemand_id}/backgrounds
@required {ondemand_id: num}
@returns(200)
@errors {403, 404}

@endpoint DELETE /ondemand/pages/{ondemand_id}/backgrounds/{background_id}
@required {background_id: num, ondemand_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/backgrounds/{background_id}
@required {background_id: num, ondemand_id: num}
@returns(200)
@errors {403, 404}

@endpoint PATCH /ondemand/pages/{ondemand_id}/backgrounds/{background_id}
@required {background_id: num, ondemand_id: num}
@returns(200)
@errors {403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/genres
@required {ondemand_id: num}
@returns(200)
@errors {404}

@endpoint DELETE /ondemand/pages/{ondemand_id}/genres/{genre_id}
@required {genre_id: str, ondemand_id: num}
@returns(204)
@errors {400, 403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/genres/{genre_id}
@required {genre_id: str, ondemand_id: num}
@returns(200)
@errors {404}

@endpoint PUT /ondemand/pages/{ondemand_id}/genres/{genre_id}
@required {genre_id: str, ondemand_id: num}
@returns(201)
@errors {400, 403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/likes
@required {ondemand_id: num}
@optional {direction: str(asc/desc), filter: str(extra/main/trailer), page: num, per_page: num, sort: str(alphabetical/date)}
@returns(200)

@endpoint GET /ondemand/pages/{ondemand_id}/pictures
@required {ondemand_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {404}

@endpoint POST /ondemand/pages/{ondemand_id}/pictures
@required {ondemand_id: num}
@returns(201)
@errors {403}

@endpoint GET /ondemand/pages/{ondemand_id}/pictures/{poster_id}
@required {ondemand_id: num, poster_id: num}
@returns(200)

@endpoint PATCH /ondemand/pages/{ondemand_id}/pictures/{poster_id}
@required {ondemand_id: num, poster_id: num}
@returns(200)

@endpoint GET /ondemand/pages/{ondemand_id}/promotions
@required {ondemand_id: num, filter: str(batch/default/single/vip)}
@optional {page: num, per_page: num}
@returns(200)
@errors {400, 403, 404}

@endpoint POST /ondemand/pages/{ondemand_id}/promotions
@required {ondemand_id: num}
@returns(200)
@errors {400, 403, 404}

@endpoint DELETE /ondemand/pages/{ondemand_id}/promotions/{promotion_id}
@required {ondemand_id: num, promotion_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/promotions/{promotion_id}
@required {ondemand_id: num, promotion_id: num}
@returns(200)
@errors {403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/promotions/{promotion_id}/codes
@required {ondemand_id: num, promotion_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {403, 404}

@endpoint DELETE /ondemand/pages/{ondemand_id}/regions
@required {ondemand_id: num}
@returns(200)
@errors {403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/regions
@required {ondemand_id: num}
@returns(200)
@errors {404}

@endpoint PUT /ondemand/pages/{ondemand_id}/regions
@required {ondemand_id: num}
@returns(200)
@errors {403, 404}

@endpoint DELETE /ondemand/pages/{ondemand_id}/regions/{country}
@required {country: str, ondemand_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/regions/{country}
@required {country: str, ondemand_id: num}
@returns(200)
@errors {404}

@endpoint PUT /ondemand/pages/{ondemand_id}/regions/{country}
@required {country: str, ondemand_id: num}
@returns(201)
@errors {403, 404}

@endpoint GET /ondemand/pages/{ondemand_id}/seasons
@required {ondemand_id: num}
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, sort: str(date/manual)}
@returns(200)
@errors {404}

@endpoint GET /ondemand/pages/{ondemand_id}/seasons/{season_id}
@required {ondemand_id: num, season_id: num}
@returns(200)
@errors {404}

@endpoint GET /ondemand/pages/{ondemand_id}/seasons/{season_id}/videos
@required {ondemand_id: num, season_id: num}
@optional {filter: str, page: num, per_page: num, sort: str(date/default/manual/name/purchase_time/release_date)}
@returns(200)

@endpoint GET /ondemand/pages/{ondemand_id}/videos
@required {ondemand_id: num}
@optional {direction: str(asc/desc), filter: str(all/buy/expiring_soon/extra/main/main.viewable/rent/trailer/unwatched/viewable/watched), page: num, per_page: num, sort: str(date/default/episode/manual/name/purchase_time/release_date)}
@returns(200)

@endpoint DELETE /ondemand/pages/{ondemand_id}/videos/{video_id}
@required {ondemand_id: num, video_id: num}
@returns(204)
@errors {403}

@endpoint GET /ondemand/pages/{ondemand_id}/videos/{video_id}
@required {ondemand_id: num, video_id: num}
@returns(200)

@endpoint PUT /ondemand/pages/{ondemand_id}/videos/{video_id}
@required {ondemand_id: num, video_id: num}
@returns(200)
@errors {400, 403}

@endpoint GET /ondemand/regions
@returns(200)

@endpoint GET /ondemand/regions/{country}
@required {country: str}
@returns(200)
@errors {404}

@endgroup

@group tags
@endpoint GET /tags/{word}
@required {word: str}
@returns(200)

@endpoint GET /tags/{word}/videos
@required {word: str}
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(created_time/duration/name)}
@returns(200)
@errors {404}

@endgroup

@group tokens
@endpoint DELETE /tokens
@returns(204)
@errors {400}

@endgroup

@group tutorial
@endpoint GET /tutorial

@endgroup

@group users
@endpoint GET /users
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date/followers/relevant/videos)}
@returns(200)
@errors {500, 503}

@endpoint GET /users/{user_id}
@required {user_id: num}
@returns(200)

@endpoint PATCH /users/{user_id}
@required {user_id: num}
@returns(200)

@endpoint GET /users/{user_id}/albums
@required {user_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date/duration/videos)}
@returns(200)
@errors {400}

@endpoint POST /users/{user_id}/albums
@required {user_id: num}
@returns(201)
@errors {400, 403}

@endpoint DELETE /users/{user_id}/albums/{album_id}
@required {album_id: num, user_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /users/{user_id}/albums/{album_id}
@required {album_id: num, user_id: num}
@returns(200)
@errors {404}

@endpoint PATCH /users/{user_id}/albums/{album_id}
@required {album_id: num, user_id: num}
@returns(200)
@errors {400, 403, 404}

@endpoint GET /users/{user_id}/albums/{album_id}/custom_thumbnails
@required {album_id: num, user_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {403, 404}

@endpoint POST /users/{user_id}/albums/{album_id}/custom_thumbnails
@required {album_id: num, user_id: num}
@returns(201)
@errors {403, 404}

@endpoint DELETE /users/{user_id}/albums/{album_id}/custom_thumbnails/{thumbnail_id}
@required {album_id: num, thumbnail_id: num, user_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /users/{user_id}/albums/{album_id}/custom_thumbnails/{thumbnail_id}
@required {album_id: num, thumbnail_id: num, user_id: num}
@returns(200)
@errors {403, 404}

@endpoint PATCH /users/{user_id}/albums/{album_id}/custom_thumbnails/{thumbnail_id}
@required {album_id: num, thumbnail_id: num, user_id: num}
@returns(200)
@errors {403, 404}

@endpoint GET /users/{user_id}/albums/{album_id}/logos
@required {album_id: num, user_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {404}

@endpoint POST /users/{user_id}/albums/{album_id}/logos
@required {album_id: num, user_id: num}
@returns(201)
@errors {403, 404}

@endpoint DELETE /users/{user_id}/albums/{album_id}/logos/{logo_id}
@required {album_id: num, logo_id: num, user_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /users/{user_id}/albums/{album_id}/logos/{logo_id}
@required {album_id: num, logo_id: num, user_id: num}
@returns(200)
@errors {403, 404}

@endpoint PATCH /users/{user_id}/albums/{album_id}/logos/{logo_id}
@required {album_id: num, logo_id: num, user_id: num}
@returns(200)
@errors {403, 404}

@endpoint GET /users/{user_id}/albums/{album_id}/videos
@required {album_id: num, user_id: num}
@optional {containing_uri: str, direction: str(asc/desc), filter: str, filter_embeddable: bool, page: num, password: str, per_page: num, query: str, sort: str(alphabetical/comments/date/default/duration/likes/manual/modified_time/plays), weak_search: bool}
@returns(200)
@errors {404}

@endpoint PUT /users/{user_id}/albums/{album_id}/videos
@required {album_id: num, user_id: num, videos: str}
@returns(201)
@errors {403, 404}

@endpoint DELETE /users/{user_id}/albums/{album_id}/videos/{video_id}
@required {album_id: num, user_id: num, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /users/{user_id}/albums/{album_id}/videos/{video_id}
@required {album_id: num, user_id: num, video_id: num}
@optional {password: str}
@returns(200)
@errors {404}

@endpoint PUT /users/{user_id}/albums/{album_id}/videos/{video_id}
@required {album_id: num, user_id: num, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint POST /users/{user_id}/albums/{album_id}/videos/{video_id}/set_album_thumbnail
@required {album_id: num, user_id: num, video_id: num}
@optional {time_code: num}
@returns(200) {allow_continuous_play: bool, allow_downloads: bool, allow_share: bool, autoplay: bool, brand_color: str?, created_time: str, custom_logo: any?, description: str?, domain: str?, duration: num, embed: map{html: str?}, embed_brand_color: bool?, embed_custom_logo: bool?, hide_nav: bool, hide_vimeo_logo: bool?, layout: str, link: str, loop: bool, metadata: map{connections: map{videos: map{options: [str], total: num, uri: str}}, interactions: map?{add_custom_thumbnails: map{options: [str], uri: str}, add_logos: map{options: [str], uri: str}, add_to: map?{options: [str], uri: str}, add_videos: map{options: [str], uri: str}}}, modified_time: str, name: str, pictures: any, privacy: map{password: str, view: str}, resource_key: str, review_mode: bool, share_link: str, sort: str, theme: str, uri: str, url: str?, use_custom_domain: bool, user: any, web_brand_color: bool, web_custom_logo: bool}
@errors {403, 404, 500}

@endpoint GET /users/{user_id}/appearances
@required {user_id: num}
@optional {direction: str(asc/desc), filter: str, filter_embeddable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/duration/likes/plays)}
@returns(200)

@endpoint GET /users/{user_id}/categories
@required {user_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(alphabetical/date/name)}
@returns(200)
@errors {403}

@endpoint DELETE /users/{user_id}/categories/{category}
@required {category: str, user_id: num}
@returns(204)

@endpoint GET /users/{user_id}/categories/{category}
@required {category: str, user_id: num}
@returns(204)

@endpoint PUT /users/{user_id}/categories/{category}
@required {category: num, user_id: num}
@returns(204)

@endpoint GET /users/{user_id}/channels
@required {user_id: num}
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, query: str, sort: str(alphabetical/date/followers/videos)}
@returns(200)
@errors {304}

@endpoint DELETE /users/{user_id}/channels/{channel_id}
@required {channel_id: num, user_id: num}
@returns(204)
@errors {404}

@endpoint GET /users/{user_id}/channels/{channel_id}
@required {channel_id: num, user_id: num}
@returns(204)
@errors {404}

@endpoint PUT /users/{user_id}/channels/{channel_id}
@required {channel_id: num, user_id: num}
@returns(204)
@errors {404}

@endpoint GET /users/{user_id}/customlogos
@required {user_id: num}
@returns(200)
@errors {403}

@endpoint POST /users/{user_id}/customlogos
@required {user_id: num}
@returns(201)
@errors {403}

@endpoint GET /users/{user_id}/customlogos/{logo_id}
@required {logo_id: num, user_id: num}
@returns(200)
@errors {403}

@endpoint GET /users/{user_id}/feed
@required {user_id: num}
@optional {offset: str, page: num, per_page: num, type: str(appears/category_featured/channel/facebook_feed/following/group/likes/ondemand_publish/share/tagged_with/twitter_timeline/uploads)}
@returns(200)

@endpoint GET /users/{user_id}/followers
@required {user_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)

@endpoint GET /users/{user_id}/following
@required {user_id: num}
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)

@endpoint POST /users/{user_id}/following
@required {user_id: num, users: [str]}
@returns(204)
@errors {400, 401, 403, 429, 500}

@endpoint DELETE /users/{user_id}/following/{follow_user_id}
@required {follow_user_id: num, user_id: num}
@returns(204)

@endpoint GET /users/{user_id}/following/{follow_user_id}
@required {follow_user_id: num, user_id: num}
@returns(204)
@errors {404}

@endpoint PUT /users/{user_id}/following/{follow_user_id}
@required {follow_user_id: num, user_id: num}
@returns(204)
@errors {403}

@endpoint GET /users/{user_id}/groups
@required {user_id: num}
@optional {direction: str(asc/desc), filter: str, page: num, per_page: num, query: str, sort: str(alphabetical/date/members/videos)}
@returns(200)

@endpoint DELETE /users/{user_id}/groups/{group_id}
@required {group_id: num, user_id: num}
@returns(204)
@errors {403}

@endpoint PUT /users/{user_id}/groups/{group_id}
@required {group_id: num, user_id: num}
@returns(204)
@errors {403}

@endpoint GET /users/{user_id}/groups/{group_id}
@required {group_id: num, user_id: num}
@returns(204)
@errors {404}

@endpoint GET /users/{user_id}/likes
@required {user_id: num}
@optional {filter: str, filter_embeddable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/duration/likes/plays)}
@returns(200)

@endpoint DELETE /users/{user_id}/likes/{video_id}
@required {user_id: num, video_id: num}
@returns(204)
@errors {403}

@endpoint GET /users/{user_id}/likes/{video_id}
@required {user_id: num, video_id: num}
@returns(204)
@errors {404}

@endpoint PUT /users/{user_id}/likes/{video_id}
@required {user_id: num, video_id: num}
@returns(204)
@errors {400, 403}

@endpoint GET /users/{user_id}/ondemand/pages
@required {user_id: num}
@optional {direction: str(asc/desc), filter: str(film/series), page: num, per_page: num, sort: str(added/alphabetical/date/modified_time/name/publish.time/rating)}
@returns(200)
@errors {404}

@endpoint POST /users/{user_id}/ondemand/pages
@required {user_id: num, content_rating: str(drugs/language/nudity/safe/unrated/violence), description: str, name: str, type: str(film/series)}
@optional {accepted_currencies: str(AUD/CAD/CHF/DKK/EUR/GBP/JPY/KRW/NOK/PLN/SEK/USD), buy: map{active: bool, download: bool, price: map}, domain_link: str, episodes: map{buy: map, rent: map}, link: str, rent: map{active: bool, period: str, price: map}, subscription: map{monthly: map}}
@returns(201) {background: any?, colors: map{primary: str, secondary: str}, content_rating: [str], created_time: str, description: str?, domain_link: str?, episodes: map{buy: map{active: bool, price: num?}, rent: map{active: bool, period: str?, price: num?}}, film: any, genres: [map], link: str, metadata: map{connections: map{metadata: map{connections: map}}, interactions: any}, modified_time: str, name: str, pictures: any?, preorder: map{active: bool, cancel_time: str, publish_time: str, time: str}, published: map{enabled: bool, time: str}, rating: num?, resource_key: str, sku: str?, subscription: map?{active: bool, link: str?, period: str, price: map}, theme: str, thumbnail: any?, trailer: any?, type: str, uri: str, user: any?}

@endpoint GET /users/{user_id}/ondemand/purchases
@required {user_id: num}
@returns(200)
@errors {403, 404}

@endpoint GET /users/{user_id}/pictures
@required {user_id: num}
@optional {page: num, per_page: num}
@returns(200)

@endpoint POST /users/{user_id}/pictures
@required {user_id: num}
@returns(200)

@endpoint DELETE /users/{user_id}/pictures/{portraitset_id}
@required {portraitset_id: num, user_id: num}
@returns(204)

@endpoint GET /users/{user_id}/pictures/{portraitset_id}
@required {portraitset_id: num, user_id: num}
@returns(200)

@endpoint PATCH /users/{user_id}/pictures/{portraitset_id}
@required {portraitset_id: num, user_id: num}
@returns(200)

@endpoint GET /users/{user_id}/portfolios
@required {user_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)

@endpoint GET /users/{user_id}/portfolios/{portfolio_id}
@required {portfolio_id: num, user_id: num}
@returns(200)

@endpoint GET /users/{user_id}/portfolios/{portfolio_id}/videos
@required {portfolio_id: num, user_id: num}
@optional {containing_uri: str, filter: str, filter_embeddable: bool, page: num, per_page: num, sort: str(alphabetical/comments/date/default/likes/manual/plays)}
@returns(200)

@endpoint DELETE /users/{user_id}/portfolios/{portfolio_id}/videos/{video_id}
@required {portfolio_id: num, user_id: num, video_id: num}
@returns(204)
@errors {404}

@endpoint GET /users/{user_id}/portfolios/{portfolio_id}/videos/{video_id}
@required {portfolio_id: num, user_id: num, video_id: num}
@returns(200)

@endpoint PUT /users/{user_id}/portfolios/{portfolio_id}/videos/{video_id}
@required {portfolio_id: num, user_id: num, video_id: num}
@returns(204)
@errors {404}

@endpoint GET /users/{user_id}/presets
@required {user_id: num}
@optional {page: num, per_page: num}
@returns(200)

@endpoint GET /users/{user_id}/presets/{preset_id}
@required {preset_id: num, user_id: num}
@returns(200)

@endpoint PATCH /users/{user_id}/presets/{preset_id}
@required {preset_id: num, user_id: num}
@returns(200)
@errors {400, 404}

@endpoint GET /users/{user_id}/presets/{preset_id}/videos
@required {preset_id: num, user_id: num}
@optional {page: num, per_page: num}
@returns(200)

@endpoint GET /users/{user_id}/projects
@required {user_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(date/default/modified_time/name)}
@returns(200)
@errors {401}

@endpoint POST /users/{user_id}/projects
@required {user_id: num, name: str}
@returns(201) {created_time: str, metadata: map{connections: map{videos: map{options: [str], total: num, uri: str}}}, modified_time: str, name: str, resource_key: str, uri: str, user: any}
@errors {400, 401, 403}

@endpoint DELETE /users/{user_id}/projects/{project_id}
@required {project_id: num, user_id: num}
@optional {should_delete_clips: bool}
@returns(204)
@errors {401, 403, 404}

@endpoint GET /users/{user_id}/projects/{project_id}
@required {project_id: num, user_id: num}
@returns(200) {created_time: str, metadata: map{connections: map{videos: map{options: [str], total: num, uri: str}}}, modified_time: str, name: str, resource_key: str, uri: str, user: any}
@errors {401, 404}

@endpoint PATCH /users/{user_id}/projects/{project_id}
@required {project_id: num, user_id: num, name: str}
@returns(200) {created_time: str, metadata: map{connections: map{videos: map{options: [str], total: num, uri: str}}}, modified_time: str, name: str, resource_key: str, uri: str, user: any}
@errors {400, 401, 403, 404}

@endpoint DELETE /users/{user_id}/projects/{project_id}/videos
@required {project_id: num, user_id: num, uris: str}
@optional {should_delete_clips: bool}
@returns(204)
@errors {400, 401, 404}

@endpoint GET /users/{user_id}/projects/{project_id}/videos
@required {project_id: num, user_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(alphabetical/date/default/duration/last_user_action_event_date)}
@returns(200)
@errors {401, 404}

@endpoint PUT /users/{user_id}/projects/{project_id}/videos
@required {project_id: num, user_id: num, uris: str}
@returns(204)
@errors {400, 401, 404}

@endpoint DELETE /users/{user_id}/projects/{project_id}/videos/{video_id}
@required {project_id: num, user_id: num, video_id: num}
@returns(204)
@errors {400, 401, 404}

@endpoint PUT /users/{user_id}/projects/{project_id}/videos/{video_id}
@required {project_id: num, user_id: num, video_id: num}
@returns(204)
@errors {404}

@endpoint DELETE /users/{user_id}/uploads/{upload_id}
@required {upload_id: num, user_id: num, signature: str, video_file_id: num}
@returns(201)
@errors {400, 404, 500}

@endpoint GET /users/{user_id}/uploads/{upload_id}
@required {upload_id: num, user_id: num}
@returns(200)

@endpoint GET /users/{user_id}/videos
@required {user_id: num}
@optional {containing_uri: str, direction: str(asc/desc), filter: str(app_only/embeddable/featured/playable), filter_embeddable: bool, filter_playable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/default/duration/last_user_action_event_date/likes/modified_time/plays)}
@returns(200)
@errors {304}

@endpoint POST /users/{user_id}/videos
@required {user_id: num}
@returns(201)
@errors {400, 401, 403, 500}

@endpoint GET /users/{user_id}/videos/{video_id}
@required {user_id: num, video_id: num}
@returns(200)
@errors {404}

@endpoint GET /users/{user_id}/watchlater
@required {user_id: num}
@optional {direction: str(asc/desc), filter: str, filter_embeddable: bool, page: num, per_page: num, query: str, sort: str(alphabetical/comments/date/duration/likes/plays)}
@returns(200)
@errors {304}

@endpoint DELETE /users/{user_id}/watchlater/{video_id}
@required {user_id: num, video_id: num}
@returns(204)

@endpoint GET /users/{user_id}/watchlater/{video_id}
@required {user_id: num, video_id: num}
@returns(200)
@errors {404}

@endpoint PUT /users/{user_id}/watchlater/{video_id}
@required {user_id: num, video_id: num}
@returns(204)

@endgroup

@group videos
@endpoint GET /videos
@required {query: str}
@optional {direction: str(asc/desc), filter: str(CC/CC-BY/CC-BY-NC/CC-BY-NC-ND/CC-BY-NC-SA/CC-BY-ND/CC-BY-SA/CC0/categories/duration/in-progress/minimum_likes/trending/upload_date), links: str, page: num, per_page: num, sort: str(alphabetical/comments/date/duration/likes/plays/relevant), uris: str}
@returns(200)
@errors {400, 503}

@endpoint DELETE /videos/{video_id}
@required {video_id: num}
@returns(204)
@errors {403}

@endpoint GET /videos/{video_id}
@required {video_id: num}
@returns(200)
@errors {404}

@endpoint PATCH /videos/{video_id}
@required {video_id: num}
@returns(200)
@errors {400, 403}

@endpoint GET /videos/{video_id}/available_albums
@required {video_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {403}

@endpoint GET /videos/{video_id}/available_channels
@required {video_id: num}
@returns(200)
@errors {403, 404}

@endpoint GET /videos/{video_id}/categories
@required {video_id: num}
@returns(200)
@errors {404}

@endpoint PUT /videos/{video_id}/categories
@required {video_id: num}
@returns(201)
@errors {403, 404}

@endpoint GET /videos/{video_id}/comments
@required {video_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num}
@returns(200)

@endpoint POST /videos/{video_id}/comments
@required {video_id: num}
@returns(201)
@errors {400, 401, 403}

@endpoint DELETE /videos/{video_id}/comments/{comment_id}
@required {comment_id: num, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /videos/{video_id}/comments/{comment_id}
@required {comment_id: num, video_id: num}
@returns(200)
@errors {404}

@endpoint PATCH /videos/{video_id}/comments/{comment_id}
@required {comment_id: num, video_id: num}
@returns(200)
@errors {400, 403}

@endpoint GET /videos/{video_id}/comments/{comment_id}/replies
@required {comment_id: num, video_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {404}

@endpoint POST /videos/{video_id}/comments/{comment_id}/replies
@required {comment_id: num, video_id: num}
@returns(201)
@errors {400, 403}

@endpoint GET /videos/{video_id}/credits
@required {video_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, query: str, sort: str(alphabetical/date)}
@returns(200)

@endpoint POST /videos/{video_id}/credits
@required {video_id: num}
@returns(201)
@errors {400, 403}

@endpoint DELETE /videos/{video_id}/credits/{credit_id}
@required {credit_id: num, video_id: num}
@returns(204)
@errors {400}

@endpoint GET /videos/{video_id}/credits/{credit_id}
@required {credit_id: num, video_id: num}
@returns(200)
@errors {404}

@endpoint PATCH /videos/{video_id}/credits/{credit_id}
@required {credit_id: num, video_id: num}
@returns(200)
@errors {400, 404}

@endpoint GET /videos/{video_id}/likes
@required {video_id: num}
@optional {direction: str(asc/desc), page: num, per_page: num, sort: str(alphabetical/date)}
@returns(200)

@endpoint GET /videos/{video_id}/pictures
@required {video_id: num}
@optional {page: num, per_page: num}
@returns(200)

@endpoint POST /videos/{video_id}/pictures
@required {video_id: num}
@returns(201)

@endpoint DELETE /videos/{video_id}/pictures/{picture_id}
@required {picture_id: num, video_id: num}
@returns(204)

@endpoint GET /videos/{video_id}/pictures/{picture_id}
@required {picture_id: num, video_id: num}
@returns(200)

@endpoint PATCH /videos/{video_id}/pictures/{picture_id}
@required {picture_id: num, video_id: num}
@returns(200)

@endpoint DELETE /videos/{video_id}/presets/{preset_id}
@required {preset_id: num, video_id: num}
@returns(204)
@errors {404}

@endpoint GET /videos/{video_id}/presets/{preset_id}
@required {preset_id: num, video_id: num}
@returns(204)
@errors {404}

@endpoint PUT /videos/{video_id}/presets/{preset_id}
@required {preset_id: num, video_id: num}
@returns(204)

@endpoint GET /videos/{video_id}/privacy/domains
@required {video_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {403}

@endpoint DELETE /videos/{video_id}/privacy/domains/{domain}
@required {domain: str, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint PUT /videos/{video_id}/privacy/domains/{domain}
@required {domain: str, video_id: num}
@returns(204)
@errors {403}

@endpoint GET /videos/{video_id}/privacy/users
@required {video_id: num}
@optional {page: num, per_page: num}
@returns(200)
@errors {400}

@endpoint PUT /videos/{video_id}/privacy/users
@required {video_id: num}
@returns(200)

@endpoint DELETE /videos/{video_id}/privacy/users/{user_id}
@required {user_id: num, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint PUT /videos/{video_id}/privacy/users/{user_id}
@required {user_id: num, video_id: num}
@returns(200)
@returns(204)
@errors {403}

@endpoint GET /videos/{video_id}/tags
@required {video_id: num}
@returns(200)

@endpoint PUT /videos/{video_id}/tags
@required {video_id: num}
@returns(200)
@errors {400, 403}

@endpoint DELETE /videos/{video_id}/tags/{word}
@required {video_id: num, word: str}
@returns(204)
@errors {400}

@endpoint GET /videos/{video_id}/tags/{word}
@required {video_id: num, word: str}
@returns(200)
@errors {400, 404}

@endpoint PUT /videos/{video_id}/tags/{word}
@required {video_id: num, word: str}
@returns(200)
@errors {400, 403}

@endpoint GET /videos/{video_id}/texttracks
@required {video_id: num}
@returns(200)
@errors {404}

@endpoint POST /videos/{video_id}/texttracks
@required {video_id: num}
@returns(201)
@errors {403}

@endpoint DELETE /videos/{video_id}/texttracks/{texttrack_id}
@required {texttrack_id: num, video_id: num}
@returns(204)
@errors {403, 404}

@endpoint GET /videos/{video_id}/texttracks/{texttrack_id}
@required {texttrack_id: num, video_id: num}
@returns(200)
@errors {403, 404}

@endpoint PATCH /videos/{video_id}/texttracks/{texttrack_id}
@required {texttrack_id: num, video_id: num}
@returns(200)
@errors {403, 404}

@endpoint POST /videos/{video_id}/timelinethumbnails
@required {video_id: num}
@returns(201)
@errors {403, 404}

@endpoint GET /videos/{video_id}/timelinethumbnails/{thumbnail_id}
@required {thumbnail_id: num, video_id: num}
@returns(200)
@errors {403}

@endpoint POST /videos/{video_id}/versions
@required {video_id: num}
@returns(201)
@errors {400, 403, 404}

@endpoint GET /videos/{video_id}/videos
@required {video_id: num}
@optional {filter: str, page: num, per_page: num}
@returns(200)
@errors {400}

@endgroup

@end
