Read Zara products, prices and per-size stock by market
Zara API returns live Zara data as clean JSON for zara The primary endpoint, search, returns matching records including product id, product group id, name, brand and brand id.
2 active endpoints. Every call is 1 credit.
- POST/zara/v1/search
- POST/zara/v1/product_detail
What Zara endpoints does ReefAPI ship?
2 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Zara API
2 of 2 endpoints, ready to run
The results grid: product id, group id, reference, display reference, the price object, the colour with its hex value, the section, and whether the match was literal.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the Zara API works
Zara 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 185 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.
Watch which sizes of one garment are actually in stock
Zara's interesting signal is not the price, which rarely moves, but which sizes are gone. That lives one level below the product, on the size rows.
{"query": "jacket", "market": "us", "section": "man", "max_results": 20}One flat credit. Take results[].product_id — not the reference, and not the group id.
{"product_id": "...", "market": "us"}One flat credit. selected_color.sizes[] is one row per size with in_stock, its own reference and its own price; sizes_in_stock counts them for you.
Two flat credits per garment per check, and the response is small and fast enough — one to two seconds — to run across a whole rail several times a day.
curl -X POST https://api.reefapi.com/zara/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"dress","max_results":20}'{
"ok": true,
"data": { … },
"meta": {
"api": "zara",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}Zara price minor units by market, and what exponent 0 means
Zara returns money as an integer plus an exponent, so reading price.raw on its own is how you end up off by a factor of a hundred, and the exponent is not the same in every market. The same product also has a different assortment and a different in-stock size count per store. Every row below is product 545456737, a pinstripe blazer, fetched once per market on 2026-08-27.
| market | Currency | price.raw / exponent | price.amount | sizes_in_stock of 5 |
|---|---|---|---|---|
| us | USD | 21900 / -2 | 219.00 | 4 |
| de | EUR | 13900 / -2 | 139.00 | 5 |
| gb | GBP | 13900 / -2 | 139.00 | 3 |
| tr | TRY | 799000 / -2 | 7990.00 | 5 |
| in | INR | 1295000 / -2 | 12950.00 | 1 |
| jp | JPY | 25990 / 0 | 25990 | 4 |
| kr | KRW | 259900 / 0 | 259900 | 4 |
The market enum holds 19 codes: us, ca, mx, br, gb, ie, es, pt, fr, it, de, nl, pl, tr, ae, in, jp, kr, au. The default is us. price.amount is already the divided figure, so use it unless you need the integer. sku_count stayed at 5 in every market above while sizes_in_stock moved between 1 and 5, which means stock is per store even though the SKU list is not.
Five identifiers, one of which opens the product
Measured on 2026-08-27 across womenswear, menswear and childrenswear on the US, Spanish and Japanese markets. Two of these lines go against us.
A single search row carries product_id (579951647), product_group_id (545471614), reference (C04575567703200-I2026), display_reference (4575/567), and a per-size sku (545471616). product_detail takes product_id and nothing else: the group id returned NOT_FOUND, the size sku returned NOT_FOUND, and the reference was rejected with an INVALID_PARAM that spells out the right shape. That is the single most useful fact about this engine.
Against us. The search row printed reference as C04575567703200-I2026 — the colour-level code. The detail response for the same product printed reference as 04575567-I2026, the product-level one, and put the colour-level code on selected_color.reference. Same field name, two granularities. If you key a database on reference, key it on the one you know you took.
4575/567 is what a customer sees in the shop and what people search for. It is derived from the same digits as the long reference and is the field to match against if your input came from a human rather than from a URL.
price is an object: amount (35.9), currency (USD), raw (3590) and exponent (-2), plus was, discount_pct, discount_label and on_sale. raw with exponent is the exact integer in minor units, which is what you want for money arithmetic. Currencies without minor units come through correctly: the Japanese market returned raw 8590 with exponent 0.
The same word returned 820 results on the US market and a different 300 on the Spanish one, in different currencies, with different products. And meta.match_type tells you how you were answered: the US query matched EXACT, the Spanish one fell through to SEMANTIC_FALLBACK — meaning nothing matched literally and Zara guessed. Check that field before you trust a foreign-language query.
Searching "dress" on the US market returned a child's pinafore in position one, tagged section_name KID. Every row carries section, section_name, family_name and subfamily_name, so you can filter after the fact — but if you meant womenswear, pass section, or your top result will be from the wrong department.
Each size row carries availability, in_stock, its own reference and its own price, plus a demand marker. The product record carries sizes_in_stock and sku_count, so a sold-out check is one field rather than a loop. That is the field this engine exists for.
Against us. With include_composition, three of the four products we opened returned a real breakdown — outer shell 100% cotton, lining 100% polyester, with the exceptions listed. The fourth returned the structure with an empty components array. The care instructions, origin, measurements and conformity declaration came back on all of them.
search and product_detail at 1 flat credit each, and nothing else. Search of 20 rows ran one to three seconds and product_detail about one. The feed is genuinely deep for a fashion site: page 41 of an 820-result query still returned its final 15 rows.
What people build with Zara
The jobs this data is most often used for.
endpoints
credit per call
Pricing and assortment teams use Zara to search the Zara catalogue and get back the products on sale right now.
Brand-protection teams use Zara to get one Zara product in full, by its product id or its zara.com URL.
Retail analysts use Zara to read a retailer's own catalogue with full product detail, variants, price and stock, all from one ReefAPI key and credit pool.
What Zara 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 185 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/zara/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"dress","max_results":20}'import requests
r = requests.post(
"https://api.reefapi.com/zara/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "dress",
"max_results": 20
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Zara.
Get a free key →Does the Zara API return prices in cents?▾
It returns both forms. price.raw is the integer Zara publishes, price.exponent says where the decimal point goes, and price.amount is the already-divided number. For product 545456737 on the us market that was raw 21900, exponent -2 and amount 219.0. Read amount unless you specifically need the integer, and never assume raw divided by 100.
Is the Zara price exponent always -2?▾
No, and that is the trap. Currencies without minor units come back with exponent 0: the same blazer on jp returned raw 25990 exponent 0 for JPY 25,990 and on kr raw 259900 exponent 0 for KRW 259,900. Dividing those by 100 would understate the price a hundredfold. us, de, gb, tr and in all returned -2 in the same measurement.
What does the market parameter change?▾
The catalogue, the assortment, the price and the currency, and nothing else. The same blazer was USD 219.00 on us, EUR 139.00 on de, GBP 139.00 on gb, TRY 7,990.00 on tr and INR 12,950.00 on in. It does not depend on where the request comes from, so the same market always returns the same currency. Nineteen codes are accepted and the default is us.
Is a Zara product_id the garment or the colour?▾
The colour. Zara ids are colour-level, so 545456737 is one colourway and product_group_id (545451465) is the garment it belongs to. Passing the group id also resolves. Inside product_detail, colors[] holds every colourway with its own color_id and hex, and colors[].sizes[] holds every size with its own sku, so one call gives you the whole matrix rather than one variant.
What size-level detail comes back, and what are the stock values?▾
Every size row carries sku, size_id, name, availability, in_stock and its own reference. On the us market that blazer returned SKUs 545451466 through 545451470 for XS, S, M, L and XL, with XL at availability "coming_soon" and in_stock false while the other four were "in_stock". Across a 60-row search the availability values seen were in_stock and low_on_stock, so treat it as a small vocabulary and read in_stock when you only need the boolean.
What are reference and display_reference?▾
reference is the full code printed on the label, built from the product code, the colour code and the season: "C00550156407000-I2026" for that blazer, whose color_id is 407. display_reference is the short form Zara shows on the page, "0550/156". Each size then has its own reference with the size appended, such as "0055015640701-I2026" for XS. Use reference when matching against Zara's own paperwork rather than the numeric id.
Why does a Zara search return Zara Home or Massimo Dutti products?▾
Because the search index behind a Zara store is the Inditex index for that store, so sister brands can match a query. A 60-row search for 'dress' on the us market returned 59 zara rows and 1 zarahome row. Every row carries brand and brand_id, and the brand parameter (zara, zarahome, massimodutti) trims rows after they are fetched, so a filtered page can come back shorter than max_results.
How do I know Zara actually matched my words?▾
Read match.type. "EXACT" means the words matched the catalogue, and Zara also reports spell-corrected and semantic-fallback matches instead of returning nothing, which is how a query quietly turns into merely similar products. match.universe names the department Zara routed the query to and it can disagree with the rows: a search for 'dress' came back with universe KID while the 60 rows split 36 KID, 21 WOMAN, 2 MAN and 1 HOME.
What is the Zara API?▾
Zara API is a ReefAPI endpoint group for zara It returns live JSON through POST requests under /zara/v1.
Is the Zara API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Zara calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Zara login or account?▾
No login to Zara 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 Zara 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 Zara API use?▾
Zara actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Zara from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call zara actions with the same key, credit pool and JSON envelope used by normal REST requests.
15 More APIs APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Zara, you are one call away from the rest of the category — no second contract, no second integration.
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 184 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-08-27.