Yandex Cloud
Search
Contact UsGet started
  • Blog
  • Pricing
  • Documentation
  • All Services
  • System Status
    • Featured
    • Infrastructure & Network
    • Data Platform
    • Containers
    • Developer tools
    • Serverless
    • Security
    • Monitoring & Resources
    • ML & AI
    • Business tools
  • All Solutions
    • By industry
    • By use case
    • Economics and Pricing
    • Security
    • Technical Support
    • Customer Stories
    • Start testing with double trial credits
    • Cloud credits to scale your IT product
    • Gateway to Russia
    • Cloud for Startups
    • Education and Science
    • Yandex Cloud Partner program
  • Blog
  • Pricing
  • Documentation
© 2025 Direct Cursus Technology L.L.C.
Yandex Cloud Video
    • All guides
      • Uploading a video
      • Editing a video
      • Adding timecodes
      • Adding a thumbnail
      • Managing subtitles
      • Downloading a video
      • Publishing a video
      • Unpublishing a video
      • Getting an embed code or link
      • Adding a video to a playlist
      • Getting view statistics
      • Deleting a video
    • Adding a member
    • Overview
    • Control
    • Troubleshooting
  • Access management
  • Pricing policy
  • Audit Trails events
  • Release notes

In this article:

  • Uploading one video
  • Uploading multiple videos
  1. Step-by-step guides
  2. Videos
  3. Uploading a video

Uploading a video

Written by
Yandex Cloud
Updated at May 5, 2025
  • Uploading one video
  • Uploading multiple videos

Uploading one videoUploading one video

Cloud Video interface
REST API
gRPC API
  1. Open the Cloud Video home page.

  2. Select a channel.

  3. In the Video tab, click Upload video.

  4. Click Select file on the upload page and choose the video you want to upload.

    You can upload videos in various supported formats, such as MP4, AVI, MKV, FLV, MOV, WebM, etc.

    Cloud Video limits the resolution of the videos you are publishing.

    Wait for the upload to end.

  5. Name your video. The title will be displayed on all the resources hosting the video.

  6. (Optional) Under Description, specify the timecodes for your video in the following format:

    00:00:00 Episode 1 title
    hh:mm:ss Episode 2 title
     ...
    

    Note

    Timecodes must begin with 00:00 or 00:00:00. The time is separated from the episode title by a space. Each timecode begins from a new line.

  7. In the Access list, select the access type for the video:

    • By temporary link: Available via a dedicated link.

      The video is available via a temporary link for a maximum of 12 hours.

    • All users: Available indefinitely to anyone with a link.

  8. Optionally, to add a cover for a video, in the Thumbnail field, click Select file and choose a cover image.

    The following cover formats are supported: JPG, PNG, and GIF.

  9. (Optional) To add subtitles to a video, in the Subtitles field, click Add:

    1. In the window that opens, select the subtitle language.

    2. Click Select file and select the file with subtitles.

    3. Click Create.

      Wait for the file to upload.

  10. Click Save.

This will open the video management page. After processing is complete, the video will be available for viewing.

To check the video for availability:

  1. Under Past code, select the link tab.
  2. Click Copy.
  3. Open a new browser page and paste the obtained URL to the address bar.
  4. Click the Play button.

