Zalora API

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.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Zalora endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
Z
/zalora/v1

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.

5 endpoints

search

1 cr

Search one Zalora country storefront by keyword, with the site's own filters (brand, category…

required
q
optional
country, page, limit, sort, price_min, price_max, rating_min, discount_min, color, size, brand_id, category_id, seller_id, include_sponsored

category

1 cr

List every product in one Zalora category, without a keyword.

required
category_id
optional
country, page, limit, sort, price_min, price_max, rating_min, discount_min, color, size, brand_id, seller_id

detail

1 cr

Full product detail by config_sku, product slug or product URL.

required
config_sku
optional
country

reviews

1 cr

Customer reviews for one product by config_sku, slug or URL.

required
config_sku
optional
country, limit, cursor

categories

1 cr

The whole Zalora category tree for a country (about 1 800 nodes on PH), optionally narrowed t…

required
—
optional
country, segment

Every parameter, every allowed value →

Zalora API

5 of 5 endpoints, ready to run

View docs ↗

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.

1 credit1 required · 14 optional
POST/zalora/v1/search
ok799 ms · 3 records · sample
{
  "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
      }
    ]
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Zalora API works

Zalora is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 321 engines.

02
Call
POST /zalora/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

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.

01search
POST/zalora/v1/search
{"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.

02search
POST/zalora/v1/search
{"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.

03categories
POST/zalora/v1/categories
{"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.

04detail
POST/zalora/v1/detail
{"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.

request
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}'
response envelope
{
  "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.

Five markets, each in its own currency

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.

Against us: Taiwan is not served, and asking for it is refused

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.

Every price is checked against the string beside it, and the rule is per currency

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.

Against us: Zalora's own price facet is approximate

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.

Against us: sorting by price steers, it does not order

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.

The average-rating field is a dead key

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.

Guessed parameters are not shipped

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.

Two payload shapes, and only one of them is a price you can show

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.

Sponsored rows are labelled and kept

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.

Price

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.

5

endpoints

1

credit per call

01

Pricing and assortment teams use Zalora to search one Zalora country storefront by keyword, with the site's own filters (brand, category….

02

Brand-protection teams use Zalora to list every product in one Zalora category, without a keyword.

03

Retail analysts use Zalora to get full product detail by config_sku, product slug or product URL.

04

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 →
$0.67–$1.50 / 1,000 credits
  • 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
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}'
python
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"])
FAQ

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.

0/4000

No account needed · we reply from [email protected]

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.