{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Shop Reviews Scraper",
    "description": "Collect public TikTok Shop reviews by product link, product ID, search keyword, or seller page. Filter by star rating, photos, or verified purchase. Save rows in an Apify dataset with the rating, product, and any text, date, reviewer, purchase, or variant details that TikTok Shop shows.",
    "version": "1.1",
    "x-build-id": "2j6t2QvWKiQeElmXh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/maximedupre~tiktok-shop-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-maximedupre-tiktok-shop-reviews-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/maximedupre~tiktok-shop-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-maximedupre-tiktok-shop-reviews-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/maximedupre~tiktok-shop-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-maximedupre-tiktok-shop-reviews-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": {
          "discoveryMethod": {
            "title": "Find reviews by",
            "enum": [
              "products",
              "keyword",
              "shop"
            ],
            "type": "string",
            "description": "Choose product links or IDs, one TikTok Shop search keyword, or one TikTok Shop seller or shop URL.",
            "default": "products"
          },
          "productTargets": {
            "title": "Product links or IDs",
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "description": "Add one or more TikTok Shop product page links or bare product IDs. You can submit up to 500 products in one run.",
            "items": {
              "type": "string"
            }
          },
          "storefront": {
            "title": "Storefront",
            "enum": [
              "US",
              "SG",
              "PH",
              "TH",
              "VN",
              "ID"
            ],
            "type": "string",
            "description": "Choose the TikTok Shop region where the products are sold. The Actor supports only these six regions. This setting applies only to product links or IDs. Keyword searches and seller or shop URLs always use the United States storefront, so this setting does not apply to them.",
            "default": "US"
          },
          "searchKeyword": {
            "title": "Search keyword",
            "minLength": 1,
            "type": "string",
            "description": "Enter one TikTok Shop search keyword. The Actor finds products for it on the United States storefront and collects their reviews."
          },
          "shopUrl": {
            "title": "Seller or shop URL",
            "pattern": "^https://([a-z0-9-]+\\.)*tiktok\\.com/\\S+$",
            "type": "string",
            "description": "Enter the seller's store page link on the United States storefront, for example `https://shop.tiktok.com/us/store/<store-name>/<seller-id>`. The Actor reads that store page, finds the seller's products, and collects their reviews."
          },
          "starRatingFilter": {
            "title": "Star rating filter",
            "enum": [
              "any",
              "exact-1",
              "exact-2",
              "exact-3",
              "exact-4",
              "exact-5",
              "minimum-1",
              "minimum-2",
              "minimum-3",
              "minimum-4",
              "minimum-5"
            ],
            "type": "string",
            "description": "Choose all ratings, one exact star rating, or a minimum star rating.",
            "default": "any"
          },
          "mediaOnly": {
            "title": "Only reviews with photos",
            "type": "boolean",
            "description": "Return only reviews with attached photos."
          },
          "verifiedPurchaseOnly": {
            "title": "Verified purchases only",
            "type": "boolean",
            "description": "Return only reviews that TikTok marks as verified purchases."
          },
          "reviewOrder": {
            "title": "Review order",
            "enum": [
              "recommended",
              "newest",
              "highest-rated",
              "lowest-rated"
            ],
            "type": "string",
            "description": "Choose the order for each product's reviews. Source recommended and Newest first use TikTok's own order. Highest rated first returns 5-star reviews first, then 4-star, and so on down to 1-star. Lowest rated first returns 1-star reviews first, then 2-star, and so on up to 5-star. With a review limit, these two orders stop once they reach that limit. Without a review limit, they read all the reviews for every star rating.",
            "default": "recommended"
          },
          "reviewLimit": {
            "title": "Review limit per product",
            "minimum": 1,
            "type": "integer",
            "description": "Set the maximum number of reviews to collect for each product. Leave this empty to return all available reviews until the source is exhausted."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}