# Universal Cloud Video Converter (`codingfrontend/video-converter`) Actor

Download and extract rich video metadata from Video Converter, supporting resolutions up to 4K. Scrapes titles, duration, channel information, view counts, likes, user comments, and subtitles. Built with complete proxy rotation and anti-bot bypass support.

- **URL**: https://apify.com/codingfrontend/video-converter.md
- **Developed by:** [codingfrontend](https://apify.com/codingfrontend) (community)
- **Categories:** Videos, Developer tools, Automation
- **Stats:** 17 total users, 3 monthly users, 71.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Video Converter - Apify Actor

A powerful video conversion Actor that transforms videos between formats using FFmpeg. Supports multiple input sources, output destinations, and advanced video processing features.

### Features

#### Input Sources
- **URL**: Direct video URLs with authentication support (Bearer, Basic, Custom Header)
- **Google Drive**: Download videos from Google Drive using file ID and service account
- **Dropbox**: Download videos from Dropbox shared links
- **Cloud Storage**: AWS S3, Google Cloud Storage
- **Apify Storage**: Load videos from Apify Key-Value Store

#### Output Formats
- **Video**: MP4, MOV, WEBM, MKV, AVI
- **Animation**: GIF
- **Streaming**: HLS (HTTP Live Streaming) - Default

#### Video Codecs
- **H.264/AVC** - Most compatible
- **H.265/HEVC** - Better compression
- **VP8/VP9** - WebM/Open format
- **AV1** - Newest, best compression

#### Audio Codecs
- **AAC** - Most compatible
- **MP3** - Universal support
- **Opus** - Best quality/compression
- **Vorbis** - Open format

#### Output Destinations
- **Apify Key-Value Store** - Default, provides public URL
- **AWS S3** - Amazon Simple Storage Service
- **Google Cloud Storage (GCS)** - Google's object storage
- **Dropbox** - Upload to Dropbox account

#### Advanced Features
- **Track Extractor** - Split video into separate video, audio, and subtitle files
- Video trimming/cutting
- Watermarks (text and image)
- Audio controls (volume, mute, replace audio)
- Thumbnail generation
- GIF preview generation
- Webhooks (URL only or with file attachment)

### Input Examples

#### Basic URL Input
```json
{
    "inputType": "url",
    "videoUrl": "https://example.com/video.mp4",
    "outputFormat": "mp4",
    "videoCodec": "h264",
    "audioCodec": "aac",
    "quality": "medium",
    "outputDestination": "apify"
}
````

#### URL with Bearer Token Authentication

```json
{
    "inputType": "url",
    "videoUrl": "https://api.example.com/protected/video.mp4",
    "urlAuthType": "bearer",
    "urlAuthBearerToken": "your-api-token",
    "outputFormat": "mp4"
}
```

#### URL with Basic Auth

```json
{
    "inputType": "url",
    "videoUrl": "https://secure.example.com/video.mp4",
    "urlAuthType": "basic",
    "urlAuthUsername": "user",
    "urlAuthPassword": "pass",
    "outputFormat": "webm"
}
```

#### URL with Custom Header Auth

```json
{
    "inputType": "url",
    "videoUrl": "https://api.example.com/video.mp4",
    "urlAuthType": "header",
    "urlAuthHeaderName": "X-API-Key",
    "urlAuthHeaderValue": "your-api-key",
    "outputFormat": "mp4"
}
```

#### Google Drive Input

```json
{
    "inputType": "googleDrive",
    "googleDriveFileId": "1abc123def456",
    "googleDriveCredentials": {
        "private_key": "-----BEGIN PRIVATE KEY-----...",
        "client_email": "service@project.iam.gserviceaccount.com"
    },
    "outputFormat": "mp4"
}
```

#### Dropbox Input

```json
{
    "inputType": "dropbox",
    "dropboxFileUrl": "https://www.dropbox.com/s/abc123/video.mp4?dl=0",
    "dropboxAccessToken": "your-dropbox-token",
    "outputFormat": "webm"
}
```

#### HLS Output (Default)

```json
{
    "inputType": "url",
    "videoUrl": "https://example.com/video.mp4",
    "outputFormat": "hls",
    "videoCodec": "h264",
    "audioCodec": "aac"
}
```

### Output Destination Examples

#### AWS S3 Upload

```json
{
    "outputDestination": "s3",
    "s3Bucket": "my-video-bucket",
    "s3Region": "us-east-1",
    "s3AccessKeyId": "AKIA...",
    "s3SecretAccessKey": "...",
    "s3Path": "converted/video.mp4"
}
```

#### Google Cloud Storage Upload

```json
{
    "outputDestination": "gcs",
    "gcsBucket": "my-gcs-bucket",
    "gcsCredentials": {
        "type": "service_account",
        "project_id": "your-project",
        "private_key": "-----BEGIN PRIVATE KEY-----...",
        "client_email": "service@project.iam.gserviceaccount.com"
    },
    "gcsPath": "videos/output.mp4"
}
```

#### Dropbox Upload

```json
{
    "outputDestination": "dropbox",
    "dropboxAccessToken": "your-dropbox-token",
    "dropboxPath": "/Videos/converted.mp4"
}
```

### Webhook Configuration

#### URL Only Webhook (Default)

Sends JSON payload with video URL and metadata:

```json
{
    "webhookUrl": "https://api.example.com/webhook",
    "webhookHeadersJson": "{\"Authorization\": \"Bearer webhook-secret\"}"
}
```

#### Webhook with Video File

Sends multipart form data with actual video file attached:

```json
{
    "webhookUrl": "https://api.example.com/upload",
    "webhookSendFile": true,
    "webhookFileFieldName": "video",
    "webhookHeadersJson": "{\"Authorization\": \"Bearer webhook-secret\"}"
}
```

#### Webhook Payload Structure (URL Only)

```json
{
    "status": "success",
    "downloadUrl": "https://api.apify.com/v2/key-value-stores/.../records/video.mp4",
    "outputProvider": "apify",
    "inputFormat": "mp4",
    "outputFormat": "webm",
    "duration": 120.5,
    "fileSize": 15234567,
    "executionTime": 45.2,
    "thumbnails": [],
    "timestamp": "2024-01-15T10:30:00.000Z",
    "metadata": {
        "videoCodec": "vp9",
        "audioCodec": "opus",
        "resolution": "1920x1080"
    }
}
```

### Advanced Processing

#### Video Trimming

```json
{
    "trimStart": "00:00:30",
    "trimEnd": "00:02:00"
}
```

#### Add Text Watermark

```json
{
    "watermarkEnabled": true,
    "watermarkType": "text",
    "watermarkText": "© My Company",
    "watermarkPosition": "bottom-right",
    "watermarkOpacity": "0.8",
    "watermarkFontSize": 24,
    "watermarkFontColor": "white"
}
```

#### Add Image Watermark

```json
{
    "watermarkEnabled": true,
    "watermarkType": "image",
    "watermarkImageUrl": "https://example.com/logo.png",
    "watermarkPosition": "top-left",
    "watermarkOpacity": "0.5"
}
```

#### Generate Thumbnails

```json
{
    "thumbnailsEnabled": true,
    "thumbnailsCount": 5,
    "thumbnailsFormat": "jpg",
    "thumbnailsWidth": 640
}
```

#### Generate GIF Preview

```json
{
    "gifPreviewEnabled": true,
    "gifPreviewStartTime": "00:00:05",
    "gifPreviewDuration": 3,
    "gifPreviewWidth": 480,
    "gifPreviewFps": 10
}
```

#### Audio Controls

```json
{
    "audioVolume": "1.5",
    "audioNormalize": true,
    "audioReplaceUrl": "https://example.com/music.mp3"
}
```

### HLS Streaming Output

HLS is the default output format. Simply set `outputFormat` to `hls`:

```json
{
    "inputType": "url",
    "videoUrl": "https://example.com/video.mp4",
    "outputFormat": "hls",
    "videoCodec": "h264",
    "audioCodec": "aac"
}
```

### Track Extractor

The extractor feature allows you to split a video file into separate video, audio, and subtitle tracks. This is useful for:

- Extracting audio from videos (e.g., for podcasts or music)
- Getting video without audio (for adding custom audio later)
- Extracting embedded subtitles/captions

#### Basic Extraction - All Tracks

```json
{
    "inputType": "url",
    "videoUrl": "https://example.com/movie.mkv",
    "extractorEnabled": true,
    "extractorExtractVideo": true,
    "extractorExtractAudio": true,
    "extractorExtractSubtitles": true
}
```

#### Extract Audio Only (MP3)

```json
{
    "inputType": "url",
    "videoUrl": "https://example.com/video.mp4",
    "extractorEnabled": true,
    "extractorExtractVideo": false,
    "extractorExtractAudio": true,
    "extractorExtractSubtitles": false,
    "extractorAudioFormat": "mp3",
    "extractorAudioBitrate": "320k"
}
```

#### Extract Audio as High-Quality FLAC

```json
{
    "inputType": "url",
    "videoUrl": "https://example.com/concert.mp4",
    "extractorEnabled": true,
    "extractorExtractVideo": false,
    "extractorExtractAudio": true,
    "extractorAudioFormat": "flac"
}
```

#### Extract Video Without Audio

```json
{
    "inputType": "url",
    "videoUrl": "https://example.com/video.mp4",
    "extractorEnabled": true,
    "extractorExtractVideo": true,
    "extractorExtractAudio": false,
    "extractorVideoCodec": "copy"
}
```

#### Extractor Output Example

When extraction is complete, the output includes URLs for each extracted track:

```json
{
    "status": "success",
    "extractedTracks": {
        "videoUrl": "https://api.apify.com/v2/key-value-stores/.../records/video_video.mp4",
        "audioUrl": "https://api.apify.com/v2/key-value-stores/.../records/video_audio.mp3",
        "subtitleUrls": [
            {
                "url": "https://api.apify.com/v2/key-value-stores/.../records/video_subtitle_eng.srt",
                "language": "eng",
                "title": "English",
                "index": 0
            }
        ]
    },
    "streamInfo": {
        "hasVideo": true,
        "hasAudio": true,
        "hasSubtitles": true,
        "streams": {
            "video": [{ "codec": "h264", "width": 1920, "height": 1080 }],
            "audio": [{ "codec": "aac", "channels": 2, "sampleRate": "48000" }],
            "subtitle": [{ "codec": "subrip", "language": "eng" }]
        }
    }
}
```

#### Extractor Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `extractorEnabled` | Boolean | `false` | Enable extractor mode |
| `extractorExtractVideo` | Boolean | `true` | Extract video track (without audio) |
| `extractorExtractAudio` | Boolean | `true` | Extract audio track |
| `extractorExtractSubtitles` | Boolean | `true` | Extract subtitle/caption tracks |
| `extractorVideoCodec` | String | `copy` | Video codec (`h264`, `h265`, `vp9`, `copy`) |
| `extractorAudioFormat` | String | `mp3` | Audio format (`mp3`, `aac`, `wav`, `flac`, `ogg`, `opus`) |
| `extractorAudioBitrate` | String | - | Audio bitrate (e.g., `128k`, `320k`) |
| `extractorSubtitleFormat` | String | `srt` | Subtitle format (`srt`, `ass`, `vtt`) |

### Input Parameters Reference

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `inputType` | String | Yes | `url` | `url`, `dropbox`, `googleDrive`, `cloudStorage`, `apifyStorage` |
| `videoUrl` | String | Conditional | - | Video URL (required for `url` input) |
| `urlAuthType` | String | No | `none` | `none`, `bearer`, `basic`, `header` |
| `outputFormat` | String | Yes | `hls` | `mp4`, `mov`, `webm`, `mkv`, `avi`, `gif`, `hls` |
| `videoCodec` | String | No | `h264` | `h264`, `h265`, `vp8`, `vp9`, `av1`, `copy` |
| `audioCodec` | String | No | `aac` | `aac`, `mp3`, `opus`, `vorbis`, `copy`, `none` |
| `quality` | String | No | `medium` | `low`, `medium`, `high`, `veryhigh` |
| `preset` | String | No | `medium` | FFmpeg preset (affects speed/quality) |
| `outputDestination` | String | No | `apify` | `apify`, `s3`, `gcs`, `dropbox` |
| `webhookUrl` | String | No | - | Webhook URL for notifications |
| `webhookSendFile` | Boolean | No | `false` | Send video file in webhook |

### Output

The Actor saves results to:

1. **Apify Dataset** - Conversion results and metadata
2. **Apify Key-Value Store** - Converted video file (if `outputDestination` is `apify`)
3. **OUTPUT Key** - Full result object

#### Output Structure

```json
{
    "status": "success",
    "inputSource": "url",
    "inputFormat": "mp4",
    "outputFormat": "webm",
    "outputUrl": "https://api.apify.com/v2/key-value-stores/.../records/video.webm",
    "outputDestination": "apify",
    "fileSize": 12345678,
    "videoDuration": 120.5,
    "executionTime": 45.2,
    "thumbnails": [],
    "timestamp": "2024-01-15T10:30:00.000Z"
}
```

### Supported Input Formats

- MP4, MOV, AVI, MKV, WEBM, FLV, WMV, 3GP, OGV

### Resource Requirements

- **Memory**: 4096 MB recommended for HD video
- **CPU**: 1-4 cores depending on video length

### License

MIT

# Actor input Schema

## `inputType` (type: `string`):

Select where to get the input video from. Choose 'url' for direct video URLs, 'dropbox' for Dropbox shared links, 'googleDrive' for Google Drive files, 'cloudStorage' for S3/GCS buckets, or 'apifyStorage' for Apify Key-Value Store.

## `videoUrl` (type: `string`):

Direct URL to the video file. Required when Input Type is 'url'. Supports HTTP/HTTPS URLs to MP4, MOV, AVI, MKV, WebM and other video formats.

## `urlAuthType` (type: `string`):

Authentication method for downloading video from protected URLs. Required only if the video URL needs authentication. Use 'bearer' for API tokens, 'basic' for username/password, or 'header' for custom headers.

## `urlAuthBearerToken` (type: `string`):

Bearer token for URL authentication. Required when URL Auth Type is 'bearer'. The token will be sent as 'Authorization: Bearer {token}' header.

## `urlAuthUsername` (type: `string`):

Username for HTTP Basic authentication. Required when URL Auth Type is 'basic'.

## `urlAuthPassword` (type: `string`):

Password for HTTP Basic authentication. Required when URL Auth Type is 'basic'.

## `urlAuthHeaderName` (type: `string`):

Custom header name for authentication. Required when URL Auth Type is 'header'. Example: 'X-API-Key' or 'Authorization'.

## `urlAuthHeaderValue` (type: `string`):

Custom header value for authentication. Required when URL Auth Type is 'header'. This is the actual token/key value.

## `googleDriveFileId` (type: `string`):

Google Drive file ID. Required when Input Type is 'googleDrive'. Find it in the file URL: drive.google.com/file/d/{FILE\_ID}/view

## `googleDriveCredentials` (type: `object`):

Google Drive API service account credentials. Required when Input Type is 'googleDrive'. Paste the entire JSON key file content from Google Cloud Console.

## `outputFormat` (type: `string`):

Select the desired output video format. 'mp4' is most compatible, 'webm' for web use, 'hls' for adaptive streaming, 'gif' for animated images.

## `videoCodec` (type: `string`):

Video codec for encoding. 'h264' is most compatible, 'h265' for better compression, 'vp9' for WebM, 'copy' to keep original (fastest).

## `audioCodec` (type: `string`):

Audio codec for encoding. 'aac' is most compatible, 'mp3' for universal support, 'opus' for WebM, 'copy' to keep original, 'none' to remove audio.

## `quality` (type: `string`):

Output video quality preset. Higher quality = larger file size. 'low' (~500kbps), 'medium' (~1Mbps), 'high' (~2Mbps), 'veryhigh' (~4Mbps).

## `preset` (type: `string`):

Encoding speed vs compression tradeoff. 'ultrafast' is quickest but larger files, 'veryslow' is smallest files but takes longer. 'medium' is balanced.

## `resolution` (type: `string`):

Output video resolution. Leave empty to keep original. Format: WIDTHxHEIGHT. Common values: '1920x1080' (Full HD), '1280x720' (HD), '854x480' (SD).

## `fps` (type: `integer`):

Output video frame rate. Leave empty to keep original. Common values: 24 (cinema), 30 (web), 60 (gaming/smooth).

## `bitrate` (type: `string`):

Video bitrate override. Leave empty for automatic based on quality. Examples: '2M' (2 Mbps), '5000k' (5000 kbps).

## `audioBitrate` (type: `string`):

Audio bitrate. Leave empty for automatic. Common values: '128k' (standard), '192k' (good), '320k' (high quality).

## `extractorEnabled` (type: `boolean`):

Enable to extract video, audio, and subtitle tracks into separate files instead of converting. When enabled, output format settings are ignored.

## `extractorExtractVideo` (type: `boolean`):

Extract video track without audio. Requires 'Enable Track Extractor' to be ON.

## `extractorExtractAudio` (type: `boolean`):

Extract audio track as separate file. Requires 'Enable Track Extractor' to be ON. Output format controlled by 'Extractor Audio Format'.

## `extractorExtractSubtitles` (type: `boolean`):

Extract subtitle/caption tracks if present. Requires 'Enable Track Extractor' to be ON. Not all videos have embedded subtitles.

## `extractorVideoCodec` (type: `string`):

Video codec for extracted video track. Use 'copy' for fastest extraction without re-encoding.

## `extractorAudioFormat` (type: `string`):

Output format for extracted audio. 'mp3' for universal compatibility, 'flac' for lossless, 'aac' for Apple devices.

## `extractorAudioBitrate` (type: `string`):

Bitrate for extracted audio. Leave empty for automatic. Examples: '128k', '192k', '320k' for MP3.

## `extractorSubtitleFormat` (type: `string`):

Output format for extracted subtitles. 'srt' is most compatible, 'vtt' for web, 'ass' for styled subtitles.

## `trimStart` (type: `string`):

Start time for trimming. Leave empty to start from beginning. Format: 'HH:MM:SS' or seconds. Examples: '00:01:30', '90'.

## `trimEnd` (type: `string`):

End time for trimming. Leave empty to go until end. Format: 'HH:MM:SS' or seconds. Examples: '00:05:00', '300'.

## `watermarkEnabled` (type: `boolean`):

Enable to add a text or image watermark to the video. Configure type, text/image, and position below.

## `watermarkType` (type: `string`):

Type of watermark. Required when 'Enable Watermark' is ON. 'text' for text overlay, 'image' for logo/image overlay.

## `watermarkText` (type: `string`):

Text to display as watermark. Required when Watermark Type is 'text'. Example: '© My Company 2024'.

## `watermarkImageUrl` (type: `string`):

URL of watermark image (PNG with transparency recommended). Required when Watermark Type is 'image'.

## `watermarkPosition` (type: `string`):

Position of the watermark on the video. Choose corner or center placement.

## `watermarkFontSize` (type: `integer`):

Font size for text watermark. Only applies when Watermark Type is 'text'. Range: 8-200.

## `watermarkFontColor` (type: `string`):

Font color for text watermark. Use color names ('white', 'red') or hex codes ('#FF0000'). Only applies when Watermark Type is 'text'.

## `watermarkOpacity` (type: `string`):

Watermark transparency. '1.0' is fully opaque, '0.5' is semi-transparent, '0.0' is invisible. Recommended: 0.5-0.8.

## `audioVolume` (type: `string`):

Adjust audio volume. '1.0' is original, '0.5' is half volume, '2.0' is double volume. Leave empty for no change.

## `audioNormalize` (type: `boolean`):

Automatically adjust audio levels for consistent volume throughout the video.

## `audioRemove` (type: `boolean`):

Remove audio track completely from output. Creates a silent video.

## `audioReplaceUrl` (type: `string`):

URL of audio file to replace original audio. Supports MP3, AAC, WAV. Original audio will be removed.

## `thumbnailsEnabled` (type: `boolean`):

Generate thumbnail images from the video at evenly spaced intervals.

## `thumbnailsCount` (type: `integer`):

Number of thumbnails to generate. Requires 'Generate Thumbnails' to be ON. Range: 1-20.

## `thumbnailsFormat` (type: `string`):

Image format for thumbnails. 'jpg' is smallest, 'png' for transparency, 'webp' for modern browsers.

## `thumbnailsWidth` (type: `integer`):

Width of thumbnails in pixels. Height is calculated automatically to maintain aspect ratio.

## `gifPreviewEnabled` (type: `boolean`):

Generate an animated GIF preview from a section of the video.

## `gifPreviewStartTime` (type: `string`):

Start time for GIF preview. Requires 'Generate GIF Preview' to be ON. Format: 'HH:MM:SS' or seconds.

## `gifPreviewDuration` (type: `integer`):

Duration of GIF in seconds. Longer = larger file. Recommended: 3-10 seconds.

## `gifPreviewWidth` (type: `integer`):

Width of GIF in pixels. Smaller = smaller file size. Recommended: 200-400.

## `gifPreviewFps` (type: `integer`):

Frames per second for GIF. Higher = smoother but larger file. Recommended: 10-15.

## `outputDestination` (type: `string`):

Where to upload the converted video. 'apify' stores in Apify Key-Value Store (default), others require credentials configured below.

## `outputStoreKey` (type: `string`):

Key name for storing in Apify Key-Value Store. Only used when Output Destination is 'apify'. Include file extension.

## `s3Bucket` (type: `string`):

AWS S3 bucket name. Required when Output Destination is 's3'. Example: 'my-video-bucket'.

## `s3Region` (type: `string`):

AWS region where bucket is located. Required when Output Destination is 's3'. Example: 'us-east-1', 'eu-west-1'.

## `s3AccessKeyId` (type: `string`):

AWS IAM access key ID. Required when Output Destination is 's3'. Get from AWS IAM Console.

## `s3SecretAccessKey` (type: `string`):

AWS IAM secret access key. Required when Output Destination is 's3'. Keep this secret!

## `s3Path` (type: `string`):

Path/key in S3 bucket where file will be stored. Include filename. Example: 'videos/output.mp4'.

## `s3Acl` (type: `string`):

S3 access control. 'private' for restricted access, 'public-read' for public URL access.

## `gcsBucket` (type: `string`):

Google Cloud Storage bucket name. Required when Output Destination is 'gcs'.

## `gcsCredentials` (type: `object`):

Google Cloud service account JSON credentials. Required when Output Destination is 'gcs'. Paste entire JSON key file.

## `gcsPath` (type: `string`):

Path in GCS bucket where file will be stored. Required when Output Destination is 'gcs'. Example: 'videos/output.mp4'.

## `gcsMakePublic` (type: `boolean`):

Make uploaded file publicly accessible via URL. Only applies when Output Destination is 'gcs'.

## `dropboxAccessToken` (type: `string`):

Dropbox API access token. Required when Output Destination is 'dropbox'. Get from Dropbox App Console.

## `dropboxPath` (type: `string`):

Dropbox path where file will be saved. Required when Output Destination is 'dropbox'. Example: '/Videos/output.mp4'.

## `dropboxCreateSharedLink` (type: `boolean`):

Create a shareable link for the uploaded file. Only applies when Output Destination is 'dropbox'.

## `webhookUrl` (type: `string`):

URL to receive notification when conversion completes. Optional. Will POST JSON with result data.

## `webhookSendFile` (type: `boolean`):

Send converted video file in webhook (multipart/form-data) instead of just URL. Requires webhook URL. May timeout for large files.

## `webhookFileFieldName` (type: `string`):

Form field name for the video file in webhook request. Only used when 'Send Video File in Webhook' is ON.

## `webhookAuthHeader` (type: `string`):

Authorization header value for webhook request. Optional. Example: 'Bearer your-secret-token' or 'Basic base64encoded'.

## Actor input object example

```json
{
  "inputType": "url",
  "videoUrl": "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_1MB.mp4",
  "urlAuthType": "none",
  "outputFormat": "hls",
  "videoCodec": "h264",
  "audioCodec": "aac",
  "quality": "medium",
  "preset": "medium",
  "extractorEnabled": false,
  "extractorExtractVideo": true,
  "extractorExtractAudio": true,
  "extractorExtractSubtitles": true,
  "extractorVideoCodec": "copy",
  "extractorAudioFormat": "mp3",
  "extractorSubtitleFormat": "srt",
  "watermarkEnabled": false,
  "watermarkType": "text",
  "watermarkPosition": "bottom-right",
  "watermarkFontSize": 24,
  "watermarkFontColor": "white",
  "watermarkOpacity": "0.8",
  "audioNormalize": false,
  "audioRemove": false,
  "thumbnailsEnabled": false,
  "thumbnailsCount": 1,
  "thumbnailsFormat": "jpg",
  "thumbnailsWidth": 320,
  "gifPreviewEnabled": false,
  "gifPreviewStartTime": "0",
  "gifPreviewDuration": 5,
  "gifPreviewWidth": 320,
  "gifPreviewFps": 10,
  "outputDestination": "apify",
  "outputStoreKey": "converted_video.mp4",
  "s3Acl": "private",
  "gcsMakePublic": false,
  "dropboxCreateSharedLink": false,
  "webhookSendFile": false,
  "webhookFileFieldName": "video"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "videoUrl": "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_1MB.mp4",
    "outputFormat": "hls"
};

// Run the Actor and wait for it to finish
const run = await client.actor("codingfrontend/video-converter").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "videoUrl": "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_1MB.mp4",
    "outputFormat": "hls",
}

