{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Transcript Scraper - Subtitles in Every Language",
    "description": "Get transcripts of TikTok videos or a creator's latest videos. Uses TikTok's own captions (ASR, translations, creator subtitles) and Whisper AI for videos without captions. Plain text, timestamps, SRT/WebVTT and video stats. Pay only for transcripts. URLs, share links, IDs or profiles.",
    "version": "1.0",
    "x-build-id": "pceDphU0LEDRlZhB5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~tiktok-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-tiktok-transcript-scraper",
        "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-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-tiktok-transcript-scraper",
        "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-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-tiktok-transcript-scraper",
        "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": {
          "videos": {
            "title": "TikTok videos",
            "type": "array",
            "description": "TikTok videos to extract transcripts from. Accepts full video URLs (`https://www.tiktok.com/@user/video/123…`), share links (`vm.tiktok.com/…`, `vt.tiktok.com/…`, `tiktok.com/t/…`), or bare numeric video IDs - mix them freely. A profile URL or `@handle` pasted here is treated like an entry in **Profiles**.",
            "items": {
              "type": "string"
            }
          },
          "profiles": {
            "title": "Profiles",
            "type": "array",
            "description": "TikTok profiles to transcribe: a handle (`bbcnews` or `@bbcnews`) or a profile URL (`https://www.tiktok.com/@bbcnews`). The actor transcribes each profile's latest videos, newest first (pinned videos lead, as on TikTok). Photo posts are skipped because they have no audio.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerProfile": {
            "title": "Latest videos per profile",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many of each profile's latest videos to transcribe (1 to 30).",
            "default": 10
          },
          "maxItems": {
            "title": "Max videos per run",
            "minimum": 1,
            "type": "integer",
            "description": "The most videos this run transcribes, counting direct video URLs first and then profile videos. Leave empty for no limit. Each video gives one row per caption language (almost always one). Runs on the free Apify plan transcribe up to 3 videos; the run's status line names anything left out, and left-out videos are not charged."
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Optional language filter. Only return transcripts whose language code starts with one of these values - e.g. `eng` or `eng-US` for English, `spa` for Spanish. Leave empty to get every available language (one dataset row per language).",
            "items": {
              "type": "string"
            }
          },
          "includeVtt": {
            "title": "Include raw WebVTT",
            "type": "boolean",
            "description": "Also include the WebVTT subtitle text in each row (`vtt` field) - useful to feed subtitles straight into a video editor or player. For caption rows this is TikTok's original file; for Whisper rows it is generated from the transcribed segments.",
            "default": false
          },
          "includeSrt": {
            "title": "Include SRT subtitles",
            "type": "boolean",
            "description": "Also include the transcript as an SRT subtitle file in each row (`srt` field), built from the timestamped segments.",
            "default": false
          },
          "whisperFallback": {
            "title": "Transcribe caption-less videos with Whisper AI",
            "type": "boolean",
            "description": "When a video has no caption track (music-only, freshly uploaded, or TikTok's auto-captions never ran) the actor normally lists it in the run's ERRORS record without charging. Turn this on and it will instead download the audio and transcribe it with on-device Whisper AI, so you still get a transcript (`source: \"whisper\"`). Billed as a separate premium event per transcribed video - see the pricing tab. Off by default: Whisper is slower than the caption path, and this way you never pay it unknowingly. Applies to videos up to 10 minutes long.",
            "default": false
          },
          "whisperModel": {
            "title": "Whisper model",
            "enum": [
              "tiny",
              "base",
              "small"
            ],
            "type": "string",
            "description": "Model used only when the Whisper fallback runs. `tiny` (default) is fastest and reliable on Apify's CPU; `base`/`small` are more accurate but slower and can time out on longer clips.",
            "default": "tiny"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}