Chewy API endpoint
Returns one page of a Chewy product's customer reviews -- rating, title, body, author, submission date, helpful count, incentivized flag, and contributor badge -- with sorting and positive/negative filtering. chewy_product embeds only the first 20 reviews with no way to page past them; this endpoint reaches the whole set (products routinely carry thousands). id is the numeric id from any chewy.com PDP URL, and reviews are shared across a product's variants, so any variant's id returns the same set. total is the count for the current filter, so it drops when filter is applied, while rating_count stays the product's overall rating tally.
/chewy/product-reviews/chewy/product embeds only the first 20 reviews with no way to page past
them. This endpoint reaches the whole set; products routinely carry thousands
(9,696 on part number 767806).
Query parameters:
id -- required. The numeric id from a chewy.com PDP URL, e.g. 767806
from https://www.chewy.com/<any-slug>/dp/767806. Reviews are shared across
a product's variants, so any variant's id returns the same set.page -- optional, 1-based, defaults to 1.limit -- optional, 1 to 50, defaults to 20.sort -- optional. One of MOST_RELEVANT, NEWEST, OLDEST,
HIGHEST_RATING, LOWEST_RATING, PHOTOS. Defaults to Chewy's own
ordering when omitted.filter -- optional. One of POSITIVE (4-5 star) or NEGATIVE (1-3 star).
Omit for all reviews.Notable response behavior:
total is the review count for the current filter, so it drops when
filter is applied. rating_count stays the product's overall rating tally
and does not move with the filter.has_next_page reports whether more reviews follow the current page.reviews[].photo_urls carries any customer-submitted photos on the review. Combine with sort=PHOTOS to surface photo reviews first.part_number is the parent product's part number, which may differ from the
id you passed (that is the variant's own id).reviews array rather than an error.404; a non-numeric id, an
out-of-range limit, or an invalid sort/filter returns a 400.| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| id | 20 | |
| title | 20 | |
| text | 20 | median 485 characters |
| rating | 20 | 1 to 5, median 4 |
| submitted_by | 20 | |
| submitted_at | 20 | 2026-08-12 to 2026-10-08 |
| photo_urls | 5 | median 1 entry |
| helpful_count | 5 | 1 to 7, median 2 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | The numeric id from a chewy.com PDP URL, e.g. \ | 767806 | |
| page | integer | No | Page number, 1-based (default 1). | 1 | |
| limit | integer | No | Reviews per page, 1 to 50 (default 20). | 20 | |
| sort | string | No | Chewy's own ordering when omitted | Sort order. One of MOST_RELEVANT, NEWEST, OLDEST, HIGHEST_RATING, LOWEST_RATING, PHOTOS. Defaults to Chewy's own ordering when omitted. Allowed values: MOST_RELEVANT, NEWEST, OLDEST, HIGHEST_RATING, LOWEST_RATING, PHOTOS. | NEWEST |
| filter | string | No | Restrict to POSITIVE (4-5 star) or NEGATIVE (1-3 star) reviews. Omit for all. Allowed values: POSITIVE, NEGATIVE. | POSITIVE | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/chewy/product-reviews?id=767806&page=1&limit=10&sort=MOST_RELEVANT&filter=POSITIVE" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"part_number": "67742",
"total": 9696,
"page": 1,
"page_size": 20,
"count": 20,
"has_next_page": true,
"rating": 4.4,
"rating_count": 22965,
"reviews": [
{
"id": "…",
"title": "Stormie approved!",
"text": "My dog stopped itching within two weeks…",
"rating": 5,
"submitted_by": "vscarberry",
"submitted_at": "2026-08-20T14:02:11Z",
"helpful_count": 12
}
],
"source_url": "https://www.chewy.com/api/pdp/graphql",
"fetched_at": "2026-09-07T03:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/chewy.reviewsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | chewy.ReviewsResponse | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.has_next_page | boolean | No | ||||
| data.page | integer | No | 1 | |||
| data.page_size | integer | No | 20 | |||
| data.part_number | string | No | 67742 | |||
| data.rating | number | No | 4.4 | |||
| data.rating_count | integer | No | 22965 | |||
| data.reviews | array | No | ||||
| data.reviews[].contributor_badge | string | No | ||||
| data.reviews[].helpful_count | integer | No | ||||
| data.reviews[].id | string | No | ||||
| data.reviews[].incentivized | boolean | No | ||||
| data.reviews[].photo_urls | array | No | ||||
| data.reviews[].rating | integer | No | ||||
| data.reviews[].submitted_at | string | No | ||||
| data.reviews[].submitted_by | string | No | ||||
| data.reviews[].text | string | No | ||||
| data.reviews[].title | string | No | ||||
| data.source_url | string | No | ||||
| data.total | integer | No | 9696 | |||
| 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/product-reviews?id=767806&page=1&limit=10&sort=MOST_RELEVANT&filter=POSITIVE" \
-H "x-api-key: $CRAWLORA_API_KEY"