{
  "openapi": "3.0.1",
  "info": {
    "title": "Douyin Scraper API - Videos, Comments, Profiles, Hot Search",
    "description": "Douyin (抖音, the Chinese TikTok) scraper API: user profiles and user videos with stats and video URLs for download, deep comments and hot search, no login. Keyword video search with your own cookie. Stops safely at Douyin's check. Monitor mode. $1.99 per 1,000.",
    "version": "0.1",
    "x-build-id": "k2KEC3tnjpfMcg6Xh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/reportable_broth~douyin-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-reportable_broth-douyin-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/reportable_broth~douyin-scraper/runs": {
      "post": {
        "operationId": "runs-sync-reportable_broth-douyin-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/reportable_broth~douyin-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-reportable_broth-douyin-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": {
          "users": {
            "title": "Profile URLs",
            "type": "array",
            "description": "douyin.com/user/<sec_uid> or v.douyin.com short links. Works without login.",
            "items": {
              "type": "string"
            }
          },
          "includeProfile": {
            "title": "Include profile",
            "type": "boolean",
            "description": "Followers, following, likes received, video count, bio, IP location.",
            "default": true
          },
          "maxVideosPerUser": {
            "title": "Max videos per user",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "Newest first. Without login Douyin returns the latest ~20; more than 20 uses the login.",
            "default": 20
          },
          "videoUrls": {
            "title": "Video URLs",
            "type": "array",
            "description": "douyin.com/video/<id>, v.douyin.com short links, or the video ID. Returns the video and its comments. Works without login.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxCommentsPerVideoUrl": {
            "title": "Comments per video URL",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Comments work without login and go deep.",
            "default": 100
          },
          "maxCommentsPerFoundVideo": {
            "title": "Comments for user and search videos",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Also fetch this many comments for every video found. 0 = off.",
            "default": 0
          },
          "hotSearch": {
            "title": "Hot search list (热榜)",
            "type": "boolean",
            "description": "Douyin's ~50 trending topics with heat values. Works without login.",
            "default": false
          },
          "searchKeywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Video search. Needs your own Douyin cookie (see the cookie field).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerKeyword": {
            "title": "Max videos per keyword",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Douyin's web search returns at most about 50 videos per keyword. For more, add related keywords.",
            "default": 30
          },
          "sort": {
            "title": "Search sort",
            "enum": [
              "general",
              "most_liked",
              "latest"
            ],
            "type": "string",
            "description": "Search order.",
            "default": "general"
          },
          "publishTime": {
            "title": "Published within",
            "enum": [
              "any",
              "day",
              "week",
              "half_year"
            ],
            "type": "string",
            "description": "Search filter.",
            "default": "any"
          },
          "accountMode": {
            "title": "Login for search",
            "enum": [
              "own",
              "none"
            ],
            "type": "string",
            "description": "Only search and user videos beyond the latest 20 need a login. Everything else runs without login. Using our accounts (no setup): coming soon.",
            "default": "own"
          },
          "cookie": {
            "title": "Your Douyin cookie (only for 'My own cookie')",
            "type": "string",
            "description": "Log in at www.douyin.com and copy the Cookie request header (see README). Must contain sessionid. Stored encrypted; only sent to Douyin."
          },
          "onlyNew": {
            "title": "Only new items (monitor mode)",
            "type": "boolean",
            "description": "Schedule the Actor; each run returns only videos and comments earlier runs haven't returned.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor memory name",
            "type": "string",
            "description": "Runs with the same inputs share memory automatically."
          },
          "requestGapSecs": {
            "title": "Seconds between requests",
            "minimum": 0.5,
            "maximum": 10,
            "type": "number",
            "description": "Default 2 s with a cookie, 1 s without. Slower is safer for your account."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "One IP is kept for the run; it changes once if Douyin rate-limits.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}