# Run the Actor and wait for it to finish
run = client.actor("codingfrontend/video-converter").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "videoUrl": "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_1MB.mp4",
  "outputFormat": "hls"
}' |
apify call codingfrontend/video-converter --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=codingfrontend/video-converter",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Universal Cloud Video Converter",
        "description": "Download and extract rich video metadata from Video Converter, supporting resolutions up to 4K. Scrapes titles, duration, channel information, view counts, likes, user comments, and subtitles. Built with complete proxy rotation and anti-bot bypass support.",
        "version": "1.0",
        "x-build-id": "2zSKpLHtT5rWtrsod"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/codingfrontend~video-converter/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-codingfrontend-video-converter",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/codingfrontend~video-converter/runs": {
            "post": {
                "operationId": "runs-sync-codingfrontend-video-converter",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/codingfrontend~video-converter/run-sync": {
            "post": {
                "operationId": "run-sync-codingfrontend-video-converter",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "inputType",
                    "outputFormat"
                ],
                "properties": {
                    "inputType": {
                        "title": "Input Type",
                        "enum": [
                            "url",
                            "dropbox",
                            "googleDrive",
                            "cloudStorage",
                            "apifyStorage"
                        ],
                        "type": "string",
                        "description": "Select where to get the input video from. Choose 'url' for direct video URLs, 'dropbox' for Dropbox shared links, 'googleDrive' for Google Drive files, 'cloudStorage' for S3/GCS buckets, or 'apifyStorage' for Apify Key-Value Store.",
                        "default": "url"
                    },
                    "videoUrl": {
                        "title": "Video URL",
                        "type": "string",
                        "description": "Direct URL to the video file. Required when Input Type is 'url'. Supports HTTP/HTTPS URLs to MP4, MOV, AVI, MKV, WebM and other video formats."
                    },
                    "urlAuthType": {
                        "title": "URL Auth Type",
                        "enum": [
                            "none",
                            "bearer",
                            "basic",
                            "header"
                        ],
                        "type": "string",
                        "description": "Authentication method for downloading video from protected URLs. Required only if the video URL needs authentication. Use 'bearer' for API tokens, 'basic' for username/password, or 'header' for custom headers.",
                        "default": "none"
                    },
                    "urlAuthBearerToken": {
                        "title": "Bearer Token",
                        "type": "string",
                        "description": "Bearer token for URL authentication. Required when URL Auth Type is 'bearer'. The token will be sent as 'Authorization: Bearer {token}' header."
                    },
                    "urlAuthUsername": {
                        "title": "URL Auth Username",
                        "type": "string",
                        "description": "Username for HTTP Basic authentication. Required when URL Auth Type is 'basic'."
                    },
                    "urlAuthPassword": {
                        "title": "URL Auth Password",
                        "type": "string",
                        "description": "Password for HTTP Basic authentication. Required when URL Auth Type is 'basic'."
                    },
                    "urlAuthHeaderName": {
                        "title": "Custom Auth Header Name",
                        "type": "string",
                        "description": "Custom header name for authentication. Required when URL Auth Type is 'header'. Example: 'X-API-Key' or 'Authorization'."
                    },
                    "urlAuthHeaderValue": {
                        "title": "Custom Auth Header Value",
                        "type": "string",
                        "description": "Custom header value for authentication. Required when URL Auth Type is 'header'. This is the actual token/key value."
                    },
                    "googleDriveFileId": {
                        "title": "Google Drive File ID",
                        "type": "string",
                        "description": "Google Drive file ID. Required when Input Type is 'googleDrive'. Find it in the file URL: drive.google.com/file/d/{FILE_ID}/view"
                    },
                    "googleDriveCredentials": {
                        "title": "Google Drive Credentials",
                        "type": "object",
                        "description": "Google Drive API service account credentials. Required when Input Type is 'googleDrive'. Paste the entire JSON key file content from Google Cloud Console."
                    },
                    "outputFormat": {
                        "title": "Output Format",
                        "enum": [
                            "mp4",
                            "mov",
                            "webm",
                            "mkv",
                            "avi",
                            "gif",
                            "hls"
                        ],
                        "type": "string",
                        "description": "Select the desired output video format. 'mp4' is most compatible, 'webm' for web use, 'hls' for adaptive streaming, 'gif' for animated images.",
                        "default": "hls"
                    },
                    "videoCodec": {
                        "title": "Video Codec",
                        "enum": [
                            "h264",
                            "h265",
                            "vp8",
                            "vp9",
                            "av1",
                            "copy"
                        ],
                        "type": "string",
                        "description": "Video codec for encoding. 'h264' is most compatible, 'h265' for better compression, 'vp9' for WebM, 'copy' to keep original (fastest).",
                        "default": "h264"
                    },
                    "audioCodec": {
                        "title": "Audio Codec",
                        "enum": [
                            "aac",
                            "mp3",
                            "opus",
                            "vorbis",
                            "copy",
                            "none"
                        ],
                        "type": "string",
                        "description": "Audio codec for encoding. 'aac' is most compatible, 'mp3' for universal support, 'opus' for WebM, 'copy' to keep original, 'none' to remove audio.",
                        "default": "aac"
                    },
                    "quality": {
                        "title": "Quality",
                        "enum": [
                            "low",
                            "medium",
                            "high",
                            "veryhigh"
                        ],
                        "type": "string",
                        "description": "Output video quality preset. Higher quality = larger file size. 'low' (~500kbps), 'medium' (~1Mbps), 'high' (~2Mbps), 'veryhigh' (~4Mbps).",
                        "default": "medium"
                    },
                    "preset": {
                        "title": "Encoding Preset",
                        "enum": [
                            "ultrafast",
                            "superfast",
                            "veryfast",
                            "faster",
                            "fast",
                            "medium",
                            "slow",
                            "slower",
                            "veryslow"
                        ],
                        "type": "string",
                        "description": "Encoding speed vs compression tradeoff. 'ultrafast' is quickest but larger files, 'veryslow' is smallest files but takes longer. 'medium' is balanced.",
                        "default": "medium"
                    },
                    "resolution": {
                        "title": "Resolution",
                        "type": "string",
                        "description": "Output video resolution. Leave empty to keep original. Format: WIDTHxHEIGHT. Common values: '1920x1080' (Full HD), '1280x720' (HD), '854x480' (SD)."
                    },
                    "fps": {
                        "title": "Frame Rate (FPS)",
                        "minimum": 1,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Output video frame rate. Leave empty to keep original. Common values: 24 (cinema), 30 (web), 60 (gaming/smooth)."
                    },
                    "bitrate": {
                        "title": "Video Bitrate",
                        "type": "string",
                        "description": "Video bitrate override. Leave empty for automatic based on quality. Examples: '2M' (2 Mbps), '5000k' (5000 kbps)."
                    },
                    "audioBitrate": {
                        "title": "Audio Bitrate",
                        "type": "string",
                        "description": "Audio bitrate. Leave empty for automatic. Common values: '128k' (standard), '192k' (good), '320k' (high quality)."
                    },
                    "extractorEnabled": {
                        "title": "Enable Track Extractor",
                        "type": "boolean",
                        "description": "Enable to extract video, audio, and subtitle tracks into separate files instead of converting. When enabled, output format settings are ignored.",
                        "default": false
                    },
                    "extractorExtractVideo": {
                        "title": "Extract Video Track",
                        "type": "boolean",
                        "description": "Extract video track without audio. Requires 'Enable Track Extractor' to be ON.",
                        "default": true
                    },
                    "extractorExtractAudio": {
                        "title": "Extract Audio Track",
                        "type": "boolean",
                        "description": "Extract audio track as separate file. Requires 'Enable Track Extractor' to be ON. Output format controlled by 'Extractor Audio Format'.",
                        "default": true
                    },
                    "extractorExtractSubtitles": {
                        "title": "Extract Subtitles",
                        "type": "boolean",
                        "description": "Extract subtitle/caption tracks if present. Requires 'Enable Track Extractor' to be ON. Not all videos have embedded subtitles.",
                        "default": true
                    },
                    "extractorVideoCodec": {
                        "title": "Extractor Video Codec",
                        "enum": [
                            "h264",
                            "h265",
                            "vp9",
                            "copy"
                        ],
                        "type": "string",
                        "description": "Video codec for extracted video track. Use 'copy' for fastest extraction without re-encoding.",
                        "default": "copy"
                    },
                    "extractorAudioFormat": {
                        "title": "Extractor Audio Format",
                        "enum": [
                            "mp3",
                            "aac",
                            "wav",
                            "flac",
                            "ogg",
                            "opus"
                        ],
                        "type": "string",
                        "description": "Output format for extracted audio. 'mp3' for universal compatibility, 'flac' for lossless, 'aac' for Apple devices.",
                        "default": "mp3"
                    },
                    "extractorAudioBitrate": {
                        "title": "Extractor Audio Bitrate",
                        "type": "string",
                        "description": "Bitrate for extracted audio. Leave empty for automatic. Examples: '128k', '192k', '320k' for MP3."
                    },
                    "extractorSubtitleFormat": {
                        "title": "Extractor Subtitle Format",
                        "enum": [
                            "srt",
                            "ass",
                            "vtt"
                        ],
                        "type": "string",
                        "description": "Output format for extracted subtitles. 'srt' is most compatible, 'vtt' for web, 'ass' for styled subtitles.",
                        "default": "srt"
                    },
                    "trimStart": {
                        "title": "Trim Start Time",
                        "type": "string",
                        "description": "Start time for trimming. Leave empty to start from beginning. Format: 'HH:MM:SS' or seconds. Examples: '00:01:30', '90'."
                    },
                    "trimEnd": {
                        "title": "Trim End Time",
                        "type": "string",
                        "description": "End time for trimming. Leave empty to go until end. Format: 'HH:MM:SS' or seconds. Examples: '00:05:00', '300'."
                    },
                    "watermarkEnabled": {
                        "title": "Enable Watermark",
                        "type": "boolean",
                        "description": "Enable to add a text or image watermark to the video. Configure type, text/image, and position below.",
                        "default": false
                    },
                    "watermarkType": {
                        "title": "Watermark Type",
                        "enum": [
                            "text",
                            "image"
                        ],
                        "type": "string",
                        "description": "Type of watermark. Required when 'Enable Watermark' is ON. 'text' for text overlay, 'image' for logo/image overlay.",
                        "default": "text"
                    },
                    "watermarkText": {
                        "title": "Watermark Text",
                        "type": "string",
                        "description": "Text to display as watermark. Required when Watermark Type is 'text'. Example: '© My Company 2024'."
                    },
                    "watermarkImageUrl": {
                        "title": "Watermark Image URL",
                        "type": "string",
                        "description": "URL of watermark image (PNG with transparency recommended). Required when Watermark Type is 'image'."
                    },
                    "watermarkPosition": {
                        "title": "Watermark Position",
                        "enum": [
                            "top-left",
                            "top-right",
                            "bottom-left",
                            "bottom-right",
                            "center"
                        ],
                        "type": "string",
                        "description": "Position of the watermark on the video. Choose corner or center placement.",
                        "default": "bottom-right"
                    },
                    "watermarkFontSize": {
                        "title": "Watermark Font Size",
                        "minimum": 8,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Font size for text watermark. Only applies when Watermark Type is 'text'. Range: 8-200.",
                        "default": 24
                    },
                    "watermarkFontColor": {
                        "title": "Watermark Font Color",
                        "type": "string",
                        "description": "Font color for text watermark. Use color names ('white', 'red') or hex codes ('#FF0000'). Only applies when Watermark Type is 'text'.",
                        "default": "white"
                    },
                    "watermarkOpacity": {
                        "title": "Watermark Opacity",
                        "type": "string",
                        "description": "Watermark transparency. '1.0' is fully opaque, '0.5' is semi-transparent, '0.0' is invisible. Recommended: 0.5-0.8.",
                        "default": "0.8"
                    },
                    "audioVolume": {
                        "title": "Audio Volume",
                        "type": "string",
                        "description": "Adjust audio volume. '1.0' is original, '0.5' is half volume, '2.0' is double volume. Leave empty for no change."
                    },
                    "audioNormalize": {
                        "title": "Normalize Audio",
                        "type": "boolean",
                        "description": "Automatically adjust audio levels for consistent volume throughout the video.",
                        "default": false
                    },
                    "audioRemove": {
                        "title": "Remove Audio",
                        "type": "boolean",
                        "description": "Remove audio track completely from output. Creates a silent video.",
                        "default": false
                    },
                    "audioReplaceUrl": {
                        "title": "Replace Audio URL",
                        "type": "string",
                        "description": "URL of audio file to replace original audio. Supports MP3, AAC, WAV. Original audio will be removed."
                    },
                    "thumbnailsEnabled": {
                        "title": "Generate Thumbnails",
                        "type": "boolean",
                        "description": "Generate thumbnail images from the video at evenly spaced intervals.",
                        "default": false
                    },
                    "thumbnailsCount": {
                        "title": "Thumbnail Count",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Number of thumbnails to generate. Requires 'Generate Thumbnails' to be ON. Range: 1-20.",
                        "default": 1
                    },
                    "thumbnailsFormat": {
                        "title": "Thumbnail Format",
                        "enum": [
                            "jpg",
                            "png",
                            "webp"
                        ],
                        "type": "string",
                        "description": "Image format for thumbnails. 'jpg' is smallest, 'png' for transparency, 'webp' for modern browsers.",
                        "default": "jpg"
                    },
                    "thumbnailsWidth": {
                        "title": "Thumbnail Width",
                        "minimum": 50,
                        "maximum": 1920,
                        "type": "integer",
                        "description": "Width of thumbnails in pixels. Height is calculated automatically to maintain aspect ratio.",
                        "default": 320
                    },
                    "gifPreviewEnabled": {
                        "title": "Generate GIF Preview",
                        "type": "boolean",
                        "description": "Generate an animated GIF preview from a section of the video.",
                        "default": false
                    },
                    "gifPreviewStartTime": {
                        "title": "GIF Start Time",
                        "type": "string",
                        "description": "Start time for GIF preview. Requires 'Generate GIF Preview' to be ON. Format: 'HH:MM:SS' or seconds.",
                        "default": "0"
                    },
                    "gifPreviewDuration": {
                        "title": "GIF Duration",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Duration of GIF in seconds. Longer = larger file. Recommended: 3-10 seconds.",
                        "default": 5
                    },
                    "gifPreviewWidth": {
                        "title": "GIF Width",
                        "minimum": 50,
                        "maximum": 800,
                        "type": "integer",
                        "description": "Width of GIF in pixels. Smaller = smaller file size. Recommended: 200-400.",
                        "default": 320
                    },
                    "gifPreviewFps": {
                        "title": "GIF FPS",
                        "minimum": 5,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Frames per second for GIF. Higher = smoother but larger file. Recommended: 10-15.",
                        "default": 10
                    },
                    "outputDestination": {
                        "title": "Output Destination",
                        "enum": [
                            "apify",
                            "s3",
                            "gcs",
                            "dropbox"
                        ],
                        "type": "string",
                        "description": "Where to upload the converted video. 'apify' stores in Apify Key-Value Store (default), others require credentials configured below.",
                        "default": "apify"
                    },
                    "outputStoreKey": {
                        "title": "Output Store Key",
                        "type": "string",
                        "description": "Key name for storing in Apify Key-Value Store. Only used when Output Destination is 'apify'. Include file extension.",
                        "default": "converted_video.mp4"
                    },
                    "s3Bucket": {
                        "title": "S3 Bucket Name",
                        "type": "string",
                        "description": "AWS S3 bucket name. Required when Output Destination is 's3'. Example: 'my-video-bucket'."
                    },
                    "s3Region": {
                        "title": "S3 Region",
                        "type": "string",
                        "description": "AWS region where bucket is located. Required when Output Destination is 's3'. Example: 'us-east-1', 'eu-west-1'."
                    },
                    "s3AccessKeyId": {
                        "title": "S3 Access Key ID",
                        "type": "string",
                        "description": "AWS IAM access key ID. Required when Output Destination is 's3'. Get from AWS IAM Console."
                    },
                    "s3SecretAccessKey": {
                        "title": "S3 Secret Access Key",
                        "type": "string",
                        "description": "AWS IAM secret access key. Required when Output Destination is 's3'. Keep this secret!"
                    },
                    "s3Path": {
                        "title": "S3 Path/Key",
                        "type": "string",
                        "description": "Path/key in S3 bucket where file will be stored. Include filename. Example: 'videos/output.mp4'."
                    },
                    "s3Acl": {
                        "title": "S3 ACL",
                        "enum": [
                            "private",
                            "public-read"
                        ],
                        "type": "string",
                        "description": "S3 access control. 'private' for restricted access, 'public-read' for public URL access.",
                        "default": "private"
                    },
                    "gcsBucket": {
                        "title": "GCS Bucket Name",
                        "type": "string",
                        "description": "Google Cloud Storage bucket name. Required when Output Destination is 'gcs'."
                    },
                    "gcsCredentials": {
                        "title": "GCS Service Account Credentials",
                        "type": "object",
                        "description": "Google Cloud service account JSON credentials. Required when Output Destination is 'gcs'. Paste entire JSON key file."
                    },
                    "gcsPath": {
                        "title": "GCS Path",
                        "type": "string",
                        "description": "Path in GCS bucket where file will be stored. Required when Output Destination is 'gcs'. Example: 'videos/output.mp4'."
                    },
                    "gcsMakePublic": {
                        "title": "GCS Make Public",
                        "type": "boolean",
                        "description": "Make uploaded file publicly accessible via URL. Only applies when Output Destination is 'gcs'.",
                        "default": false
                    },
                    "dropboxAccessToken": {
                        "title": "Dropbox Access Token",
                        "type": "string",
                        "description": "Dropbox API access token. Required when Output Destination is 'dropbox'. Get from Dropbox App Console."
                    },
                    "dropboxPath": {
                        "title": "Dropbox Path",
                        "type": "string",
                        "description": "Dropbox path where file will be saved. Required when Output Destination is 'dropbox'. Example: '/Videos/output.mp4'."
                    },
                    "dropboxCreateSharedLink": {
                        "title": "Create Dropbox Shared Link",
                        "type": "boolean",
                        "description": "Create a shareable link for the uploaded file. Only applies when Output Destination is 'dropbox'.",
                        "default": false
                    },
                    "webhookUrl": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "URL to receive notification when conversion completes. Optional. Will POST JSON with result data."
                    },
                    "webhookSendFile": {
                        "title": "Send Video File in Webhook",
                        "type": "boolean",
                        "description": "Send converted video file in webhook (multipart/form-data) instead of just URL. Requires webhook URL. May timeout for large files.",
                        "default": false
                    },
                    "webhookFileFieldName": {
                        "title": "Webhook File Field Name",
                        "type": "string",
                        "description": "Form field name for the video file in webhook request. Only used when 'Send Video File in Webhook' is ON.",
                        "default": "video"
                    },
                    "webhookAuthHeader": {
                        "title": "Webhook Auth Header",
                        "type": "string",
                        "description": "Authorization header value for webhook request. Optional. Example: 'Bearer your-secret-token' or 'Basic base64encoded'."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
