Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Nykaa API page →
docs / nykaa

Nykaa

India's biggest beauty marketplace: MRP and selling price kept apart, shade-level stock, reviews with the rating histogram.

base /nykaa/v111 endpoints
post/nykaa/v1/category1 credit

Walk 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`.

ParameterAllowed / rangeDescription
category_idrequiredNumeric 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 = 1optional1–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.
sortoptionalpopularity · price_asc · price_desc · discount · customer_top_rated · new_arrival · nameResult order. Nykaa's own default is `popularity`. It refuses any order it does not know, so these seven are all that exist.
price_minoptional0–Lowest selling price in INR. Use with `price_max`; the source takes the pair as one band.
price_maxoptional1–Highest selling price in INR. Measured on the Lipstick category: 718 products unfiltered, 295 under 500, 84 between 1000 and 1999.
min_discountoptional0–90Only 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_ratingoptional1–4Only 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_idoptionalNarrow 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_idoptionalNarrow 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_idoptionalFinish, e.g. matte / creme / satin / glossy. Id from `facets.finish`. Measured on Lipstick: 454 of 718 are matte.
concern_idoptionalSkin or hair concern (acne, pigmentation, dryness, hair fall). Id from `facets.concern` — this is the axis Indian beauty shoppers actually buy on.
formulation_idoptionalFormulation (liquid, cream, powder, pencil, gel). Id from `facets.formulation`.
ingredient_idoptionalHero ingredient (hyaluronic acid, niacinamide, salicylic acid, retinol). Id from `facets.ingredient_v1`.
gender_idoptionalGender the product is listed for. Id from `facets.gender` (10711 female, 10712 unisex on the categories measured).
country_of_originoptionalISO 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_idoptionalClaim or preference (paraben free, cruelty free, vegan, dermatologically tested). Id from `facets.preference`.
skin_type_idoptionalSkin type the product is listed for (oily, dry, normal, combination, sensitive). Id from `facets.skin_type`.
include_facets = falseoptionalAlso 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.
Try in playground →
post/nykaa/v1/brand1 credit

One 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.

ParameterAllowed / rangeDescription
brandrequiredA 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 = 1optional1–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.
sortoptionalpopularity · price_asc · price_desc · discount · customer_top_rated · new_arrival · nameResult order. Nykaa's own default is `popularity`. It refuses any order it does not know, so these seven are all that exist.
price_minoptional0–Lowest selling price in INR. Use with `price_max`; the source takes the pair as one band.
price_maxoptional1–Highest selling price in INR. Measured on the Lipstick category: 718 products unfiltered, 295 under 500, 84 between 1000 and 1999.
min_discountoptional0–90Only 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_ratingoptional1–4Only 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_idoptionalNarrow 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_idoptionalNarrow 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_idoptionalFinish, e.g. matte / creme / satin / glossy. Id from `facets.finish`. Measured on Lipstick: 454 of 718 are matte.
concern_idoptionalSkin or hair concern (acne, pigmentation, dryness, hair fall). Id from `facets.concern` — this is the axis Indian beauty shoppers actually buy on.
formulation_idoptionalFormulation (liquid, cream, powder, pencil, gel). Id from `facets.formulation`.
ingredient_idoptionalHero ingredient (hyaluronic acid, niacinamide, salicylic acid, retinol). Id from `facets.ingredient_v1`.
gender_idoptionalGender the product is listed for. Id from `facets.gender` (10711 female, 10712 unisex on the categories measured).
country_of_originoptionalISO 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_idoptionalClaim or preference (paraben free, cruelty free, vegan, dermatologically tested). Id from `facets.preference`.
skin_type_idoptionalSkin type the product is listed for (oily, dry, normal, combination, sensitive). Id from `facets.skin_type`.
include_facets = falseoptionalAlso 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.
Try in playground →
post/nykaa/v1/product1 credit

The 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.

ParameterAllowed / rangeDescription
product_idrequiredThe product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both.
Try in playground →
post/nykaa/v1/product/shades1 credit

Every 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.

ParameterAllowed / rangeDescription
product_idrequiredThe product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both.
Try in playground →
post/nykaa/v1/product/reviews2 credits

The 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.

ParameterAllowed / rangeDescription
product_idrequiredThe product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both.
Try in playground →
post/nykaa/v1/product/similar1 credit

The 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.

ParameterAllowed / rangeDescription
product_idrequiredThe product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both.
Try in playground →
post/nykaa/v1/suggest1 credit

Nykaa'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.

ParameterAllowed / rangeDescription
queryrequiredA partial or full query, brand name or category name.
Try in playground →
post/nykaa/v1/categories2 credits

Nykaa'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.

ParameterAllowed / rangeDescription
queryoptionalOnly categories whose name contains this text (case-insensitive). Omit for the whole tree.
depthoptional1–6Only 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.
Try in playground →
post/nykaa/v1/brands2 credits

Nykaa'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.

ParameterAllowed / rangeDescription
queryoptionalOnly brands whose name contains this text (case-insensitive).
letteroptionalOnly brands filed under this letter (A-Z, or # for names starting with a digit or symbol).
limit = 500optional1–10000Rows to return — the index holds several thousand brands. `total` always reports the full match count.
Try in playground →