Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Zappos API page →
E-commerce & Marketplaces

Zappos API & Scraper

Zappos API returns live Zappos data as clean JSON for zappos The primary endpoint, search, returns product results including product id, style id, color id, name and brand.

3 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 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.

Developers reach for it when they need to track product listings, prices, availability, variants and reviews without maintaining one-off scraping code or separate API contracts. If you were about to build or fix a Zappos scraper, this API is the maintained alternative — it returns the same data as clean JSON, with the proxies, rotation and anti-bot handling already solved. This page covers the live example, request shape, response shape and available actions: search, price, product_detail. Every request uses the same ReefAPI envelope, one API key and one shared credit pool, so it fits alongside the rest of your data stack.

Reference

The four Zappos ids, and which parameter each one belongs in

Zappos numbers a shoe at four levels and every one of them is a bare integer, so it is easy to send the wrong one. product_id is the only required key; style_id and color_id both select a colorway; stock_id, ASIN and UPC live below that and are read-only. All examples were measured 2026-08-27 on KEEN products.

IdWhat it identifiesMeasured exampleAccepted as
product_idOne product across every colorway10029603product_id (required)
style_idZappos' SKU for one colorway6630380style_id (colorway selector)
color_idThe colorway1122594, and 6969 on an older stylecolor_id (colorway selector)
stock_idOne size and width of one colorway60404349read-only, not a parameter
asinAmazon id for that size and widthB0FDCYLXNCread-only, not a parameter
upcBarcode for that size and width195208999734read-only, not a parameter

