{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Video Scraper - Video Details & Profile Feeds",
    "description": "Scrape TikTok video details, captions, metrics, direct video URLs, transcripts, music, hashtags, and creator profile videos. Provider-backed, no cookies required, perfect for SEO and AI agents, MCP optimized.",
    "version": "0.1",
    "x-build-id": "yUbhgYJ0RWaZuIgOf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~tiktok-video-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-tiktok-video-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/khadinakbar~tiktok-video-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-tiktok-video-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/khadinakbar~tiktok-video-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-tiktok-video-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": "TikTok Video URLs",
            "type": "array",
            "description": "Use this when you already have one or more TikTok video URLs to inspect. Accepts full URLs such as https://www.tiktok.com/@stoolpresidente/video/7324105620095765765. Defaults to an empty list. Not for TikTok profile URLs; put creator handles in Profile Handles.",
            "items": {
              "type": "string"
            }
          },
          "profileHandles": {
            "title": "Profile Handles",
            "type": "array",
            "description": "Use this when you want recent or popular videos from TikTok creators. Accepts handles like stoolpresidente, @stoolpresidente, or profile URLs. Defaults to an empty list. Not for keyword search; use the TikTok Search Scraper for search queries.",
            "items": {
              "type": "string"
            }
          },
          "providerOrder": {
            "title": "Provider Order",
            "enum": [
              "scrapecreators-first",
              "sociavault-first",
              "scrapecreators-only",
              "sociavault-only"
            ],
            "type": "string",
            "description": "Use this to choose which public-data provider is tried first. ScrapeCreators is the recommended primary and SociaVault is the fallback. Defaults to ScrapeCreators first. Not a browser scraping mode and does not use TikTok cookies.",
            "default": "scrapecreators-first"
          },
          "maxVideosPerProfile": {
            "title": "Max Videos Per Profile",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Use this to cap how many videos are saved from each creator profile. Accepts integers from 1 to 10000. Defaults to 50. Does not limit direct Video URLs, which are processed one by one.",
            "default": 50
          },
          "maxPagesPerProfile": {
            "title": "Max Pages Per Profile",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Use this as a safety cap for provider pagination on creator feeds. Accepts integers from 1 to 500. Defaults to 10. Not used for direct Video URLs.",
            "default": 10
          },
          "maxTotalVideos": {
            "title": "Max Total Videos",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Use this to cap the whole run across direct URLs and profile feeds. Accepts integers from 1 to 50000. Defaults to 10000. This is a billing and safety guard, not a request for more provider pages by itself.",
            "default": 10000
          },
          "sortBy": {
            "title": "Profile Sort Order",
            "enum": [
              "latest",
              "popular"
            ],
            "type": "string",
            "description": "Use this to sort creator profile videos when the provider supports it. Accepted values are latest and popular. Defaults to latest. Not used for direct Video URLs.",
            "default": "latest"
          },
          "region": {
            "title": "Region",
            "type": "string",
            "description": "Use this to localize provider requests with an alpha-2 country code. Example: US, GB, FR, or PH. Defaults to US. This is not a language filter and does not translate captions.",
            "default": "US"
          },
          "getTranscript": {
            "title": "Get Transcript",
            "type": "boolean",
            "description": "Use this when direct video URL rows should include TikTok transcript text where available. The transcript is usually WEBVTT. Defaults to false to keep runs cheaper and faster. Not applied to profile-feed pagination.",
            "default": false
          },
          "downloadMedia": {
            "title": "Download Media Permanently",
            "type": "boolean",
            "description": "Use this only when you need provider-hosted permanent media URLs from direct video URL requests. ScrapeCreators may charge extra provider credits for this path and this actor charges a media-downloaded event when media is returned. Defaults to false. Not needed for normal direct signed TikTok play URLs.",
            "default": false
          },
          "trim": {
            "title": "Trim Provider Response",
            "type": "boolean",
            "description": "Use this to request smaller provider payloads when supported. The normalized dataset fields stay the same. Defaults to true for speed and lower memory use. Turn off only when debugging with Include Raw Provider Data.",
            "default": true
          },
          "includeRawData": {
            "title": "Include Raw Provider Data",
            "type": "boolean",
            "description": "Use this when you need the original provider response attached to each dataset row. It is useful for debugging field drift or custom parsing. Defaults to false. Not recommended for AI-agent runs because raw payloads are large.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}