J.Crew API endpoint
Returns one page (up to 60 products) of a category/browse listing for a category path. category is the slash-separated path segment after the storefront's own /plp/ (e.g. womens/categories/clothing/sweaters) -- use jcrew-categories to discover every valid value instead of guessing from storefront URLs. site selects the storefront (default jcrew). page selects the SFCC-native page (default 1); result_count reports the upstream's true total regardless of page size. A hub-level (non-leaf) category path returns a well-formed empty result rather than an error.
/jcrew/categorycategory is required: the slash-separated path segment after the storefront's own /plp/, found from the storefront's own category page URLs (e.g. https://www.jcrew.com/plp/womens/categories/clothing/sweaters -> womens/categories/clothing/sweaters) -- or use jcrew-categories to discover every valid value instead of guessing. site selects the storefront and accepts jcrew or factory; defaults to jcrew. page is one-based and defaults to 1.
Notable response behavior:
result_count reports the true total and total_pages is computed from it at the upstream's fixed 60-per-page size.womens/categories/clothing, returns a well-formed empty result (count: 0) rather than an error -- those pages render subcategory tiles instead of a product listing, and there is no reliable marker to distinguish that from a genuinely empty leaf category.price/currency on each product always reflect J.Crew's own US pricing in USD, regardless of the requester's own location. On the rare chance the US price can't be determined, a price in a different currency is converted to USD using an approximate, periodically-refreshed exchange rate instead.id is the value to pass as pid to jcrew-product, jcrew-product-reviews, or jcrew-size-chart (with the same site).| Field | Filled in, of 60 checked | Values in the sample |
|---|---|---|
| id | 60 | |
| name | 60 | “Cashmere sweater-polo in stripe” and 35 other values |
| default_color_code | 60 | |
| color_codes | 60 | median 9 entries |
| price | 60 | 98 to 198, median 128 |
| currency | 60 | USD in all 60 |
| badge | 60 | new (41), new color (18), top rated (1) |
| url | 60 | jcrew.com |
| family_id | 49 | |
| average_rating | 14 | 1 to 4.83, median 4.74 |
| review_count | 14 | 1 to 542, median 61 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category | string | Yes | Slash-separated category path -- see jcrew-categories | womens/categories/clothing/sweaters | |
| site | string | No | Storefront to browse Allowed values: jcrew, factory. | ||
| page | integer | No | One-based page Minimum: 1. Maximum: 50. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/jcrew/category?category=womens%2Fcategories%2Fclothing%2Fsweaters&site=jcrew&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"category": "womens/categories/clothing/sweaters",
"site": "jcrew",
"label": "sweaters",
"gender": "Women",
"page": 1,
"result_count": 142,
"total_pages": 3,
"count": 1,
"products": [
{
"id": "CX432",
"family_id": "MQ186",
"name": "Rollneck reversible cardigan",
"default_color_code": "PR5252",
"color_codes": [
"SX0172",
"SX0001",
"PR5252",
"NA6434",
"GR6794",
"BL8133",
"BK0001"
],
"price": 1193,
"currency": "USD",
"badge": "new color",
"average_rating": 4.73,
"review_count": 52,
"url": "https://www.jcrew.com/p/womens/categories/clothing/sweaters/cardigan/rollnecktrade-reversible-cardigan/MQ186"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/jcrew.categoryResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | jcrew.CategoryResponse | No | ||||
| data.category | string | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.gender | string | No | ||||
| data.label | string | No | ||||
| data.page | integer | No | ||||
| data.products | array | No | ||||
| data.products[].average_rating | number | No | ||||
| data.products[].badge | string | No | ||||
| data.products[].color_codes | array | No | ||||
| data.products[].currency | string | No | ||||
| data.products[].default_color_code | string | No | ||||
| data.products[].discount_max_percent | integer | No | ||||
| data.products[].discount_min_percent | integer | No | ||||
| data.products[].family_id | string | No | ||||
| data.products[].id | string | No | ||||
| data.products[].name | string | No | ||||
| data.products[].price | number | No | ||||
| data.products[].review_count | integer | No | ||||
| data.products[].url | string | No | ||||
| data.result_count | integer | No | ||||
| data.site | string | No | ||||
| data.source_url | string | No | ||||
| data.total_pages | integer | No | TotalPages is computed from ResultCount at the upstream's own fixed 60-per-page size. | |||
| 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/jcrew/category?category=womens%2Fcategories%2Fclothing%2Fsweaters&site=jcrew&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"