Zappos API endpoint
Returns one Zappos product's full detail: name, brand, description, category, breadcrumbs, pricing, images, aggregate rating with a 1-5 star breakdown, up to two featured customer reviews with real author/date/body/rating, reviewer-submitted fit feedback for size/width/arch (each response option's own share of respondents plus the most common answer), and every sibling color variant with its own price. productId is taken from a search result's product_id field or a product page's URL. colorId is optional and selects a specific color variant; an omitted or invalid colorId still resolves the base product using a real color variant rather than failing. An unrecognized productId returns 404.
/zappos/product/{productId}productId is required, a numeric Zappos product id taken from a search result's product_id field or a product page's URL (e.g. 9984297). colorId is optional and selects a specific color variant (e.g. 1112488); an omitted or invalid colorId still resolves the base product using a real color variant rather than failing.
Notable response behavior:
breadcrumbs is the site's own navigation path to the product (e.g. ["shoes", "sneakers & athletic shoes", "HOKA"]).rating/rating_count are the product's aggregate rating and total review count. rating_breakdown maps each star value "1" through "5" to the percentage of reviewers who gave that rating.featured_reviews holds Zappos's own site-selected featured reviews -- at most two (the page's "most helpful" and "most voted" picks) -- each with a real author byline, a date, the actual review text, and multiple rating dimensions. A product with no reviews yet returns an empty list, not an error.size_fit, width_fit, and arch_fit summarize reviewer-submitted fit feedback for each dimension: percentages maps each response option's own text (e.g. "Felt true to size") to the percentage of reviewers who chose it, and most_common_answer/most_common_percentage are the site's own "most common answer" summary. Absent when the product has no fit-feedback data for that dimension.color_variants lists every sibling color of this product, including the one requested, each with its own price and a direct url to that color's own detail page.original_price equals price when the product is not on sale.productId returns 404. A malformed productId or colorId returns 400 before any upstream request is made.| Field | Filled in, of 17 checked | Values in the sample |
|---|---|---|
| color_id | 17 | |
| color_name | 17 | “White/White” and 16 other values |
| price | 17 | $108.50 (16), $99.99 (1) |
| original_price | 17 | $155.00 in all 17 |
| percent_off | 17 | 30% (16), 35% (1) |
| url | 17 | zappos.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| productId (path) | string | Yes | Zappos product id, from a search result's product_id field | 9984297 | |
| colorId | string | No | Zappos color id selecting a specific color variant | 1112488 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/zappos/product/9984297" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"product_id": "9984297",
"color_id": "1112488",
"brand_name": "HOKA",
"product_name": "Clifton 10",
"description": "A trusted trainer for daily maintenance miles, the Hoka One One® Clifton 10 delivers a revitalized underfoot experience.",
"category": "sneakers & athletic shoes",
"breadcrumbs": [
"shoes",
"sneakers & athletic shoes",
"HOKA"
],
"color": "Vanilla/Birch",
"currency_code": "USD",
"price": "114.99",
"original_price": "155.00",
"in_stock": true,
"images": [
"https://m.media-amazon.com/images/I/71zzmruQmAL._SX700_.jpg",
"https://m.media-amazon.com/images/I/71Et3HTxBXL._SX700_.jpg"
],
"rating": 4,
"rating_count": 1546,
"rating_breakdown": {
"1": 5,
"2": 3,
"3": 7,
"4": 10,
"5": 76
},
"featured_reviews": [
{
"id": "18383268",
"author": "Lori, Zappos Customer",
"date": "May 8, 2025 3:21:47 PM",
"body": "I have been getting a size 9 in the Hoka Cliftons since the Clifton 6. This time my toe comes all the way to the end of the shoe and the toe box is smaller.",
"overall_rating": 1,
"comfort_rating": 1,
"look_rating": 1,
"verified_purchase": false,
"up_votes": 152
},
{
"id": "18360853",
"author": "Anonymous, Zappos Customer",
"date": "Apr 24, 2025 5:12:45 AM",
"body": "This shoe runs smaller than my previous Cliftons. They are much more narrow and that is sad.",
"overall_rating": 3,
"comfort_rating": 3,
"look_rating": 3,
"verified_purchase": false,
"up_votes": 67
}
],
"size_fit": {
"percentages": {
"Felt true to size": 80.40435,
"Felt a half size smaller than marked": 4.0435457
},
"most_common_answer": "Felt true to size",
"most_common_percentage": 80
},
"width_fit": {
"percentages": {
"Felt true to width": 86.08,
"Felt wider than marked": 4.96
},
"most_common_answer": "Felt true to width",
"most_common_percentage": 86
},
"color_variants": [
{
"color_id": "151",
"color_name": "Black/White",
"price": "$99.83",
"original_price": "$155.00",
"percent_off": "36%",
"url": "https://www.zappos.com/product/9984297/color/151"
},
{
"color_id": "1112488",
"color_name": "Vanilla/Birch",
"price": "$114.99",
"original_price": "$155.00",
"percent_off": "26%",
"url": "https://www.zappos.com/product/9984297/color/1112488"
}
],
"url": "https://www.zappos.com/p/womens-hoka-clifton-10/product/9984297",
"source_url": "https://www.zappos.com/product/9984297/color/1112488",
"fetched_at": "2026-08-10T10:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/zappos.productDetailResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | zappos.ProductDetailResponse | No | ||||
| data.arch_fit | zappos.FitFeedback | No | ||||
| data.arch_fit.most_common_answer | string | No | MostCommonAnswer and MostCommonPercentage are Zappos's own "most common answer" summary for this dimension, e.g. "Felt true to size" at 80%. | |||
| data.arch_fit.most_common_percentage | number | No | ||||
| data.arch_fit.percentages | object | No | Percentages maps each response option's own text (e.g. "Felt true to size") to the percentage of reviewers who chose it. | |||
| data.brand_name | string | No | ||||
| data.breadcrumbs | array | No | Breadcrumbs is the site's own navigation path to this product (e.g. ["shoes", "sneakers & athletic shoes", "adidas Outdoor"]). | |||
| data.category | string | No | ||||
| data.color | string | No | ||||
| data.color_id | string | No | ||||
| data.color_variants | array | No | ColorVariants lists every sibling color variant of this product (including this one), each with its own price. See service.go's doc comment on where this is sourced from. | |||
| data.color_variants[].color_id | string | No | ||||
| data.color_variants[].color_name | string | No | ||||
| data.color_variants[].original_price | string | No | ||||
| data.color_variants[].percent_off | string | No | ||||
| data.color_variants[].price | string | No | ||||
| data.color_variants[].url | string | No | ||||
| data.currency_code | string | No | ||||
| data.description | string | No | ||||
| data.featured_reviews | array | No | FeaturedReviews holds Zappos's own site-selected featured reviews -- at most two (the page's own "most helpful" and "most voted" picks, deduplicated if they are the same single review) -- each with real author/date/body/rating, not the whole review corpus. See service.go's doc comment for why this differs from the JSON-LD block's own content-free review stub. | |||
| data.featured_reviews[].author | string | No | ||||
| data.featured_reviews[].body | string | No | ||||
| data.featured_reviews[].comfort_rating | number | No | ||||
| data.featured_reviews[].date | string | No | ||||
| data.featured_reviews[].id | string | No | ||||
| data.featured_reviews[].look_rating | integer | No | ||||
| data.featured_reviews[].overall_rating | integer | No | ||||
| data.featured_reviews[].up_votes | integer | No | ||||
| data.featured_reviews[].verified_purchase | boolean | No | ||||
| data.fetched_at | string | No | ||||
| data.images | array | No | ||||
| data.in_stock | boolean | No | ||||
| data.original_price | string | No | ||||
| data.price | string | No | ||||
| data.product_id | string | No | ||||
| data.product_name | string | No | ||||
| data.rating | number | No | ||||
| data.rating_breakdown | object | No | RatingBreakdown maps each star value ("1" through "5") to the percentage of reviewers who gave that rating. | |||
| data.rating_count | integer | No | RatingCount is the product's total review count, sourced from the page's own aggregate rating summary (not the number of entries in FeaturedReviews, which is at most 2 -- see FeaturedReviews' doc comment). | |||
| data.size_fit | object | No | SizeFit, WidthFit, and ArchFit summarize reviewer-submitted fit feedback for this product -- nil when the product has no fit-feedback data. Sourced from the same RSC "reviews" object as RatingBreakdown/ FeaturedReviews, at no extra upstream cost. See FitFeedback's doc comment. | |||
| data.size_fit.most_common_answer | string | No | MostCommonAnswer and MostCommonPercentage are Zappos's own "most common answer" summary for this dimension, e.g. "Felt true to size" at 80%. | |||
| data.size_fit.most_common_percentage | number | No | ||||
| data.size_fit.percentages | object | No | Percentages maps each response option's own text (e.g. "Felt true to size") to the percentage of reviewers who chose it. | |||
| data.source_url | string | No | ||||
| data.url | string | No | ||||
| data.width_fit | zappos.FitFeedback | No | ||||
| data.width_fit.most_common_answer | string | No | MostCommonAnswer and MostCommonPercentage are Zappos's own "most common answer" summary for this dimension, e.g. "Felt true to size" at 80%. | |||
| data.width_fit.most_common_percentage | number | No | ||||
| data.width_fit.percentages | object | No | Percentages maps each response option's own text (e.g. "Felt true to size") to the percentage of reviewers who chose it. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/zappos/product/9984297" \
-H "x-api-key: $CRAWLORA_API_KEY"