{
  "openapi": "3.0.1",
  "info": {
    "title": "Kwai Scraper | Videos, Creators and Hashtags",
    "description": "Kwai scraper for videos, creators, hashtags and comments: search a keyword, #hashtag, creator or link and get 50 videos in 5 seconds, 33 fields each, plus each video's comments and their replies on demand. Views, likes, shares, captions, post date, video links and creator followers. No Kwai account.",
    "version": "1.0",
    "x-build-id": "1rHyF4aUoq7pv2veG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/silentflow~kwai-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-silentflow-kwai-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/silentflow~kwai-scraper/runs": {
      "post": {
        "operationId": "runs-sync-silentflow-kwai-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/silentflow~kwai-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-silentflow-kwai-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": {
          "searchTerms": {
            "title": "🔎 Keywords or #hashtags",
            "type": "array",
            "description": "What you would type in Kwai's search, one per line: <code>futebol</code>, <code>receita fácil</code>, <code>makeup tutorial</code>. Start a line with <b>#</b> to get the hashtag feed instead: <code>#futebol</code>. A popular keyword returns hundreds of videos, most relevant first.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Kwai links",
            "type": "array",
            "description": "Links copied from kwai.com or the Kwai app, one per line: a video (<code>https://www.kwai.com/@jadebelchior905/video/5213629630362183094</code>), a creator (<code>https://www.kwai.com/@Futecem</code>), a playlist (<code>.../playlist/45074491059995286</code>), a search page (<code>/discover/futebol</code>), a hashtag page (<code>/topic/futebol</code>) or a share link (<code>https://k.kwai.com/p/CCzy11ul</code>). Pasting the whole message the app copies works too.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "profiles": {
            "title": "👤 Creators",
            "type": "array",
            "description": "Creators to export, one per line: an @handle (<code>@Futecem</code>), a handle without @ (<code>ocraquedavez</code>) or a numeric user id (<code>150001550606055</code>). Videos come newest first, so <b>Posted after</b> stops at the cutoff instead of reading the whole catalog.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "🔢 Max videos per entry",
            "minimum": 0,
            "type": "integer",
            "description": "How many videos to save for each keyword, hashtag, creator or playlist, each one a row. A video link always gives its one video. Set <b>0</b> to go as deep as Kwai shows. 50 videos take a few seconds.",
            "default": 50
          },
          "postedAfter": {
            "title": "📅 Posted after",
            "type": "string",
            "description": "Only keep the videos posted on or after this date: <code>2026-09-01</code>, or an age such as <code>7 days</code> for a weekly schedule. Works best with <b>Creators</b>: their videos come newest first and the run stops at the date. Keyword and hashtag results mix years of videos, so a recent date keeps few of them. Video links are always kept. Leave empty for every date."
          },
          "maxComments": {
            "title": "💬 Comments per video",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Add the comments of each video to its row: <code>20</code> gives its first 20 comments, top comments first, then the newest, each with its text, likes, reply count, date, author and the GIF or picture posted. The comments come inside the video's row, so the number of rows does not change. A video with no comment gets an empty list. Leave <b>0</b> to skip them and keep the run fastest: 20 videos with 20 comments each take about 20 seconds. Up to 500 per video.",
            "default": 0
          },
          "maxReplies": {
            "title": "↩️ Replies per comment",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Add the replies under each comment: <code>5</code> gives up to 5 replies per comment, oldest first, each with the name of the person it answers. Works with <b>Comments per video</b> above 0. Leave <b>0</b> for comments without their replies. Up to 20 per comment.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}