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

Tiki

Vietnam's home-grown marketplace: prices in VND with the strikethrough kept apart, per-seller offers, variants and reviews with the star histogram.

base /tiki/v19 endpoints
post/tiki/v1/category2 credits

Walk one Tiki category page by page, with the same filters as `search` and the same product rows — and, with `include_facets`, the filter block Tiki itself shows: every brand, seller, price band, rating and category-specific attribute WITH the number of products behind it. That facet block is where the `brand_id` and `seller_id` values come from. Category ids come from `categories` or from any product's `category_path`. A category id Tiki does not publish returns NOT_FOUND rather than an empty success.

ParameterAllowed / rangeDescription
category_idrequiredNumeric Tiki category id (1789 = Phones & Tablets, 8322 = Tiki Books) or a tiki.vn category URL such as `https://tiki.vn/dien-thoai-may-tinh-bang/c1789`.
queryoptionalOptional keyword to apply INSIDE the category. Measured: category 1789 holds 107 products, 3 of them match `iphone`.
page = 1optional1–501-based page number. Tiki serves 40 products a page and clamps every larger `limit` back to 40, so this is the only way to go deeper. It stops at page 50: page 51 answers HTTP 200 with zero rows, which is a ceiling of 2000 products per query however many `total_results` reports.
include_facets = falseoptionalAlso return `facets`: every filter Tiki offers for this category with the number of products behind each value — brands, sellers (with their ids), price bands, ratings, colours, and the category-specific ones such as ROM or camera resolution on phones. 🔴 Tiki publishes facets only for a CATEGORY: the keyword search route returns no `filters` key at all, and the facet route refuses a bare keyword, so this parameter has no effect on `search`. Turning it on costs one extra upstream request.
sortoptionaldefault · top_seller · newest · price_asc · price_descResult order. Tiki's own default is `default` (its popularity ranking). 🔴 A price sort selects a global price band per page — measured on `sách`: page 1 spans 9 500-14 000 ₫, page 2 14 000-25 000 ₫, page 10 40 000-41 000 ₫ — but the source hands the 40 rows back newest-listing-first inside that band, so this API re-orders the page by price and sets `page_reordered`. Tiki silently IGNORES an order it does not know, so anything outside this list is rejected here rather than quietly dropped.
price_minoptional0–Lowest price in Vietnamese dong (whole dong — Tiki publishes no minor unit). Sent to the source as one band with `price_max`.
price_maxoptional1–Highest price in dong. Measured on the query `iphone`: 3 399 matches unfiltered, 124 under 50 000 ₫, 77 between 1 000 000 and 15 000 000 ₫.
min_ratingoptional1–5Only products whose average customer rating is at least this many stars, 1-5. This also drops unrated products. Measured on `iphone`: 3 399 unfiltered, 993 at 1+, 929 at 3+, 842 at 4+, 705 at 5. Tiki clamps 6 to 5 and ignores a non-number, so both are rejected here instead.
category_idoptionalNarrow to one category. Accepts the numeric id (1789 = Phones & Tablets) or a tiki.vn category URL (`/dien-thoai-may-tinh-bang/c1789`). Ids come from `categories`, from a product's `category_path`, or from the `category` facet. Measured: `iphone` 3 399 matches, 3 inside category 1789.
brand_idoptionalNarrow to one brand id. Ids come from the `brand` facet on `category` or from any product's `brand_id`. Measured: `iphone` 3 399 unfiltered, 3 for brand 17827 (Apple).
seller_idoptionalNarrow to one merchant. Seller ids come from any product row's `seller_id` or from the `seller` facet. Measured: `iphone` 3 399 unfiltered, 4 from seller 1 (Tiki Trading).
Try in playground →
post/tiki/v1/brand2 credits

One brand's whole Tiki shelf, paged and filterable exactly like a category, plus the brand's own record (name, logo, page URL, description). Measured: brand 18802 (Samsung) has 224 products on Tiki, brand 17827 (Apple) has 18. A brand id Tiki does not publish returns NOT_FOUND — its own brand route answers 404 'Brand not found', which this action uses as the oracle rather than guessing from an empty grid.

