---
title: "Add a video to an On Demand page"
method: PUT
path: "/ondemand/pages/{ondemand_id}/videos/{video_id}"
tags: ["On Demand\\Videos"]
---

# Add a video to an On Demand page

`PUT /ondemand/pages/{ondemand_id}/videos/{video_id}`

## Request

- Base URL: `https://api.vimeo.com`
- URL: `https://api.vimeo.com/ondemand/pages/{ondemand_id}/videos/{video_id}`
- Auth: OAuth 2
  - Authorization code: `/oauth/authorize`, token URL `/oauth/access_token`
  - Client credentials, token URL `/oauth/authorize/client`
  - Scopes: `edit`
- TypeScript: <https://skmtc.dev/vimeo/apis/vimeo-api/docs/ondemand/pages/:ondemand_id/videos/:video_id/put.ts> (a function with typed inputs; its response is checked against the schema)

Information about this method appears below.

## Path parameters

- `ondemand_id` number, required
- `video_id` number, required

## Request body

- object
  - `buy` object
    - `price` object
      - `AUD` number: The purchase price of this video in AUD.
      - `CAD` number: The purchase price of this video in CAD.
      - `CHF` number: The purchase price of this video in CHF.
      - `DKK` number: The purchase price of this video in DKK.
      - `EUR` number: The purchase price of this video in EUR.
      - `GBP` number: The purchase price of this video in GBP.
      - `JPY` number: The purchase price of this video in JPY.
      - `KRW` number: The purchase price of this video in KRW.
      - `NOK` number: The purchase price of this video in NOK.
      - `PLN` number: The purchase price of this video in PLN.
      - `SEK` number: The purchase price of this video in SEK.
      - `USD` number: The purchase price of this video in USD. *Required if `buy.active` is true.
  - `position` number: The position of this video in the On Demand collection.
  - `release_year` number: The video release year.
  - `rent` object
    - `price` object
      - `AUD` number: The rental price of this video in AUD.
      - `CAD` number: The rental price of this video in CAD.
      - `CHF` number: The rental price of this video in CHF.
      - `DKK` number: The rental price of this video in DKK.
      - `EUR` number: The rental price of this video in EUR.
      - `GBP` number: The rental price of this video in GBP.
      - `JPY` number: The rental price of this video in JPY.
      - `KRW` number: The rental price of this video in KRW.
      - `NOK` number: The rental price of this video in NOK.
      - `PLN` number: The rental price of this video in PLN.
      - `SEK` number: The rental price of this video in SEK.
      - `USD` number: The rental price of this video in USD. *Required if `rent.active` is true.
  - `type` 'extra' | 'main' | 'trailer', required: The type of video that you are adding to the On Demand page.

## Response `200`

The video was added.

