For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
DiscordGet API Key
  • Getting Started
    • Overview
    • Quickstart
    • Errors
    • Pricing
  • Chat
    • Overview
    • Chat with Image, Video, and Audio
    • Function Calling
    • Models
  • Vision
    • Overview
    • Rate Limits
    • Pricing
    • MCP Server
    • Video Management
    • Video Group Management
    • Video Search
    • Video QA
    • Clip Generation
    • Metadata Tagging
    • Image Management
    • Image Search
  • Research
    • Overview
    • Streaming
    • Reasoning Steps
    • Web Search
    • Structured Output
    • Parallel Thinking
    • Best Practices
    • Errors
    • Examples
  • Speech
    • Overview
    • Audio Transcription
    • Speech Translation
    • Speech-to-Speech Translation
  • Resources
    • FAQs
    • Changelog
    • System Status
LogoLogo
DiscordGet API Key
On this page
  • Upload Videos
  • Example with file upload
  • Bash
  • Python
  • Example with video url
  • Bash
  • Python
  • Python Bulk Upload Example
  • Upload Parameters
  • Get Video
  • Bash
  • Python
  • List Videos
  • Bash
  • Python
  • Delete Video
  • Bash
  • Python
  • Video Response Format
  • Indexing Status
Vision

Video Management

Was this page helpful?
Previous

Video Group Management

Next
Built with

The Vision API provides comprehensive video management capabilities for uploading, retrieving, and organizing your video content.

Upload Videos

Upload videos using either a file upload or a URL:

You can optionally assign an uploaded video to a video group by including the group_id form field. Omit the field—or set it to default—to keep the video in the default pool.

Example with file upload

Bash

$curl -X POST https://vision-agent.api.reka.ai/v1/videos/upload \
> -H "X-Api-Key: YOUR_API_KEY" \
> -F "file=@video.mp4" \
> -F "video_name=my_video.mp4" \
> -F "index=true" \
> -F "group_id=20f4bc2d-3ebe-4fd2-829f-9d88c79e8a37"

Python

1import requests
2import json
3
4url = f"{BASE_URL}/v1/videos/upload"
5video_path = "/content/demo.mp4" # local video path
6
7# Video indexing request body for a local video
8data = {
9 "index": True, # boolean value indicating whether the video should be indexed for search/qa/etc
10 "enable_thumbnails": False, # boolean value indicating whether to generate thumbnails for video chunks, this will increase the indexing time but will allow for quick thumbnail loading at search time
11 "video_name": "vid16", # name of video to store in vision agent system for informative purpose. not ID
12 "video_start_absolute_timestamp": "2025-04-12T19:05:45", # (Optional) a absolute timestamp indicating video start time in ISO 8601 format
13 "group_id": "20f4bc2d-3ebe-4fd2-829f-9d88c79e8a37", # optional video group assignment
14}
15headers = {
16 "X-Api-Key": REKA_API_KEY
17}
18
19# Open the video file and send the request
20with open(video_path, "rb") as file:
21 files = {"file": (video_path[1:], file, "video/mp4")} # Send as multipart/form-data
22 response = requests.post(url, headers=headers, data=data, files=files)
23
24# Print response
25print(response.status_code, response.json())

Example with video url

Bash

$curl -X POST https://vision-agent.api.reka.ai/v1/videos/upload \
> -H "X-Api-Key: YOUR_API_KEY" \
> -F "video_url=https://www.youtube.com/watch?v=dQw4w9WgXcQ" \
> -F "video_name=my_video.mp4" \
> -F "index=true" \
> -F "group_id=default"

Python

1import requests
2import json
3
4url = f"{BASE_URL}/v1/videos/upload"
5video_url = "https://www.youtube.com/watch?v=dQw4w9WgXcQ" # video url
6
7# Video indexing request body for a video url
8data = {
9 "index": True,
10 "video_name": "vid16",
11 "video_url": video_url,
12 "video_start_absolute_timestamp": "2025-04-12T19:05:45",
13 "group_id": "default",
14}
15headers = {
16 "X-Api-Key": REKA_API_KEY
17}
18
19# Send the request
20response = requests.post(url, headers=headers, data=data)
21
22# Print response
23print(response.status_code, response.json())