To create a Cloud Video video using the API, register the video on the channel and then upload the video file into it via the tus protocol. If the upload fails, resume it from the same position in the file it was interrupted at.

  1. Register your video on the channel:

    curl \
      --request POST \
      --url 'https://video.api.cloud.yandex.net/video/v1/videos' \
      --header 'Authorization: Bearer <IAM_token>' \
      --header 'Content-Type: application/json' \
      --data '{
        "channel_id": "<channel_ID>",
        "title": "<video_name>",
        "tusd": {
          "file_size": <video_file_size>,
          "file_name": "<video_file_name>"
        },
        "public_access": {}
      }'
    

    Where:

    • <IAM_token>: IAM token required for authenticating with the Cloud Video API.
    • <channel_ID>: ID of the channel where you want to create the video.
    • <video_name>: Name the video will get when uploaded to the channel.
    • <video_file_size>: Size of the video file to upload, in bytes.
    • <video_file_name>: Name of the video file you are going to upload.
    • Access type for the video:
      • public_access: Available indefinitely to anyone with a link to it.

      • signUrlAccess: Available via a temporary link.

        The video is available via a temporary link for a maximum of 12 hours.

    Result:

    {
     "done": true,
     "metadata": {
      "@type": "type.googleapis.com/yandex.cloud.video.v1.CreateVideoMetadata",
      "videoId": "vplvh4wvqimx********"
     },
     "response": {
      "@type": "type.googleapis.com/yandex.cloud.video.v1.Video",
      "tusd": {
       "url": "https://tusd.video.cloud.yandex.net/files/75925d89ddc05c0d5ca3282781f13c6f+00062241********"
      },
      "publicAccess": {},
      "id": "vplvh4wvqimx********",
      "channelId": "vplcdyphvqik********",
      "title": "my-very-first-video",
      "status": "WAIT_UPLOADING",
      "visibilityStatus": "PUBLISHED",
      "createdAt": "2024-09-16T19:18:08.384540Z",
      "updatedAt": "2024-09-16T19:18:08.384540Z"
     },
     "id": "vplpjlgda3c2********",
     "description": "Video create",
     "createdAt": "2024-09-16T19:18:08.393546Z",
     "createdBy": "ajeol2afu1js********",
     "modifiedAt": "2024-09-16T19:18:08.393546Z"
    }
    

    Save the video upload link (url field value) and video ID (videoId field value) as you will need them later.

  2. Upload the video file:

    curl \
      --location \
      --request PATCH '<video_upload_link>' \
      --header 'Content-Type: application/offset+octet-stream' \
      --header 'Upload-Offset: 0' \
      --header 'Tus-Resumable: 1.0.0' \
      --data-binary '@<video_file_path>'
    

    Where:

    • <video_upload_link>: Previously saved upload link you got when creating the video.

    • <video_file_path>: Full video file path preceded with @.

      E.g., @/Users/myuser/Downloads/sample-video.MOV.

      Do not use any shortcuts, including ~, in the file path.

  3. Make sure your video file has been fully uploaded by specifying the video ID you saved before:

    curl \
      --request GET \
      --url 'https://video.api.cloud.yandex.net/video/v1/videos/<video_ID>' \
      --header 'Authorization: Bearer <IAM_token>'
    

    Result:

    {
     "tusd": {
      "url": "https://tusd.video.cloud.yandex.net/files/75925d89ddc05c0d5ca3282781f13c6f+00062241********"
     },
     "publicAccess": {},
     "id": "vplvh4wvqimx********",
     "channelId": "vplcdyphvqik********",
     "title": "my-very-first-video",
     "status": "READY",
     "duration": "39.981s",
     "visibilityStatus": "PUBLISHED",
     "createdAt": "2024-09-16T19:18:08.384540Z",
     "updatedAt": "2024-09-16T19:31:31.471857Z"
    }
    

    If you see PROCESSING or READY in the status field, the video file has been fully uploaded.

  4. If you see WAIT_UPLOADING in the status field, the video file upload was interrupted. In this case you need to resume and complete the upload. To do this, you need to know the offset point the previous upload attempt was interrupted at.

    1. Get the offset position of the interrupted upload using the previously saved video upload link:

      curl \
        --head '<video_upload_link>' \
        --header 'Host: tusd.video.cloud.yandex.net' \
        --header 'Tus-Resumable: 1.0.0'
      

      Result:

      HTTP/1.1 200 OK
      Server: nginx/1.18.0
      Date: Mon, 16 Sep 2024 15:21:52 GMT
      Connection: keep-alive
      Cache-Control: no-cache
      Tus-Resumable: 1.0.0
      Upload-Length: 100100627
      Upload-Metadata: filename c2FtcGxlLXZpZGVv********,video_id dnBsdjVpeWh2M2F6ZnYz********
      Upload-Offset: 28231123
      X-Content-Type-Options: nosniff
      X-Request-Id: 3b775c2a********
      X-Trace-Id: 95ab2f994557ce1b1ee9dd09********
      X_h: edge-5b647c8d67-*****
      Access-Control-Allow-Origin: *
      Access-Control-Allow-Headers: *
      Access-Control-Expose-Headers: *
      Expires: Thu, 01 Jan 1970 00:00:01 GMT
      

      Save the Upload-Offset field value as you will need it to complete the video file upload.

    2. Complete the file upload by running this command:

      curl \
        --location \
        --request PATCH '<video_upload_link>' \
        --header 'Content-Type: application/offset+octet-stream' \
        --header 'Upload-Offset: <offset_value>' \
        --header 'Tus-Resumable: 1.0.0' \
        --data-binary '@<video_file_path>'
      

      Where:

      • <video_upload_link>: Previously saved upload link you got when creating the video.

      • <offset_value>: Previously saved offset value indicating the position in the file the previous upload attempt was interrupted at.

      • <video_file_path>: Full video file path preceded with @.

        E.g., @/Users/myuser/Downloads/sample-video.MOV.

        Do not use any shortcuts, including ~, in the file path.

    Check once again that the video file has been fully uploaded. If the upload was interrupted again, repeat this step.

