Southeast Asian fashion as JSON, with a price filter that actually holds
Zalora API returns live Zalora data as clean JSON for zalora The primary endpoint, search, returns product results including config sku, name, brand, brand id and price.
5 active endpoints. Every call is 1 credit.
- POST/zalora/v1/search
- POST/zalora/v1/category
- POST/zalora/v1/detail
- POST/zalora/v1/reviews
- POST/zalora/v1/categories
What Zalora endpoints does ReefAPI ship?
5 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Zalora API
5 of 5 endpoints, ready to run
Search one Zalora country storefront by keyword, with the site's own filters (brand, category, colour, size, price range, minimum rating, minimum discount, seller) and sorts. Returns up to 100 products per page with the sale price, the struck-through original, the discount badge, rating, review count, seller, images and the category breadcrumb. Set include_sponsored to also get the promoted rows Zalora shows first.
{ "ok": true, "meta": { "api": "zalora", "endpoint": "search", "mode": "live", "latency_ms": 798.6, "record_count": 3, "cache_hit": false }, "data": { "products": [ { "config_sku": "66F6CAABE30344GS", "name": "Puff Sleeves Linen Midi Dress", "url": "https://www.zalora.sg/p/other-stories-puff-sleeves-linen-midi-dress-black-3216828", "brand": "& Other Stories", "brand_id": null, "price": 68.7, "price_formatted": "S$ 68.70", "original_price": 229, "original_price_formatted": "S$ 229.00", "currency": "SGD", "discount_pct": 70, "discount_label": "70% OFF", "saving_amount": null, "rating": 4.7, "review_count": 23, "official_store": null, "image_url": "https://static-sg.zacdn.com/p/other-stories-2194-8286123-1.jpg", "images": [ "https://static-sg.zacdn.com/p/other-stories-2194-8286123-1.jpg", "https://static-sg.zacdn.com/p/other-stories-2194-8286123-2.jpg", "https://static-sg.zacdn.com/p/other-stories-2195-8286123-3.jpg" ], "category_breadcrumb": [ "Women", "Clothing", "Dresses" ], "category_ids": null, "color": null, "label": null, "sponsored": false, "has_different_simple_prices": true, "is_membership_eligible": true }, { "config_sku": "46494AA28661F9GS", "name": "Plus Size Sleeveless V-Neck Zip Dress", "url": "https://www.zalora.sg/p/trendyol-plus-size-sleeveless-v-neck-zip-dress-black-3394672", "brand": "Trendyol", "brand_id": null, "price": 51.9, "price_formatted": "S$ 51.90", "original_price": null, "original_price_formatted": null, "currency": "SGD", "discount_pct": null, "discount_label": null, "saving_amount": null, "rating": 3, "review_count": 6, "official_store": null, "image_url": "https://static-sg.zacdn.com/p/trendyol-1100-2764933-1.jpg", "images": [ "https://static-sg.zacdn.com/p/trendyol-1100-2764933-1.jpg", "https://static-sg.zacdn.com/p/trendyol-1100-2764933-2.jpg", "https://static-sg.zacdn.com/p/trendyol-1101-2764933-3.jpg" ], "category_breadcrumb": [ "Women", "Clothing", "Dresses" ], "category_ids": null, "color": null, "label": "zalora_exclusive", "sponsored": false, "has_different_simple_prices": false, "is_membership_eligible": null }, { "config_sku": "D4C49AAF5F91E3GS", "name": "Milarose Crochet Knit Dress", "url": "https://www.zalora.sg/p/forcast-milarose-crochet-knit-dress-brown-3338558", "brand": "FORCAST", "brand_id": null, "price": 44, "price_formatted": "S$ 44.00", "original_price": 109.99, "original_price_formatted": "S$ 109.99", "currency": "SGD", "discount_pct": 60, "discount_label": "60% OFF", "saving_amount": null, "rating": 4, "review_count": 1, "official_store": null, "image_url": "https://static-sg.zacdn.com/p/forcast-5668-8558333-1.jpg", "images": [ "https://static-sg.zacdn.com/p/forcast-5668-8558333-1.jpg", "https://static-sg.zacdn.com/p/forcast-5668-8558333-2.jpg", "https://static-sg.zacdn.com/p/forcast-5668-8558333-3.jpg" ], "category_breadcrumb": [ "Women", "Clothing", "Dresses" ], "category_ids": null, "color": null, "label": null, "sponsored": false, "has_different_simple_prices": false, "is_membership_eligible": true } ] } }
How the Zalora API works
Zalora is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 321 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Search a market, then trust the band rather than the facet
Zalora's own price facet is approximate: ask for a band and it will hand back rows outside it. The engine keeps the facet, because it is the cheap way to page, and then enforces the band exactly and tells you how many rows it dropped doing so.
{"q": "sneakers", "country": "ph"}1 credit for up to forty rows. Prices come back in the market's own currency and every figure is checked against the string Zalora printed beside it.
{"q": "dress", "country": "ph", "price_min": 1000, "price_max": 2000}1 credit. The band is enforced on our side after Zalora's approximate facet does the paging, and meta reports how many rows fell outside and were dropped.
{"country": "id"}1 credit. Zalora's own category tree for that market, with the numeric ids the category call takes. Category ids are numeric here; a name will not do.
{"config_sku": "<from any row>", "country": "ph"}1 credit. The full product. Its rating comes from the review statistics block, not from the average-rating field, which the source sends as zero on every product.
A market you chose deliberately, a price band that holds, and a rating that is real rather than a placeholder zero.
curl -X POST https://api.reefapi.com/zalora/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"q":"dress","country":"ph","limit":10}'{
"ok": true,
"data": { … },
"meta": {
"api": "zalora",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}Five markets, five currencies, and two source traps that a fill count would not catch
Measured 2026-09-30 against the live gateway across three markets and 120 rows in one sweep, with every price checked against the source's own formatted string. Three of these lines go against us.
The Philippines, Singapore, Malaysia, Indonesia and Hong Kong, each priced in its own currency and each a different catalogue. A search for the same keyword returns different hit counts per market because they are different inventories, not translations.
Zalora no longer runs a Taiwanese storefront: its API host there resets the connection and the site redirects to the group domain. Taiwan is not offered, and a country value outside the five is refused rather than quietly answered from the default market. That refusal is deliberate - before it, asking for Taiwan returned forty Philippine products priced in pesos, with the only clue buried in the response metadata.
Across 120 rows in one sweep, spanning Philippine pesos and Indonesian rupiah, not one numeric price disagreed with the formatted figure Zalora printed on the same row. That check has to be currency-aware: Indonesian prices are written with dots where Philippine ones use commas, so a single parsing rule gets one of the two markets wrong every time.
Asking its facet for a band of 1,000 to 2,000 returned twenty-five rows of which only thirteen were actually inside it. The facet is kept because it is how you page cheaply, and then the band is enforced exactly; the response reports how many rows were dropped. On a measured run that was twenty-one rows kept and nineteen dropped. The discount facet, by contrast, is exact: twenty-five of twenty-five rows came back at fifty percent off or better.
Ascending and descending sorts move the average sharply - 858 pesos against 16,340 - but within a page the order is not monotonic: thirty-nine inversions in ninety-nine adjacent pairs. The parameter says this rather than promising an order it does not deliver, so a caller who needs a true ordering sorts the rows themselves.
Zalora's product endpoint sends an average rating of zero for every product. Publishing it would have produced a rating column that was a hundred percent filled and a hundred percent wrong. The real aggregate is in the review statistics block of the same payload, and that is what is returned; across 120 rows, 107 carried a genuine rating and 13 came back null.
Every route and filter value was taken from the storefront's own code rather than guessed, and that mattered: invented sort values return a server error, while invented filter keys are accepted and silently ignored, handing back the entire unfiltered set of more than fourteen thousand rows as though it were an answer. Only measured keys are published.
Sponsored and detail rows send a bare number where listing rows send a formatted string with its currency symbol. The bare form is not published as a formatted price, because it carries no currency and would read as whatever the caller assumed.
Thirty of thirty measured sponsored rows were flagged, appeared first, and carried a price. They are returned marked rather than dropped, so a caller can exclude them deliberately instead of discovering later that the first rows of every page were something else.
1 credit for a search, a category page, a product, its reviews or the category tree. The review limit is advisory - the source returned five rows for a request of two - and reviews page by an opaque cursor rather than a number.
What people build with Zalora
The jobs this data is most often used for.
endpoints
credit per call
Pricing and assortment teams use Zalora to search one Zalora country storefront by keyword, with the site's own filters (brand, category….
Brand-protection teams use Zalora to list every product in one Zalora category, without a keyword.
Retail analysts use Zalora to get full product detail by config_sku, product slug or product URL.
Catalog enrichment teams use Zalora to get customer reviews for one product by config_sku, slug or URL.
What Zalora data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 321 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/zalora/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"q":"dress","country":"ph","limit":10}'import requests
r = requests.post(
"https://api.reefapi.com/zalora/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"q": "dress",
"country": "ph",
"limit": 10
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Zalora.
Get a free key →What is the Zalora API?▾
Zalora API is a ReefAPI endpoint group for zalora It returns live JSON through POST requests under /zalora/v1.
Is the Zalora API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Zalora calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Zalora login or account?▾
No login to Zalora 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 Zalora 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 Zalora API use?▾
Zalora actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Zalora from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call zalora actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Zalora API a Zalora scraper?▾
It is the managed alternative to a DIY Zalora scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same zalora back as clean JSON.
Why does my Zalora scraper keep getting blocked?▾
Most Zalora scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.
26 More APIs APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Zalora, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 320 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-30.