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

Daraz

South Asia's biggest marketplace across Pakistan, Bangladesh, Sri Lanka and Nepal: four catalogues, four currencies, with the charged price and the strikethrough kept apart.

base /daraz/v15 endpoints
post/daraz/v1/category2 credits

Walk one Daraz category or tag page by page, with the same product rows and the same filters as `search`, plus an optional keyword applied INSIDE the category. Measured on PK: the whole `phone` search returns 4 080 matches and the `smartphones` category narrows it to 2 105. Category values come from the `category` facet — turn `include_facets` on in `search` to list them. A category Daraz does not publish returns NOT_FOUND rather than an empty success.

ParameterAllowed / rangeDescription
categoryrequiredA Daraz category slug (`smartphones`), a tag (`tag/iphone`) or a full Daraz category URL. 🔴 Daraz only honours a category as a URL PATH — passing it as a query parameter is silently ignored (measured: 4 080 -> 4 080, unchanged), which is why this is its own action.
queryoptionalOptional keyword applied inside the category.
country = pkoptionalpk · bd · lk · npWhich Daraz storefront to read. 🔴 This is not a language switch: the four storefronts are SEPARATE catalogues priced in four different currencies, and the same search returns different products in each. Note that Pakistan, Sri Lanka and Nepal all print prices as "Rs." while meaning PKR, LKR and NPR — the response always names the currency and the price field carries the currency in its name.
page = 1optional1–1-based page number. Daraz serves 40 products a page, and `last_page` in the response is the last page that holds real results. 🔴 Asking for a page beyond it does NOT return an error or an empty page: Daraz answers HTTP 200 with 40 unrelated products (measured — page 100 000 of a 3 164-result query returned a full page of toys and phone cases). This API drops those and says so in `page_note`, so a page past the end comes back empty rather than wrong.
price_minoptional0–Lowest price, in the storefront's own currency and whole units. Measured on the query `phone` (PK): 4 080 matches unfiltered, 312 between 5 000 and 15 000 PKR, and 0 of the 40 returned rows fell outside the band.
price_maxoptional1–Highest price, in the storefront's own currency. Sent to Daraz as one band with `price_min`; this is the one filter that also corrects the reported total.
min_ratingoptional1–5Only products rated at least this many stars. 🔴 It really does filter the ROWS (measured on `phone`: the unfiltered page carried 2 rows under 4.0, the filtered page 0) but Daraz does NOT recompute `total_results` for it — that figure stays at the unfiltered value. Trust the rows, not the total, when this is set.
locationoptionalOnly products shipped from this region, spelled as Daraz spells it. Turn `include_facets` on to see the regions a query actually offers. 🔴 Same caveat as `min_rating`: measured on `phone`, the unfiltered page was 17 Punjab / 23 Sindh and the filtered page 40/40 Punjab — but `total_results` did not change.
sortoptionalpopularity · price_asc · price_descResult order, read off Daraz's own sort bar. 🔴 A price sort cannot be paged: measured, `price_asc` returns the identical 40 rows on pages 1, 2 and 10, so asking for page > 1 together with a price sort is rejected rather than served as duplicates. Daraz offers no 'newest' or 'best selling' order on this site.
include_facets = falseoptionalAlso return `facets`: the filter block Daraz itself shows for this query — categories, brands, shipping regions, services and the category-specific attributes, each with the value to pass back. Measured 13 facet groups on a `laptop` search. 🔴 Daraz does not publish a product COUNT beside its facet values, so `count` is null on every one; the values are real, the counts are not published. Costs no extra upstream request.
Try in playground →
post/daraz/v1/browse2 credits

Documented alias of `category` — identical parameters and identical response.

ParameterAllowed / rangeDescription
categoryrequiredSee `category`.
country = pkoptionalpk · bd · lk · npWhich Daraz storefront to read. 🔴 This is not a language switch: the four storefronts are SEPARATE catalogues priced in four different currencies, and the same search returns different products in each. Note that Pakistan, Sri Lanka and Nepal all print prices as "Rs." while meaning PKR, LKR and NPR — the response always names the currency and the price field carries the currency in its name.
page = 1optional1–1-based page number. Daraz serves 40 products a page, and `last_page` in the response is the last page that holds real results. 🔴 Asking for a page beyond it does NOT return an error or an empty page: Daraz answers HTTP 200 with 40 unrelated products (measured — page 100 000 of a 3 164-result query returned a full page of toys and phone cases). This API drops those and says so in `page_note`, so a page past the end comes back empty rather than wrong.
Try in playground →
post/daraz/v1/product3 credits

