Chewy API endpoint
Returns Chewy's live warehouse inventory position for up to 20 products in one call, keyed by part number: the availability status, total units on hand, units inbound/in progress, units already reserved against unshipped orders, and the quantity actually available to the storefront. This is the only Chewy surface that carries real quantities -- every other endpoint in this family reports stock as a single boolean, so "36 units left" and "84,386 units left" are indistinguishable there. Quantities are live and move between calls. Part numbers Chewy does not return inventory for are reported in not_found; if none resolve the response is a 404.
/chewy/inventoryReturns Chewy's live warehouse inventory position for up to 20 products in one call, keyed by part number. 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. 101143,52448. This is the same value /chewy/product returns
as part_number and /chewy/category / /chewy/search return as
products[].part_number.Notable response behavior:
items[].status is Chewy's own availability enum: AVAILABLE,
OUT_OF_STOCK, OUTSIDE_TNT (stocked, but not deliverable to the requested
destination inside the promised transit window).items[].quantity_on_hand is total units physically in Chewy's warehouses;
items[].quantity_available_to_site is what the storefront may actually
sell, and is typically far lower. The latter is the figure that governs
whether a product reads as in stock.items[].quantity_in_progress is inbound units not yet on hand;
items[].quantity_reserved is units already committed to unshipped orders.not_found rather
than reported as zero stock, since zero would be a materially wrong answer.
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 |
| status | 2 | “AVAILABLE” |
| quantity_on_hand | 2 | 8,349 to 88,067, median 8,349 |
| quantity_in_progress | 2 | 346 to 3,614, median 346 |
| quantity_available_to_site | 2 | 1,261 to 14,737, median 1,261 |
| available_date | 2 | 2026-10-13 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| part_numbers | string | Yes | Comma-separated Chewy part numbers, up to 20 per request, e.g. \ | 101143,52448 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/chewy/inventory?part_numbers=101143%2C52448" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"count": 2,
"items": [
{
"part_number": "101143",
"status": "AVAILABLE",
"quantity_on_hand": 84383,
"quantity_in_progress": 5493,
"quantity_available_to_site": 11410,
"available_date": "2026-09-06T14:25:54.247346Z"
},
{
"part_number": "4238414",
"status": "AVAILABLE",
"quantity_on_hand": 36,
"quantity_available_to_site": 18
}
],
"source_url": "https://www.chewy.com/api/item/v1/item/101143,4238414",
"fetched_at": "2026-09-06T09:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/chewy.inventoryResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | chewy.InventoryResponse | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.items | array | No | ||||
| data.items[].available_date | string | No | AvailableDate is upstream's own as-of timestamp for this reading. | |||
| data.items[].is_freezer_item | boolean | No | ||||
| data.items[].part_number | string | No | 101143 | |||
| data.items[].quantity_available_to_site | integer | No | 11410 | QuantityAvailableToSite is what the storefront may actually sell -- typically far below quantity_on_hand, and the figure that governs whether a product reads as in stock. | ||
| data.items[].quantity_in_progress | integer | No | 5493 | QuantityInProgress is inbound/being-processed units not yet on hand. | ||
| data.items[].quantity_on_hand | integer | No | 84386 | QuantityOnHand is total units physically in Chewy's warehouses. | ||
| data.items[].quantity_reserved | integer | No | QuantityReserved is units already committed to unshipped orders. | |||
| data.items[].status | string | No | AVAILABLE | Status is Chewy's own availability enum: AVAILABLE, OUT_OF_STOCK, or OUTSIDE_TNT (outside the transit-time network -- stocked, but not deliverable to the requested destination in the promised window). | ||
| 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/inventory?part_numbers=101143%2C52448" \
-H "x-api-key: $CRAWLORA_API_KEY"