Chewy API endpoint
Returns one page (36 products) of a Chewy category/browse listing's product grid (price, autoship price/discount, stock, rating, images), plus embedded facets and breadcrumbs. group_id is Chewy's own numeric category id -- the trailing id segment of a chewy.com/b/<slug>-<id> browse URL, e.g. 294 for /b/dry-food-294. Every breadcrumbs[].group_id and facets[].options[].value in a response is a ready-to-use group_id for a follow-up call, so a caller can discover the full category taxonomy starting from a known category. A group_id Chewy does not recognize returns a 404 rather than an unfiltered listing. sort and filter narrow/reorder the listing; every facets[].value paired with one of that facet's options[].value from any prior response is a valid filter key:value pair (e.g. brand, breed size, flavor, price range, customer rating -- whichever facets that category exposes). Set include_content to also return the category's curated editorial content -- Chewy's own FAQ question/answer pairs, the rich category description, and the SEO page title and meta description; it costs no extra upstream call and is omitted entirely when not requested. A keyword search carries none of this content, so it is a category-only addition.
/chewy/categoryReturns one page (36 products) of a Chewy category/browse listing's product grid: price, autoship price/discount, stock, rating, images, plus embedded facets and breadcrumbs for discovering further categories. Sourced from chewy.com's own client-side plp/api/search JSON API -- not DOM scraping.
sort is one of byRelevance, byNewest, byPopularity, byLowestPrice, byHighestPrice, byRating, byRatingCount. Omit it to use Chewy's own relevance ordering.filter is repeatable, up to 10 values. Each value is "key:value" -- pair a response's own facets[].value (e.g. "brand_facet", "price_d") with one of that facet's options[].value (e.g. "ACANA", "1"). Multiple filter values combine as AND. Discover the valid key/value pairs for a given category from that category's own facets[] in a prior response -- the facet dimensions vary by category (brand, breed size, flavor, product weight, special diet, health feature, price range, customer rating, and more).include_content -- optional boolean, defaults to false. Also return the category's curated editorial content. Costs no extra upstream call (it is already carried in the same response) and is omitted entirely when not requested, so the default payload is unchanged.Notable response behavior:
page (1-based, defaults to 1). total is the category's total result count across all pages (after any filter is applied).breadcrumbs[].group_id and facets[].options[].value in a response is a ready-to-use group_id for a follow-up call -- this is how a caller discovers the full category taxonomy, starting from a known category and following its breadcrumbs/facets.group_id Chewy does not recognize at all returns a 404 rather than an unfiltered listing.autoship_price/autoship_discount_pct reflect Chewy's Autoship subscribe-and-save program; both are omitted when the product isn't Autoship-eligible.strike_price is present only when the product has a struck-through list price above its current price.When include_content=true, the response carries an extra content object:
content.faqs[] -- Chewy's own curated question/answer pairs for the category (e.g. 5 on group_id=294, 4 on 411). Ordered by Chewy's own sequence, not array order.content.description -- the rich category description shown on the page (typically 1-2KB of prose).content.page_title / content.meta_description -- the category's SEO title and meta description.content is omitted entirely when the category has none. Model-generated related-search chips carried in the same upstream array are deliberately not surfaced here./chewy/search) carries none of this content -- it is category-scoped only.| Field | Filled in, of 36 checked | Values in the sample |
|---|---|---|
| part_number | 36 | 46,861 to 5,245,126, median 143,259 |
| parent_part_number | 36 | 45,061 to 5,245,110, median 87,772 |
| name | 36 | “Pedigree Complete Nutrition Grilled Steak & Vegetable Flavo…” and 35 other values |
| manufacturer | 36 | “Pedigree” and 20 other values |
| url | 36 | chewy.com |
| image_url | 36 | image.chewy.com |
| currency_code | 36 | |
| price | 36 | 17.84 to 77.48, median 51.99 |
| strike_price | 23 | 19.48 to 79.99, median 55.99 |
| is_autoship_allowed | 36 | true in 36 of 36 |
| in_stock | 36 | true in 36 of 36 |
| is_deal | 2 | true in 2 of 2 |
| rating | 34 | 4.05 to 4.78, median 4.63 |
| rating_count | 34 | 27 to 23,425, median 5,608 |
| has_more_choices | 33 | true in 33 of 33 |
| thumbnail_urls | 36 | median 8 entries |
| autoship_price | 29 | 16.95 to 73.61, median 54.14 |
| autoship_discount_pct | 29 | 5% in all 29 |
| is_chewy_exclusive | 3 | true in 3 of 3 |
| is_new | 2 | true in 2 of 2 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| group_id | string | Yes | Chewy's numeric category id, e.g. \ | 294 | |
| page | integer | No | Page number, 36 products per page (default 1) | 1 | |
| sort | string | No | Chewy's own relevance ordering when omitted | Sort order. One of byRelevance, byNewest, byPopularity, byLowestPrice, byHighestPrice, byRating, byRatingCount. Defaults to Chewy's own relevance ordering when omitted. Allowed values: byRelevance, byNewest, byPopularity, byLowestPrice, byHighestPrice, byRating, byRatingCount. | byRating |
| filter | array<string> | No | Repeatable, up to 10. Each value is \ | brand_facet:ACANA | |
| include_content | boolean | No | Also return the category's curated editorial content -- Chewy's own FAQ question/answer pairs, the rich category description, and the SEO page title/meta description. Costs no extra upstream call. Omitted entirely when false (the default). | true | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/chewy/category?group_id=294&page=1&sort=byRelevance&include_content=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"group_id": "294",
"name": "Dry Food",
"page": 1,
"page_size": 36,
"total": 2185,
"count": 1,
"products": [
{
"part_number": "4238414",
"parent_part_number": "4238390",
"name": "Nutri-Choice Advantage Salmon & Pea Dry Dog Food, 3.5-lb bag",
"manufacturer": "Nutri-Choice Advantage",
"url": "https://www.chewy.com/nutri-choice-advantage-salmon-pea-dry/dp/4238414",
"image_url": "https://image.chewy.com/catalog/general/images/moe/06a16c4a.jpg",
"currency_code": "USD",
"price": 8.99,
"autoship_price": 8.54,
"autoship_discount_pct": "5%",
"is_autoship_allowed": true,
"in_stock": true,
"is_new": true,
"has_more_choices": true,
"rating": 4.6,
"rating_count": 12
}
],
"facets": [
{
"name": "Category",
"value": "categoryId",
"options": [
{
"name": "Adult",
"display_label": "Adult Dry Dog Food",
"value": "11098",
"url_slug": "adult-dry-dog-food",
"product_count": 64
}
]
}
],
"breadcrumbs": [
{
"group_id": "288",
"url_slug": "dog",
"text": "Dog Supplies"
},
{
"group_id": "332",
"url_slug": "food",
"text": "Dog Food"
}
],
"source_url": "https://www.chewy.com/plp/api/search?catalogId=1004&groupId=294&count=36&from=0",
"fetched_at": "2026-08-20T10:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/chewy.categoryResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | chewy.CategoryResponse | No | ||||
| data.breadcrumbs | array | No | ||||
| data.breadcrumbs[].group_id | string | No | 332 | |||
| data.breadcrumbs[].text | string | No | Dog Food | |||
| data.breadcrumbs[].url_slug | string | No | food | |||
| data.content | chewy.CategoryContent | No | ||||
| data.content.description | string | No | ||||
| data.content.faqs | array | No | ||||
| data.content.faqs[].answer | string | No | ||||
| data.content.faqs[].question | string | No | How much dry dog food should I feed my dog? | |||
| data.content.meta_description | string | No | ||||
| data.content.page_title | string | No | Dry Dog Food - Healthy, High Quality Dog Food from Top Brands | |||
| data.count | integer | No | ||||
| data.facets | array | No | CategoryFacet record, 8 fields: name, options, value. Described under Search Chewy by keyword API. | |||
| data.fetched_at | string | No | ||||
| data.group_id | string | No | 294 | |||
| data.name | string | No | Dry Food | |||
| data.page | integer | No | 1 | |||
| data.page_size | integer | No | 36 | |||
| data.products | array | No | CategoryProduct record, 20 fields: autoship_discount_pct, autoship_price, currency_code, has_more_choices, image_url, in_stock, is_autoship_allowed, is_chewy_exclusive, is_deal, is_new, manufacturer, name and 8 more. Described under Search Chewy by keyword API. | |||
| data.source_url | string | No | ||||
| data.total | integer | No | 2185 | |||
| 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/category?group_id=294&page=1&sort=byRelevance&include_content=true" \
-H "x-api-key: $CRAWLORA_API_KEY"