{
  "openapi": "3.0.1",
  "info": {
    "title": "Lexonia Video Lens — Video Transcript, Translation & Summary",
    "description": "Transcribe and translate any video from a URL — YouTube, TikTok, Vimeo, Bilibili (B站) & Douyin (抖音). Real speech-to-text: works when captions are off, auto-detects the language. Transcript, translation, SRT/VTT subtitles, optional AI summary. Works in Claude & ChatGPT via MCP.",
    "version": "0.1",
    "x-build-id": "8FgjqNFBp0h76HzVo"
  },
  "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 URLs — YouTube, TikTok, Vimeo, Bilibili (B站), or Douyin (抖音). Each video is transcribed in its original language (via captions or AI speech-to-text) and summarized in the languages you choose below.",
            "items": {
              "type": "string"
            }
          },
          "channelUrls": {
            "title": "Channel / profile URLs (optional)",
            "type": "array",
            "description": "Optional. Paste a whole channel or creator profile and the Actor pulls its recent videos automatically — no need to list each video. Supported: YouTube (channel/@handle), Bilibili (space.bilibili.com/…), Douyin (douyin.com/user/…). Order and count are controlled by the two fields below. (For TikTok/Vimeo channels, paste video URLs above for now.)",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerChannel": {
            "title": "Max videos per channel",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many videos to pull from each channel/profile above. Kept modest by default because each video is transcribed. Raise it for a bigger batch (watch your cost cap below).",
            "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"
          },
          "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.)",
            "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": "Pick one or more languages to produce the summary in. 'Original' keeps the video's own language; add any others to translate the summary into. A Chinese video with [Original, English] returns both a Chinese and an English summary. Covers the languages of the world's major economies.",
            "items": {
              "type": "string",
              "enum": [
                "original",
                "English",
                "Spanish",
                "Chinese (Mandarin)",
                "Chinese (Traditional)",
                "Hindi",
                "Arabic",
                "Portuguese",
                "Russian",
                "Japanese",
                "Korean",
                "French",
                "German",
                "Italian",
                "Dutch",
                "Polish",
                "Ukrainian",
                "Turkish",
                "Vietnamese",
                "Indonesian",
                "Malay",
                "Thai",
                "Filipino",
                "Bengali",
                "Swedish",
                "Norwegian",
                "Danish",
                "Finnish",
                "Greek",
                "Czech",
                "Romanian",
                "Hungarian",
                "Hebrew"
              ],
              "enumTitles": [
                "Original (same as video)",
                "English",
                "Spanish",
                "Chinese (Mandarin)",
                "Chinese (Traditional)",
                "Hindi",
                "Arabic",
                "Portuguese",
                "Russian",
                "Japanese",
                "Korean",
                "French",
                "German",
                "Italian",
                "Dutch",
                "Polish",
                "Ukrainian",
                "Turkish",
                "Vietnamese",
                "Indonesian",
                "Malay",
                "Thai",
                "Filipino (Tagalog)",
                "Bengali",
                "Swedish",
                "Norwegian",
                "Danish",
                "Finnish",
                "Greek",
                "Czech",
                "Romanian",
                "Hungarian",
                "Hebrew"
              ]
            },
            "default": [
              "original"
            ]
          },
          "translateLanguages": {
            "title": "Translate full transcript into (premium)",
            "type": "array",
            "description": "The language(s) you want the text IN. 'Transcribe this video in Ukrainian' = put Ukrainian here. Produces a COMPLETE, word-for-word translation of the entire transcript into each language — not a summary — and puts the first one in the result's `output` field. Ideal for reading a foreign-language video in full (e.g. a Chinese Douyin/Bilibili video in English). Billed per language.",
            "items": {
              "type": "string",
              "enum": [
                "English",
                "Spanish",
                "Chinese (Mandarin)",
                "Chinese (Traditional)",
                "Hindi",
                "Arabic",
                "Portuguese",
                "Russian",
                "Japanese",
                "Korean",
                "French",
                "German",
                "Italian",
                "Dutch",
                "Polish",
                "Ukrainian",
                "Turkish",
                "Vietnamese",
                "Indonesian",
                "Malay",
                "Thai",
                "Filipino",
                "Bengali",
                "Swedish",
                "Norwegian",
                "Danish",
                "Finnish",
                "Greek",
                "Czech",
                "Romanian",
                "Hungarian",
                "Hebrew"
              ],
              "enumTitles": [
                "English",
                "Spanish",
                "Chinese (Mandarin)",
                "Chinese (Traditional)",
                "Hindi",
                "Arabic",
                "Portuguese",
                "Russian",
                "Japanese",
                "Korean",
                "French",
                "German",
                "Italian",
                "Dutch",
                "Polish",
                "Ukrainian",
                "Turkish",
                "Vietnamese",
                "Indonesian",
                "Malay",
                "Thai",
                "Filipino (Tagalog)",
                "Bengali",
                "Swedish",
                "Norwegian",
                "Danish",
                "Finnish",
                "Greek",
                "Czech",
                "Romanian",
                "Hungarian",
                "Hebrew"
              ]
            },
            "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": "Choose the AI model quality for summaries and translations. 'Premium' (default) uses a stronger model for noticeably better, more accurate summaries and translations — best for foreign-language and Chinese video. 'Standard' is a faster, cheaper downgrade if you want to save. (A 'Summary model' override below decides which model actually runs, but selecting Premium still applies the premium surcharge.)",
            "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. Generate timed subtitle files for each video, saved to the run's storage. Available where timing data exists: YouTube (captions), TikTok and Bilibili (speech-to-text). Billed per video.",
            "items": {
              "type": "string",
              "enum": [
                "srt",
                "vtt"
              ],
              "enumTitles": [
                "SRT (.srt)",
                "WebVTT (.vtt)"
              ]
            },
            "default": []
          },
          "maxCostUsd": {
            "title": "Max processing cost per run (USD)",
            "minimum": 1,
            "type": "integer",
            "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."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}