{
  "openapi": "3.0.1",
  "info": {
    "title": "Douyin Scraper 2026",
    "description": "Douyin video scraper and Douyin comment scraper for public posts, replies, creator data, hashtags, media links, and engagement metrics.",
    "version": "1.8",
    "x-build-id": "1MiiVqq9dFahuK0Aw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/devcake~douyin-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-devcake-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/devcake~douyin-scraper/runs": {
      "post": {
        "operationId": "runs-sync-devcake-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/devcake~douyin-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-devcake-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": {
          "keywords": {
            "title": "Search keywords",
            "maxItems": 50,
            "type": "array",
            "description": "Enter up to 50 Douyin search terms. A sample query (咖啡) is included by default; replace it with your query, or remove it for Profile Scraper or Comments Scraper-only runs. Duplicate and blank values are removed automatically.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "default": [
              "咖啡"
            ]
          },
          "maxPostsPerKeyword": {
            "title": "Max posts per keyword",
            "minimum": 30,
            "maximum": 5000,
            "type": "integer",
            "description": "Set the maximum number of unique posts saved for each keyword. The default is 30 posts; larger runs automatically receive a larger bounded page budget.",
            "default": 30
          },
          "sortBy": {
            "title": "Sort search results by",
            "enum": [
              "general",
              "most_liked",
              "latest"
            ],
            "type": "string",
            "description": "Choose Douyin's keyword-search result ordering.",
            "default": "general"
          },
          "publishTime": {
            "title": "Search posts published within",
            "enum": [
              "unlimited",
              "one_day",
              "one_week",
              "half_year"
            ],
            "type": "string",
            "description": "Only save keyword-search posts published in the selected time window.",
            "default": "unlimited"
          },
          "duration": {
            "title": "Search video duration",
            "enum": [
              "unlimited",
              "under_1m",
              "one_to_five",
              "over_5m"
            ],
            "type": "string",
            "description": "Only save keyword-search videos in the selected duration range. Douyin's H5 endpoint does not enforce this filter, so the Actor applies it locally and may request extra pages to fill the result limit.",
            "default": "unlimited"
          },
          "enrichProfiles": {
            "title": "Enrich search authors with full profiles",
            "type": "boolean",
            "description": "Enable this to make one extra request per unique search author and add the full normalized profile (45 fields: follower/video counts, bio, verification, avatar sizes, coverage, permissions, tags, live state) inline under authorProfile. Authors are deduplicated across the whole run and cached, so each is fetched once. When disabled, rows keep only the basic author data returned by the search card.",
            "default": false
          },
          "videoUrls": {
            "title": "Video URLs",
            "maxItems": 100,
            "type": "array",
            "description": "Paste up to 100 public Douyin video, note, share, or v.douyin.com short URLs. The Actor extracts the video ID and collects its comments without running a keyword search. Provide URLs, search keywords, or both.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 2000
            },
            "default": []
          },
          "maxCommentsPerUrl": {
            "title": "Comments per URL",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Set how many unique public comments to collect from each URL above. Larger limits are paginated with up to 50 comments per request.",
            "default": 100
          },
          "maxCommentsPerVideo": {
            "title": "Comments per search video",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Set how many comments to add to each video found through keyword search. Use 0 to keep search-only runs fast. Videos reporting zero comments are skipped automatically.",
            "default": 0
          },
          "maxRepliesPerComment": {
            "title": "Replies per comment",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Set how many replies to collect under each saved comment from URLs and search results. Leave at 0 for the fastest and lowest-traffic run.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}