Lululemon API endpoint
Returns one lululemon product's full detail: every purchasable color/size SKU with its own price, sale status, and live availability, plus an aggregate rating and real customer reviews when the product has any -- none of which lululemon-category exposes (it only carries one representative color/price per product). product_id is the id from a lululemon-category result's id field or a lululemon product URL's trailing path segment (https://shop.lululemon.com/p/{slug}/{product_id}) -- the slug itself is not needed. An unrecognized product_id returns 404.
/lululemon/product/{product_id}Notable response behavior:
skus[] is one entry per purchasable color/size combination, each with its own price, on_sale/sale_price, and live available status -- unlike lululemon-category, which only carries one representative color/price for the whole product.colors[] is the product-level color palette (code, name, swatch image); per-color/per-size price and availability live on skus[], not nested here.rating is present only when the product has at least one review; a product with none omits it entirely rather than sending a zero value.reviews[].badge is a display label (e.g. "Sweat Collective member", "lululemon team"), not a personal name -- lululemon does not expose reviewer nicknames through this data.reviews[].fit and reviews[].size_purchased, when present, are fit feedback the reviewer left alongside their review text.product_id returns 404. A malformed product_id returns 400 before any upstream request is made.| Field | Filled in, of 54 checked | Values in the sample |
|---|---|---|
| id | 54 | |
| size | 54 | S (9), M (9), XXS (9) and 3 more |
| color_code | 54 | |
| color_name | 54 | “Raspberry Rave” and 8 other values |
| style_id | 54 | |
| price | 54 | 118 |
| on_sale | 54 | true in 0 of 54 |
| available | 54 | true in 53 of 54 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| product_id (path) | string | Yes | lululemon product id, from a lululemon-category result's id field | lt5o6p8kho | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/lululemon/product/lt5o6p8kho" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"product_id": "lt5o6p8kho",
"unified_id": "Scuba-Evolve-Straight-Leg-Pant-Regular",
"name": "Scuba Evolve Straight-Leg Pant *Regular",
"url": "https://shop.lululemon.com/p/scuba-evolve-straight-leg-pant-regular/lt5o6p8kho",
"description": "An evolution of our Scuba collection, cut from SuperLoft Light fabric.",
"category": "Sweatpants",
"category_id": "womens-sweatpants",
"currency": "USD",
"price": 118,
"on_sale": false,
"gender": [
"Women"
],
"activities": [
"Casual",
"Lounge"
],
"sizes": [
"XXS",
"XS",
"S",
"M",
"L",
"XL"
],
"highlights": [
"Trending"
],
"colors": [
{
"code": "0001",
"name": "Black",
"swatch_url": "https://images.lululemon.com/is/image/lululemon/0001"
},
{
"code": "77007",
"name": "Raspberry Rave",
"swatch_url": "https://images.lululemon.com/is/image/lululemon/77007"
}
],
"skus": [
{
"id": "159399680",
"url": "https://shop.lululemon.com/p/scuba-evolve-straight-leg-pant-regular/lt5o6p8kho?color=LW5JKOS-077007&skuId=159399680",
"size": "M",
"color_code": "77007",
"color_name": "Raspberry Rave",
"style_id": "LW5JKOS-077007",
"style_number": "LW5JKOS",
"price": 118,
"on_sale": false,
"available": true
}
],
"rating": {
"value": 4.5,
"count": 2
},
"reviews": [
{
"id": "264791222",
"title": "Great",
"body": "These are great, fit larger than the previous version.",
"rating": 5,
"badge": "Sweat Collective member",
"fit": "Runs large",
"size_purchased": "Medium",
"submitted_at": "2026-08-13T19:19:09.000+00:00"
}
],
"source_url": "https://shop.lululemon.com/p/product/lt5o6p8kho?format=json&locale=en_US&sl=US",
"fetched_at": "2026-08-14T07:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/lululemon.productDetailResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | lululemon.ProductDetailResponse | No | ||||
| data.activities | array | No | ||||
| data.category | string | No | ||||
| data.category_id | string | No | ||||
| data.colors | array | No | ||||
| data.colors[].code | string | No | ||||
| data.colors[].name | string | No | ||||
| data.colors[].swatch_url | string | No | ||||
| data.currency | string | No | ||||
| data.description | string | No | ||||
| data.fetched_at | string | No | ||||
| data.gender | array | No | ||||
| data.highlights | array | No | ||||
| data.name | string | No | ||||
| data.on_sale | boolean | No | ||||
| data.price | number | No | ||||
| data.product_id | string | No | ||||
| data.rating | lululemon.ProductDetailRating | No | ||||
| data.rating.count | integer | No | ||||
| data.rating.value | number | No | ||||
| data.reviews | array | No | ||||
| data.reviews[].badge | string | No | ||||
| data.reviews[].body | string | No | ||||
| data.reviews[].fit | string | No | ||||
| data.reviews[].id | string | No | ||||
| data.reviews[].rating | number | No | ||||
| data.reviews[].size_purchased | string | No | ||||
| data.reviews[].submitted_at | string | No | ||||
| data.reviews[].title | string | No | ||||
| data.reviews[].verified_buyer | boolean | No | ||||
| data.sizes | array | No | ||||
| data.skus | array | No | ||||
| data.skus[].available | boolean | No | ||||
| data.skus[].color_code | string | No | ||||
| data.skus[].color_name | string | No | ||||
| data.skus[].id | string | No | ||||
| data.skus[].on_sale | boolean | No | ||||
| data.skus[].price | number | No | ||||
| data.skus[].sale_price | number | No | ||||
| data.skus[].size | string | No | ||||
| data.skus[].style_id | string | No | ||||
| data.skus[].style_number | string | No | ||||
| data.skus[].url | string | No | ||||
| data.source_url | string | No | ||||
| data.unified_id | string | No | ||||
| data.url | string | No | ||||
| 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/lululemon/product/lt5o6p8kho" \
-H "x-api-key: $CRAWLORA_API_KEY"