Zalando API

Read Zalando prices and per-size stock across seven European editions

The Zalando API returns EU fashion product data as clean JSON.

no credit card1,000 free credits · instant API key · live in 10 seconds
Missing a Zalando endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
Z
/zalando/v1

12 active endpoints. Every call is 1 credit.

  • POST/zalando/v1/search
  • POST/zalando/v1/category
  • POST/zalando/v1/sale
  • POST/zalando/v1/new_arrivals
  • POST/zalando/v1/product
  • POST/zalando/v1/similar
  • POST/zalando/v1/variants
  • +5 more

What Zalando endpoints does ReefAPI ship?

12 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

12 endpoints

search

1 cr

Search Zalando by keyword.

required
q
optional
country, page, category, order, brand, min_price, max_price

category

1 cr

Browse Zalando products by category (e.g.

required
category
optional
country, page, order, brand, min_price, max_price

sale

1 cr

On-sale / discounted Zalando products.

required
optional
country, category, page, brand, min_price, max_price

new_arrivals

1 cr

Newest Zalando products in a category, sorted newest-first.

required
optional
country, category, page, brand, min_price, max_price

product

1 cr

Full Zalando product detail by URL or SKU.

required
optional
url, sku, country

similar

1 cr

Products similar to a given Zalando item.

required
optional
url, sku, country

variants

1 cr

All size variants for a Zalando product with in-stock flags.

required
optional
url, sku, country

brands

1 cr

Distinct brands present in a given Zalando listing.

required
optional
country, category, q, page

categories

1 cr

Top-level Zalando category links for a country, live-discovered from that TLD's own localized…

required
optional
country, gender

filters

1 cr

Discover which sort and filter options are available for Zalando listings, including price ra…

required
optional
country, category, q

reviews

1 cr

Customer reviews and overall rating summary for a Zalando product (when reviews are embedded…

required
optional
url, sku, country

attributes

1 cr

Product attribute clusters for a Zalando item.

required
optional
url, sku, country

Every parameter, every allowed value →

Zalando API

3 of 12 endpoints, ready to run

View docs ↗

Browse a country's own category path: name, brand, SKU, price with the currency that country trades in, the original price, images and the product URL. This is the route that answered on every country we measured.

1 credit1 required · 4 optional
POST/zalando/v1/category
ok2433 ms · 24 records · sample
{
  "ok": true,
  "meta": {
    "api": "zalando",
    "endpoint": "category",
    "mode": "live",
    "latency_ms": 2432.8,
    "record_count": 24,
    "cache_hit": false
  },
  "data": {
    "results": [
      {
        "sku": "R06210076-Q11",
        "name": "KETHAN BOXY FIT - T-Shirt print - black",
        "brand": "Redefined Rebel",
        "color": null,
        "url": "https://www.zalando.de/redefined-rebel-rrkethan-tee-unisex-t-shirt-print-black-r06210076-q11.html",
        "image": "https://img01.ztat.net/article/spp-media-p1/6a11e9d43604478ea474a9f7a51b9eba/7a5920e3920f405ea676db9fe7f238b0.jpg?imwidth=500",
        "images": [
          "https://img01.ztat.net/article/spp-media-p1/6a11e9d43604478ea474a9f7a51b9eba/7a5920e3920f405ea676db9fe7f238b0.jpg?imwidth=500",
          "https://img01.ztat.net/article/spp-media-p1/6a11e9d43604478ea474a9f7a51b9eba/7a5920e3920f405ea676db9fe7f238b0.jpg?imwidth=780",
          "https://img01.ztat.net/article/spp-media-p1/6a11e9d43604478ea474a9f7a51b9eba/7a5920e3920f405ea676db9fe7f238b0.jpg?imwidth=400"
        ],
        "category": {
          "products": {
            "edges": [],
            "totalCount": 0
          }
        },
        "sizes": [
          "XS",
          "S",
          "M"
        ],
        "navigation_target_group": "MEN",
        "condition": null,
        "in_stock": null,
        "availability": null,
        "price": 17.95,
        "original_price": 17.95,
        "currency": "EUR",
        "discount_percent": null,
        "formatted_price": "17,95 €",
        "on_sale": false
      },
      {
        "sku": "JA222G2CA-C11",
        "name": "Jeans Straight Leg - black denim",
        "brand": "Jack & Jones",
        "color": null,
        "url": "https://www.zalando.de/jack-and-jones-jjieddie-jjoriginal-jeans-relaxed-fit-black-denim-ja222g2ca-c11.html",
        "image": "https://img01.ztat.net/article/spp-media-p1/9b18810e57ae41798dbc17d21226080e/64014e635abc44e2827efc851c1f2733.jpg?imwidth=500",
        "images": [
          "https://img01.ztat.net/article/spp-media-p1/9b18810e57ae41798dbc17d21226080e/64014e635abc44e2827efc851c1f2733.jpg?imwidth=500",
          "https://img01.ztat.net/article/spp-media-p1/9b18810e57ae41798dbc17d21226080e/64014e635abc44e2827efc851c1f2733.jpg?imwidth=780",
          "https://img01.ztat.net/article/spp-media-p1/9b18810e57ae41798dbc17d21226080e/64014e635abc44e2827efc851c1f2733.jpg?imwidth=400"
        ],
        "category": "TROUSER",
        "sizes": [
          "28x32",
          "29x30",
          "29x32"
        ],
        "navigation_target_group": "MEN",
        "condition": null,
        "in_stock": null,
        "availability": null,
        "price": 29.99,
        "original_price": 29.99,
        "currency": "EUR",
        "discount_percent": null,
        "formatted_price": "29,99 €",
        "on_sale": false
      },
      {
        "sku": "BEJ22G0CV-K12",
        "name": "SKATER - Jeans Relaxed Fit - blue grey",
        "brand": "Bershka",
        "color": null,
        "url": "https://www.zalando.de/bershka-skater-jeans-relaxed-fit-blue-grey-bej22g0cv-k12.html",
        "image": "https://img01.ztat.net/article/spp-media-p1/1c28bda604d646619ff016eb0c0d1023/24ff15d93b4c45d4a1e2f4ad845a17c1.jpg?imwidth=500",
        "images": [
          "https://img01.ztat.net/article/spp-media-p1/1c28bda604d646619ff016eb0c0d1023/24ff15d93b4c45d4a1e2f4ad845a17c1.jpg?imwidth=500",
          "https://img01.ztat.net/article/spp-media-p1/1c28bda604d646619ff016eb0c0d1023/24ff15d93b4c45d4a1e2f4ad845a17c1.jpg?imwidth=780",
          "https://img01.ztat.net/article/spp-media-p1/1c28bda604d646619ff016eb0c0d1023/24ff15d93b4c45d4a1e2f4ad845a17c1.jpg?imwidth=400"
        ],
        "category": "TROUSER",
        "sizes": [
          "34",
          "36",
          "38"
        ],
        "navigation_target_group": "MEN",
        "condition": null,
        "in_stock": null,
        "availability": null,
        "price": 12.99,
        "original_price": 35.99,
        "currency": "EUR",
        "discount_percent": 23,
        "formatted_price": "12,99 € Ursprünglich: 35,99 € Letzter niedrigster Preis: 15,99 € -19%",
        "on_sale": true
      }
    ],
    "page": 1,
    "page_size": 24,
    "has_more": true,
    "next_page": 2,
    "category": "herren"
  }
}
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 Zalando API works

Zalando 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 185 engines.

02
Call
POST /zalando/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.

Ask the country what its own categories are called

Zalando does not run one catalogue in several languages — each country edition has its own paths. Guessing them is where most integrations break, and there is an endpoint whose whole job is to stop you guessing.

01categories
POST/zalando/v1/categories
{"country": "it"}

Read live from that country's own navigation: donna, uomo, bambini on the Italian site, kobiety and mezczyzni on the Polish one. It answered on all seven countries.

02category
POST/zalando/v1/category
{"category": "uomo", "country": "it", "page": 1}

24 products a page, priced in that country's currency.

03variants
POST/zalando/v1/variants
{"url": "<product url>", "country": "it"}

Every size with an in-stock flag. Twenty sizes came back on the product we opened.

Three credits to go from nothing to a per-size stock map in a country you have never touched before, with no hard-coded path list to maintain.

request
curl -X POST https://api.reefapi.com/zalando/v1/category \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"category":"herrenschuhe-sneaker","country":"de"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "zalando",
    "endpoint": "category",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

Zalando country codes, storefront hosts and the currency each returns

The country parameter picks a Zalando storefront, and that decides the host, the product language and the currency prices come back in. Every value below was confirmed on 2026-08-27 by running the sale action once per country and reading the currency field off the first card. gb is an alias of uk and resolves to the same host and the same results.

countryStorefront hostCurrency returnedExample price returned
dezalando.deEUR19.99
uk (or gb)zalando.co.ukGBP65.99
frzalando.frEUR49.0
nlzalando.nlEUR40.8
itzalando.itEUR32.99
eszalando.esEUR19.99
plzalando.plPLN126.56

Coverage is not identical across actions. On 2026-08-27 the keyword search action answered only on de and fr; uk, gb, nl, it, es and pl each returned error code NOT_FOUND because Zalando serves no /catalogue/ search path on those hosts. sale, category, product and variants answered on every country. Category slugs are per-language, so the German slug herrenschuhe-sneaker only works with country de.

Which countries answer, and the discount field that is not a percentage

Measured across all seven country editions on the same query and the same category. Three of these go against us, and the second one will silently corrupt a price feed if you miss it.

Against us: keyword search answers on only two of the countries

The search action returned results on the German and French editions and answered NOT_FOUND on the British, Dutch, Italian, Spanish and Polish ones — the search path it uses does not exist on those domains. Category browse answered on all seven, and so did the categories lookup that feeds it. If you need every country, browse by category rather than by keyword.

Against us: discount_percent is the money saved, not a percentage

Measured on three countries and confirmed on every discounted row: a British item at 23.00 down from 25.99 reports 2.99, a German one at 45.45 down from 64.99 reports 19.54, a Polish one at 349 down from 499 reports 150. Those are currency differences, not rates. Compute the rate from price and original_price and ignore the field's name.

Currency follows the country, and price is on every row

24 of 24 rows priced on all seven editions. EUR on the German, French, Dutch, Italian and Spanish sites, GBP on the British one and PLN on the Polish one, stated on the row rather than inferred from the country you asked for.

The reference price is the regular price, not the statutory low

original_price is what the item normally sells for. The European thirty-day-lowest-price disclosure is a separate number and it lives inside the formatted price string — on Polish rows we measured it both above and BELOW the current price, so it is not a second reference you can subtract from. Use original_price for a saving and read the formatted string if you need the statutory figure.

Against us: an unknown SKU is a retryable parse error, not a not-found

A SKU that does not exist answers PARSE_ERROR with retryable true, which a retry loop will happily hammer forever. Address product, variants and reviews by URL, and treat a SKU failure as a bad identifier rather than a transient one.

Paging goes deep and there is no total to check it against

Pages 20, 100 and 200 of one category all returned a full page of fresh rows with no overlap on page 1. Zalando publishes no result count here, so page until a page comes back short.

Reviews are opportunistic

The reviews action reports honestly whether the product page carried any: two products returned reviews_count 0 with an explicit available flag set false, rather than an empty array that looks like a fetch failure. Do not build a review pipeline on this engine expecting coverage.

What people build with Zalando

The jobs this data is most often used for.

12

endpoints

1

credit per call

01

Fashion-pricing tools call search and sale to track Zalando prices and markdowns by brand.

02

Catalog-enrichment products use product and variants to fill listings with colours and sizes.

03

Retail analysts use new_arrivals and brands to spot trends across the EU fashion market.

What Zalando 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 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
curl -X POST https://api.reefapi.com/zalando/v1/category \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"category":"herrenschuhe-sneaker","country":"de"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/zalando/v1/category",
    headers={"x-api-key": REEF_KEY},
    json={
  "category": "herrenschuhe-sneaker",
  "country": "de"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Zalando.

Get a free key →
What does a Zalando SKU like NI114D0HT-A11 mean?

It is the article number: nine characters identifying the article, a hyphen, then a three-character color code, 13 characters in total. NI114D0HT-A11 and NI112N022-A11 are two different Nike Sportswear articles in the same A11 colorway. The same article number is used on every storefront: a search on de and the same search on fr both returned NI114D0HT-A11 for the same shoe, with only the URL slug and the language of the product name changing.

How do Zalando size variants get their own SKU?

Each size is the 13-character article SKU plus a seven-character size code, giving a 20-character variant SKU. Measured on 2026-08-27 for NI112N022-A11: size 38.5 is NI112N022-A110060000, size 39 is NI112N022-A110065000, size 40 is NI112N022-A110070000. The suffix is a sort key rather than the size itself, so read the size field instead of trying to decode the digits.

Why does the product action return null for price, brand and images?

product reads the product page's own data block, which on the pages measured on 2026-08-27 carried only sku, name, url and the full size ladder. price, original_price, currency, brand, images and rating all came back null for both NI112N022-A11 and NI114D0HT-A11. Take price and images from a listing card returned by search, category or sale, and use product or variants for the sizes and their in_stock flags.

Is a Zalando price in cents or in currency units?

In currency units, as a plain number. A measured German search card returned price 69.95 with currency EUR, and the Polish sale grid returned price 126.56 with currency PLN. There is no minor-unit encoding to divide by 100. formatted_price carries the storefront's own rendering if you want the localized string instead.

How do I tell whether a Zalando item is discounted?

Compare price with original_price, or read on_sale and discount_percent. A measured card returned price 69.95, original_price 99.95, discount_percent 30 and on_sale true. When there is no discount, original_price equals price, discount_percent is null and on_sale is false, which is what a 179.95 card in the same result set returned.

Which Zalando countries can I keyword-search?

As measured on 2026-08-27, keyword search answered on de and fr. The other storefronts returned error code NOT_FOUND because Zalando does not serve the /catalogue/ search path there. The sale, category, product and variants actions did answer on all eight country values, so for uk, nl, it, es and pl browse by category slug or by the sale grid instead of by keyword.

Does a listing card tell me which sizes are in stock?

No. A search or category card carries a sizes array of labels such as '38.5', '39', '40', but its in_stock field came back null on every card measured, so a card cannot tell you whether a given size is buyable. Use the variants action for that: it returns one row per size with the size label, the 20-character variant sku and an in_stock boolean.

How does paging work on the Zalando listing actions?

Every listing action returns 24 cards per page. meta.extra carries page, page_size, has_more, next_page and the resolved upstream URL, so you page forward by feeding next_page back into the page parameter. A category call with page=2 on herrenschuhe-sneaker returned 24 different cards and has_more true.

What is the Zalando API?

Zalando API is a ReefAPI endpoint group for zalando It returns live JSON through POST requests under /zalando/v1.

Is the Zalando API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Zalando calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Zalando login or account?

No login to Zalando 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 Zalando 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 Zalando API use?

Zalando 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 Zalando from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call zalando actions with the same key, credit pool and JSON envelope used by normal REST requests.

37 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Zalando, 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 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-28.