Macy's API endpoint
Returns one Macy's product's full detail: name, brand, description, department/division, category breadcrumb, pricing (with sale detection), availability, images, aggregate rating, and every purchasable color variant with its own price. productId is a numeric id, taken from a Macy's product page's ?ID= query parameter.
/macys/product/{productId}productId is required and is a numeric id, taken from a Macy's product page's ?ID= query parameter (e.g. 20518101 from https://www.macys.com/shop/product/champs-onyx-collection-toiletry-bag?ID=20518101).
Notable response behavior:
regular_price and current_price are both the full price when the product is not on sale, and diverge when on_sale is true (current_price is what a shopper actually pays).colors lists every purchasable color of the base product, each with its own regular_price/current_price/on_sale -- colors can be priced or on sale independently of each other and of the product-level price. A product with no color axis (single-SKU) returns an empty colors array.rating and review_count are the product's aggregate review statistics; both are 0 when the product has no reviews yet.images is the product's full image gallery as absolute URLs.productId returns 404. A non-numeric or missing productId returns 400 before any upstream request is made.| Field | In the sample | Value in the sample |
|---|---|---|
| product_id | Has a value | |
| name | Has a value | “Onyx Collection Toiletry Bag” |
| brand | Has a value | “CHAMPS” |
| description | Has a value | 513 characters |
| bullet_points | Has a value | 14 entries |
| department_name | Has a value | “TRADITIONAL LUGGAGE” |
| division_name | Has a value | “LUGGAGE” |
| categories | Has a value | 1 entry |
| available | Has a value | true |
| low_availability | Has a value | false |
| currency_code | Has a value | |
| regular_price | Has a value | 99.99 |
| current_price | Has a value | 99.99 |
| on_sale | Has a value | false |
| rating | Has a value | 4 |
| review_count | Has a value | 4 |
| images | Has a value | 8 entries |
| colors | Has a value | 3 entries |
| url | Has a value | macys.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| productId (path) | string | Yes | Numeric Macy's product id, from a product page's ?ID= query parameter | 20518101 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/macys/product/20518101" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"product_id": "20518101",
"name": "Onyx Collection Toiletry Bag",
"brand": "CHAMPS",
"description": "Introducing the Toiletry Bag from the Onyx Collection...",
"bullet_points": [
"Approximate dimensions: 11\" L x 4.25\" W x 6.25\" H",
"3-way zip closure for easy, versatile access and added security."
],
"department_name": "TRADITIONAL LUGGAGE",
"division_name": "LUGGAGE",
"categories": [
"Upright Luggage"
],
"available": true,
"low_availability": false,
"currency_code": "USD",
"regular_price": 99.99,
"current_price": 39.99,
"on_sale": true,
"rating": 4,
"review_count": 4,
"images": [
"https://slimages.macysassets.com/is/image/MCY/products/2/optimized/31299222_fpx.tif"
],
"colors": [
{
"id": "9824974",
"name": "Black",
"regular_price": 99.99,
"current_price": 39.99,
"on_sale": true
}
],
"url": "https://www.macys.com/shop/product/champs-onyx-collection-toiletry-bag?ID=20518101"
}
}Request schema
No body schema
Response schema
#/definitions/macys.productDetailResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | macys.ProductDetailResponse | No | ||||
| data.available | boolean | No | ||||
| data.brand | string | No | ||||
| data.bullet_points | array | No | ||||
| data.categories | array | No | ||||
| data.colors | array | No | ||||
| data.colors[].current_price | number | No | ||||
| data.colors[].id | string | No | ||||
| data.colors[].name | string | No | ||||
| data.colors[].on_sale | boolean | No | ||||
| data.colors[].regular_price | number | No | ||||
| data.currency_code | string | No | ||||
| data.current_price | number | No | ||||
| data.department_name | string | No | ||||
| data.description | string | No | ||||
| data.division_name | string | No | ||||
| data.fetched_at | string | No | ||||
| data.images | array | No | ||||
| data.low_availability | boolean | No | ||||
| data.name | string | No | ||||
| data.on_sale | boolean | No | ||||
| data.product_id | string | No | ||||
| data.rating | number | No | ||||
| data.regular_price | number | No | ||||
| data.review_count | integer | No | ||||
| data.source_url | 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/macys/product/20518101" \
-H "x-api-key: $CRAWLORA_API_KEY"