Sending a style_id where product_id belongs fails cleanly: product_id 6630380 returned NOT_FOUND saying the id redirected to the Zappos homepage. A color_id that belongs to a different product also fails and names the valid ones: color_id 9999999 on product 10029603 returned "That product's colour ids are: 1121608, 1122594, 1122875". Neither case quietly returns a different shoe. color_id has no fixed length, 6969 and 1122594 are both real.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/zappos/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "running shoes",
    "max_results": 40
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "zappos",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1774.4,
    "record_count": 40,
    "bytes": 1378658,
    "cache_hit": false,
    "completeness_pct": 100,
    "stop_reason": "limit_reached",
    "pagination": {
      "page": 1,
      "per_page": 100,
      "total_results": 2160,
      "page_count": 22,
      "returned": 40,
      "has_more": true,
      "next_page": 2
    },
    "filters": {
      "applied": [],
      "ignored": []
    },
    "charged_credits": 1,
    "version": "1.0.0"
  },
  "data": {
    "products": [
      {
        "product_id": "10083154",
        "style_id": "6778884",
        "color_id": "1152141",
        "name": "Novablast 6 GTX",
        "brand": "ASICS",
        "product_type": "Shoes",
        "color": "Brown",
        "color_detail": "Dark Aubergine/Black",
        "genders": [
          "Women"
        ],
        "url": "https://www.zappos.com/p/asics-novablast-6-gtx-dark-aubergine-black/product/10083154/color/1152141",
        "price": 174.95,
        "original_price": 174.95,
        "currency": "USD",
        "on_sale": false,
        "percent_off": 0,
        "discount_amount": null,
        "in_stock": true,
        "units_available": 493,
        "low_stock": null,
        "is_new": true,
        "rating": 0,
        "style_rating": 0,
        "review_count": 0,
        "image": "https://m.media-amazon.com/images/I/713y+adHhcL._SX700_.jpg",
        "images": [
          {
            "view": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          },
          {
            "view": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          },
          {
            "view": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          }
        ],
        "swatch_image": "https://swch-cl2.olympus.zappos.com/fabric/27567/27580/10083154/6778884.jpg",
        "has_fabric_swatch": true,
        "is_couture": false,
        "badges": [
          "NEW"
        ],
        "promo_badges": null,
        "other_colors": [
          {
            "style_id": "[trimmed-depth]",
            "color_id": "[trimmed-depth]",
            "color": "[trimmed-depth]",
            "color_detail": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "original_price": "[trimmed-depth]",
            "percent_off": "[trimmed-depth]",
            "units_available": "[trimmed-depth]",
            "rating": "[trimmed-depth]",
            "review_count": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          },
          {
            "style_id": "[trimmed-depth]",
            "color_id": "[trimmed-depth]",
            "color": "[trimmed-depth]",
            "color_detail": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "original_price": "[trimmed-depth]",
            "percent_off": "[trimmed-depth]",
            "units_available": "[trimmed-depth]",
            "rating": "[trimmed-depth]",
            "review_count": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          }
        ]
      },
      {
        "product_id": "10083171",
        "style_id": "6778992",
        "color_id": "450833",
        "name": "Novablast 6 GTX",
        "brand": "ASICS",
        "product_type": "Shoes",
        "color": "Khaki",
        "color_detail": "Sandstorm/Black",
        "genders": [
          "Men"
        ],
        "url": "https://www.zappos.com/p/asics-novablast-6-gtx-sandstorm-black/product/10083171/color/450833",
        "price": 174.95,
        "original_price": 174.95,
        "currency": "USD",
        "on_sale": false,
        "percent_off": 0,
        "discount_amount": null,
        "in_stock": true,
        "units_available": 481,
        "low_stock": null,
        "is_new": true,
        "rating": 0,
        "style_rating": 0,
        "review_count": 0,
        "image": "https://m.media-amazon.com/images/I/81rADcpI-uL._SX700_.jpg",
        "images": [
          {
            "view": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          },
          {
            "view": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          },
          {
            "view": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          }
        ],
        "swatch_image": "https://swch-cl2.olympus.zappos.com/fabric/27567/27580/10083171/6778992.jpg",
        "has_fabric_swatch": true,
        "is_couture": false,
        "badges": [
          "NEW"
        ],
        "promo_badges": null,
        "other_colors": [
          {
            "style_id": "[trimmed-depth]",
            "color_id": "[trimmed-depth]",
            "color": "[trimmed-depth]",
            "color_detail": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "original_price": "[trimmed-depth]",
            "percent_off": "[trimmed-depth]",
            "units_available": "[trimmed-depth]",
            "rating": "[trimmed-depth]",
            "review_count": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          },
          {
            "style_id": "[trimmed-depth]",
            "color_id": "[trimmed-depth]",
            "color": "[trimmed-depth]",
            "color_detail": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "original_price": "[trimmed-depth]",
            "percent_off": "[trimmed-depth]",
            "units_available": "[trimmed-depth]",
            "rating": "[trimmed-depth]",
            "review_count": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          }
        ]
      },
      {
        "product_id": "10086061",
        "style_id": "6786565",
        "color_id": "145876",
        "name": "GT-2000 15 GTX®",
        "brand": "ASICS",
        "product_type": "Shoes",
        "color": "Gray",
        "color_detail": "Graphite Grey/Black",
        "genders": [
          "Men"
        ],
        "url": "https://www.zappos.com/p/asics-gt-2000-15-gtx-graphite-grey-black/product/10086061/color/145876",
        "price": 169.95,
        "original_price": 169.95,
        "currency": "USD",
        "on_sale": false,
        "percent_off": 0,
        "discount_amount": null,
        "in_stock": true,
        "units_available": 72,
        "low_stock": null,
        "is_new": true,
        "rating": 0,
        "style_rating": 0,
        "review_count": 0,
        "image": "https://m.media-amazon.com/images/I/81MJIf4k6fL._SX700_.jpg",
        "images": [
          {
            "view": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          },
          {
            "view": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          },
          {
            "view": "[trimmed-depth]",
            "url": "[trimmed-depth]"
          }
        ],
        "swatch_image": null,
        "has_fabric_swatch": false,
        "is_couture": false,
        "badges": [
          "NEW"
        ],
        "promo_badges": null,
        "other_colors": null
      }
    ],
    "__trimmed": "response capped for page display"
  }
}
Actions

What the Zappos API does

