{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Transcript — Video to Text in Bulk, URLs or Profiles",
    "description": "Turn TikTok videos into text in bulk: paste video URLs, whole @profiles (latest N videos each) or another TikTok scraper's dataset. Timecoded sentences, full transcript, the first-3-seconds hook typed and scored, and a per-profile hook and phrase summary. Captions first, Whisper when none.",
    "version": "1.0",
    "x-build-id": "J3VPCXkwZif6XZb20"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ntriqpro~tiktok-transcript/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ntriqpro-tiktok-transcript",
        "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/ntriqpro~tiktok-transcript/runs": {
      "post": {
        "operationId": "runs-sync-ntriqpro-tiktok-transcript",
        "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/ntriqpro~tiktok-transcript/run-sync": {
      "post": {
        "operationId": "run-sync-ntriqpro-tiktok-transcript",
        "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": "TikTok video URLs",
            "type": "array",
            "description": "One per line: public TikTok video pages (https://www.tiktok.com/@name/video/123...) or vm./vt.tiktok.com short links. The same video from several inputs is processed and charged once. Only submit videos you have the right to process; you are responsible for how you use the output.",
            "items": {
              "type": "string"
            }
          },
          "profiles": {
            "title": "TikTok profiles (@name or profile URL)",
            "type": "array",
            "description": "Each profile is expanded into its latest public videos (up to 'Videos per profile') and every video is transcribed. Each profile TikTok answers for (with videos, empty, or 'does not exist') is one profile-checked row ($0.005, BRONZE $0.004); a lookup refused or timed out on our side is free. Paid plans also get one profile-summary row per profile. Up to 30 profiles per run.",
            "items": {
              "type": "string"
            }
          },
          "datasetIds": {
            "title": "Dataset IDs from another TikTok scraper",
            "type": "array",
            "description": "Transcribe the videos another Actor already found. Fields read automatically: webVideoUrl, submittedVideoUrl (clockworks TikTok scrapers), postPage (apidojo), videoUrl, url, or id + author name. Read with your own Apify token. The first 1,000 rows of a run are covered by the start fee; paid plans read on at $0.0025 (BRONZE $0.002) per further 1,000 rows (rows-read), up to 5,000 rows per dataset. The free plan reads the first 1,000.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerProfile": {
            "title": "Videos per profile",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Latest videos taken from each profile (1-100)."
          },
          "maxVideos": {
            "title": "Max videos per run",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Cap on videos transcribed in one run, across all inputs (paid plans, up to 500). The free plan gives 1 preview video (verdict and first words) and counts the rest; its closing row prices this cap as a paid run."
          },
          "hooks": {
            "title": "Hook rows (+$0.024 per video on BRONZE)",
            "type": "boolean",
            "description": "On: one hook row per video with speech — the words of the first N seconds, hook types and a 0-100 score — charged as hook-scored ($0.03 FREE tier, $0.024 BRONZE, $0.0156 GOLD). Off: transcripts only, no hook charge. Free plans see only the hook types.",
            "default": true
          },
          "startAt": {
            "title": "Start at video #",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Skip the first N videos of this input's list (URLs, then profiles, then datasets; 0 = from the start). When a run stops at Max videos or at your maximum charge, its notice names the exact value for the next run.",
            "default": 0
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "auto uses the video's own caption track, or detects the spoken language. Or give a two-letter code (en, es, ko, ...) to pick that caption track or force Whisper to that language."
          },
          "hookSeconds": {
            "title": "Hook window (seconds)",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "Sentences that start inside the first N seconds form the hook (1-15)."
          },
          "aiStyleSummary": {
            "title": "AI style note in profile summaries (paid plans)",
            "type": "boolean",
            "description": "Adds a three-sentence note on how the creator opens and phrases videos to each profile-summary row. When on, the hooks and common phrases of that profile are sent to Anthropic's API (United States). Notes that cite numbers or quotes not found in the videos are dropped. The note is part of the profile-summary row: turning it off does not change the summary price."
          },
          "whisperModel": {
            "title": "Speech-to-text model (when a video has no captions)",
            "enum": [
              "base",
              "tiny"
            ],
            "type": "string",
            "description": "Used only for videos without captions, billed per started audio minute (asr-minute, $0.02, BRONZE $0.016). base is more accurate, tiny is faster. Both are built into the image (no download wait)."
          },
          "timeoutPerVideo": {
            "title": "Timeout per video (seconds)",
            "minimum": 60,
            "maximum": 1800,
            "type": "integer",
            "description": "Longest time spent transcribing one video without captions (60-1800). When it runs out, the video row says transcriptComplete false and is not charged as video-transcribed; only the audio minutes transcribed are charged."
          },
          "proxyConfiguration": {
            "title": "Proxy (fallback only)",
            "type": "object",
            "description": "Each video is first fetched directly. The proxy is used only when TikTok refuses the direct request."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}