Old Navy API endpoint
Lists Old Navy's own storefront navigation as name/cid pairs, resolving the cid-discovery gap oldnavy-search, oldnavy-product, and oldnavy-category all document. Omit cid to list Old Navy's top-level divisions (e.g. Women, Men, Boys, Toddler). Pass a cid (a division's own, or any deeper category's) to list the related categories for that part of the storefront instead, in the same order the live storefront menu shows them -- this is section-level, not necessarily unique per leaf category. Currently only available for brand=on (Old Navy).
/oldnavy/categoriesLists Old Navy's own storefront navigation as name/cid pairs, resolving the
cid-discovery gap oldnavy-search,
oldnavy-product, and
oldnavy-category all document: cid is otherwise
opaque, and a caller has to find one by hunting a live category page's own
URL.
Requires the x-api-key header. brand selects the storefront and accepts
on (Old Navy) -- Gap, Banana Republic, and Athleta are not currently
supported by this endpoint (see below); defaults to on. cid is
optional.
Notable response behavior:
cid to list Old Navy's top-level divisions (New & Trending!,
Uniforms, Activewear, Women, Men, Girls, Boys, Toddler, Baby, Maternity,
Today's Deals!), sourced from the storefront's own homepage top nav.cid -- a division's own, or any deeper category's -- to list
the related categories for that part of the storefront instead, in the
same order the live storefront menu shows them. This is section-level,
not necessarily unique per leaf: a narrow subcategory's cid (e.g.
Boys T-Shirts) currently returns the same list as its parent division
(Boys), since Old Navy serves this block once per section rather than
once per category. Each returned entry's cid is usable directly as
the cid query parameter to oldnavy-category.brand=on (Old Navy). Passing any other brand value (Gap, Banana Republic, Athleta) returns 400.cid returns 400 before any upstream request is made.cid on this page (unlike oldnavy-category's own commerce-API lookup,
which does 404 cleanly) -- an unrecognized cid and a genuinely
leaf-level category with no further children both look the same
(503). If you need a hard not-found check for a specific cid, use
oldnavy-category instead.Example response (cid omitted -- top-level divisions):
{"code":200,"msg":"OK","data":{"brand":"on","source_url":"https://oldnavy.gap.com/","fetched_at":"2026-08-10T00:00:00Z","categories":[{"name":"New & Trending!","cid":"3028309","url":"https://oldnavy.gap.com/browse/category.do?cid=3028309&mlink=5151,topNav,visnav&nav=meganav%3ANew%20%26%20Trending!%3A%3A"},{"name":"Women","cid":"1185233","url":"https://oldnavy.gap.com/browse/category.do?cid=1185233&mlink=5151,topNav,visnav&nav=meganav%3AWomen%3A%3A"},{"name":"Boys","cid":"1185232","url":"https://oldnavy.gap.com/browse/category.do?cid=1185232&mlink=5151,topNav,visnav&nav=meganav%3ABoys%3A%3A"}]}}
Example response (cid=1185232, Boys -- subcategories):
{"code":200,"msg":"OK","data":{"brand":"on","cid":"1185232","source_url":"https://oldnavy.gap.com/browse/category.do?cid=1185232","fetched_at":"2026-08-10T00:00:00Z","categories":[{"name":"T-Shirts","cid":"36097","url":"https://oldnavy.gap.com/browse/category.do?cid=36097&cl=true#department=16"},{"name":"Jeans","cid":"5936","url":"https://oldnavy.gap.com/browse/category.do?cid=5936&cl=true#department=16"},{"name":"Boys Shop by Size 5-20","cid":"39659","url":"https://oldnavy.gap.com/browse/category.do?cid=39659&cl=true#department=16"}]}}
| Field | Filled in, of 14 checked | Values in the sample |
|---|---|---|
| name | 14 | “New & Trending!” and 13 other values |
| cid | 14 | |
| url | 14 | oldnavy.gap.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| brand | string | No | Storefront to list -- only on (Old Navy) is currently supported Allowed values: on. | ||
| cid | string | No | Category id to list related categories for; omit to list the top-level divisions | 1185232 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/oldnavy/categories?brand=on" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"brand": "on",
"source_url": "https://oldnavy.gap.com/",
"fetched_at": "2026-08-10T00:00:00Z",
"categories": [
{
"name": "New & Trending!",
"cid": "3028309",
"url": "https://oldnavy.gap.com/browse/category.do?cid=3028309&mlink=5151,topNav,visnav&nav=meganav%3ANew%20%26%20Trending!%3A%3A"
},
{
"name": "Women",
"cid": "1185233",
"url": "https://oldnavy.gap.com/browse/category.do?cid=1185233&mlink=5151,topNav,visnav&nav=meganav%3AWomen%3A%3A"
},
{
"name": "Boys",
"cid": "1185232",
"url": "https://oldnavy.gap.com/browse/category.do?cid=1185232&mlink=5151,topNav,visnav&nav=meganav%3ABoys%3A%3A"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/oldnavy.categoriesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | oldnavy.CategoriesResponse | No | ||||
| data.brand | string | No | ||||
| data.categories | array | No | ||||
| data.categories[].cid | string | No | ||||
| data.categories[].name | string | No | ||||
| data.categories[].url | string | No | ||||
| data.cid | string | No | ||||
| data.fetched_at | string | No | ||||
| data.source_url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/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/categories?brand=on" \
-H "x-api-key: $CRAWLORA_API_KEY"