ParameterAllowed / rangeDescription
brand_idrequiredNumeric Tiki brand id. Take it from any product row's `brand_id`, or from the `brand` facet on `category`. 🔴 Books carry no brand at all on Tiki — the field is absent, not empty — so this action does not cover the book catalogue.
queryoptionalOptional keyword applied inside the brand's shelf.
page = 1optional1–501-based page number. Tiki serves 40 products a page and clamps every larger `limit` back to 40, so this is the only way to go deeper. It stops at page 50: page 51 answers HTTP 200 with zero rows, which is a ceiling of 2000 products per query however many `total_results` reports.
sortoptionaldefault · top_seller · newest · price_asc · price_descResult order. Tiki's own default is `default` (its popularity ranking). 🔴 A price sort selects a global price band per page — measured on `sách`: page 1 spans 9 500-14 000 ₫, page 2 14 000-25 000 ₫, page 10 40 000-41 000 ₫ — but the source hands the 40 rows back newest-listing-first inside that band, so this API re-orders the page by price and sets `page_reordered`. Tiki silently IGNORES an order it does not know, so anything outside this list is rejected here rather than quietly dropped.
price_minoptional0–Lowest price in Vietnamese dong (whole dong — Tiki publishes no minor unit). Sent to the source as one band with `price_max`.
price_maxoptional1–Highest price in dong. Measured on the query `iphone`: 3 399 matches unfiltered, 124 under 50 000 ₫, 77 between 1 000 000 and 15 000 000 ₫.
min_ratingoptional1–5Only products whose average customer rating is at least this many stars, 1-5. This also drops unrated products. Measured on `iphone`: 3 399 unfiltered, 993 at 1+, 929 at 3+, 842 at 4+, 705 at 5. Tiki clamps 6 to 5 and ignores a non-number, so both are rejected here instead.
category_idoptionalNarrow to one category. Accepts the numeric id (1789 = Phones & Tablets) or a tiki.vn category URL (`/dien-thoai-may-tinh-bang/c1789`). Ids come from `categories`, from a product's `category_path`, or from the `category` facet. Measured: `iphone` 3 399 matches, 3 inside category 1789.
seller_idoptionalNarrow to one merchant. Seller ids come from any product row's `seller_id` or from the `seller` facet. Measured: `iphone` 3 399 unfiltered, 4 from seller 1 (Tiki Trading).
Try in playground →
post/tiki/v1/seller2 credits

One merchant's whole Tiki shelf plus the merchant's own profile: its rating out of 5, how many reviews that rating is built on, follower count, how many days it has been on Tiki, whether it is an official store and at what store level. Measured: seller 1 (Tiki Trading) 4.68 from 5 604 463 reviews, 515 120 followers, 3 368 days on the platform; seller 29952 (Hồng Hạnh Mobile) 4.73 from 2 878 reviews. Costs two upstream requests: the shelf, then the profile.

