{
  "openapi": "3.0.1",
  "info": {
    "title": "Universal Media Extractor",
    "description": "Extract videos, audio, and metadata from 1000+ websites including YouTube, TikTok, Twitter/X, Instagram, Vimeo, Facebook, Twitch, and many more. Stream directly to your cloud storage or get direct download URLs for your pipelines.",
    "version": "1.1",
    "x-build-id": "Eb7Fc2SJBqc7ZZRzB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~universal-media-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-universal-media-extractor",
        "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/abotapi~universal-media-extractor/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-universal-media-extractor",
        "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/abotapi~universal-media-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-universal-media-extractor",
        "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",
        "properties": {
          "urls": {
            "title": "Video URLs",
            "type": "array",
            "description": "Several video, short, embed, playlist or channel links, processed one after another, one result row each. Merged with Video URL. Leave both empty to get one example of every supported link shape.",
            "default": [
              "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
              "https://youtu.be/aqz-KE-bpKQ",
              "https://www.youtube.com/shorts/jNQXAC9IVRw",
              "https://www.youtube.com/embed/kJQP7kiw5Fk",
              "https://www.youtube.com/playlist?list=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI",
              "https://www.youtube.com/@YouTube/videos"
            ],
            "items": {
              "type": "string"
            }
          },
          "url": {
            "title": "Video URL",
            "type": "string",
            "description": "URL of the video, playlist or channel to process"
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "extract",
              "download",
              "stream"
            ],
            "type": "string",
            "description": "Processing mode: extract (metadata only), download (to storage), stream (direct to cloud)",
            "default": "extract"
          },
          "format": {
            "title": "Format",
            "type": "string",
            "description": "Video/audio format selection. Examples: best, bestaudio, bestvideo+bestaudio, best[height<=720]",
            "default": "best"
          },
          "preferredQuality": {
            "title": "Preferred quality",
            "enum": [
              "144p",
              "240p",
              "360p",
              "480p",
              "720p",
              "1080p",
              "1440p",
              "2160p"
            ],
            "type": "string",
            "description": "Maximum video height for download. Ignored when Format is set to something other than best."
          },
          "preferredFormat": {
            "title": "Preferred format",
            "enum": [
              "avi",
              "flv",
              "mkv",
              "mov",
              "mp4",
              "webm",
              "aac",
              "aiff",
              "alac",
              "flac",
              "m4a",
              "mka",
              "mp3",
              "ogg",
              "opus",
              "vorbis",
              "wav"
            ],
            "type": "string",
            "description": "Container for the saved video (mp4, mkv, webm ...) or an audio format (mp3, m4a, wav ...) converted from the best audio. Download and stream modes."
          },
          "filenameTemplateParts": {
            "title": "Filename parts",
            "maxItems": 3,
            "type": "array",
            "description": "Parts joined with a dash to name saved files, in order. Leave empty to name files by video ID.",
            "items": {
              "type": "string",
              "enum": [
                "title",
                "uploader",
                "timestamp"
              ]
            }
          },
          "ignore_errors": {
            "title": "Ignore Errors",
            "type": "boolean",
            "description": "Continue on download errors (useful for playlists)",
            "default": false
          },
          "storage_type": {
            "title": "Storage Type",
            "enum": [
              "apify",
              "s3",
              "gcs"
            ],
            "type": "string",
            "description": "Where to store downloaded files (for download/stream modes)",
            "default": "apify"
          },
          "storage_config": {
            "title": "Storage Configuration",
            "type": "object",
            "description": "Cloud storage credentials. For S3: {bucket, region, aws_access_key, aws_secret_key, prefix, acl}. For GCS: {bucket, credentials_json, prefix, make_public}"
          },
          "write_subtitles": {
            "title": "Write Subtitles",
            "type": "boolean",
            "description": "Download mode (and stream mode, which then downloads): save the subtitle files next to the video and list them in the row under subtitleFiles. Extract mode returns the subtitle tracks the site offers inside the row, but saves no files.",
            "default": false
          },
          "subtitle_langs": {
            "title": "Subtitle Languages",
            "type": "array",
            "description": "List of subtitle languages to download (e.g., en, es)",
            "items": {
              "type": "string"
            }
          },
          "playlist_items": {
            "title": "Playlist Items",
            "type": "string",
            "description": "Specific playlist items to process (e.g., '1,3,5-7')"
          },
          "extract_flat": {
            "title": "Extract Flat (Playlists)",
            "type": "boolean",
            "description": "For playlists, only extract video URLs without downloading individual video info",
            "default": false
          },
          "max_items_per_url": {
            "title": "Max videos per playlist or channel",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Playlist and channel links produce one row per video, up to this many (after Playlist Items is applied). The list stops at this cap and the run log and the OUTPUT record say so; raising it bills one result row per extra video.",
            "default": 10
          },
          "username": {
            "title": "Username",
            "type": "string",
            "description": "Account username for authenticated content"
          },
          "password": {
            "title": "Password",
            "type": "string",
            "description": "Account password for authenticated content"
          },
          "geo_bypass": {
            "title": "Geo Bypass",
            "type": "boolean",
            "description": "Attempt to bypass geo-restrictions",
            "default": true
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy configuration. If left empty, the extractor connects directly with no proxy. Enable Apify Proxy or paste custom proxy URLs here if the source site needs it."
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (skip links already delivered)",
            "type": "string",
            "description": "Optional. ID of an earlier run of this actor (or of a dataset). Links and playlist or channel videos already delivered in that dataset are skipped, so this run returns and bills only the rest. Use it to continue one interrupted run. For recurring runs of the same links use Incremental mode below."
          },
          "incrementalMode": {
            "title": "Incremental mode for scheduled runs",
            "enum": [
              "none",
              "new-only",
              "changed-only"
            ],
            "type": "string",
            "description": "none (default): every run returns every video, nothing is remembered. new-only: the first run returns every video, later runs return only videos not seen before. changed-only: later runs return new videos plus videos whose details changed (title, description, tags, duration, availability and similar); view_count and like_count never count as changes, and signed stream links, thumbnails, subtitle lists and storage links are never compared. Videos that are not returned are not billed and, in download or stream mode, not downloaded again. Unchanged and removed videos are never returned. State is kept per set of links, or per State key.",
            "default": "none"
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its remembered videos stable, or to share them across runs with different links. Leave empty to derive the key from the set of links."
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Field names that should NOT make a video count as changed. view_count and like_count are always ignored (live counters); add others here, for example description or tags. Use a dotted path (for example chapters.title) for a field inside a nested object or list. Ignored fields are still returned in the output.",
            "default": [
              "view_count",
              "like_count"
            ],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped result rows into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify > Settings > API & Integrations, then select it here. Notion gets a page-per-result row export; other connectors receive a best-effort write or digest. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page",
            "type": "string",
            "description": "URL or id of the Notion page under which result row pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max rows to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on how many result rows are written to each selected connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}