Tiki API & Scraper
The Tiki API turns tiki.vn, Vietnam's home-grown e-commerce marketplace, into clean JSON in nine actions.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search reads Tiki's own search for a Vietnamese keyword and returns products with price_vnd, original_price_vnd, discount_percent, rating, review_count, units sold, the seller, and both ids you need to read a product. category walks any category page by page with filters that were each checked against Tiki's own counts: on the Phones and Tablets category, 107 products unfiltered, 84 in a 1 to 15 million dong band, 30 rated 4 stars or better, 19 from one seller and 5 from one brand; on the search iphone, 3,399 unfiltered, 124 under 50,000 dong, 842 rated 4 plus and 705 rated 5. With include_facets the same call returns every filter Tiki offers for that category with the number of products behind each value, including category-specific ones such as ROM size and camera resolution on phones. product returns the full record: the price actually charged and the strikethrough price with the real discount, rating, units sold all-time, live availability, every gallery image, the spec table row by row, warranty and return terms, the seller behind the offer with its store link, and every rival offer on the same product with its own price. product/variants returns each colour, size or pack with its own price, discount, SKU and availability. product/reviews pages deep - 7,046 reviews over 353 pages on one book - with the reviewer's name, verified-buyer flag, delivery rating, photos and the real 1-5 star histogram, and a star filter that genuinely narrows: 7,046 unfiltered against 74, 63, 135, 726 and 6,048 for one through five stars. brand and seller list a whole brand's or a whole merchant's shelf, and seller adds the merchant's own profile: seller 1, Tiki Trading, rates 4.68 from 5,604,463 reviews with 515,120 followers and 3,368 days on the platform. suggest and categories turn words into the ids the other actions take. Verified on 2026-09-23: 89 calls across six categories, all 89 succeeded; 5,523 strings scanned with no HTML left in any of them; and the price was compared against the figure Tiki itself publishes on the product page for 10 products in 5 categories, matching 10 out of 10 on the price, 10 out of 10 on the strikethrough price and 10 out of 10 on the seller name. Prices are Vietnamese dong as whole numbers. No Tiki account - one ReefAPI key and the standard { ok, data, meta, error } envelope.
Which number is the price, and why the seller id belongs in the call
Tiki prints two prices on a product and a Tiki product id can carry several merchants' offers at different prices. The API publishes both prices under unambiguous names and pins the record to the offer you asked for. Measured on 2026-09-23 against the figures Tiki publishes on its own product pages.
| Tiki product | price_vnd | original_price_vnd | discount_percent |
|---|---|---|---|
| Nồi Chiên Không Dầu BlueStone AFB-5856 | 1442000 | 2999000 | 52 |
| Sách Đắc Nhân Tâm (Tiki Trading offer) | 104250 | 139000 | 25 |
| Sữa rửa mặt Mistine Acne Clear VitC | 62400 | 109000 | 43 |
| Giày Nam Đúc Liền Khối Siêu Nhẹ | 128500 | 169000 | 24 |
| Apple iPhone 17 Pro | 30990000 | 30990000 | 0 |
price_vnd is what that merchant charges and original_price_vnd is Tiki's strikethrough; they are equal when there is no discount, which was the case on 214 of 280 product rows measured, and in all 214 the two numbers agreed exactly. discount_percent is Tiki's own figure and discount_percent_computed is worked out from the two prices, so a disagreement is visible rather than absorbed; on the 12 products audited they agreed 12 out of 12. Pass seller_product_id with a product lookup whenever you have one - every row and every URL this API returns carries it. Without it Tiki answers with whichever offer its own buybox picks: on 30 products measured, 2 came back with a different merchant and a different price, the widest being 104,250 dong against 73,000 for the same book. When no seller_product_id is given the record says so in offer_is_buybox.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/tiki/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "nồi chiên không dầu"
}
}{
"ok": true,
"meta": {
"api": "tiki",
"endpoint": "search",
"mode": "live",
"latency_ms": 1052.5,
"record_count": 40,
"bytes": 161984,
"cache_hit": false,
"stop_reason": "limit_reached",
"upstream_requests": 1,
"total": 612,
"total_text": "612",
"charged_credits": 2,
"version": "1.0.0"
},
"data": {
"products": [
{
"product_id": "276231111",
"seller_product_id": "276566742",
"url": "https://tiki.vn/noi-chien-khong-dau-bluestone-afb-5861-7-lit-1800w-hang-chinh-hang-p276231111.html?spid=276566742",
"name": "Nồi Chiên Không Dầu BlueStone AFB-5861 7 Lít 1800W - Hàng Chính Hãng",
"price_vnd": 1527000,
"original_price_vnd": 2999000,
"discount_vnd": 1472000,
"discount_percent": 49,
"discount_percent_computed": 49,
"currency": "VND",
"rating": 5,
"review_count": 1,
"quantity_sold": 7,
"brand_id": "18977",
"brand_name": "Bluestone",
"seller_id": "1",
"seller_name": "Tiki Trading",
"sku": "3097893040150",
"master_sku": "3242604493080",
"image": "https://salt.tikicdn.com/cache/280x280/ts/product/41/6d/07/ebd4eeb5720ef45728c2d5bd6cd31176.png",
"category_id": 8123,
"category_path": [
1,
2,
1882
],
"category_name": "Nồi chiên",
"origin": "Trung Quốc",
"is_authentic": true,
"is_official_store": false,
"is_top_brand": false,
"free_shipping_campaign": null,
"fastest_delivery_time": null,
"in_stock": true
},
{
"product_id": "189600140",
"seller_product_id": "193233740",
"url": "https://tiki.vn/noi-chien-khong-dau-dien-tu-bluestone-afb-5888-10-lit-hang-chinh-hang-p189600140.html?spid=193233740",
"name": "Nồi Chiên Không Dầu Điện Tử BlueStone AFB-5888 (10 Lít) - Hàng Chính Hãng",
"price_vnd": 2159000,
"original_price_vnd": 5299000,
"discount_vnd": 3140000,
"discount_percent": 59,
"discount_percent_computed": 59,
"currency": "VND",
"rating": 4.7,
"review_count": 12,
"quantity_sold": 32,
"brand_id": "18977",
"brand_name": "Bluestone",
"seller_id": "1",
"seller_name": "Tiki Trading",
"sku": "5232162117921",
"master_sku": "5144412446814",
"image": "https://salt.tikicdn.com/cache/280x280/ts/product/c8/4e/bd/3884404edb06466946639d6b547e6e10.png",
"category_id": 8123,
"category_path": [
1,
2,
1882
],
"category_name": "Nồi chiên",
"origin": "Trung Quốc",
"is_authentic": true,
"is_official_store": false,
"is_top_brand": false,
"free_shipping_campaign": null,
"fastest_delivery_time": null,
"in_stock": true
},
{
"product_id": "74594174",
"seller_product_id": "82829298",
"url": "https://tiki.vn/noi-chien-khong-dau-philips-hd9200-90-4-1-lit-hang-chinh-hang-p74594174.html?spid=82829298",
"name": "Nồi Chiên Không Dầu Philips HD9200/90 (4.1 Lít) - Hàng Chính Hãng",
"price_vnd": 2322000,
"original_price_vnd": 2322000,
"discount_vnd": 0,
"discount_percent": 0,
"discount_percent_computed": 0,
"currency": "VND",
"rating": 5,
"review_count": 17,
"quantity_sold": 53,
"brand_id": "19018",
"brand_name": "Philips",
"seller_id": "138278",
"seller_name": "AM MART",
"sku": "1456049290899",
"master_sku": "6840561128263",
"image": "https://salt.tikicdn.com/cache/280x280/ts/product/8b/a5/e8/b96a5af5d5453e3a35e140e13446b52a.jpg",
"category_id": 8123,
"category_path": [
1,
2,
1882
],
"category_name": "Nồi chiên",
"origin": null,
"is_authentic": true,
"is_official_store": false,
"is_top_brand": true,
"free_shipping_campaign": "freeship_xtra",
"fastest_delivery_time": null,
"in_stock": true
}
],
"count": 40,
"non_product_tiles_dropped": 0,
"page_reordered": false,
"price_band_vnd": [
89000,
7295000
],
"total_results": 612,
"total_results_text": "612",
"total_results_capped": false,
"page": 1,
"per_page": 40,
"last_page": 16,
"query": "nồi chiên không dầu"
}
}What the Tiki API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Tiki the way a Vietnamese shopper does and get the product grid: the price actually charged in dong, Tiki's strikethrough price, the real discount, rating and rating count, units sold, the seller, and both ids you need to read the product (`product_id` and `seller_product_id`). Narrow with a price band, a minimum rating, a category, a brand or a seller — every one of them measured to bite. 🔴 Tiki matches the literal words in a product title and does NOT translate: `điện thoại` returns 10 000+ results and `phone` returns 92; `tã bỉm` returns 7 635 and `diaper` returns 2. Search in Vietnamese, with the diacritics, and this API passes them through untouched. | Pricing teams call search to search Tiki the way a Vietnamese shopper does and get the product grid. | query, page, sort, price_min, price_max, ... |
| category | 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. | Marketplace operators call category to get walk one Tiki category page by page, with the same filters as `search` and the same product rows. | category_id, page, query, include_facets, sort, ... |
| brand | 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. | Catalog enrichment teams call brand to get one brand's whole Tiki shelf, paged and filterable exactly like a category, plus the brand's…. | brand_id, page, query, sort, price_min, ... |
| seller | 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. | Retail analysts call seller to get one merchant's whole Tiki shelf plus the merchant's own profile. | seller_id, page, query, sort, price_min, ... |
| product | 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`. | Pricing teams call product to get the full Tiki product record. | product_id, seller_product_id |
| product/variants | 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. | Marketplace operators call product/variants to get every colour, size or pack of one product with ITS OWN price, strikethrough price, discount,…. | product_id, seller_product_id |
| product/reviews | 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. | Catalog enrichment teams call product/reviews to get the customer reviews Tiki publishes for a product. | product_id, seller_product_id, page, stars, sort |
| suggest | 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. | Retail analysts call suggest to get tiki's own autocomplete for a partial query. | query |
| categories | 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. | Pricing teams call categories to get tiki's category tree, one level at a time, each category with its id, name, URL, depth, wheth…. | parent_id, query |
Call search from your stack
curl -X POST https://api.reefapi.com/tiki/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nồi chiên không dầu"}'import requests
r = requests.post(
"https://api.reefapi.com/tiki/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "nồi chiên không dầu"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/tiki/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "nồi chiên không dầu"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.tiki.search with {"query":"nồi chiên không dầu"}.Who uses this API and why
- Track Vietnamese retail prices in dong with the charged price and the strikethrough kept in separate fields, so a campaign is never mistaken for the list price.
- Watch every merchant selling the same product: the seller behind the offer plus every rival offer with its own price, on one product call.
- Size a category before you commit to it, using Tiki's own filter counts for brand, seller, price band and rating rather than an estimate.
- Follow variant-level pricing on fashion and homeware, where one listing is a dozen colour and size combinations each priced and stocked separately.
- Build Vietnamese-language review and sentiment datasets from a corpus that pages into the thousands, with the star histogram, verified-buyer flags and delivery ratings attached.
Questions developers ask before integrating
Do I have to search in Vietnamese?
For full coverage, yes, and the API tells you when you have not. Tiki matches the words printed in a product title and does not translate, so an English term returns a small, off-topic set with no error at all: điện thoại returns over 10,000 results and phone returns 92; tã bỉm returns 7,635 and diaper returns 2, one of which is a book. Diacritics are passed through exactly as you send them and are never stripped, because the accent-free spelling is a different query rather than the same one - giày returns 4,608 results and giay returns 8,802, and the two share only 1 row in 40. Any query with no Vietnamese diacritics comes back with a query_note saying this.
Why do I need seller_product_id as well as product_id?
Because one Tiki product id can carry several merchants' offers, and the two ids together name one offer. Give the API both and you get that merchant's price. Give it only the product id and Tiki answers with whichever offer its buybox picks - measured on 30 products, 2 came back with a different merchant at a different price, the worst 104,250 dong against 73,000 for the same book. Every product row and every product URL this API returns carries the right seller_product_id, and if you paste a tiki.vn URL that has one, it is used automatically. When it is missing, the record returns offer_is_buybox true so you always know which case you are in. The other_sellers block on the product record lists every rival offer with its own price.
How deep can I page, and what is total_results?
Forty products a page, up to page 50, so 2,000 rows per query however large the match count is. total_results is the exact number when Tiki publishes one and null when it publishes the ceiling text 10000+ instead - the API never invents an integer out of that, and total_results_text always carries Tiki's own words while total_results_capped tells you which of the two you are holding. Reviews page far deeper: 7,046 reviews over 353 pages on one product, twenty a page.
Does sorting by price actually work?
Yes, and the API does the part Tiki leaves out. Sorting by price genuinely selects a price band that moves as you page - on the query sách, page 1 spans 9,500 to 14,000 dong, page 2 spans 14,000 to 25,000 and page 10 spans 40,000 to 41,000 - but Tiki hands the forty rows back newest-listing-first inside that band rather than in price order. This API re-orders the page by price and sets page_reordered so you know it did, and price_band_vnd reports the page's real span so the occasional just-listed product that lands outside the band stays visible instead of being hidden. Unknown sort values are rejected rather than silently ignored.
Is there real stock data?
There is a real availability signal and no real stock number, and the API does not pretend otherwise. in_stock and inventory_status come from Tiki's own status for the offer. Tiki also publishes a quantity field on every product, but it was the identical value 1,000 on all 19 products checked across 7 categories - it is a per-order cap, not inventory - so it is returned as max_order_qty and min_order_qty, under the meaning it actually has, and never as stock. Variants carry their own availability status but no per-variant count, because Tiki does not publish one.
Which fields are not always there?
Four, all counted rather than assumed, across six categories of forty rows each. Books carry no brand at all - brand_id and brand_name were absent on 40 of 40 book rows and present on 40 of 40 rows in every other category - so the brand action cannot cover the book catalogue. rating is null on most rows because most Tiki products have no reviews yet: 6 of 40 book rows and 9 of 40 shoe rows carry one, and review_count is still returned as 0 because zero reviews is a real answer. quantity_sold is absent when Tiki does not publish it, on 124 of 280 rows. origin is filled on 34 to 40 of 40 rows in most categories but only 7 of 40 on books. Everything else - id, name, both prices, discount, seller, SKU, image, category and availability - was 40 of 40 in all six categories.
Can I filter reviews by star rating?
Yes, and only that filter is offered, because it is the only one that works. Asking for one through five stars really narrows the set: on a product with 7,046 reviews the counts come back as 74, 63, 135, 726 and 6,048, and the returned pages carry only that rating. Several other review filters that Tiki appears to accept change nothing at all, so this API does not expose them. Note that Tiki publishes three different review counts for the same product - 6,153 on the product record, 7,046 on the review stream and a histogram summing to 7,029 - and the API returns all three under separate names rather than picking one.
What does this API not cover?
There is no questions-and-answers feed, no price history, no stock by delivery area and no order data - Tiki does not publish them. Facets are a category feature, so include_facets has no effect on a keyword search. Tiki's own meta title and description fields are empty on every product measured, so they are not returned. And the search row's product name and the product record's name can differ, because Tiki publishes both: on 10 products checked, 9 matched and 1 differed, where the listing carried the full seller title and the record carried a shorter one. Each action returns the name its own source publishes rather than one being silently overwritten.
What is the Tiki API?
Tiki API is a ReefAPI endpoint group for vietnam's home-grown marketplace: prices in vnd with the strikethrough kept apart, per-seller offers, variants and reviews with the star histogram. It returns live JSON through POST requests under /tiki/v1.
Is the Tiki API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Tiki calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Tiki login or account?
No login to Tiki is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Tiki data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Tiki API use?
Tiki actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Tiki from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call tiki actions with the same key, credit pool and JSON envelope used by normal REST requests.