ParameterAllowed / rangeDescription
seller_idrequiredNumeric Tiki seller id, from any product row's `seller_id` or from the `seller` facet on `category`.
queryoptionalOptional keyword applied inside the merchant's shelf.
page = 1optional1–501-based page number. Tiki serves 40 products a page and clamps every larger `limit` back to 40, so this is the only way to go deeper. It stops at page 50: page 51 answers HTTP 200 with zero rows, which is a ceiling of 2000 products per query however many `total_results` reports.
sortoptionaldefault · top_seller · newest · price_asc · price_descResult order. Tiki's own default is `default` (its popularity ranking). 🔴 A price sort selects a global price band per page — measured on `sách`: page 1 spans 9 500-14 000 ₫, page 2 14 000-25 000 ₫, page 10 40 000-41 000 ₫ — but the source hands the 40 rows back newest-listing-first inside that band, so this API re-orders the page by price and sets `page_reordered`. Tiki silently IGNORES an order it does not know, so anything outside this list is rejected here rather than quietly dropped.
price_minoptional0–Lowest price in Vietnamese dong (whole dong — Tiki publishes no minor unit). Sent to the source as one band with `price_max`.
price_maxoptional1–Highest price in dong. Measured on the query `iphone`: 3 399 matches unfiltered, 124 under 50 000 ₫, 77 between 1 000 000 and 15 000 000 ₫.
min_ratingoptional1–5Only products whose average customer rating is at least this many stars, 1-5. This also drops unrated products. Measured on `iphone`: 3 399 unfiltered, 993 at 1+, 929 at 3+, 842 at 4+, 705 at 5. Tiki clamps 6 to 5 and ignores a non-number, so both are rejected here instead.
category_idoptionalNarrow to one category. Accepts the numeric id (1789 = Phones & Tablets) or a tiki.vn category URL (`/dien-thoai-may-tinh-bang/c1789`). Ids come from `categories`, from a product's `category_path`, or from the `category` facet. Measured: `iphone` 3 399 matches, 3 inside category 1789.
brand_idoptionalNarrow to one brand id. Ids come from the `brand` facet on `category` or from any product's `brand_id`. Measured: `iphone` 3 399 unfiltered, 3 for brand 17827 (Apple).
Try in playground →
post/tiki/v1/product1 credit

The full Tiki product record: the price actually charged in dong, Tiki's strikethrough price and the real discount, rating and how many people rated it, units sold all-time, live availability, every gallery image, the description as clean text, the spec table row by row, warranty and return terms, how many colour/size variants exist, the SELLER behind the offer (id, name, store URL, logo) and every RIVAL offer on the same product with its own price. 🔴 Pass `seller_product_id` whenever you have one: without it Tiki serves whichever offer its buybox picks, which on a multi-seller product is a different merchant at a different price — measured 104 250 ₫ vs 73 000 ₫ on the same book, HTTP 200 both times. When no spid is given the record says `offer_is_buybox: true`. Availability comes from Tiki's own status string, never from `stock_item.qty`, which is a hardcoded 1000 on every product measured and is returned here under its real meaning, `max_order_qty`.

ParameterAllowed / rangeDescription
product_idrequiredThe product to read. Accepts the numeric id (278628812) or a full tiki.vn product URL — and if the URL carries `?spid=`, that offer is used automatically. Every listing row here carries both `url` and `seller_product_id`.
seller_product_idoptionalWhich SELLER's offer to read for this product. 🔴 Pass it whenever you have it. A Tiki product id can carry several sellers' offers, and without a spid Tiki returns whichever one its buybox picks — measured on 30 products, 2 came back with a different seller AND a different price, the worst 104 250 ₫ vs 73 000 ₫ on the same book, with HTTP 200 and no signal. Every product row and every URL from this API carries the right value; when it is omitted the record returns `offer_is_buybox: true`.
Try in playground →
post/tiki/v1/product/variants1 credit

Every colour, size or pack of one product with ITS OWN price, strikethrough price, discount, SKU, availability and images. A Tiki t-shirt is one product id and a dozen colour/size combinations, each separately priced and separately in or out of stock, and each carrying the `seller_product_id` that `product` needs to read it. Products Tiki sells in a single form return an empty `variants` and `count: 0` — that is the source publishing none, not an error (measured: 6 of 12 products have variants). Tiki publishes no per-variant stock NUMBER, only an availability status, so that is what this returns.