Python Bulk Upload Example

1import os
2import asyncio
3import httpx
4import time
5import json
6async def bulk_upload_videos(video_paths: list[str], api_key: str, caption_mode: str = "tagging_ad_video", max_concurrency: int = 2):
7 tasks = []
8 semaphore = asyncio.Semaphore(max_concurrency)
9
10 async def limited_send_upload_request(sem: asyncio.Semaphore, video_path: str, *args, **kwargs):
11 async with sem:
12 response = await send_upload_request(video_path, *args, **kwargs)
13 return video_path, response
14
15 for video_path in video_paths:
16 task = asyncio.create_task(limited_send_upload_request(semaphore, video_path, api_key, caption_mode))
17 tasks.append(task)
18
19 results = await asyncio.gather(*tasks)
20
21 video_map = {}
22 for video_path, result in results:
23 if result and result.status_code == 200:
24 try:
25 video_id = result.json().get('video_id')
26 if video_id:
27 video_map[video_path] = video_id
28 except json.JSONDecodeError:
29 print(f"Could not decode JSON from response for {video_path}")
30 return video_map

Upload Parameters

  • file (optional): Video file to upload (mutually exclusive with video_url)
  • video_url (optional): URL of the video to upload (mutually exclusive with file)
  • video_name (required): Name for the video
  • video_absolute_start_timestamp (optional): ISO 8601 timestamp
  • index (required): Whether to index the video for search and Q&A
  • group_id (optional): Video group ID to attach the upload to. Defaults to default when omitted, and cannot be changed after upload.

Get Video

Retrieve a specific video by its ID:

Bash

$curl -X GET https://vision-agent.api.reka.ai/v1/videos/550e8400-e29b-41d4-a716-446655440000 \
> -H "X-Api-Key: YOUR_API_KEY"

Python

1import requests
2
3video_id = "550e8400-e29b-41d4-a716-446655440000"
4url = f"{BASE_URL}/v1/videos/{video_id}"
5headers = {
6 "X-Api-Key": REKA_API_KEY
7}
8
9response = requests.get(url, headers=headers)
10print(response.status_code, response.json())

List Videos

List all your videos:

Bash

$curl -X GET "https://vision-agent.api.reka.ai/v1/videos" \
> -H "X-Api-Key: YOUR_API_KEY"

Python

1import requests
2
3url = f"{BASE_URL}/v1/videos"
4headers = {
5 "X-Api-Key": REKA_API_KEY
6}
7
8response = requests.get(url, headers=headers)
9print(response.status_code, response.json())

Delete Video

Delete a video by its ID:

Bash

$curl -X DELETE https://vision-agent.api.reka.ai/v1/videos/550e8400-e29b-41d4-a716-446655440000 \
> -H "X-Api-Key: YOUR_API_KEY"

Python

1import requests
2
3video_id = "550e8400-e29b-41d4-a716-446655440000"
4url = f"{BASE_URL}/v1/videos/{video_id}"
5headers = {
6 "X-Api-Key": REKA_API_KEY
7}
8
9response = requests.delete(url, headers=headers)
10print(response.status_code, response.json())

Video Response Format

Each video response includes:

  • video_id: Unique identifier
  • url: Presigned S3 URL for access
  • indexing_status: Current indexing status (pending, indexing, indexed, failed)
  • metadata: Video metadata (dimensions, duration, timestamps, etc.)
  • indexing_type: Type of indexing applied
  • group_id: Video group identifier (default when no custom group is set)

Indexing Status

  • pending: Video uploaded, indexing not started
  • indexing: Video is currently being processed
  • indexed: Video has been successfully indexed and is ready for search/Q&A
  • failed: Indexing failed, video may need to be re-uploaded