Nike API endpoint
Searches Nike.com product listings by keyword, or browses a category/subcategory listing by slug, with real pagination. Exactly one of keyword or category is required. Returns product groups with pricing, colorway images, and every purchasable color variant, plus filter and subcategory navigation data (facet_nav) already present on the same response -- both keyword search and a category listing's first page include filter groups (Gender, Color, Price, Size, and similar); only a category listing includes a breadcrumb trail and subcategory drill-down options, and only its first page (a category listing's later pages do not repeat navigation data). Keyword search is best-effort relevance, not a guaranteed keyword match: for an obscure or nonsense keyword, Nike's own search index falls back to its own recommended results instead of returning an empty list, and there is currently no reliable signal in the response to distinguish a true keyword match from that fallback behavior. A keyword Nike's own search router treats as structurally empty (for example a punctuation-only query) does return a genuine empty result. Category values come from nike-categories' own slug field, or from a prior response's own facet_nav navigation paths (with the leading /w/ stripped). Requesting a page beyond the available result pages returns a not-found error.
/nike/searchkeyword is optional, 1 to 200 characters. Exactly one of keyword or category is required.
page is optional, a one-based page number, defaults to 1 (1 to 500).
Notable response behavior:
keyword, Nike's own search index falls back to its own recommended results instead of returning an empty list, and there is currently no reliable field in the response to distinguish a true keyword match from that fallback behavior.keyword Nike's own search router treats as structurally empty (for example a punctuation-only query) does return a genuine empty result (count: 0, products: []), distinct from the fallback-results behavior above.page beyond the number of pages Nike itself reports (total_pages) returns a not-found error rather than an empty page.colors[].slug and colors[].style_color are the values to pass as slug/style_color to nike-product for full product-detail data on that color.facet_nav is present when Nike's own response carries navigation data: categories[] (subcategory drill-down options, each with a live result_count and a path usable as a future request's category value), filters[] (named filter groups such as Gender, Color, Shop by Price, Size, Brand, each with its own options[]), and breadcrumbs[] (the category hierarchy trail, e.g. Jordan > Shoes). Both keyword search and a category listing return filters[]; only a category listing returns categories[]/breadcrumbs[]. facet_nav is present only on a category listing's first page -- later pages of the same category browse do not repeat navigation data (Nike's own upstream omits it once a page requires the internal parameter this endpoint uses to keep pagination correctly scoped past page 1).A category-browse request (category=mens-jordan-shoes-37eefznik1zy7ok) returns the same shape with facet_nav.breadcrumbs populated:
{"code":200,"msg":"OK","data":{"category":"mens-jordan-shoes-37eefznik1zy7ok","page":1,"page_size":24,"count":24,"total_pages":5,"total_products":100,"products":[{"title":"Air Jordan 6 Retro \"Oreo\"","subtitle":"Men's Shoes","colors":[{"slug":"air-jordan-6-retro-oreo-mens-shoes-mVJLdEz6","style_color":"CT8529-108"}]}],"facet_nav":{"categories":[{"label":"Jordan 1","path":"/w/jordan-1-shoes-37eefz3rknz5e1x6zy7ok","result_count":38}],"filters":[{"name":"Gender","options":[{"label":"Men","path":"/w/shoes-37eef","result_count":100,"selected":true}]}],"breadcrumbs":[{"name":"Jordan","path":"/w/jordan-37eef"},{"name":"Shoes","path":"/w/jordan-shoes-37eefzy7ok"}]}}}
| Field | Filled in, of 24 checked | Values in the sample |
|---|---|---|
| group_key | 24 | |
| title | 24 | “Air Jordan 5 Retro "Halloween"” and 23 other values |
| subtitle | 24 | Men's Shoes (16), Golf Shoes (5), Men's Boots (1) and 2 more |
| product_type | 24 | FOOTWEAR in all 24 |
| badge_label | 15 | Just In (11), Coming Soon (2), Best Seller (2) |
| colors | 24 | median 4 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| keyword | string | No | Search keyword. Exactly one of keyword or category is required. | running shoes | |
| category | string | No | Category/subcategory browse slug, from nike-categories' own slug field or a prior response's facet_nav navigation. Exactly one of keyword or category is required. | mens-jordan-shoes-37eefznik1zy7ok | |
| page | integer | No | 1 | One-based page number, defaults to 1 | 1 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/nike/search?keyword=coffee&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"keyword": "running shoes",
"page": 1,
"page_size": 24,
"count": 2,
"total_pages": 14,
"total_products": 315,
"products": [
{
"group_key": "l11miwwa",
"title": "Nike Vomero Premium",
"subtitle": "Men's Road Running Shoes",
"product_type": "FOOTWEAR",
"colors": [
{
"slug": "vomero-premium-mens-road-running-shoes-l11miwwa",
"style_color": "HQ2050-102",
"color_label": "White",
"color_description": "White/Green Spark/Summit White/Midnight Navy",
"currency": "USD",
"price": 230,
"initial_price": 230,
"image_url": "https://static.nike.com/a/images/squarish1.png",
"url": "https://www.nike.com/t/vomero-premium-mens-road-running-shoes-l11miwwa/HQ2050-102"
}
]
},
{
"group_key": "Z4kCQRR6",
"title": "Nike Structure 26",
"subtitle": "Women's Road Running Shoes",
"product_type": "FOOTWEAR",
"badge_label": "Best Seller",
"colors": [
{
"slug": "structure-26-womens-road-running-shoes-Z4kCQRR6",
"style_color": "HJ1101-501",
"color_label": "Purple",
"color_description": "Purple/Barely Grape",
"currency": "USD",
"price": 140,
"initial_price": 140,
"image_url": "https://static.nike.com/a/images/squarish3.png",
"url": "https://www.nike.com/t/structure-26-womens-road-running-shoes-Z4kCQRR6/HJ1101-501"
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/nike.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | nike.SearchResponse | No | ||||
| data.category | string | No | ||||
| data.count | integer | No | ||||
| data.facet_nav | object | No | FacetNav is the navigation/filtering data Nike's own response already carries alongside product results -- subcategory refinement options, named filter groups (price/size/color/etc.), and (for category browsing) a breadcrumb trail. Nil when the upstream returned no navigation data. See FacetNav's doc comment. | |||
| data.facet_nav.breadcrumbs | array | No | ||||
| data.facet_nav.breadcrumbs[].name | string | No | ||||
| data.facet_nav.breadcrumbs[].path | string | No | ||||
| data.facet_nav.categories | array | No | ||||
| data.facet_nav.categories[].label | string | No | ||||
| data.facet_nav.categories[].path | string | No | ||||
| data.facet_nav.categories[].result_count | integer | No | ||||
| data.facet_nav.categories[].selected | boolean | No | ||||
| data.facet_nav.filters | array | No | ||||
| data.facet_nav.filters[].name | string | No | ||||
| data.facet_nav.filters[].options | array | No | ||||
| data.facet_nav.filters[].options[].label | string | No | ||||
| data.facet_nav.filters[].options[].path | string | No | ||||
| data.facet_nav.filters[].options[].result_count | integer | No | ||||
| data.facet_nav.filters[].options[].selected | boolean | No | ||||
| data.fetched_at | string | No | ||||
| data.keyword | string | No | ||||
| data.page | integer | No | ||||
| data.page_size | integer | No | ||||
| data.products | array | No | ||||
| data.products[].badge_label | string | No | ||||
| data.products[].colors | array | No | ColorVariant record, 10 fields: color_description, color_label, currency, discount_percentage, image_url, initial_price, price, slug, style_color, url. Described under Get a Nike product API. | |||
| data.products[].group_key | string | No | ||||
| data.products[].product_type | string | No | ||||
| data.products[].subtitle | string | No | ||||
| data.products[].title | string | No | ||||
| data.source_url | string | No | ||||
| data.total_pages | integer | No | ||||
| data.total_products | integer | 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/nike/search?keyword=coffee&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"