Nike product search
Products on Nike for keywords or a category path, per country store (US, GB, DE, FR, IT, NL, JP), with sort. Each product: style-colour id, group key, name, subtitle, type, price, full price, currency, discount, colour, badge, promotions, customizable flag, link, image and every colourway (id, colour, price, link, image). total is the site's count. Pass next_page back as page; null on the last page. Filter by the store's own facets: facets=1 adds facets (gender, colour, size, price band, brand, sport, height, width ... with each option's id, name, count and selected flag) and attribute_ids; pass option ids back as filters. gender and sale are shortcuts.
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
q | string | Keywords, e.g. air max. Example: air max |
category | string | A nike.com listing path such as /w/mens-shoes-nik1zy7ok, alone or with q. |
country | US | GB | DE | FR | IT | NL | JP | US (default), GB, DE, FR, IT, NL, JP. Example: US |
sort | relevance | newest | price_asc | price_desc | relevance (default), newest, price_asc, price_desc. |
page | integer | Page number. Pass next_page from the previous response. |
facets | 0 | 1 | 1 to add the filter groups with counts (facets). |
filters | string | Comma-separated option ids from facets[].options[].id (all must match), e.g. a colour and a size. |
gender | men | women | unisex | men, women or unisex. |
sale | 0 | 1 | 1 for products on sale only. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/nike/v1/search?q=air+max" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/nike/v1/search",
params={"q": "air max"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/nike/v1/search");
url.searchParams.set("q", "air max");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).