- OnDemandVideo
  - `buy` object, nullable, required: Information about purchasing this video.
    - `active` boolean, required: Whether this On Demand video can be purchased.
    - `price` object, required: A map of currency type to price.
    - `purchased` boolean: Whether this On Demand video has been purchased.
  - `description` string: Description of the On Demand video.
  - `duration` string: The duration of the On Demand video.
  - `episode` number: The episode number of the On Demand video.
  - `interactions` object, required: An object containing information about how the authenticated user can interact with this On Demand page.
    - `page` object, required: Information about how the authenticated user can interact with the connection to the video's On Demand page.
      - `added` boolean, required: Whether this On Demand page was added.
      - `options` string[], required: An array of HTTP methods permitted on this URI.
      - `uri` string, required: The URI to access the On Demand page.
  - `link` string, required: The link to this video on Vimeo.
  - `metadata` object, required: Metadata information about this video.
    - `connections` object, required
      - `season` object, required: Information about this season.
        - `name` string, required: The name of the season on this connection.
        - `options` string[], required: An array of HTTP methods permitted on this URI.
        - `uri` string, required: The API URI that resolves to the connection data.
    - `interactions` object, required
      - `likes` object, required: Information about the user's Like interactions with this video.
        - `added` boolean, required: Whether the user has liked this video.
        - `added_time` string, required: The time in ISO 8601 format when the user liked this video.
        - `uri` string, required: The URI for the user to like this video.
      - `watchlater` object, required: Information about the user's Watch Later interactions with this video.
        - `added` boolean, required: Whether the user has added this video to their Watch Later queue.
        - `added_time` string, required: The time in ISO 8601 format when the user added this video to their Watch Later queue.
        - `uri` string, required: The URI for the user to add this video to their Watch Later queue.
  - `name` string: The title of the On Demand video.
  - `options` string[]: An array of HTTP methods permitted on this URI.
  - `pictures` Picture
    - `active` boolean, required: Whether this picture is the active picture for its parent resource.
    - `link` string: The upload URL for the picture. This field appears when you create the picture resource for the first time.
    - `resource_key` string, required: The picture's resource key string.
    - `sizes` object[], required: An array containing reference information about all available image files.
      - `height` number, nullable, required: The height of the image.
      - `link` string, required: The direct link to the image.
      - `link_with_play_button` string: The direct link to the image with a play button overlay.
      - `width` number, required: The width of the image.
    - `type` 'caution' | 'custom' | 'default', required: The type of the picture: Option descriptions: * `caution` - An image that is appropriate for all ages. * `custom` - A custom image for the video. * `default` - The default image for the video.
    - `uri` string, required: The picture's URI.
  - `play_progress` number, required: The user's most recent play position in seconds for this video.
  - `position` number: Describes the manual position of this video relative to the other videos owned by this On Demand page.
  - `release_date` string: The time in ISO 8601 format when the On Demand video was created or published.
  - `release_year` number, nullable, required: The year that this On Demand video was released.
  - `rent` object, nullable, required: Information about renting this video.
    - `active` boolean, required: Whether this On Demand video can be rented.
    - `price` object, required: A map of currency type to price.
    - `purchased` boolean: Whether this On Demand video has been rented.
  - `type` 'extra' | 'main' | 'trailer', required: The type of the On Demand video: Option descriptions: * `extra` - The On Demand video is an extra feature. * `main` - The On Demand video is a main feature. * `trailer` - The On Demand video is a trailer.
  - `uri` string, required: The video container's relative URI.
  - `user` User
    - `account` 'basic' | 'business' | 'live_business' | 'live_premium' | 'live_pro' | 'plus' | 'pro' | 'pro_unlimited' | 'producer', required: The user's account type: Option descriptions: * `basic` - The user has a Vimeo Basic subscription. * `business` - The user has a Vimeo Business subscription. * `live_business` - The user has a Vimeo Business Live subscription. * `live_premium` - The user has a Vimeo Premium subscription. * `live_pro` - The user has a Vimeo PRO Live subscription. * `plus` - The user has a Vimeo Plus subscription. * `pro` - The user has a Vimeo Pro subscription. * `pro_unlimited` - The user has a Vimeo PRO Unlimited subscription. * `producer` - The user has a Vimeo Producer subscription.
    - `bio` string, nullable, required: The user's bio.
    - `content_filter` string[]: The user's content filters: Option descriptions: * `drugs` - Drugs or alcohol use. * `language` - Profanity or sexually suggestive content. * `nudity` - Nudity. * `safe` - Suitable for all audiences. * `unrated` - No rating. * `violence` - Violent or graphic content.
    - `created_time` string, required: The time in ISO 8601 format when the user account was created.
    - `email` string: The user's email address. This data requires a bearer token with the `email` scope.
    - `link` string, required: The absolute URL of this user's profile page.
    - `location` string, nullable, required: The user's location.
    - `metadata` object, required: The user's metadata.
      - `connections` object, required: The list of resource URIs related to the user.
        - `albums` object, required: Information about the albums created by this user.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of albums on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `appearances` object, required: Information about the appearances of this user in other videos.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of appearances on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `block` object, required: Information on the users that the current user has blocked. This data requires a bearer token with the `private` scope.
          - `options` string[], required: An array of HTTP methods permitted on this URI. This data requires a bearer token with the `private` scope.
          - `total` number, required: The total number of blocked users on this connection. This data requires a bearer token with the `private` scope.
          - `uri` string, required: The API URI that resolves to the connection data. This data requires a bearer token with the `private` scope.
        - `categories` object, required: Information about this user's followed categories.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of categories on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `channels` object, required: Information about this user's subscribed channels.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of channels on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `feed` object, required: Information about this user's feed.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `folders` object, required: Information about this user's folders.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of folders on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `followers` object, required: Information about the user's followers.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of followers on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `following` object, required: Information about the users that the current user is following.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of users on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `groups` object, required: Information about the groups created by this user.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of groups on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `likes` object, required: Information about the videos that this user has liked.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of likes on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `moderated_channels` object, required: Information about the channels that this user moderates.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of channels on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `pictures` object, required: Information about this user's portraits.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of pictures on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `portfolios` object, required: Information about this user's portfolios.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of portfolios on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `recommended_channels` object, required: A collection of recommended channels for the current user to follow. This data requires a bearer token with the `private` scope.
          - `options` string[], required: An array of HTTP methods permitted on this URI. This data requires a bearer token with the `private` scope.
          - `total` number, required: The total number of channels on this connection. This data requires a bearer token with the `private` scope.
          - `uri` string, required: The API URI that resolves to the connection data. This data requires a bearer token with the `private` scope.
        - `recommended_users` object, required: A Collection of recommended users for the current user to follow. This data requires a bearer token with the `private` scope.
          - `options` string[], required: An array of HTTP methods permitted on this URI. This data requires a bearer token with the `private` scope.
          - `total` number, required: The total number of users on this connection. This data requires a bearer token with the `private` scope.
          - `uri` string, required: The API URI that resolves to the connection data. This data requires a bearer token with the `private` scope.
        - `shared` object, required: Information about the videos that have been shared with this user.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of videos on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `videos` object, required: Information about the videos uploaded by this user.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of videos on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `watched_videos` object, required: Information about the videos that this user has watched.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of videos on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
        - `watchlater` object, required: Information about the videos that this user wants to watch later.
          - `options` string[], required: An array of HTTP methods permitted on this URI.
          - `total` number, required: The total number of videos on this connection.
          - `uri` string, required: The API URI that resolves to the connection data.
      - `interactions` object, required
        - `add_privacy_user` object
          - `options` string[]: An array of the HTTP methods permitted on this URI. This data requires a bearer token with the `private` scope.
          - `uri` string: The API URI that resolves to the connection data. This data requires a bearer token with the `private` scope.
        - `block` object, required: Information related to the block status of this user.
          - `added` boolean, required: Whether a user is blocking the current user.
          - `added_time` string, nullable, required: The time in ISO 8601 format when the block occurred, or the null value if no block exists.
          - `options` string[], required: An array of the HTTP methods permitted on this URI.
          - `uri` string, required: The URI to block or unblock the user.
        - `follow` object, required: Information related to the followed status of this user.
          - `added` boolean, required: Whether a user is following the current user.
          - `options` string[], required: An array of the HTTP methods permitted on this URI.
          - `uri` string, required: The URI to follow the user.
        - `report` object, required: Information regarding where and how to report a user.
          - `options` string[], required: An array of the HTTP methods permitted on this URI.
          - `reason` string[], required: List of valid reasons for reporting a video.
          - `uri` string, required: The API URI that resolves to the connection data.
    - `name` string, required: The user's display name.
    - `pictures` Picture, required
      - `active` boolean, required: Whether this picture is the active picture for its parent resource.
      - `link` string: The upload URL for the picture. This field appears when you create the picture resource for the first time.
      - `resource_key` string, required: The picture's resource key string.
      - `sizes` object[], required: An array containing reference information about all available image files.
        - `height` number, nullable, required: The height of the image.
        - `link` string, required: The direct link to the image.
        - `link_with_play_button` string: The direct link to the image with a play button overlay.
        - `width` number, required: The width of the image.
      - `type` 'caution' | 'custom' | 'default', required: The type of the picture: Option descriptions: * `caution` - An image that is appropriate for all ages. * `custom` - A custom image for the video. * `default` - The default image for the video.
      - `uri` string, required: The picture's URI.
    - `preferences` object
      - `videos` object
        - `privacy` object
          - `add` boolean: Whether other users can add the user's videos.
          - `comments` 'anybody' | 'contacts' | 'nobody': The user's privacy preference for comments: Option descriptions: * `anybody` - Anyone can comment on the user's videos. * `contacts` - Only contacts can comment on the user's videos. * `nobody` - No one can comment on the user's videos.
          - `download` boolean: Whether other users can download the user's videos.
          - `embed` 'private' | 'public' | 'whitelist': The user's privacy preference for embeds: Option descriptions: * `private` - Only the user can embed their own videos. * `public` - Anyone can embed the user's videos. * `whitelist` - Only those on the whitelist can embed the user's videos.
          - `view` 'anybody' | 'contacts' | 'disable' | 'nobody' | 'password' | 'unlisted' | 'users': The user's privacy preference for views: Option descriptions: * `anybody` - Anyone can view the user's videos. * `contacts` - Only contacts can view the user's videos. * `disable` - Views are disabled for the user's videos. * `nobody` - No one except the user can view the user's videos. * `password` - Only those with the password can view the user's videos. * `unlisted` - Anybody can view the user's videos if they have a link. * `users` - Only other Vimeo members can view the user's videos.
    - `resource_key` string, required: The user's resource key string.
    - `upload_quota` object, required: Appears only when the user has upload access and is looking at their own user record.
      - `lifetime` object, required: Information about the user's lifetime upload usage.
        - `free` number, nullable, required: The number of bytes remaining in your lifetime maximum.
        - `max` number, nullable, required: The total number of bytes that you can upload across the lifetime of your account.
        - `used` number, nullable, required: The number of bytes that you've already uploaded against your lifetime limit.
      - `periodic` object, required: Information about the user's usage for the current period.
        - `free` number, nullable, required: The number of bytes remaining in your upload quota for the current period.
        - `max` number, nullable, required: The total number of bytes that you can upload per period.
        - `reset_date` string, nullable, required: The time in ISO 8601 format when your upload quota resets.
        - `used` number, nullable, required: The number of bytes that you've already uploaded against your quota in the current period.
      - `space` object, required: Information about the user's upload space remaining for the current period.
        - `free` number, required: The number of bytes remaining in your upload quota.
        - `max` number, nullable, required: The maximum number of bytes allotted to your upload quota.
        - `showing` 'lifetime' | 'periodic', required: Whether the values of the upload_quota.space fields are for the lifetime quota or the periodic quota.
        - `used` number, required: The number of bytes that you've already uploaded against your quota.
    - `uri` string, required: The user's canonical relative URI.
    - `websites` object[], required: The user's websites.
      - `description` string, nullable, required: The website's description.
      - `link` string, required: The URL of the website.
      - `name` string, nullable, required: The name of the website.

## Other responses

- `400`: You can't add the video to this On Demand page.
- `403`: You can't modify an On Demand page that you don't own.

---

[API](https://skmtc.dev/vimeo/apis/vimeo-api.md) - [All operations](https://skmtc.dev/vimeo/apis/vimeo-api/llms.txt) - [OpenAPI document](https://skmtc.dev/vimeo/apis/vimeo-api/revisions/ea882e0224a4?raw)
