{
  "openapi": "3.0.1",
  "info": {
    "title": "Youtube Video Summarizer By Channel & Playlist",
    "description": "YouTube Video Summarizer by Channel & Playlist extracts videos from YouTube channels and playlists and generates concise AI summaries. Analyze video content, topics, transcripts, and key insights at scale for research, content analysis, and automation.",
    "version": "0.1",
    "x-build-id": "MM2LePH94Szsp3zA1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~youtube-video-summarizer/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-youtube-video-summarizer",
        "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/api-empire~youtube-video-summarizer/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-youtube-video-summarizer",
        "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/api-empire~youtube-video-summarizer/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-youtube-video-summarizer",
        "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": {
          "channelOrPlaylistUrls": {
            "title": "📺 Channel or Playlist URLs",
            "type": "array",
            "description": "One entry per channel or playlist. Accepted shapes:\n• https://www.youtube.com/@somechannel\n• https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx\n• https://www.youtube.com/playlist?list=PLxxxxxxxx\n• a bare handle such as @somechannel\n\nChannels return their newest long-form videos first. Playlists return items in playlist order. Leave empty if you only want the individual video URLs below.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerContainer": {
            "title": "🔢 Max Videos Per Channel or Playlist",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Hard cap on how many videos are taken from EACH channel or playlist. This is the cost control for batch runs: 3 channels with a cap of 10 processes at most 30 videos, and at most 30 AI summary calls. Example: 10 → the 10 newest channel videos, or the first 10 playlist items. Default is 5.",
            "default": 5
          },
          "channelSearchQueries": {
            "title": "🔍 Channel Search Phrases (used when no channel or playlist is given)",
            "type": "array",
            "description": "Words or phrases used to find matching YouTube channels when both lists above and below are empty. Each phrase returns channels, and each channel is expanded exactly like a pasted channel URL - same per-video pipeline, same per-channel cap, same roll-up row.\n\nExample: `tech reviews` with 1 channel per phrase and a cap of 5 videos = 5 video rows plus 1 roll-up row. Leave everything else empty and press Start to use these phrases.",
            "items": {
              "type": "string"
            }
          },
          "maxChannelsPerQuery": {
            "title": "🔢 Channels Per Search Phrase",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many channels to take from each phrase above. Only applies when no channel, playlist or individual video was supplied. Example: `1` (default) with 2 phrases expands 2 channels.",
            "default": 1
          },
          "singleVideoUrls": {
            "title": "🎬 Individual Video URLs",
            "type": "array",
            "description": "One YouTube video URL per line, for example https://www.youtube.com/watch?v=VIDEO_ID or https://youtu.be/VIDEO_ID. These are processed exactly like the videos discovered from a channel or playlist.",
            "items": {
              "type": "string",
              "pattern": "^(https?://)"
            }
          },
          "urls": {
            "title": "🔗 Video URLs (legacy field)",
            "type": "array",
            "description": "Kept so input built for the single-video version of this Actor keeps working unchanged. If \"Individual Video URLs\" above is empty, whatever you put here is used instead.",
            "items": {
              "type": "string",
              "pattern": "^(https?://)"
            }
          },
          "includeContainerSummary": {
            "title": "📊 Add A Roll-Up Row Per Channel/Playlist",
            "type": "boolean",
            "description": "When on, one extra row of type \"container_summary\" is added after each channel or playlist: how many videos were discovered, processed, summarized and skipped, total and average views, average likes, average engagement rate, total runtime in seconds and the most common tags across the batch. Turn off if you only want the per-video rows. Default is on.",
            "default": true
          },
          "enableAiSummaries": {
            "title": "🤖 Generate AI Summaries",
            "type": "boolean",
            "description": "When on, each video's transcript (or its title plus description when there is no transcript) is sent to the model you pick below and turned into a short summary plus a long Markdown summary. Each video is one model call, so cost scales with the video cap above. Default is off.",
            "default": false
          },
          "aiModel": {
            "title": "🧠 AI Model / Provider",
            "enum": [
              "claude-haiku-4-5",
              "claude-sonnet-5",
              "claude-opus-4-8",
              "claude-fable-5",
              "gpt-4o-mini",
              "gpt-4o",
              "gpt-4.1-mini",
              "gpt-4.1",
              "o3-mini",
              "o1",
              "gemini-2.0-flash-lite",
              "gemini-2.0-flash",
              "gemini-1.5-pro",
              "gemini-2.5-flash",
              "gemini-2.5-pro",
              "grok-2-latest",
              "grok-3-mini",
              "grok-3",
              "deepseek-chat",
              "deepseek-reasoner",
              "sonar",
              "sonar-pro",
              "mistral-small-latest",
              "mistral-large-latest"
            ],
            "type": "string",
            "description": "Provider is detected from the model name: claude-* = Anthropic, gpt-*/o1/o3 = OpenAI, gemini-* = Google, grok-* = xAI, deepseek-* = DeepSeek, sonar* = Perplexity, mistral-* = Mistral. Cheaper mini/flash/haiku models are more than enough for summarization at batch scale.",
            "default": "gpt-4o-mini"
          },
          "aiApiKey": {
            "title": "🔑 Your AI Provider API Key",
            "type": "string",
            "description": "Your own API key for the provider that matches the model above. It is stored encrypted and is only used for this run's summary calls. Leave empty to run without summaries. If you prefer, you can set the matching environment variable instead (ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, XAI_API_KEY, DEEPSEEK_API_KEY, MISTRAL_API_KEY or PERPLEXITY_API_KEY)."
          },
          "maxDurationSeconds": {
            "title": "⏱️ Max Video Length (seconds)",
            "minimum": 0,
            "type": "integer",
            "description": "Videos longer than this still return every metadata field and their transcript, but are not sent to the AI model (which is where a very long video gets expensive). Example: 3600 skips summaries for anything over an hour. Set 0 for no limit. Default is 0.",
            "default": 0
          },
          "maxRetries": {
            "title": "🔁 Attempts Per Video",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "How many times a single video is re-attempted before it is reported as unavailable and the run moves on. One failing video never stops the rest of the batch. Default is 3.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy Configuration",
            "type": "object",
            "description": "Leave empty to run without a proxy. Selecting an Apify Proxy group here routes the run through it. Larger channel and playlist batches are more reliable with a proxy enabled."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}