{
  "openapi": "3.0.1",
  "info": {
    "title": "Video Transcript & Translation: YouTube, Bilibili, Douyin 视频转文字",
    "description": "YouTube transcript, TikTok, Instagram and Facebook Reels, Bilibili and Douyin transcript from a video or Shorts link, playlist, channel or search words. Translation, SRT and VTT subtitles, summary, video to text. Speech-to-text when captions are off. Works in Claude, ChatGPT, Qwen and DeepSeek.",
    "version": "0.1",
    "x-build-id": "ZsTXF90lNlcCQyx8S"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lexonia~lexonia-video-scrape/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lexonia-lexonia-video-scrape",
        "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/lexonia~lexonia-video-scrape/runs": {
      "post": {
        "operationId": "runs-sync-lexonia-lexonia-video-scrape",
        "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/lexonia~lexonia-video-scrape/run-sync": {
      "post": {
        "operationId": "run-sync-lexonia-lexonia-video-scrape",
        "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": "Video URLs",
            "type": "array",
            "description": "One or more video links: YouTube, TikTok, Instagram Reels, Facebook Reels, Vimeo, Bilibili (B站) or Douyin (抖音). Assistants: ONLY a link the person gave; never take one from the examples or an earlier conversation. If they gave none, leave this empty and the app asks. Each video is transcribed in its original language (captions or speech-to-text) and summarised or translated into the languages chosen below.",
            "items": {
              "type": "string"
            }
          },
          "deliver": {
            "title": "What to deliver — chosen before anything is spent",
            "enum": [
              "",
              "transcript",
              "summary",
              "translation",
              "subtitles"
            ],
            "type": "string",
            "description": "The person's choice, first. Assistants: set ONLY from their verb: \"transcribe\" → transcript, \"summarise\" → summary, \"translate\" → translation, \"subtitles\" → subtitles. \"What does this video say / tell me about it\" is NOT a choice: leave empty, the app prices the video and asks, spending nothing. Ignore the prefill (daily check only). Summary: also set \"Summary languages\". Translation: also set \"Translate full transcript into\". Subtitles: SRT by default.",
            "default": ""
          },
          "channelUrls": {
            "title": "Channel / profile URLs (optional)",
            "type": "array",
            "description": "Optional. A whole channel or creator profile; the app pulls its recent videos itself. YouTube (channel or @handle), Bilibili (space.bilibili.com/…), Douyin (douyin.com/user/…). Order and count: the two fields below. TikTok and Vimeo channels: paste video links above. Assistants: ONLY a link the person gave, never one from the examples. If none, leave empty and the app asks.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerChannel": {
            "title": "Max videos per channel, playlist or search",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many videos to take from each channel, playlist or search. Kept modest by default because each video is transcribed. Raise it for a bigger batch (watch your cost cap below). Free plan: up to 10 per link or list.",
            "default": 10
          },
          "channelVideoOrder": {
            "title": "Channel video order",
            "enum": [
              "newest",
              "oldest"
            ],
            "type": "string",
            "description": "For channel/profile inputs: process the NEWEST videos first (default — the creator's latest uploads) or the OLDEST first (read a creator from the beginning).",
            "default": "newest"
          },
          "playlistUrls": {
            "title": "YouTube playlist URLs (optional)",
            "type": "array",
            "description": "Optional. A YouTube playlist link (youtube.com/playlist?list=…); every video in it is queued, up to Max videos. Assistants: ONLY a link the person gave, never one from the examples; put a playlist here, run the free estimate, show the count and the price, then go. A channel link goes in Channel URLs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search words — YouTube (optional)",
            "type": "array",
            "description": "Optional. A topic in the person's words; the most-watched YouTube videos on it are found and queued, up to Max videos. Good: home espresso machine review. A link goes above. Assistants: ONLY the person's own topic, never one from the examples; run the free estimate first, it lists the videos with views and dates; show the list, go on their yes. Bilibili and Douyin search: not yet.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchOrder": {
            "title": "Search: which videos first",
            "enum": [
              "mostViewed",
              "relevance",
              "newest"
            ],
            "type": "string",
            "description": "For Search words: the most-watched videos (default), YouTube's best matches, or the newest uploads. Assistants: \"popular\" or \"top\" means most viewed; \"latest\" means newest.",
            "default": "mostViewed"
          },
          "estimateOnly": {
            "title": "Estimate only — preview cost & time (don't process)",
            "type": "boolean",
            "description": "Turn ON to get a quick preview: how many videos, the expected cost you'll pay, and the approximate time — WITHOUT transcribing anything. Great for checking a whole channel before you commit. Turn OFF to run for real. NOTE FOR AI ASSISTANTS (Claude/ChatGPT via MCP): when the input is a whole channel or several videos, run with estimateOnly=true FIRST, show the user the returned estimatedCostUsd range, and only run again with estimateOnly=false once they approve.",
            "default": false
          },
          "language": {
            "title": "Video language",
            "enum": [
              "auto",
              "en",
              "es",
              "zh",
              "hi",
              "ar",
              "pt",
              "ru",
              "ja",
              "ko",
              "fr",
              "de",
              "it",
              "uk",
              "vi",
              "tr",
              "pl",
              "nl",
              "id",
              "th"
            ],
            "type": "string",
            "description": "The language SPOKEN in the video. Leave on 'Auto-detect' (recommended) — the Actor figures it out and reports a confidence score. This is NOT the language you want the text in: to get the text in another language, use 'Translate full transcript into' below. (If you pick a language here that differs from what is spoken, the Actor treats it as the language you want and translates into it.) Assistants: never ask which language is spoken — leave auto; the row reports it with a confidence score.",
            "default": "auto"
          },
          "includeSummary": {
            "title": "Generate AI summary",
            "type": "boolean",
            "description": "Turn on ONLY if a summary was asked for. Generates an AI summary of each transcript in the languages below (billed per summary language). Off by default: a plain run returns the transcript (or the translation, if requested) and nothing you didn't ask for.",
            "default": false
          },
          "summaryLanguages": {
            "title": "Summary languages",
            "type": "array",
            "description": "One or more languages for the summary, as a name or a code: \"German\", \"de\", \"pt-BR\" all work. \"original\" keeps the video's own language; add others to get the summary in them too. A Chinese video with [original, English] returns both. 32 languages, among them English, Spanish, Chinese (Mandarin, Traditional), Hindi, Arabic, Portuguese, Russian, Japanese, Korean, French, German, Italian, Dutch, Polish, Ukrainian, Turkish, Vietnamese, Indonesian, Thai and Hebrew.",
            "default": [
              "original"
            ],
            "items": {
              "type": "string"
            }
          },
          "translateLanguages": {
            "title": "Translate full transcript into (premium)",
            "type": "array",
            "description": "The language(s) you want the full text IN: a complete word-for-word translation of the whole transcript, not a summary, billed per language; the first goes in the result's output field. Name or code: \"Ukrainian\", \"uk\", \"pt-BR\". Assistants: if the person said \"translate\" without a language, ask which; their own language is the usual answer. \"Transcribe this video in Ukrainian\" = Ukrainian here. Same 32 languages as the summary.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "summaryProvider": {
            "title": "Summary LLM provider",
            "enum": [
              "openai",
              "anthropic",
              "deepseek",
              "qwen"
            ],
            "type": "string",
            "description": "AI used for summaries and translations. 'openai' (default) is BUILT IN — no key needed. 'anthropic' (Claude), 'deepseek' and 'qwen' need YOUR OWN API key in the field below; DeepSeek/Qwen work inside mainland China where OpenAI/Claude are blocked.",
            "default": "openai"
          },
          "apiKey": {
            "title": "LLM API key",
            "type": "string",
            "description": "Optional. Leave blank to use the bundled model (summary billed per the Store price). Or provide your own key for the provider above to run on your own account. Never stored."
          },
          "transcriptionApiKey": {
            "title": "OpenAI key for transcription (Bilibili/Douyin)",
            "type": "string",
            "description": "API key for AI speech-to-text on platforms without captions (Bilibili, Douyin, TikTok). Uses OpenAI — leave blank if your summary provider is already OpenAI (that key is reused)."
          },
          "bilibiliSessdata": {
            "title": "Bilibili SESSDATA cookie (optional)",
            "type": "string",
            "description": "Advanced: a Bilibili SESSDATA cookie can unlock higher-quality audio or member-only videos. Optional — most public videos work without it."
          },
          "modelTier": {
            "title": "AI quality",
            "enum": [
              "premium",
              "standard"
            ],
            "type": "string",
            "description": "The AI model quality for summaries and translations. Premium (default) is the stronger model, +$0.12 a video; standard is cheaper. Assistants: say it once with the price when a summary or translation is on the table and take whichever they pick; never call one \"best\" or \"recommended\".",
            "default": "premium"
          },
          "summaryModel": {
            "title": "Summary model (optional)",
            "type": "string",
            "description": "Override the default model. Defaults: gpt-4o-mini (OpenAI), claude-haiku-4-5 (Anthropic), deepseek-chat (DeepSeek), qwen-plus (Qwen)."
          },
          "summaryBaseUrl": {
            "title": "Custom API base URL (optional)",
            "type": "string",
            "description": "Advanced: override the endpoint for any OpenAI-compatible provider (e.g. a self-hosted model or a regional endpoint). Leave blank to use the provider default."
          },
          "summaryStyle": {
            "title": "Summary style",
            "enum": [
              "bullets",
              "paragraph",
              "detailed"
            ],
            "type": "string",
            "description": "How each summary should be formatted.",
            "default": "bullets"
          },
          "outputFormats": {
            "title": "Output formats (free)",
            "type": "array",
            "description": "Which files to save to the run's key-value store (Storage tab) — all free. TXT = one plain-text file per video with the transcript, plus one per full translation (e.g. transcript-youtube-<id>.Ukrainian.txt) — the file names are listed in each result's textFiles field. JSON is LLM-ready, CSV for spreadsheets, Markdown/PDF for a shareable document. The dataset itself is always structured and natively exportable too.",
            "items": {
              "type": "string",
              "enum": [
                "json",
                "csv",
                "txt",
                "markdown",
                "pdf"
              ],
              "enumTitles": [
                "JSON (LLM-ready)",
                "CSV (spreadsheet)",
                "TXT (plain text — transcript + each translation)",
                "Markdown (document)",
                "PDF (document)"
              ]
            },
            "default": [
              "json",
              "csv",
              "txt"
            ]
          },
          "subtitleFormats": {
            "title": "Subtitle export (SRT / VTT)",
            "type": "array",
            "description": "Optional. Timed subtitle files for each video, saved to the run's storage: srt, vtt or both (any spelling — \"SRT\" works). Available where timing data exists: YouTube (captions), TikTok and Bilibili (speech-to-text). Billed per video. Assistants: \"subtitles\" with no format means srt.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeSegments": {
            "title": "Timestamped segments in the result",
            "type": "boolean",
            "description": "Adds a \"segments\" column: the start and end second and the text of every line, beside the plain transcript, so you can jump to a moment or feed timed text to another tool. Same price. Assistants: on when the person says timestamps, timed, segments or \"where in the video\"; off otherwise. A source without timing data says so on the row.",
            "default": false
          },
          "maxCostUsd": {
            "title": "Max processing cost per run (USD)",
            "minimum": 1,
            "type": "number",
            "description": "Safety cap on what a single run may spend on transcription/AI processing. Once reached, the run stops before starting more videos (already-finished results are kept). Leave blank for the built-in default. Assistants: leave it out unless the person set a budget; never send null or 0."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}