{
  "openapi": "3.0.1",
  "info": {
    "title": "Best TikTok AI Transcript Extractor",
    "description": "Best TikTok AI Transcript Extractor converts public TikTok videos into accurate text transcripts using AI. Extract spoken content for content research, SEO, repurposing, subtitles, keyword analysis, and audience insights without manually transcribing videos.",
    "version": "1.0",
    "x-build-id": "8OWHgEPdkF1GMLklR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scraper-engine~best-tiktok-ai-transcript-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scraper-engine-best-tiktok-ai-transcript-extractor",
        "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/scraper-engine~best-tiktok-ai-transcript-extractor/runs": {
      "post": {
        "operationId": "runs-sync-scraper-engine-best-tiktok-ai-transcript-extractor",
        "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/scraper-engine~best-tiktok-ai-transcript-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-scraper-engine-best-tiktok-ai-transcript-extractor",
        "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": {
          "tiktokUrl": {
            "title": "🎬 Single TikTok Video URL",
            "type": "string",
            "description": "⚡ Paste any public TikTok video link — full link, <code>vm.tiktok.com</code>/<code>vt.tiktok.com</code> short link, or mobile URL. Handy for a quick one-off test alongside (or instead of) the bulk list below."
          },
          "bulkUrls": {
            "title": "📋 Bulk TikTok URLs (multiple videos)",
            "type": "array",
            "description": "🎞️ One or more public TikTok video URLs to transcribe in one run — paste as many as you like, one per line. Duplicates are removed automatically so you're never charged twice for the same video. All URL formats work: full links, short links, mobile URLs.",
            "items": {
              "type": "string"
            }
          },
          "translateToEnglish": {
            "title": "🌍 Translate transcript to English",
            "type": "boolean",
            "description": "🈯 Works with any spoken language — Spanish, German, Japanese, Arabic and 90+ more. When ON, the <code>transcript</code>, <code>segments</code> and SRT/VTT subtitles come back in English, no matter what's spoken. Video metadata (caption, hashtags, music info) always stays in its original language, and the detected original language is still reported in <code>textLanguage</code>.",
            "default": false
          },
          "includeComments": {
            "title": "💬 Include pinned & creator comments",
            "type": "boolean",
            "description": "📌 Some creators put the full recipe, links or key details only in a <b>pinned comment</b> — not the caption or the spoken video. Turn this ON to also return the video's <code>comments</code> (pinned first), plus ready-made <code>pinnedComments</code> and <code>creatorComments</code> shortlists. ⚠️ Best-effort: TikTok's public comment feed occasionally rejects anonymous requests — when that happens the run still succeeds, just with empty comment lists (never fails the video). Free while this feature is in beta.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy configuration",
            "type": "object",
            "description": "🌐 By default the Actor connects with <b>NO proxy</b> for maximum speed. If TikTok rejects or blocks a request, it automatically escalates: ⚡ No proxy → 🏢 Datacenter proxy → 🏠 Residential proxy (retried up to 3× with a fresh IP) — then sticks with Residential for the rest of the run. Every escalation is logged clearly. You can also force a tier yourself here."
          },
          "concurrency": {
            "title": "⚡ Parallel videos",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "🏎️ How many TikTok videos to fetch and transcribe at the same time. Higher = faster, but more likely to trigger TikTok rate limits and uses more memory (each video briefly loads the AI model).",
            "default": 4
          },
          "requestDelay": {
            "title": "⏱️ Delay between requests (seconds)",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "🐢 A polite pause (plus random jitter) before every page fetch. Raise this if you're seeing blocks; lower it for small, fast runs.",
            "default": 0.5
          },
          "maxRetries": {
            "title": "🔁 Max retries per video",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "💪 How many times to retry a blocked/failed video (with a brand-new session) before giving up. Each retry may also trigger a proxy tier escalation — see Proxy configuration above.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}