{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Transcript Generator & Scraper: Captions, Subtitles & AI",
    "description": "Paste a TikTok link and get the video transcript as text with timestamps, plus SRT and VTT subtitle files. Bulk from profiles or keywords. AI transcription for videos without captions. No login. Pay only for videos with a transcript.",
    "version": "0.3",
    "x-build-id": "lXSi4CacUNtejula9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/stanvanrooy6~tiktok-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-stanvanrooy6-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/stanvanrooy6~tiktok-transcript-scraper/runs": {
      "post": {
        "operationId": "runs-sync-stanvanrooy6-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/stanvanrooy6~tiktok-transcript-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-stanvanrooy6-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": {
          "videoUrls": {
            "title": "Video URLs",
            "type": "array",
            "description": "Paste TikTok video links to get their transcripts: tiktok.com/@user/video/<id>, vm.tiktok.com or vt.tiktok.com share links, tiktok.com/t/... links, or bare numeric video IDs. One row per video.",
            "items": {
              "type": "string"
            }
          },
          "profiles": {
            "title": "Profiles",
            "type": "array",
            "description": "TikTok profile URLs (https://www.tiktok.com/@handle) or @handles. The scraper collects the transcripts of the profile's videos, newest first.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Search terms. The scraper collects transcripts of the videos TikTok search returns for each keyword.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerProfile": {
            "title": "Max videos per profile",
            "minimum": 0,
            "type": "integer",
            "description": "How many videos to read from each profile, newest first (pinned videos come first). Set to 0 for every public video.",
            "default": 20
          },
          "maxVideosPerKeyword": {
            "title": "Max videos per keyword",
            "minimum": 0,
            "type": "integer",
            "description": "How many search results to read for each keyword. Set to 0 for as many as TikTok search returns.",
            "default": 20
          },
          "language": {
            "title": "Transcript language",
            "type": "string",
            "description": "original (default) returns the transcript in the language spoken in the video. Enter a language code such as en, es or pt-BR to prefer that language when TikTok has a caption track for it; otherwise the original transcript is returned.",
            "default": "original"
          },
          "includeSegments": {
            "title": "Include timed segments",
            "type": "boolean",
            "description": "Add the segments array with a start and end time (in seconds) for every caption line. Turn off if you only need the plain text.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used for TikTok pages when a direct request is not answered. Apify residential proxies work best.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "transcribeMissingCaptions": {
            "title": "Transcribe missing captions with AI",
            "type": "boolean",
            "description": "Off by default. For videos without TikTok captions, send the video audio to OpenAI with your key below and return the AI transcript. OpenAI bills your OpenAI account for the audio separately; this Actor charges only the normal transcript event. Videos with captions are never sent.",
            "default": false
          },
          "openaiApiKey": {
            "title": "OpenAI API key",
            "type": "string",
            "description": "Needed for AI transcription. Stored as a secret input and never included in output or logs."
          },
          "transcriptionModel": {
            "title": "Speech recognition model",
            "enum": [
              "gpt-transcribe",
              "whisper-1"
            ],
            "type": "string",
            "description": "gpt-transcribe returns text without timestamps (TXT only). whisper-1 also returns timed segments, so SRT and VTT work; OpenAI has scheduled its retirement for February 26, 2027. AI transcription keeps the spoken language; it does not translate.",
            "default": "gpt-transcribe"
          },
          "maxAITranscriptions": {
            "title": "Max videos sent to AI per run",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Upper limit on AI transcription attempts in one run, including failed or empty ones. Videos with captions do not count.",
            "default": 10
          },
          "maxAIDurationSeconds": {
            "title": "Max video length for AI (seconds)",
            "minimum": 1,
            "maximum": 3600,
            "type": "integer",
            "description": "Longer videos are not sent to AI. Downloads are also capped at 100 MiB.",
            "default": 600
          },
          "outputFormats": {
            "title": "Transcript files (TXT, SRT, VTT)",
            "type": "array",
            "description": "Also save a file per video in the run's key-value store; the row's transcript_files lists the record keys. SRT and VTT are built only from real timed segments; a transcript without timings gets TXT only.",
            "items": {
              "type": "string",
              "enum": [
                "txt",
                "srt",
                "vtt"
              ]
            },
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}