ActionDescriptionConcrete use caseKey params
searchSearch the Zappos catalog. Give a `query` ('running shoes', 'hiking boots', 'nike air max', 'womens dresses') and get back 100 products per page, each with Zappos' own product id, style id and colour id, price and list price, discount, units in stock, star rating, review count, badges, the full image set, and the product's OTHER colourways inline. Narrow with brand, colour, gender, size, width, department, category, material, style, feature, occasion, pattern, theme, price bucket and an on-sale switch; sort by price, rating, newest or best sellers. Every filter value your query actually supports — with the number of products behind it — is returned in `filters_available`, so you never have to guess.Pricing teams call search to search the Zappos catalog.query, max_results, page, sort, brand, ...
priceRefresh the current price and stock of one Zappos product, cheaply. Give the `product_id` (optionally `color_id` or `style_id`) and get back every colourway with its price, list price, discount, in-stock flag and units in stock, plus the requested colourway on top. One request, about half the bytes of `product_detail`. Stock is per COLOURWAY (summed over its sizes); for per-size stock, ASIN and UPC use `product_detail`.Marketplace operators call price to get refresh the current price and stock of one Zappos product, cheaply.product_id, color_id, style_id, url
product_detailGet one Zappos product in full, by its product id (or its zappos.com URL) — brand, category, gender, the marketing description and every specification bullet, the parsed physical measurements (weight, heel height, shaft, circumference, platform height, bag depth and strap drop where Zappos lists them), size charts, the customer rating with its star histogram and the runs-small / runs-wide / arch-support breakdowns, and the two customer reviews Zappos embeds. Every colourway is returned with its own style id, colour id, price, list price, image set and stock, and the selected colourway is broken down to the SIZE x WIDTH level: one row per purchasable variant with Zappos' stock id, the Amazon ASIN, the manufacturer UPC, that variant's own price and list price, and how many units are in stock right now.Catalog enrichment teams call product_detail to get one Zappos product in full, by its product id (or its zappos.com URL).product_id, color_id, style_id, url, include_all_color_variants
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/zappos/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"running shoes","max_results":40}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.zappos.search with {"query":"running shoes","max_results":40}.
Use cases

Who uses this API and why

  • Pricing teams use Zappos to search the Zappos catalog.
  • Marketplace operators use Zappos to get refresh the current price and stock of one Zappos product, cheaply.
  • Catalog enrichment teams use Zappos to get one Zappos product in full, by its product id (or its zappos.com URL).
FAQ

Questions developers ask before integrating

How does Zappos model width, and how do I filter on it?

Width is a second size axis, not a text note. On a measured men's boot, selected_color.size_axis came back as Width, widths listed D - Medium and EE - Wide with width_id 61808 and 64170, and the variant grid was the cross product: 14 sizes times 2 widths, 28 variants. Kids' shoes use a shorter vocabulary, plain M with width_id 3090. The search width parameter takes the facet label (Wide, Medium, Narrow, Extra Narrow) and the response echoes which facet it landed in, hc_men_width in the measured call.

Why do some sizes come back with a null stock_id?

Those are placeholder rows: is_placeholder true, stock_id, asin and upc all null, units_available 0, in_stock false. Zappos prints the size cell so the grid stays square but has nothing to sell in it. On one measured colorway the 28 variants split into 21 sellable rows and 7 placeholders, all of them in the EE - Wide column.

Why does adding a sort change the number of results?

Any explicit ordering narrows the set. Measured on the query hiking boots: the default relevance ordering reported 469 total_results, sort=rating reported 344 and sort=price_low also reported 344. meta.pagination.total_results always describes the request you actually made, so compare like with like when you are tracking a category's size over time.

What happens if I pass a brand or color Zappos does not have?

It is reported, not silently applied and not silently dropped. brand=NotARealBrand came back with meta.filters.ignored listing the filter, the value and the reason "Zappos publishes no such value for this query", while total_results stayed at 469. Filters that did land show up in meta.filters.applied with the facet field they matched, so you can always reconcile the count you got against the filters that took effect.

Is units_available a stock count per size or per colorway?

Both, at different levels. On a search row and on a colorway it is the colorway total, 29 on one measured KEEN colorway. Inside variants[] it is per size and width: 10 units in M 1 Big Kid, 6 in M 2 Big Kid, 0 in the placeholder rows. in_stock_variant_count against variant_count tells you how much of the grid is live, 4 of 7 on that colorway and 21 of 28 on another.

How do I get the size grid for every colorway in one call?

Set include_all_color_variants true. By default only selected_color carries variants[], and the other colorways in colors[] come back summarised with price, price_min, price_max, variant_count, in_stock_variant_count, units_available and widths but no per-size rows. That default is what keeps the payload manageable: a three-color kids' boot with one colorway expanded already measured 959 KB, and every extra colorway adds its whole size and width grid.

Does search return the other colorways of the same product?

Yes, inline. Each product row carries other_colors[] with style_id, color_id, color, color_detail, price, original_price, percent_off, units_available, rating, review_count, image and url for each sibling colorway, so you do not need a second call to enumerate them. Note that color is the broad family (Olive) and color_detail is Zappos' own name (Dark Olive/Martini Olive); the color search filter matches the family, not the detail.

