{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Transcript Scraper - Video to Text",
    "description": "Turn any public TikTok video into accurate text. Word-level timestamps, speaker labels, SRT and VTT subtitles, 90+ languages. No TikTok login or API key needed.",
    "version": "0.1",
    "x-build-id": "69rUSchFLsZ0uk1f5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/deapi~tiktok-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-deapi-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/deapi~tiktok-transcript-scraper/runs": {
      "post": {
        "operationId": "runs-sync-deapi-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/deapi~tiktok-transcript-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-deapi-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",
        "required": [
          "videoUrls"
        ],
        "properties": {
          "videoUrls": {
            "title": "TikTok video URLs",
            "minItems": 1,
            "type": "array",
            "description": "Public TikTok video links to transcribe. Full links (https://www.tiktok.com/@user/video/1234567890) and short share links (https://vm.tiktok.com/XXXXXXX) both work. Identical links are removed automatically, but only when they match character for character — the same video pasted once with tracking parameters (`?_t=`, `?is_from_webapp=`) and once without, or once as a full link and once as a short link, counts as two videos and is charged twice, so trim everything after the `?` before pasting. Private, deleted and age-restricted videos cannot be transcribed. **On the Apify free plan a run attempts the first 5 videos of the list, up to 20 attempts per calendar month (resets 00:00 UTC on the 1st); every URL a free run attempts counts, including links that turn out to be private or deleted. Any Apify paid plan removes both limits.**",
            "items": {
              "type": "string"
            }
          },
          "timestampLevel": {
            "title": "Timestamp level",
            "enum": [
              "none",
              "segment",
              "word"
            ],
            "type": "string",
            "description": "How finely the transcript is timed. **Segment** gives one timestamp per sentence — right for subtitles and reading, and included in the base price. **Word** times every single word — right for captions that highlight as they are spoken, clip cutting and search. **None** returns plain text only. Word moves the video onto the precision price (1.5× the base), and choosing speaker labels as well costs nothing extra on top.",
            "default": "segment"
          },
          "diarize": {
            "title": "Label speakers (diarization)",
            "type": "boolean",
            "description": "Detect who is speaking and tag every line with a speaker (SPEAKER_00, SPEAKER_01, …). Use it for duets, interviews, podcast clips and stitches. Speaker labels need timing to attach to, so switching this on together with **None** still returns sentence-level timing. Moves the video onto the precision price (1.5× the base); if you already picked Word timestamps, adding speakers costs nothing extra.",
            "default": false
          },
          "language": {
            "title": "Spoken language",
            "enum": [
              "auto",
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "pl",
              "uk",
              "ru",
              "tr",
              "ar",
              "he",
              "hi",
              "id",
              "ms",
              "vi",
              "th",
              "ja",
              "ko",
              "zh",
              "sv",
              "da",
              "no",
              "fi",
              "cs",
              "ro",
              "el",
              "hu"
            ],
            "type": "string",
            "description": "Leave on auto-detect unless the video mixes languages or the audio is noisy — naming the language then makes the transcript noticeably more accurate. Auto-detect covers 90+ languages; the dropdown lists the 29 most requested, and anything outside it is still transcribed on auto-detect.",
            "default": "auto"
          },
          "includeSubtitles": {
            "title": "Add SRT and VTT subtitles",
            "type": "boolean",
            "description": "Return ready-to-use subtitle files as `srt` and `vtt` fields — paste them straight into a video editor, a player or a CMS. Free of charge. Subtitles need timing to exist, so they are produced at every timestamp level except None, and also at None when speaker labels are switched on. Rows with no speech, and rows that failed, carry no subtitle fields.",
            "default": true
          },
          "includeMetadata": {
            "title": "Add TikTok video metadata",
            "type": "boolean",
            "description": "Attach the video's own data to each row: author, caption, hashtags, upload date, thumbnail, plus view, like, comment, save and repost counts. Which fields are present varies by video — TikTok does not return all of them for every post. Turns one run into transcript + performance data for content research. Charged as an add-on of $0.005 per video.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Videos in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many videos are transcribed at the same time. Higher finishes a large batch sooner. It has no effect on price — you are charged per video either way, and platform usage is on us.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}