| sort | No | Order the results: momentum, creator_adoption, price_asc, price_desc, reviews, rating, sold, discount, opportunity. History-backed sorts are refused up front when history is unavailable rather than silently falling back. | |
| limit | No | Max products to return. Default 20, hard cap 20. This is a ceiling, not a target — fewer rows means the provider had fewer matching products, never that results were withheld. | |
| niche | No | Niche or category to search (e.g. 'Beauty & Skincare', 'Fitness & Wellness'). At least one of niche or query is required. | |
| query | No | Free-text product keywords (e.g. 'wireless earbuds'). Widens the search corpus. May be combined with niche. | |
| market | No | 2-letter ISO region code (US, GB, BR, ...) or 'GLOBAL'. Defaults to US. Only regions ScrapeCreators covers for TikTok Shop return usable data. | |
| category | No | Strict category-breadcrumb filter applied to returned rows (case-insensitive substring). Rows whose category is unknown are dropped when this is set. Distinct from niche, which is a search hint rather than a gate. | |
| max_sold | No | Maximum provider-reported cumulative sold count. Strict: unknown is dropped. | |
| min_sold | No | Minimum provider-reported cumulative sold count. This is a lifetime total, not a sales rate. Strict: unknown is dropped. | |
| price_max | No | Maximum price in the market currency. | |
| price_min | No | Minimum price in the market currency. | |
| max_rating | No | Maximum average rating 0-5. Pair with min_rating to isolate a mid-tier band rather than only top-rated listings. Strict: unknown rating is dropped. | |
| min_rating | No | Minimum average rating 0-5. Strict: rows with unknown rating are dropped. | |
| max_reviews | No | Maximum provider-reported review count - the usual way to find products before they are saturated with social proof. Strict: rows whose review count could not be retrieved are dropped rather than assumed to be zero. | |
| min_reviews | No | Minimum provider-reported review count. Review counts are fetched per candidate, so this filter reflects real provider data. Strict: rows whose review count could not be retrieved are dropped rather than assumed to be zero. | |
| max_discount | No | Maximum discount percentage 0-100. Strict: unknown is dropped. | |
| min_discount | No | Minimum discount percentage 0-100 off the listed original price. Strict: unknown is dropped. | |
| min_momentum | No | Minimum momentum component 0-100. Momentum needs stored history; when the history layer has not seen these products yet the request is refused up front with executed:false rather than charged and returned empty. | |
| max_saturation | No | Maximum saturation component 0-100. Saturation needs video-to-product linkage that the current pipeline does not extract, so this is accepted for forward compatibility and reported as unsupported rather than silently applied. | |
| max_competition | No | Maximum competition tolerated, 0-100, expressed intuitively (lower = less competition accepted). | |
| opportunity_stage | No | Comma-separated stages to keep: emerging, promising, crowded, mature, cooling. Use 'emerging,promising' for the usual 'find breakout products' request. | |
| min_creator_adoption | No | Minimum creator-adoption component 0-100 (distinct creators per day with confirmed showcase links). Needs stored history; cold-start products report insufficient_data for this component. | |