To create a Cloud Video video using the API, register the video on the channel and then upload the video file into it via the tus protocol. If the upload fails, resume it from the same position in the file it was interrupted at.

  1. Register your video on the channel:

    grpcurl \
      -rpc-header "Authorization: Bearer <IAM_token>" \
      -d '{
        "channel_id": "<channel_ID>",
        "title": "<video_name>",
        "tusd": {
          "file_size": <video_file_size>,
          "file_name": "<video_file_name>"
        },
        "public_access": {}
      }' \
      video.api.cloud.yandex.net:443 yandex.cloud.video.v1.VideoService/Create
    

    Where:

    • <IAM_token>: IAM token required for authenticating with the Cloud Video API.
    • <channel_ID>: ID of the channel where you want to create the video.
    • <video_name>: Name the video will get when uploaded to the channel.
    • <video_file_size>: Size of the video file to upload, in bytes.
    • <video_file_name>: Name of the video file you are going to upload.
    • Access type for the video:
      • public_access: Available indefinitely to anyone with a link to it.

      • signUrlAccess: Available via a temporary link.

        The video is available via a temporary link for a maximum of 12 hours.

    Result:

    {
      "id": "vplpskiedayr********",
      "description": "Video create",
      "createdAt": "2024-09-16T12:16:03.921095Z",
      "createdBy": "ajeol2afu1js********",
      "modifiedAt": "2024-09-16T12:16:03.921095Z",
      "done": true,
      "metadata": {
        "@type": "type.googleapis.com/yandex.cloud.video.v1.CreateVideoMetadata",
        "videoId": "vplvio5377ux********"
      },
      "response": {
        "@type": "type.googleapis.com/yandex.cloud.video.v1.Video",
        "channelId": "vplcqy2qxkjy********",
        "createdAt": "2024-09-16T12:16:03.905662Z",
        "id": "vplvio5377ux********",
        "publicAccess": {},
        "status": "WAIT_UPLOADING",
        "title": "my-very-first-video",
        "tusd": {
          "url": "https://tusd.video.cloud.yandex.net/files/5e7d6b3b68f9dc0d279ce719144c9caa+0006223B********"
        },
        "updatedAt": "2024-09-16T12:16:03.905662Z",
        "visibilityStatus": "PUBLISHED"
      }
    }
    

    Save the video upload link (url field value) and video ID (videoId field value) as you will need them later.

  2. Upload the video file:

    curl \
      --location \
      --request PATCH '<video_upload_link>' \
      --header 'Content-Type: application/offset+octet-stream' \
      --header 'Upload-Offset: 0' \
      --header 'Tus-Resumable: 1.0.0' \
      --data-binary '@<video_file_path>'
    

    Where:

    • <video_upload_link>: Previously saved upload link you got when creating the video.

    • <video_file_path>: Full video file path preceded with @.

      E.g., @/Users/myuser/Downloads/sample-video.MOV.

      Do not use any shortcuts, including ~, in the file path.

  3. Make sure your video file has been fully uploaded by specifying the video ID you saved before:

    grpcurl \
      -rpc-header "Authorization: Bearer <IAM_token>" \
      -d '{"video_id": "<video_ID>"}' \
      video.api.cloud.yandex.net:443 yandex.cloud.video.v1.VideoService/Get
    

    Result:

    {
      "id": "vplva3626rvh********",
      "channelId": "vplcqy2qxkjy********",
      "title": "my-very-first-video",
      "status": "READY",
      "duration": "39.981s",
      "visibilityStatus": "PUBLISHED",
      "createdAt": "2024-09-16T14:11:04.803285Z",
      "updatedAt": "2024-09-16T14:14:36.467614Z",
      "tusd": {
        "url": "https://tusd.video.cloud.yandex.net/files/55994a57bd30b2161399ccab7eb5f2de+0006223D********"
      },
      "publicAccess": {}
    }
    

    If you see PROCESSING or READY in the status field, the video file has been fully uploaded.

  4. If you see WAIT_UPLOADING in the status field, the video file upload was interrupted. In this case you need to resume and complete the upload. To do this, you need to know the offset point the previous upload attempt was interrupted at.

    1. Get the offset position of the interrupted upload using the previously saved video upload link:

      curl \
        --head '<video_upload_link>' \
        --header 'Host: tusd.video.cloud.yandex.net' \
        --header 'Tus-Resumable: 1.0.0'
      

      Result:

      HTTP/1.1 200 OK
      Server: nginx/1.18.0
      Date: Mon, 16 Sep 2024 15:21:52 GMT
      Connection: keep-alive
      Cache-Control: no-cache
      Tus-Resumable: 1.0.0
      Upload-Length: 100100627
      Upload-Metadata: filename c2FtcGxlLXZpZGVv********,video_id dnBsdjVpeWh2M2F6ZnYz********
      Upload-Offset: 28231123
      X-Content-Type-Options: nosniff
      X-Request-Id: 3b775c2a********
      X-Trace-Id: 95ab2f994557ce1b1ee9dd09********
      X_h: edge-5b647c8d67-*****
      Access-Control-Allow-Origin: *
      Access-Control-Allow-Headers: *
      Access-Control-Expose-Headers: *
      Expires: Thu, 01 Jan 1970 00:00:01 GMT
      

      Save the Upload-Offset field value as you will need it to complete the video file upload.

    2. Complete the file upload by running this command:

      curl \
        --location \
        --request PATCH '<video_upload_link>' \
        --header 'Content-Type: application/offset+octet-stream' \
        --header 'Upload-Offset: <offset_value>' \
        --header 'Tus-Resumable: 1.0.0' \
        --data-binary '@<video_file_path>'
      

      Where:

      • <video_upload_link>: Previously saved upload link you got when creating the video.

      • <offset_value>: Previously saved offset value indicating the position in the file the previous upload attempt was interrupted at.

      • <video_file_path>: Full video file path preceded with @.

        E.g., @/Users/myuser/Downloads/sample-video.MOV.

        Do not use any shortcuts, including ~, in the file path.

    Check once again that the video file has been fully uploaded. If the upload was interrupted again, repeat this step.

Uploading multiple videosUploading multiple videos

Cloud Video interface
  1. Open the Cloud Video home page.

  2. Select a channel.

  3. In the Video tab, click Upload video.

  4. On the upload page, click Select file and select the videos you want to upload.

    You can upload videos in various supported formats, such as MP4, AVI, MKV, FLV, MOV, WebM, etc.

    Cloud Video limits the resolution of the videos you are publishing.

    Wait until all files are uploaded.

As soon as they are processed, the videos will be available for viewing.

If required, add subtitles and change the name and cover separately for each video you uploaded.

See alsoSee also

Editing a video

Was the article helpful?

Previous
Deleting a channel
Next
Editing a video
© 2025 Direct Cursus Technology L.L.C.