The full record for one product: title, full description (as text and as the original HTML), brand, every image and video, the colour/size variant axes, the SKU table with per-order limits, the category path, availability and the return policy — plus the price actually charged, the strikethrough price, the real discount, rating, review count, units sold and the seller's name. 🔴 The last group does not exist on Daraz's product page at all (its ld+json offer carries no price key, and its only price string was measured to be the STRUCK-THROUGH price on 12 of 12 products where the two differ), so this action also reads Daraz's own catalogue entry for the same item and tags every field it took from there with `price_source: "catalogue"`. That is why it costs two upstream requests. If the catalogue has no live entry, the price fields are null and `price_source` says `unavailable` — nothing is guessed.

ParameterAllowed / rangeDescription
item_idrequiredThe numeric Daraz item id or any Daraz product URL. Every `search` row carries both.
country = pkoptionalpk · bd · lk · npWhich Daraz storefront to read. 🔴 This is not a language switch: the four storefronts are SEPARATE catalogues priced in four different currencies, and the same search returns different products in each. Note that Pakistan, Sri Lanka and Nepal all print prices as "Rs." while meaning PKR, LKR and NPR — the response always names the currency and the price field carries the currency in its name.
sku_idoptionalWhich variant to read. A Daraz item can hold several SKUs at different prices (measured: one rice cooker's two SKUs print 12 000 and 9 999), so pass the `sku_id` from the search row when you have it. Omitted, Daraz picks its own default.
Try in playground →
post/daraz/v1/product/reviews2 credits

The published customer reviews for one product: the star rating, the text, the date, the buyer's display name, whether it is a verified purchase, the reviewer's photos, the helpful votes, Daraz's three per-purchase sub-scores and the seller's reply where there is one — with the aggregate 1-5 star histogram beside them. 🔴 The histogram deliberately does not sum to `total_reviews`: Daraz withholds some reviews from the public list and states how many in `hidden_review_count` (measured: 8 308 visible across the histogram against a stated 8 362, with 2 482 hidden). Reviews can be read at most 1 000 deep per product.

ParameterAllowed / rangeDescription
item_idrequiredThe numeric Daraz item id or a Daraz product URL. 🔴 A SKU id is NOT accepted here — Daraz returns an empty list for one, because the two id spaces are different.
country = pkoptionalpk · bd · lk · npWhich Daraz storefront to read. 🔴 This is not a language switch: the four storefronts are SEPARATE catalogues priced in four different currencies, and the same search returns different products in each. Note that Pakistan, Sri Lanka and Nepal all print prices as "Rs." while meaning PKR, LKR and NPR — the response always names the currency and the price field carries the currency in its name.
page = 1optional1–1-based page number. Daraz serves 40 products a page, and `last_page` in the response is the last page that holds real results. 🔴 Asking for a page beyond it does NOT return an error or an empty page: Daraz answers HTTP 200 with 40 unrelated products (measured — page 100 000 of a 3 164-result query returned a full page of toys and phone cases). This API drops those and says so in `page_note`, so a page past the end comes back empty rather than wrong.
limit = 20optional1–50Reviews per page, up to 50 (default 20: 119 KB a call against 308 KB at 50). 🔴 Daraz returns ZERO rows for a larger value rather than clamping it, so this API clamps it instead. `page x limit` may not exceed 1000, which is how deep Daraz serves reviews however many exist.
starsoptional1–5Only reviews with exactly this many stars. Verified against Daraz's own histogram: the 1-star filter returned 727 where the histogram says 727, the 5-star filter 6 300 where it says 6 300.
sort = relevanceoptionalrelevance · recentReview order. Daraz accepts two further values and returns a byte-identical list for both, so they are not offered here.
Try in playground →