Wayfair API endpoint
Returns one Wayfair product's full detail: name, brand, price, stock status, aggregate rating with a 1-5 star breakdown, images, every selectable variant option (e.g. color, finish), and site-selected feature highlights. id is the product's own "W"-prefixed id (e.g. W100794312), taken from a category result's product_id field or a product page's URL. An unrecognized id returns 404.
/wayfair/product/{id}Notable response behavior:
stock_message is Wayfair's own inventory status text (e.g. "795 Left in Stock"), surfaced verbatim since it is more informative than the plain in_stock boolean alone.rating_breakdown maps each star value "1" through "5" to the number of reviews with that rating. Individual review text is not available from this endpoint -- only the aggregate rating, review count, and histogram.selected_color is the color variant this page rendered; kept for backward compatibility alongside the richer variant_categories below.variant_categories lists every variant dimension the product offers (e.g. "Base Finish", "Upholstery Color", "Cord Color") with every one of its options -- not just the one option selected_color names. Each option has name, selected (whether this page's own URL rendered it), available (false when the option cannot be combined with the product's other currently-selected choices, or is itself out of stock), and image_url when a swatch thumbnail exists. A product with a single variant dimension returns one entry; a product with no variant options returns an empty list.highlights are Wayfair's own site-selected feature bullets (its "Why We Love It" section) -- the closest available substitute for a marketing description; a product without this section returns an empty list.original_price equals price when the product is not discounted.id returns 404. A malformed id (missing the W prefix) returns 400 before any upstream request is made.| Field | In the sample | Value in the sample |
|---|---|---|
| product_id | Has a value | |
| product_name | Has a value | “Aguilera Drusilla Ergonomic Mesh Task Chair” |
| price | Has a value | 78.99 |
| original_price | Has a value | 78.99 |
| currency_code | Has a value | |
| in_stock | Has a value | true |
| stock_message | Has a value | “207 Left in Stock” |
| rating | Has a value | 4.72 |
| rating_count | Has a value | 1,031 |
| rating_breakdown | Has a value | |
| images | Has a value | 11 entries |
| selected_color | Has a value | “Black” |
| variant_categories | Has a value | 1 entry |
| highlights | Has a value | 3 entries |
| url | Has a value | wayfair.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id (path) | string | Yes | Wayfair product id, starting with W | W100794312 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/wayfair/product/W100794312" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"product_id": "W100794312",
"product_name": "Drusilla Ergonomic Mesh Task Chair",
"brand_name": "Ebern Designs",
"price": "77.99",
"original_price": "77.99",
"currency_code": "USD",
"in_stock": true,
"stock_message": "795 Left in Stock",
"rating": 4.72,
"rating_count": 994,
"rating_breakdown": {
"1": 16,
"2": 10,
"3": 41,
"4": 106,
"5": 821
},
"images": [
"https://assets.wfcdn.com/im/1/resize-h1000-w1000%5Ecompr-r85/2582/258279464/image.jpg"
],
"selected_color": "Black",
"variant_categories": [
{
"name": "Upholstery Color",
"options": [
{
"name": "Black",
"selected": true,
"available": true,
"image_url": "https://assets.wfcdn.com/im/1/resize-h1000-w1000%5Ecompr-r85/1777/177771000/image.jpg"
},
{
"name": "Orange",
"selected": false,
"available": false,
"image_url": "https://assets.wfcdn.com/im/1/resize-h1000-w1000%5Ecompr-r85/2207/220782779/image.jpg"
}
]
}
],
"highlights": [
"This height-adjustable seat makes it easier to find a comfortable sitting position",
"The breathable mesh back promotes airflow for cooler comfort through the workday",
"Those smooth-rolling casters glide easily for convenient movement around your workspace"
],
"url": "https://www.wayfair.com/pdp/product-W100794312.html",
"source_url": "https://www.wayfair.com/pdp/product-W100794312.html",
"fetched_at": "2026-08-10T10:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/wayfair.productDetailResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | wayfair.ProductDetailResponse | No | ||||
| data.brand_name | string | No | ||||
| data.currency_code | string | No | ||||
| data.fetched_at | string | No | ||||
| data.highlights | array | No | Highlights are Wayfair's own site-selected feature bullets (its "Why We Love It" section), the closest available substitute for a marketing description -- a distinct marketing description field was not found in the page's initial data. | |||
| data.images | array | No | Images lists every distinct product image found on the page. | |||
| 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 number of reviews with that rating. | |||
| data.rating_count | integer | No | RatingCount is the product's total review count, sourced from the page's own aggregate rating summary. | |||
| data.selected_color | string | No | SelectedColor is the color variant this page rendered (from its own URL/piid) -- kept for backward compatibility. VariantCategories below covers every variant dimension's full option list, not just the one selected color. | |||
| data.source_url | string | No | ||||
| data.stock_message | string | No | StockMessage is Wayfair's own inventory status text (e.g. "795 Left in Stock"), surfaced verbatim since it is more informative than a plain boolean. | |||
| data.url | string | No | ||||
| data.variant_categories | array | No | VariantCategories lists every variant dimension this product offers (e.g. "Base Finish", "Upholstery Color", "Cord Color") with every one of its options -- not just the single option SelectedColor covers. Each option's Available reflects both whether it can be selected together with the product's other currently-selected variant choices and, when known, its own stock status -- confirmed live 2026-08-11 against Wayfair's own PDP data (see service.go's doc comment). | |||
| data.variant_categories[].name | string | No | ||||
| data.variant_categories[].options | array | No | ||||
| data.variant_categories[].options[].available | boolean | No | Available is false when this option cannot be selected together with the product's other currently-selected variant choices, or (when its stock status is known) when it is itself out of stock. | |||
| data.variant_categories[].options[].image_url | string | No | ||||
| data.variant_categories[].options[].name | string | No | ||||
| data.variant_categories[].options[].selected | boolean | No | Selected is true for the option this page's own URL/piid rendered (the same option SelectedColor names, for whichever category it belongs to). | |||
| 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/wayfair/product/W100794312" \
-H "x-api-key: $CRAWLORA_API_KEY"