What does product_detail add that search does not have?

The parsed measurements block (heel_height 1 1/4 in, weight 8.64 oz, circumference 7 in), the specification bullets, size-chart links, breadcrumbs, and the fit verdicts Zappos computes from reviews: rating.fit_size, fit_width and fit_arch, each a percentage split such as Felt true to size 100. It also returns sample_reviews with per-review comfort_rating, look_rating and the same three fit verdicts.

What is the Zappos API?

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

Is the Zappos API free to try?

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

Do I need a Zappos login or account?

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

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

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

docs / zappos

Zappos

Zappos

base /zappos/v13 endpoints
post/zappos/v1/price1 credit

Refresh the current price and stock of one Zappos product, cheaply. Give the `product_id` (optionally `color_id` or `style_id`) and get back every colourway with its price, list price, discount, in-stock flag and units in stock, plus the requested colourway on top. One request, about half the bytes of `product_detail`. Stock is per COLOURWAY (summed over its sizes); for per-size stock, ASIN and UPC use `product_detail`.

ParameterAllowed / rangeDescription
product_idrequired—Zappos' own PRODUCT id — the number in a zappos.com/product/<id> URL, the `sku` in their schema.org data, and the `product_id` on every `search` result. Always a string of digits; never hashed, composed or re-derived. A style id is NOT accepted here (Zappos does not serve /product/<styleId>) — pass it as `style_id` instead. You may pass the full product URL in `url` rather than this.
color_idoptional—Which colourway to put in `selected_color`. Zappos' own colour id, exactly as `search` returns it. Omit to get the colourway Zappos shows by default. If the id does not belong to this product the call fails with NOT_FOUND and lists the ids that do — it never quietly returns a different colour.
style_idoptional—Alternative colour selector: Zappos' STYLE id (their SKU for one colourway of one product), as returned by `search`. Resolved to its colour inside the product payload, so it costs no extra request. Use `color_id` OR `style_id`.
urloptional—A full zappos.com product URL — an alternative to `product_id` (+ `color_id`). Both the short /product/<id>/color/<id> form and the long /p/<slug>/product/<id>/color/<id> form are accepted.
Try in playground →
post/zappos/v1/product_detail2 credits

Get one Zappos product in full, by its product id (or its zappos.com URL) — brand, category, gender, the marketing description and every specification bullet, the parsed physical measurements (weight, heel height, shaft, circumference, platform height, bag depth and strap drop where Zappos lists them), size charts, the customer rating with its star histogram and the runs-small / runs-wide / arch-support breakdowns, and the two customer reviews Zappos embeds. Every colourway is returned with its own style id, colour id, price, list price, image set and stock, and the selected colourway is broken down to the SIZE x WIDTH level: one row per purchasable variant with Zappos' stock id, the Amazon ASIN, the manufacturer UPC, that variant's own price and list price, and how many units are in stock right now.

ParameterAllowed / rangeDescription
product_idrequired—Zappos' own PRODUCT id — the number in a zappos.com/product/<id> URL, the `sku` in their schema.org data, and the `product_id` on every `search` result. Always a string of digits; never hashed, composed or re-derived. A style id is NOT accepted here (Zappos does not serve /product/<styleId>) — pass it as `style_id` instead. You may pass the full product URL in `url` rather than this.
color_idoptional—Which colourway to put in `selected_color`. Zappos' own colour id, exactly as `search` returns it. Omit to get the colourway Zappos shows by default. If the id does not belong to this product the call fails with NOT_FOUND and lists the ids that do — it never quietly returns a different colour.
style_idoptional—Alternative colour selector: Zappos' STYLE id (their SKU for one colourway of one product), as returned by `search`. Resolved to its colour inside the product payload, so it costs no extra request. Use `color_id` OR `style_id`.
urloptional—A full zappos.com product URL — an alternative to `product_id` (+ `color_id`). Both the short /product/<id>/color/<id> form and the long /p/<slug>/product/<id>/color/<id> form are accepted.
include_all_color_variants = falseoptional—By default the per-size variant list (stock id, ASIN, UPC, price, units in stock) is returned for the SELECTED colour, and the other colourways come back summarised (price, price range, in-stock flag, variant count). Set true to get the full size grid for EVERY colourway in one response — no extra request, just a much larger payload (a 22-colour sneaker is ~370 variants).
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.