Lululemon API endpoint
Returns lululemon's own curated outfit/style recommendations for one product color: every complementary item in each styled look, plus the anchor product itself. unified_id and color_code are lululemon-product's own unified_id response field and a color's code field (from lululemon-product's colors[] or lululemon-category's style_numbers-paired colors[]) -- not lululemon-product's own product_id, which is a different id space. Recommended items' own id is a separate, third-party catalog id (not lululemon-product's product_id) -- use each item's url to reach its product page. An unrecognized unified_id/color_code pair returns 404.
/lululemon/outfitReturns lululemon's own curated outfit/style recommendations for one product color, sourced from its third-party (findmine.com-powered) outfitting service: every complementary item in each styled look, plus the anchor product itself.
unified_id is required and is lululemon-product's own unified_id response field (e.g. Scuba-Relaxed-Half-Zip-Colourblock) -- not lululemon-product's product_id, which is a different id space. color_code is required and is a color's code field from lululemon-product's colors[].
Notable response behavior:
item.id and looks[].items[].id are FindMine's own catalog ids (e.g. prod11870949), not lululemon-product's product_id -- confirmed these do not round-trip through lululemon-product. Use each item's url to reach its own product page, not id.item is the anchor product this outfit was built around (echoing the unified_id/color_code input); looks[] are the recommended complementary items, grouped by curated look.currency is hardcoded to USD -- this endpoint only queries the US storefront.looks array rather than an error.unified_id/color_code pair returns 404.| Field | Filled in, of 2 checked | Values in the sample |
|---|---|---|
| id | 2 | |
| items | 2 | median 3 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| unified_id | string | Yes | lululemon product unified id, from a lululemon-product result's unified_id field | Scuba-Relaxed-Half-Zip-Colourblock | |
| color_code | string | Yes | lululemon color code, from a lululemon-product result's colors[].code field | 79895 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/lululemon/outfit?unified_id=Scuba-Relaxed-Half-Zip-Colourblock&color_code=79895" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"unified_id": "Scuba-Relaxed-Half-Zip-Colourblock",
"color_code": "79895",
"item": {
"id": "adf2c3ab-194e-4004-b063-84691cfae3c1",
"title": "Scuba Relaxed Half-Zip *Colourblock",
"url": "https://shop.lululemon.com/p/scuba-relaxed-half-zip-colourblock/j321dxtscf?color=79895",
"image_url": "https://pdimg-prod-fmv3.findmine.com/v3/adf2c3ab-194e-4004-b063-84691cfae3c1/6d1df7a8-5ba1-4dba-b843-ad17e37f9d0b.lg.png",
"category": "Women Apparel.Sweater.Casual",
"currency": "USD",
"list_price": 138,
"on_sale": false
},
"looks": [
{
"id": "5456783d-e77a-4429-8f92-4d3c329be4bd",
"items": [
{
"id": "10c3668f-10ed-45fc-b0c9-0ee00f78f397",
"title": "Wundermost Ultra-Soft Nulu Spaghetti-Strap Adjustable Cami",
"url": "https://shop.lululemon.com/p/women-tanks/Wundermost-USoft-Nulu-Spag-Strap-Cami-Tank-Adjust/_/prod11870949?color=0001",
"image_url": "https://pdimg-prod-fmv3.findmine.com/v3/10c3668f-10ed-45fc-b0c9-0ee00f78f397/0b9bec93-4ca1-4abb-9014-cdde6bdfe10d.0800.lg.png",
"category": "Women Apparel.Shirt.Tank Top.Full Length",
"currency": "USD",
"list_price": 48,
"on_sale": false
}
]
}
],
"source_url": "https://shop.lululemon.com/outfitting/api/v3/complete-the-look?product_color_id=79895&product_id=Scuba-Relaxed-Half-Zip-Colourblock&application=...&return_pdp_item=true®ion=US&language=en",
"fetched_at": "2026-08-14T08:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/lululemon.outfitResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | lululemon.OutfitResponse | No | ||||
| data.color_code | string | No | ||||
| data.fetched_at | string | No | ||||
| data.item | lululemon.OutfitItem | No | ||||
| data.item.category | string | No | ||||
| data.item.currency | string | No | ||||
| data.item.id | string | No | ||||
| data.item.image_url | string | No | ||||
| data.item.list_price | number | No | ||||
| data.item.on_sale | boolean | No | ||||
| data.item.sale_price | number | No | ||||
| data.item.title | string | No | ||||
| data.item.url | string | No | ||||
| data.looks | array | No | ||||
| data.looks[].id | string | No | ||||
| data.looks[].items | array | No | ||||
| data.looks[].items[].category | string | No | ||||
| data.looks[].items[].currency | string | No | ||||
| data.looks[].items[].id | string | No | ||||
| data.looks[].items[].image_url | string | No | ||||
| data.looks[].items[].list_price | number | No | ||||
| data.looks[].items[].on_sale | boolean | No | ||||
| data.looks[].items[].sale_price | number | No | ||||
| data.looks[].items[].title | string | No | ||||
| data.looks[].items[].url | string | No | ||||
| data.source_url | string | No | ||||
| data.unified_id | 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/outfit?unified_id=Scuba-Relaxed-Half-Zip-Colourblock&color_code=79895" \
-H "x-api-key: $CRAWLORA_API_KEY"