{
  "openapi": "3.0.1",
  "info": {
    "title": "Lexonia Video Lens",
    "description": "Turn any video into text your AI can use — paste a URL for a transcript + AI summary + translation in 30+ languages. Real speech-to-text, not just captions: YouTube, TikTok, Vimeo, China's Bilibili (B站) & Douyin (抖音). Runs on OpenAI, Claude, Qwen or DeepSeek. LLM-ready via MCP, n8n & Make.",
    "version": "0.1",
    "x-build-id": "zFDpkR4I5jaMYNKCD"
  },
  "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": [
              "oldest",
              "newest"
            ],
            "type": "string",
            "description": "For channel/profile inputs: process the OLDEST videos first (default — good for reading a creator from the beginning) or the NEWEST first (latest uploads).",
            "default": "oldest"
          },
          "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": "Leave on 'Auto-detect' (recommended) and the Actor figures out the video's language for you — it also reports a confidence score in the output. Only pick a specific language to force a particular YouTube caption track. The transcript is always kept in its original language.",
            "default": "auto"
          },
          "includeSummary": {
            "title": "Generate AI summary",
            "type": "boolean",
            "description": "Whether to generate a summary of each transcript with an LLM. Requires an API key below. If off, only the raw transcript is produced.",
            "default": true
          },
          "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": "Optional. Produce a COMPLETE, word-for-word translation of the entire transcript into each language you pick here — not just a summary. Ideal for reading a foreign-language video in full (e.g. a Chinese Douyin/Bilibili video translated into 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": "Which LLM provider to use. 'openai' uses GPT; 'anthropic' uses Claude; 'deepseek' and 'qwen' are China-market models (OpenAI/Claude are blocked in mainland China). The API key you supply must match this provider.",
            "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 key-value store — all free. JSON is LLM-ready (drop it straight into ChatGPT/Claude), 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",
                "markdown",
                "pdf"
              ],
              "enumTitles": [
                "JSON (LLM-ready)",
                "CSV (spreadsheet)",
                "Markdown (document)",
                "PDF (document)"
              ]
            },
            "default": [
              "json",
              "csv"
            ]
          },
          "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}