Nykaa
India's biggest beauty marketplace: MRP and selling price kept apart, shade-level stock, reviews with the rating histogram.
/nykaa/v1/search2 creditsSearch Nykaa exactly as a shopper does and get the product grid: the price actually paid, the printed MRP, the real discount, rating and rating count, shade count, stock and the product id. Two things this action does for you: it reads the same index the website shows (a cheaper keyword route on the same host answers 0 for 'nykaa foundation', where the site answers 116), and when Nykaa redirects a head term such as 'lipstick' to a category it follows that and tells you, so you get the catalogue instead of nothing. 🔴 Nykaa server-renders only the FIRST 20 matches of a search: `total_results` is its own count, and a deeper walk goes through `category` with the `category_id` this action hands back.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | What a shopper would type on nykaa.com — a product, a brand, a category, or a concern phrase such as 'serum for oily skin'. |
| sort | optional | popularity · price_asc · price_desc · discount · customer_top_rated · new_arrival · name | Result order. Nykaa's own default is `popularity`. It refuses any order it does not know, so these seven are all that exist. |
| price_min | optional | 0– | Lowest selling price in INR. Use with `price_max`; the source takes the pair as one band. |
| price_max | optional | 1– | Highest selling price in INR. Measured on the Lipstick category: 718 products unfiltered, 295 under 500, 84 between 1000 and 1999. |
| min_discount | optional | 0–90 | Only products discounted by at least this percentage. Measured on Lipstick: 718 unfiltered, 453 discounted at all, 184 at 20 % or more, 92 at 30 %, 36 at 40 %. |
| min_rating | optional | 1–4 | Only products whose average customer rating is at least this many stars (1-4; Nykaa publishes no 5-only filter). Measured on the query 'kajal waterproof': 329 unfiltered, 309 at 3+, 278 at 4+. |
| brand_id | optional | — | Narrow to one brand. The id comes from `facets.brand` on this action (set `include_facets`) or from `brands`. Measured: brand 3899 in category 249 returns exactly the 26 the facet promises. Nykaa offers no brand facet on a KEYWORD search, only on a category or brand listing. |
| color_id | optional | — | Narrow to one colour family; the id comes from `facets.color`. 🔴 This one matches at SHADE level, so on a category its own count can exceed the unfiltered product count. |
| finish_id | optional | — | Finish, e.g. matte / creme / satin / glossy. Id from `facets.finish`. Measured on Lipstick: 454 of 718 are matte. |
| concern_id | optional | — | Skin or hair concern (acne, pigmentation, dryness, hair fall). Id from `facets.concern` — this is the axis Indian beauty shoppers actually buy on. |
| formulation_id | optional | — | Formulation (liquid, cream, powder, pencil, gel). Id from `facets.formulation`. |
| ingredient_id | optional | — | Hero ingredient (hyaluronic acid, niacinamide, salicylic acid, retinol). Id from `facets.ingredient_v1`. |
| gender_id | optional | — | Gender the product is listed for. Id from `facets.gender` (10711 female, 10712 unisex on the categories measured). |
| country_of_origin | optional | — | ISO country code of manufacture, as Nykaa files it. Id from `facets.country_of_origin` — 'IN' and 'KR' are the two a buyer of Indian beauty data usually wants. |
| preference_id | optional | — | Claim or preference (paraben free, cruelty free, vegan, dermatologically tested). Id from `facets.preference`. |
| skin_type_id | optional | — | Skin type the product is listed for (oily, dry, normal, combination, sensitive). Id from `facets.skin_type`. |
| include_facets = false | optional | — | Also return `facets`: every filter Nykaa offers for this listing — brands, colours, finishes, concerns, ingredients, formulations, price bands, ratings, discounts, country of origin — each with its id and the number of products behind it. This is where every `*_id` parameter above comes from. |
/nykaa/v1/category1 creditWalk one category with filters that bite: price band, minimum discount, minimum rating, one brand, colour, finish, concern, ingredient, formulation, skin type, country of origin, and any of Nykaa's seven sort orders. Same product rows as `search`, and unlike search this one pages all the way down. Category ids come from `categories`, from `suggest`, or from any product's `category_path`.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| category_id | required | — | Numeric category id (249 = Lipstick), or a nykaa.com category URL. A Nykaa brand page is a category too, so a brand id works here as well. |
| page = 1 | optional | 1– | 1-based page number. Nykaa serves 20 products a page and ignores every page-size parameter it is given, so this is the only way to go deeper. `total_results` says how far you can go. |
| sort | optional | popularity · price_asc · price_desc · discount · customer_top_rated · new_arrival · name | Result order. Nykaa's own default is `popularity`. It refuses any order it does not know, so these seven are all that exist. |
| price_min | optional | 0– | Lowest selling price in INR. Use with `price_max`; the source takes the pair as one band. |
| price_max | optional | 1– | Highest selling price in INR. Measured on the Lipstick category: 718 products unfiltered, 295 under 500, 84 between 1000 and 1999. |
| min_discount | optional | 0–90 | Only products discounted by at least this percentage. Measured on Lipstick: 718 unfiltered, 453 discounted at all, 184 at 20 % or more, 92 at 30 %, 36 at 40 %. |
| min_rating | optional | 1–4 | Only products whose average customer rating is at least this many stars (1-4; Nykaa publishes no 5-only filter). Measured on the query 'kajal waterproof': 329 unfiltered, 309 at 3+, 278 at 4+. |
| brand_id | optional | — | Narrow to one brand. The id comes from `facets.brand` on this action (set `include_facets`) or from `brands`. Measured: brand 3899 in category 249 returns exactly the 26 the facet promises. Nykaa offers no brand facet on a KEYWORD search, only on a category or brand listing. |
| color_id | optional | — | Narrow to one colour family; the id comes from `facets.color`. 🔴 This one matches at SHADE level, so on a category its own count can exceed the unfiltered product count. |
| finish_id | optional | — | Finish, e.g. matte / creme / satin / glossy. Id from `facets.finish`. Measured on Lipstick: 454 of 718 are matte. |
| concern_id | optional | — | Skin or hair concern (acne, pigmentation, dryness, hair fall). Id from `facets.concern` — this is the axis Indian beauty shoppers actually buy on. |
| formulation_id | optional | — | Formulation (liquid, cream, powder, pencil, gel). Id from `facets.formulation`. |
| ingredient_id | optional | — | Hero ingredient (hyaluronic acid, niacinamide, salicylic acid, retinol). Id from `facets.ingredient_v1`. |
| gender_id | optional | — | Gender the product is listed for. Id from `facets.gender` (10711 female, 10712 unisex on the categories measured). |
| country_of_origin | optional | — | ISO country code of manufacture, as Nykaa files it. Id from `facets.country_of_origin` — 'IN' and 'KR' are the two a buyer of Indian beauty data usually wants. |
| preference_id | optional | — | Claim or preference (paraben free, cruelty free, vegan, dermatologically tested). Id from `facets.preference`. |
| skin_type_id | optional | — | Skin type the product is listed for (oily, dry, normal, combination, sensitive). Id from `facets.skin_type`. |
| include_facets = false | optional | — | Also return `facets`: every filter Nykaa offers for this listing — brands, colours, finishes, concerns, ingredients, formulations, price bands, ratings, discounts, country of origin — each with its id and the number of products behind it. This is where every `*_id` parameter above comes from. |
/nykaa/v1/brand1 creditOne brand's whole Nykaa catalogue, paged and filterable exactly like a category. Pass the brand id if you have it, or just the brand NAME and this action resolves it for you (one extra upstream lookup) and reports the id it used.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| brand | required | — | A brand name ('maybelline', 'lakme', 'the ordinary'), its numeric Nykaa id, or a nykaa.com brand URL. A name costs one extra upstream lookup; an id costs none. |
| page = 1 | optional | 1– | 1-based page number. Nykaa serves 20 products a page and ignores every page-size parameter it is given, so this is the only way to go deeper. `total_results` says how far you can go. |
| sort | optional | popularity · price_asc · price_desc · discount · customer_top_rated · new_arrival · name | Result order. Nykaa's own default is `popularity`. It refuses any order it does not know, so these seven are all that exist. |
| price_min | optional | 0– | Lowest selling price in INR. Use with `price_max`; the source takes the pair as one band. |
| price_max | optional | 1– | Highest selling price in INR. Measured on the Lipstick category: 718 products unfiltered, 295 under 500, 84 between 1000 and 1999. |
| min_discount | optional | 0–90 | Only products discounted by at least this percentage. Measured on Lipstick: 718 unfiltered, 453 discounted at all, 184 at 20 % or more, 92 at 30 %, 36 at 40 %. |
| min_rating | optional | 1–4 | Only products whose average customer rating is at least this many stars (1-4; Nykaa publishes no 5-only filter). Measured on the query 'kajal waterproof': 329 unfiltered, 309 at 3+, 278 at 4+. |
| brand_id | optional | — | Narrow to one brand. The id comes from `facets.brand` on this action (set `include_facets`) or from `brands`. Measured: brand 3899 in category 249 returns exactly the 26 the facet promises. Nykaa offers no brand facet on a KEYWORD search, only on a category or brand listing. |
| color_id | optional | — | Narrow to one colour family; the id comes from `facets.color`. 🔴 This one matches at SHADE level, so on a category its own count can exceed the unfiltered product count. |
| finish_id | optional | — | Finish, e.g. matte / creme / satin / glossy. Id from `facets.finish`. Measured on Lipstick: 454 of 718 are matte. |
| concern_id | optional | — | Skin or hair concern (acne, pigmentation, dryness, hair fall). Id from `facets.concern` — this is the axis Indian beauty shoppers actually buy on. |
| formulation_id | optional | — | Formulation (liquid, cream, powder, pencil, gel). Id from `facets.formulation`. |
| ingredient_id | optional | — | Hero ingredient (hyaluronic acid, niacinamide, salicylic acid, retinol). Id from `facets.ingredient_v1`. |
| gender_id | optional | — | Gender the product is listed for. Id from `facets.gender` (10711 female, 10712 unisex on the categories measured). |
| country_of_origin | optional | — | ISO country code of manufacture, as Nykaa files it. Id from `facets.country_of_origin` — 'IN' and 'KR' are the two a buyer of Indian beauty data usually wants. |
| preference_id | optional | — | Claim or preference (paraben free, cruelty free, vegan, dermatologically tested). Id from `facets.preference`. |
| skin_type_id | optional | — | Skin type the product is listed for (oily, dry, normal, combination, sensitive). Id from `facets.skin_type`. |
| include_facets = false | optional | — | Also return `facets`: every filter Nykaa offers for this listing — brands, colours, finishes, concerns, ingredients, formulations, price bands, ratings, discounts, country of origin — each with its id and the number of products behind it. This is where every `*_id` parameter above comes from. |
/nykaa/v1/product1 creditThe full Nykaa product record: selling price and printed MRP with the real discount, brand, rating and how many people rated it, how many wrote a review, the 1-5 star histogram, Nykaa's own review summary and its ranked aspect sentiment ('Color Payoff: Positive'), the barcode (GTIN), seller, country of origin, expiry date, return window, live stock, shade count, every image, the description, ingredients and how-to-use.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| product_id | required | — | The product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both. |
/nykaa/v1/product/shades1 creditEvery shade of one product — or every pack size, for products Nykaa sells in several weights — with ITS OWN price, MRP, discount, stock count and images. A Nykaa lipstick is one product id and thirty shades, each separately priced and separately in or out of stock, and this is the only place that is published. Shades with zero stock are returned with `in_stock: false` rather than dropped, which is also why `count` here can be larger than the `shade_count` on the product record — that one is Nykaa's own headline number and leaves discontinued shades out.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| product_id | required | — | The product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both. |
/nykaa/v1/product/reviews2 creditsThe customer reviews Nykaa publishes for a product: rating, title, the full text, the author display name, the date, how many shoppers found it helpful, whether the reviewer is a verified buyer, which shade they bought and the photos they posted. 🔴 Two honest limits. The source server-renders the same 20 reviews whatever page, sort or filter is asked for, so that is the ceiling per product and this action does not pretend to page. And those 20 are Nykaa's own 'most useful, verified buyer' selection, not a random sample: across 12 products measured, 240 of 240 were verified buyers, 240 of 240 carried photos and the ratings skew to 5. `reviews_available` is Nykaa's own total and `product` returns the real 1-5 star histogram behind it — read that, not these 20, for sentiment.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| product_id | required | — | The product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both. |
/nykaa/v1/product/similar1 creditThe products Nykaa itself recommends beside this one — its 'Explore Similar Products' rail, returned as full product rows with prices and ratings. A competitive set around a product without having to guess a category. Nykaa does not build a rail for every product: on 12 products measured, 6 had 9-16 recommendations and 6 had none, and an empty `products` means the source publishes none, not an error.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| product_id | required | — | The product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both. |
/nykaa/v1/suggest1 creditNykaa's own autocomplete for a partial query: the search terms it would offer, the brands and categories it maps the term to WITH their ids, and the products it would show. The cheapest way to turn a brand or category NAME into the id the other actions take.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | A partial or full query, brand name or category name. |
/nykaa/v1/trendingfreeWhat India is searching for on Nykaa right now — the popular-searches list the site prints in its own search box.
Try in playground →/nykaa/v1/categories2 creditsNykaa's category tree: every department, category and sub-category with its id, name, URL and depth. These are the ids `category` takes. One call, cached for a day.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | optional | — | Only categories whose name contains this text (case-insensitive). Omit for the whole tree. |
| depth | optional | 1–6 | Only categories at this depth, counted in URL segments as Nykaa files them: 2 is a category ('makeup/face' = Face), 3 a sub-category ('makeup/face/face-foundation' = Foundation). Measured: 337 categories, depths 1-6, most at 2 and 3. |
/nykaa/v1/brands2 creditsNykaa's A-Z brand index: every brand the marketplace carries, with the id its brand page is addressed by, its letter and its URL. These are the ids `brand` and `brand_id` take. One call, cached for a day.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | optional | — | Only brands whose name contains this text (case-insensitive). |
| letter | optional | — | Only brands filed under this letter (A-Z, or # for names starting with a digit or symbol). |
| limit = 500 | optional | 1–10000 | Rows to return — the index holds several thousand brands. `total` always reports the full match count. |
curl -X POST https://api.reefapi.com/nykaa/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}