Old Navy API endpoint
Checks per-size, in-store pickup stock status for one color (pid) at one or more physical stores. pid matches oldnavy-product's own color-level id. Give store location either directly with store_id (one or more comma-separated store ids, e.g. from a prior call to this endpoint or a value you already have) or with zip or both lat and lng, which resolves the nearest stores automatically. Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`). Each returned store lists every offered size's stock status: `in_stock`, `out_of_stock`, or `low_stock`.
/oldnavy/product/availabilitypid is required and must be a color-level product id, matching oldnavy-product's own pid parameter (as returned by oldnavy-search's products[].colors[].id field). brand selects the storefront and accepts on (Old Navy), gap (Gap), br (Banana Republic), or at (Athleta); defaults to on.
Store location is given one of two ways:
store_id: one or more comma-separated numeric store ids.zip, or both lat and lng: resolves the nearest stores automatically (up to 5).Exactly one of store_id, zip, or lat/lng is required.
Notable response behavior:
sizes array lists every offered size's stock status: IN_STOCK, OUT_OF_STOCK, or LOW_STOCK.name, address, city, region, postal_code, phone, and distance_miles are only populated when the store was resolved via zip or lat/lng -- a caller-supplied store_id has no accompanying store metadata from this source.zip/lat/lng search with no nearby stores returns a normal 200 with an empty stores array, not an error.pid returns 404.store_id given directly (not resolved via zip/lat/lng) is not detectable as an error from this endpoint -- it returns every size as OUT_OF_STOCK rather than an error, a known upstream limitation.| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| store_id | 1 | |
| sizes | 1 | median 19 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| pid | string | Yes | Color-level Old Navy/Gap/Banana Republic/Athleta product id | 907290012 | |
| brand | string | No | Storefront to check Allowed values: on, gap, br, at. | ||
| store_id | string | No | One or more comma-separated numeric store ids | 3444 | |
| zip | string | No | Zip code to resolve the nearest stores from | 10001 | |
| lat | number | No | Latitude to resolve the nearest stores from (must be given together with lng) | 40.7128 | |
| lng | number | No | Longitude to resolve the nearest stores from (must be given together with lat) | -74.006 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/oldnavy/product/availability?pid=907290012&brand=on" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"pid": "907290012",
"brand": "on",
"style_id": "907290",
"count": 1,
"stores": [
{
"store_id": "3444",
"name": "TIMES SQUARE",
"address": "1516 Broadway",
"city": "New York",
"region": "NY",
"postal_code": "10036",
"phone": "(646) 866-5935",
"distance_miles": 0.77,
"sizes": [
{
"sku": "9072900120004",
"fit": "REGULAR",
"status": "IN_STOCK"
},
{
"sku": "9072900120000",
"fit": "REGULAR",
"status": "LOW_STOCK"
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/oldnavy.availabilityResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | oldnavy.AvailabilityResponse | No | ||||
| data.brand | string | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.pid | string | No | ||||
| data.source_url | string | No | ||||
| data.stores | array | No | ||||
| data.stores[].address | string | No | ||||
| data.stores[].city | string | No | ||||
| data.stores[].distance_miles | number | No | ||||
| data.stores[].name | string | No | ||||
| data.stores[].phone | string | No | ||||
| data.stores[].postal_code | string | No | ||||
| data.stores[].region | string | No | ||||
| data.stores[].sizes | array | No | ||||
| data.stores[].sizes[].fit | string | No | ||||
| data.stores[].sizes[].sku | string | No | ||||
| data.stores[].sizes[].status | string | No | ||||
| data.stores[].store_id | string | No | ||||
| data.style_id | 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/oldnavy/product/availability?pid=907290012&brand=on" \
-H "x-api-key: $CRAWLORA_API_KEY"