ParameterAllowed / rangeDescription
product_idrequiredThe product to read. Accepts the numeric id (278628812) or a full tiki.vn product URL — and if the URL carries `?spid=`, that offer is used automatically. Every listing row here carries both `url` and `seller_product_id`.
seller_product_idoptionalWhich SELLER's offer to read for this product. 🔴 Pass it whenever you have it. A Tiki product id can carry several sellers' offers, and without a spid Tiki returns whichever one its buybox picks — measured on 30 products, 2 came back with a different seller AND a different price, the worst 104 250 ₫ vs 73 000 ₫ on the same book, with HTTP 200 and no signal. Every product row and every URL from this API carries the right value; when it is omitted the record returns `offer_is_buybox: true`.
Try in playground →
post/tiki/v1/product/reviews1 credit

The customer reviews Tiki publishes for a product: star rating, title, the full text, the reviewer's display name, whether they are a verified buyer, the date, how many shoppers found it helpful, the delivery rating and the photos they posted — plus the real 1-5 star histogram behind the average. Unlike many marketplaces this one pages deep: measured 7 046 reviews over 353 pages on one book. Filter by star with `stars` and the counts move for real (7 046 unfiltered → 6 048 at 5 stars, 726 at 4, 135 at 3, 63 at 2, 74 at 1). 🔴 Tiki publishes three different review counts that are not the same quantity: the product record says 6 153, this stream says 7 046, and its own histogram sums to 7 029. All three are returned under separate names rather than reconciled.

ParameterAllowed / rangeDescription
product_idrequiredThe product to read. Accepts the numeric id (278628812) or a full tiki.vn product URL — and if the URL carries `?spid=`, that offer is used automatically. Every listing row here carries both `url` and `seller_product_id`.
seller_product_idoptionalWhich SELLER's offer to read for this product. 🔴 Pass it whenever you have it. A Tiki product id can carry several sellers' offers, and without a spid Tiki returns whichever one its buybox picks — measured on 30 products, 2 came back with a different seller AND a different price, the worst 104 250 ₫ vs 73 000 ₫ on the same book, with HTTP 200 and no signal. Every product row and every URL from this API carries the right value; when it is omitted the record returns `offer_is_buybox: true`.
page = 1optional1–501-based page number. Tiki serves 40 products a page and clamps every larger `limit` back to 40, so this is the only way to go deeper. It stops at page 50: page 51 answers HTTP 200 with zero rows, which is a ceiling of 2000 products per query however many `total_results` reports.
starsoptional1–5Only reviews with exactly this many stars, 1-5. Measured on one book: 7 046 reviews unfiltered, 74 at 1 star, 63 at 2, 135 at 3, 726 at 4, 6 048 at 5. 🔴 Upstream this rides the SAME slot as `sort`, so setting `stars` overrides `sort`; the response reports which was applied in `sort_applied`. Every other star filter Tiki appears to accept (`rating=`, `filter=`, `type=has_image`) is silently ignored and is therefore not offered here.
sortoptionalhelpful · newestReview order. `helpful` is Tiki's own default.
Try in playground →
post/tiki/v1/suggestfree

Tiki's own autocomplete for a partial query: the search terms it would offer and the official stores it maps the term to, with their ids. The cheapest way to find the Vietnamese wording Tiki actually indexes before spending a search on a guess — and the only place a store name turns into a store id. Sponsored entries are returned flagged, not silently mixed in.

ParameterAllowed / rangeDescription
queryrequiredA partial or full query in Vietnamese, e.g. `nồi chi` for `nồi chiên không dầu`.
Try in playground →
post/tiki/v1/categoriesfree

Tiki's category tree, one level at a time, each category with its id, name, URL, depth, whether it is a leaf and HOW MANY PRODUCTS it holds. Call it with no parameters for the top-level departments; pass `parent_id` to walk down. These are the ids `category` and the `category_id` filter take. Measured: category 1789 has 5 children, and their published product counts are 75, 17, 12, 3 and 1.

ParameterAllowed / rangeDescription
parent_idoptionalThe category whose children to list, as an id or a tiki.vn category URL. Omit for the top-level departments — Tiki refuses `parent_id=0` with HTTP 400, so the root comes from its own menu instead.
queryoptionalOnly categories whose name contains this text, case-insensitive and diacritics as typed.
Try in playground →