{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok & YouTube & Loom Transcript Extractor & Video Downloader",
    "description": "Transcripts from TikTok, YouTube (incl. Shorts and Live) and Loom videos as text, WebVTT and SRT, with video details. Whisper AI for videos without captions, optional MP4 download. Pay only for delivered transcripts: private or unsupported links cost nothing. Mix platforms in one run.",
    "version": "0.0",
    "x-build-id": "AbW1uPkwJHTR0dEp5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~tiktok-transcript-extractor-cheerio/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-tiktok-transcript-extractor-cheerio",
        "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/memo23~tiktok-transcript-extractor-cheerio/runs": {
      "post": {
        "operationId": "runs-sync-memo23-tiktok-transcript-extractor-cheerio",
        "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/memo23~tiktok-transcript-extractor-cheerio/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-tiktok-transcript-extractor-cheerio",
        "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",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Video URLs",
            "type": "array",
            "description": "TikTok, YouTube and Loom video URLs, mixed freely. TikTok: `tiktok.com/@user/video/…`, share links (`vm.tiktok.com/…`, `vt.tiktok.com/…`, `tiktok.com/t/…`). YouTube: `watch?v=…`, `youtu.be/…`, `/shorts/…`, `/live/…`. Loom: `loom.com/share/…` and `/embed/…`. Profiles, channels and playlists are not supported; anything else is listed in the run's ERRORS record and not charged.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max URLs per run",
            "minimum": 1,
            "type": "integer",
            "description": "The most URLs this run processes, in input order. Leave empty for no limit. Runs on the free Apify plan take the first 20 URLs; the run's status line names anything left out, and left-out URLs are not charged."
          },
          "whisperFallback": {
            "title": "Transcribe videos without captions (Whisper AI)",
            "type": "boolean",
            "description": "When a video has no caption track, download its audio and transcribe it with Whisper AI (billed per started minute of audio, see the pricing tab). Whisper runs on the run's CPU, which Apify scales with memory: at the default 2 GB it takes TikTok clips up to about 8 minutes, and YouTube videos (transcribed in parts) up to about 45 minutes with the default 1-hour timeout; longer caption-less videos are listed in the ERRORS record as too long, uncharged, and a run with more memory can transcribe them. Turn off to skip caption-less videos: they are listed in ERRORS and cost nothing.",
            "default": true
          },
          "downloadVideo": {
            "title": "Download video (MP4)",
            "type": "boolean",
            "description": "Also save each video as an MP4 (up to 720p) in the run's key-value store and add its link to the row (videoUrl, videoKey; videoError if it failed). Billed per started minute of video, see the pricing tab. Videos larger than maxFileSizeMb are skipped. Default: off.",
            "default": false
          },
          "maxFileSizeMb": {
            "title": "Max video file size (MB)",
            "minimum": 1,
            "maximum": 2048,
            "type": "integer",
            "description": "Skip downloading any video larger than this, before its bytes are fetched. Only used when \"Download Video\" is on. Downloads are capped at 720p and billed per started minute of video.",
            "default": 100
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "How many times a URL that failed is retried before it goes to the ERRORS record (default 3). Private videos, videos with no captions and no speech, and videos too long for Whisper are not retried: the answer would not change.",
            "default": 3
          },
          "includeYoutubeVideosDetails": {
            "title": "Include YouTube video details",
            "type": "boolean",
            "description": "YouTube only: add the video's details (title, channel, view count, keywords, thumbnails, description) to each row. Rows produced by the yt-dlp fallback always carry them. Default: off.",
            "default": false
          },
          "youtubeTranscriptLanguage": {
            "title": "Transcript Language",
            "enum": [
              "default",
              "en",
              "ab",
              "aa",
              "af",
              "ak",
              "sq",
              "am",
              "ar",
              "hy",
              "as",
              "ay",
              "az",
              "bn",
              "ba",
              "eu",
              "be",
              "bho",
              "bs",
              "br",
              "bg",
              "my",
              "ca",
              "ceb",
              "co",
              "hr",
              "cs",
              "da",
              "dv",
              "nl",
              "dz",
              "eo",
              "et",
              "pt-PT",
              "ee",
              "fo",
              "fj",
              "fil",
              "fi",
              "fr",
              "gaa",
              "gl",
              "lg",
              "ka",
              "de",
              "el",
              "gn",
              "gu",
              "ht",
              "ha",
              "haw",
              "iw",
              "hi",
              "hmn",
              "hu",
              "is",
              "ig",
              "id",
              "iu",
              "ga",
              "it",
              "ja",
              "jv",
              "kl",
              "kn",
              "kk",
              "kha",
              "km",
              "rw",
              "ko",
              "kri",
              "ku",
              "ky",
              "lo",
              "la",
              "lv",
              "ln",
              "lt",
              "lua",
              "luo",
              "lb",
              "mk",
              "mg",
              "ms",
              "ml",
              "mt",
              "gv",
              "mi",
              "mr",
              "mn",
              "mfe",
              "ne",
              "new",
              "nso",
              "no",
              "ny",
              "oc",
              "or",
              "om",
              "os",
              "pam",
              "ps",
              "fa",
              "pl",
              "pt",
              "pa",
              "qu",
              "ro",
              "rn",
              "ru",
              "sm",
              "sg",
              "sa",
              "gd",
              "sr",
              "crs",
              "sn",
              "zh-Hans",
              "sd",
              "si",
              "sk",
              "sl",
              "so",
              "st",
              "es",
              "su",
              "sw",
              "ss",
              "sv",
              "tg",
              "ta",
              "tt",
              "te",
              "th",
              "bo",
              "ti",
              "to",
              "zh-Hant",
              "ts",
              "tn",
              "tum",
              "tr",
              "tk",
              "uk",
              "ur",
              "ug",
              "uz",
              "ve",
              "vi",
              "war",
              "cy",
              "fy",
              "wo",
              "xh",
              "yi",
              "yo",
              "zu"
            ],
            "type": "string",
            "description": "Language of the YouTube transcript. If the video has no track in this language, the default track is returned.",
            "default": "default"
          },
          "includeVideoMetadata": {
            "title": "Include video metadata",
            "type": "boolean",
            "description": "Add the video id, description/caption, creation time and duration to each TikTok result.",
            "default": true
          },
          "includeAuthorMetadata": {
            "title": "Include author metadata",
            "type": "boolean",
            "description": "Add the author's username, display name, id and verified flag to each TikTok result.",
            "default": true
          },
          "includeEngagementStats": {
            "title": "Include engagement stats",
            "type": "boolean",
            "description": "Add like, comment, share, play and save (collect) counts to each TikTok result.",
            "default": true
          },
          "includeMusicMetadata": {
            "title": "Include music / sound metadata",
            "type": "boolean",
            "description": "Add the sound's title, author, id and original flag to each TikTok result.",
            "default": true
          },
          "languageFilter": {
            "title": "Caption language filter (TikTok)",
            "type": "string",
            "description": "Comma-separated language codes to keep for TikTok captions, e.g. \"en,es,pt\". Matches TikTok's codes by full code (eng-US), base tag (eng/spa), or 2-letter ISO code (en, es, pt, ja, zh). Leave empty to allow any available language.",
            "default": ""
          },
          "maxTranscriptLanguagesPerVideo": {
            "title": "Max caption languages per video (TikTok)",
            "minimum": 1,
            "type": "integer",
            "description": "How many caption languages to return per TikTok video (in TikTok's own order, original language first). Increase to capture creator translations. Default 1.",
            "default": 1
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy for fetching TikTok, YouTube and Loom pages. Default: Apify Proxy, residential group, which TikTok and YouTube need to answer reliably. Custom proxy URLs also route the MP4 downloads.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}