Chewy API endpoint
Returns Chewy's own specification table for up to 20 products in one call, keyed by part number -- the structured attribute list (lifestage, pet type, product type, material, made-in country, packaging type, flavor, defining size, plus long-form key-benefits and cautions copy), together with the handling and compliance flags that govern how an item ships (pharmaceutical, prescription vet-diet, frozen, refrigerated, single-tablet, gift card), its bundle structure and component SKUs, its autoship eligibility/discount and preset reorder cadence, its merchandising classification path, and the numeric category group ids it belongs to (each usable directly as chewy_category's group_id). This complements rather than repeats chewy_products and chewy_product: price, rating, images, reviews, and descriptions stay on those endpoints, and the attribute table is not available from either. Use the group parameter to return a single attribute group. Part numbers Chewy does not recognize are reported in not_found; if none of them resolve the response is a 404.
/chewy/item-attributesReturns Chewy's own specification table for up to 20 products in one call, keyed by part number, together with the handling/compliance flags, bundle structure, autoship cadence, and catalog group membership that go with each item. Sourced from a Chewy JSON API -- not DOM scraping.
Query parameters:
part_numbers -- required. Comma-separated Chewy part numbers, up to 20 per request, e.g. 52448,101143. This is the same value /chewy/product returns as part_number/parent_part_number and /chewy/category//chewy/search return as products[].part_number. Duplicates are dropped, preserving first-seen order. A non-numeric entry is a 400.group -- optional. Return only attributes in one attribute group. One of DEFINING, STANDARD, EXTENDED, HIDDEN. Omit for every group. Any other value is a 400.The four group values mean:
DEFINING -- the attributes that distinguish one variant of a product from another, e.g. Size.STANDARD -- the common descriptive attributes: lifestage, pet type, product type, material, made-in country, packaging type, flavor.EXTENDED -- long-form copy, e.g. KeyBenefits and Cautions.HIDDEN -- merchandising-internal attributes, e.g. Brand, campaign tags.Notable response behavior:
items[].attributes[] is the structured specification table. Each entry has an identifier (Chewy's own attribute key, e.g. LitterMaterial, Lifestage, MadeIn, KeyBenefits), its group and usage, and one or more values. An attribute can carry several values -- Lifestage is commonly ["All Lifestages", "Adult"]. A typical SKU returns 25-35 attributes.is_pharmaceutical, is_vet_diet, is_frozen, is_refrigerated, is_single_tablet, is_gift_card -- govern how an item ships and whether it needs veterinary authorization. is_vet_diet is true for prescription-diet foods. These are omitted when false.items[].category_group_ids is the list of numeric category group ids the item belongs to. Each is directly usable as /chewy/category's group_id, so this is a reverse index from a SKU back to every category listing that contains it.items[].merch_class_identifiers is Chewy's merchandising classification path, e.g. ["f2-cat-consumables", "f2-cat-consumables-litter", ...], ordered broad to narrow.items[].preset_frequency is the item's default autoship cadence, e.g. {"unit":"WEEK","value":5}. unit is one of DAY, WEEK, MONTH.is_bundle plus bundle_items[] listing the component SKUs; is_bundle_multi_sku and is_bundle_same_sku distinguish the two bundle kinds.not_found rather than as null entries -- upstream silently drops them. If none of the requested part numbers resolve, the response is a 404.| Field | Filled in, of 2 checked | Values in the sample |
|---|---|---|
| part_number | 2 | 52,448 to 101,143, median 52,448 |
| entry_id | 2 | |
| name | 2 | “Lavender Scented Clumping Corn Cat Litter, 28-lb bag” and 1 other value |
| brand | 2 | “World's Best” and 1 other value |
| gtin | 2 | |
| is_published | 2 | true in 2 of 2 |
| is_autoship_allowed | 2 | true in 2 of 2 |
| autoship_discount_pct | 2 | 5 |
| preset_frequency | 2 | |
| merch_class_identifiers | 2 | median 3 entries |
| category_group_ids | 2 | |
| attributes | 2 | median 27 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| part_numbers | string | Yes | Comma-separated Chewy part numbers, up to 20 per request, e.g. \ | 52448,101143 | |
| group | string | No | Return only attributes in one group. One of DEFINING, STANDARD, EXTENDED, HIDDEN. Omit for every group. Allowed values: DEFINING, STANDARD, EXTENDED, HIDDEN. | STANDARD | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/chewy/item-attributes?part_numbers=52448%2C101143&group=DEFINING" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"count": 1,
"not_found": [
"99999999999"
],
"items": [
{
"part_number": "52448",
"entry_id": "37591",
"name": "Lavender Scented Clumping Corn Cat Litter, 28-lb bag",
"brand": "World's Best",
"gtin": "322591001700",
"is_published": true,
"is_autoship_allowed": true,
"autoship_discount_pct": 5,
"preset_frequency": {
"unit": "WEEK",
"value": 5
},
"merch_class_identifiers": [
"f2-cat-consumables",
"f2-cat-consumables-litter"
],
"category_group_ids": [
"10016",
"2731",
"411"
],
"attributes": [
{
"identifier": "Size",
"name": "Size",
"group": "DEFINING",
"usage": "DEFINING",
"displayable": true,
"values": [
{
"id": 1,
"value": "28-lb bag"
}
]
},
{
"identifier": "LitterMaterial",
"name": "Litter Material",
"group": "STANDARD",
"usage": "DESCRIPTIVE",
"displayable": true,
"values": [
{
"id": 2,
"value": "Corn"
}
]
}
]
}
],
"source_url": "https://www.chewy.com/api/subscriptions/graphql",
"fetched_at": "2026-09-06T10:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/chewy.itemAttributesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | chewy.ItemAttributesResponse | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.items | array | No | ||||
| data.items[].attributes | array | No | ||||
| data.items[].attributes[].displayable | boolean | No | ||||
| data.items[].attributes[].group | string | No | STANDARD | |||
| data.items[].attributes[].identifier | string | No | LitterMaterial | |||
| data.items[].attributes[].name | string | No | Litter Material | |||
| data.items[].attributes[].usage | string | No | DESCRIPTIVE | |||
| data.items[].attributes[].values | array | No | ||||
| data.items[].attributes[].values[].id | integer | No | 1234 | |||
| data.items[].attributes[].values[].value | string | No | Adult | |||
| data.items[].autoship_discount_pct | number | No | 5 | |||
| data.items[].brand | string | No | World's Best | |||
| data.items[].bundle_items | array | No | ||||
| data.items[].bundle_items[].name | string | No | ||||
| data.items[].bundle_items[].part_number | string | No | 101143 | |||
| data.items[].bundle_title | string | No | ||||
| data.items[].category_group_ids | array | No | ||||
| data.items[].entry_id | string | No | 37591 | |||
| data.items[].gtin | string | No | 322591001700 | |||
| data.items[].is_autoship_allowed | boolean | No | Autoship. | |||
| data.items[].is_bundle | boolean | No | Bundle structure. | |||
| data.items[].is_bundle_multi_sku | boolean | No | ||||
| data.items[].is_bundle_same_sku | boolean | No | ||||
| data.items[].is_discontinued | boolean | No | ||||
| data.items[].is_frozen | boolean | No | ||||
| data.items[].is_gift_card | boolean | No | ||||
| data.items[].is_pharmaceutical | boolean | No | Handling and compliance flags. These drive how an order ships and whether it needs vet authorization -- none of them are exposed by any other endpoint in this family. | |||
| data.items[].is_published | boolean | No | ||||
| data.items[].is_refrigerated | boolean | No | ||||
| data.items[].is_single_tablet | boolean | No | ||||
| data.items[].is_vet_diet | boolean | No | ||||
| data.items[].merch_class_identifiers | array | No | Catalog membership -- the merchandising classification path and the numeric category group ids this SKU belongs to. The group ids feed straight back into chewy_category's group_id. | |||
| data.items[].name | string | No | Lavender Scented Clumping Corn Cat Litter, 28-lb bag | |||
| data.items[].part_number | string | No | 52448 | |||
| data.items[].preset_frequency | chewy.ItemFrequency | No | ||||
| data.items[].preset_frequency.unit | string | No | WEEK | |||
| data.items[].preset_frequency.value | integer | No | 5 | |||
| data.not_found | array | No | ||||
| data.source_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/chewy/item-attributes?part_numbers=52448%2C101143&group=DEFINING" \
-H "x-api-key: $CRAWLORA_API_KEY"