{
  "openapi": "3.0.1",
  "info": {
    "title": "Youtube Video Summarizer With Multi-Language Transcripts",
    "description": "YouTube Video Summarizer extracts transcripts in multiple languages and generates concise video summaries with key points. Ideal for content research, competitor analysis, multilingual insights, knowledge extraction, and YouTube content workflows.",
    "version": "0.1",
    "x-build-id": "tCCfULytABKkfgDOA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simpleapi~youtube-video-summarizer/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simpleapi-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/simpleapi~youtube-video-summarizer/runs": {
      "post": {
        "operationId": "runs-sync-simpleapi-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/simpleapi~youtube-video-summarizer/run-sync": {
      "post": {
        "operationId": "run-sync-simpleapi-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": {
          "videoUrls": {
            "title": "🎬 YouTube Video Links",
            "type": "array",
            "description": "One line per video. Accepts `https://www.youtube.com/watch?v=...`, `https://youtu.be/...` and Shorts links. Every link is processed on its own and its row is written to the output table the moment it is ready.",
            "items": {
              "type": "string",
              "pattern": "^(https?://)"
            }
          },
          "searchPhrases": {
            "title": "🔍 Search Phrases (used when no links are given)",
            "type": "array",
            "description": "🔎 **Phrases to look up on YouTube when the link list above is empty.** Every matching video runs through the same pipeline - metadata, multi-language transcripts and the optional localized summary.\n\nExample: `spanish news` + `french lesson` with 2 videos per phrase = 4 rows. Leave the link list empty and press Start to use the phrases below.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerPhrase": {
            "title": "🔢 Videos Per Search Phrase",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many videos to take from each phrase above. Only applies when the link list is empty. Example: `2` (default) with 2 phrases returns 4 videos.",
            "default": 2
          },
          "transcriptLanguage": {
            "title": "🗣️ Main Transcript Language",
            "enum": [
              "original",
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "pl",
              "ru",
              "uk",
              "tr",
              "ar",
              "he",
              "fa",
              "hi",
              "bn",
              "ta",
              "ur",
              "id",
              "ms",
              "vi",
              "th",
              "ja",
              "ko",
              "zh-Hans",
              "zh-Hant",
              "sv",
              "da",
              "no",
              "fi",
              "cs",
              "ro",
              "el",
              "hu",
              "sw"
            ],
            "type": "string",
            "description": "The language used for the main `transcript` field. `original` keeps the video's own spoken language (this is the classic behaviour). Choosing a specific language is strict: if that language has no caption track for a video, the row reports it as unavailable and lists what does exist - it never swaps in another language under the requested label.",
            "default": "original"
          },
          "additionalTranscriptLanguages": {
            "title": "➕ Extra Transcript Languages",
            "uniqueItems": true,
            "type": "array",
            "description": "Extra languages to return alongside the main one, all inside the `transcripts` list. Example: main language `en` plus extras `es` and `ja` gives three separate transcripts per video. Each extra language is one more caption fetch per video, so pick only what you need.",
            "items": {
              "type": "string",
              "enum": [
                "en",
                "es",
                "pt",
                "fr",
                "de",
                "it",
                "nl",
                "pl",
                "ru",
                "uk",
                "tr",
                "ar",
                "he",
                "fa",
                "hi",
                "bn",
                "ta",
                "ur",
                "id",
                "ms",
                "vi",
                "th",
                "ja",
                "ko",
                "zh-Hans",
                "zh-Hant",
                "sv",
                "da",
                "no",
                "fi",
                "cs",
                "ro",
                "el",
                "hu",
                "sw"
              ],
              "enumTitles": [
                "English (en)",
                "Spanish (es)",
                "Portuguese (pt)",
                "French (fr)",
                "German (de)",
                "Italian (it)",
                "Dutch (nl)",
                "Polish (pl)",
                "Russian (ru)",
                "Ukrainian (uk)",
                "Turkish (tr)",
                "Arabic (ar)",
                "Hebrew (he)",
                "Persian (fa)",
                "Hindi (hi)",
                "Bengali (bn)",
                "Tamil (ta)",
                "Urdu (ur)",
                "Indonesian (id)",
                "Malay (ms)",
                "Vietnamese (vi)",
                "Thai (th)",
                "Japanese (ja)",
                "Korean (ko)",
                "Chinese Simplified (zh-Hans)",
                "Chinese Traditional (zh-Hant)",
                "Swedish (sv)",
                "Danish (da)",
                "Norwegian (no)",
                "Finnish (fi)",
                "Czech (cs)",
                "Romanian (ro)",
                "Greek (el)",
                "Hungarian (hu)",
                "Swahili (sw)"
              ]
            }
          },
          "captionTrackTypes": {
            "title": "🏷️ Accepted Caption Track Types",
            "enum": [
              "all",
              "manual_and_auto",
              "manual_only"
            ],
            "type": "string",
            "description": "Which kinds of caption tracks may be used. `manual_only` keeps creator-uploaded subtitles solely - the most accurate, but far fewer languages. `manual_and_auto` adds the video's own auto-generated captions. `all` also accepts YouTube's auto-translated tracks, which is what makes most languages available on most videos. Whatever you pick, every returned track still states its own type.",
            "default": "all"
          },
          "includeTranscriptTimestamps": {
            "title": "⏱️ Include Timestamped Segments",
            "type": "boolean",
            "description": "On: every transcript carries its full `entries` list of `{start, dur, text}` segments plus the joined plain text. Off: only the joined plain text and the counts are returned, which makes rows much smaller for long videos.",
            "default": true
          },
          "enableAiSummary": {
            "title": "✨ Generate AI Summary",
            "type": "boolean",
            "description": "Turn on to generate a short summary and a long Markdown summary from the main transcript. Requires your own API key below. Off by default so a run never depends on a key you have not supplied.",
            "default": false
          },
          "summaryLanguage": {
            "title": "🌐 Summary Output Language",
            "enum": [
              "match_transcript",
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "pl",
              "ru",
              "uk",
              "tr",
              "ar",
              "he",
              "fa",
              "hi",
              "bn",
              "ta",
              "ur",
              "id",
              "ms",
              "vi",
              "th",
              "ja",
              "ko",
              "zh-Hans",
              "zh-Hant",
              "sv",
              "da",
              "no",
              "fi",
              "cs",
              "ro",
              "el",
              "hu",
              "sw"
            ],
            "type": "string",
            "description": "The language the summary is written in. `match_transcript` writes it in the same language as the main transcript. Any other choice asks the model to write the summary in that language even when the video is spoken in a different one - so an English talk can be summarised in Spanish. The language actually used is reported back in the `summaryLanguage` output field.",
            "default": "match_transcript"
          },
          "aiModel": {
            "title": "🤖 AI Model / Provider",
            "enum": [
              "claude-haiku-4-5",
              "claude-sonnet-5",
              "claude-opus-4-8",
              "gpt-4o-mini",
              "gpt-4o",
              "gpt-4.1-mini",
              "gpt-4.1",
              "o3-mini",
              "gemini-2.0-flash-lite",
              "gemini-2.0-flash",
              "gemini-2.5-flash",
              "gemini-2.5-pro",
              "grok-3-mini",
              "grok-3",
              "deepseek-chat",
              "sonar",
              "sonar-pro",
              "mistral-small-latest",
              "mistral-large-latest"
            ],
            "type": "string",
            "description": "Provider is taken from the model name: claude-*=Anthropic, gpt-*/o1/o3=OpenAI, gemini-*=Google, grok-*=xAI, deepseek-*=DeepSeek, sonar*=Perplexity, mistral-*=Mistral. The cheaper mini/flash/haiku models are plenty for summarisation.",
            "default": "gpt-4o-mini"
          },
          "aiApiKey": {
            "title": "🔑 Your AI API Key",
            "type": "string",
            "description": "Your own provider API key, stored encrypted. Nothing is charged to this Actor and no key is bundled with it - without a key the summary fields simply stay empty. Environment fallbacks, if you prefer to set them on the Actor instead: OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY, XAI_API_KEY, DEEPSEEK_API_KEY, PERPLEXITY_API_KEY, MISTRAL_API_KEY."
          },
          "aiApiBaseUrl": {
            "title": "🔗 Custom AI Endpoint (optional)",
            "type": "string",
            "description": "Only needed for a private or enterprise deployment of a model, such as an Azure OpenAI resource URL or any OpenAI-compatible gateway. Leave empty to use the provider's public endpoint."
          },
          "aiModelName": {
            "title": "🏷️ Custom Model / Deployment Name (optional)",
            "type": "string",
            "description": "Overrides the dropdown above with an exact model or deployment name. Use it when your custom endpoint expects its own naming, or to run a model that is not in the list."
          },
          "maxDurationSeconds": {
            "title": "⏳ Skip Videos Longer Than (seconds)",
            "minimum": 0,
            "type": "integer",
            "description": "Videos longer than this are skipped with a clear reason on the row, and their metadata is still returned. Set 0 for no limit. Example: 3600 skips anything over one hour.",
            "default": 0
          },
          "maxRetries": {
            "title": "🔁 Attempts Per Video",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "How many times a video is attempted before its row is written with an error reason. Default 3.",
            "default": 3
          },
          "urls": {
            "title": "🔁 YouTube Video Links (legacy key)",
            "type": "array",
            "description": "Backward-compatible alias of the `videoUrls` field above, so input built for the original Actor keeps working unchanged. If both are filled, `videoUrls` is used and these are appended.",
            "items": {
              "type": "string",
              "pattern": "^(https?://)"
            }
          },
          "proxyConfiguration": {
            "title": "🔒 Network Configuration",
            "type": "object",
            "description": "Optional. Leave as is for the standard setup, or pick your own Apify Proxy option. Larger runs 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}