# Nike API scraper — nike.com in 42 countries: search and category walls, the full product record with every size's stock level and GTIN, price and discount, colourways, customer reviews and the upcoming SNKRS launch calendar, in each country's currency. No account, no browser.

> Search a Nike storefront by keyword, as nike.com does. One row per product card with its price, full price and discount, colour, badges ('Best Seller', 'Just In', 'Coming Soon'), promotions and every colourway on the card. Sort by newest or price; narrow with filter ids.
> ReefAPI engine `nike` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/nike/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /nike/v1/search — 1 credit
Search a Nike storefront by keyword, as nike.com does. One row per product card with its price, full price and discount, colour, badges ('Best Seller', 'Just In', 'Coming Soon'), promotions and every colourway on the card. Sort by newest or price; narrow with filter ids.

**Parameters:**
- `query` (string, required) — What to look for, as a shopper types it on nike.com.
- `country` (enum, optional, default "us") — Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country. [one of: us, gb, de, fr, it, es, nl, be, lu, at, ch, ie, pt, dk, se, no, fi, pl, cz, sk, hu, si, hr, bg, ro, gr, tr, il, za, jp, kr, cn, tw, sg, my, ph, th, vn, id, au, ca, mx]
- `language` (string, optional) — Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.
- `page` (integer, optional, default 1) — Result page, 1-based.
- `page_size` (enum, optional, default 24) — Products per page: 24, 50 or 100 — the only sizes Nike's wall accepts. [one of: 24, 50, 100]
- `sort` (enum, optional, default "relevance") — Result order — the orderings nike.com offers. [one of: relevance, newest, price_asc, price_desc]
- `attribute_ids` (array, optional) — Nike filter ids (gender, colour, sport, brand, size, sale …) from the `filters` action. Several ids narrow together (AND across groups).
- `include_fallback_results` (boolean, optional, default false) — false (default): when nike.com has no product matching the query and pads the page with unrelated fallback products, results is empty and fallback_results_dropped counts them. true: those products are returned apart, in fallback_results.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** results[]{product_code (style-colour, or a numeric id for Nike By You), style_color, style_code, group_key, title, subtitle, product_type ('footwear'|'apparel'|'equipment'|'stored_value'), product_subtype, color, color_hex, color_description, price (the shelf price), full_price, original_price (set only on sale), discount_percent, on_sale, currency, promotion{id, message ('See Price in Bag' …), ends_at}, badge, badges[], new_until, launch, coming_soon, customizable, base_style_color, gift_card, image, image_portrait, url, global_product_id, merch_product_id, colorways[]{product_code, style_color, color_description, price, full_price, discount_percent, image, url}, colorway_count}, count, total_results, page, page_size, page_count, has_more, country, language, currency, query, sort_applied, attribute_ids, keyword_matches_on_page (cards on this page containing a query word; null for non-Latin queries), fallback_results_dropped, fallback_total (Nike's count of the fallback products, when dropped), fallback_results[] (only with include_fallback_results=true)

**Example request body:**
```json
{
  "query": "air max"
}
```

### POST /nike/v1/category — 1 credit
A Nike category wall without a keyword (for example Men + Shoes, or Sale), paged and sortable, with the same rows as search. Category ids come from `filters`.

**Parameters:**
- `attribute_ids` (array, required) — Nike category/filter ids from the `filters` action (e.g. Shoes + Men). Returns that wall without a keyword.
- `country` (enum, optional, default "us") — Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country. [one of: us, gb, de, fr, it, es, nl, be, lu, at, ch, ie, pt, dk, se, no, fi, pl, cz, sk, hu, si, hr, bg, ro, gr, tr, il, za, jp, kr, cn, tw, sg, my, ph, th, vn, id, au, ca, mx]
- `language` (string, optional) — Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.
- `page` (integer, optional, default 1) — Result page, 1-based.
- `page_size` (enum, optional, default 24) — Products per page: 24, 50 or 100 — the only sizes Nike's wall accepts. [one of: 24, 50, 100]
- `sort` (enum, optional, default "relevance") — Result order — the orderings nike.com offers. [one of: relevance, newest, price_asc, price_desc]
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** results[]{product_code (style-colour, or a numeric id for Nike By You), style_color, style_code, group_key, title, subtitle, product_type ('footwear'|'apparel'|'equipment'|'stored_value'), product_subtype, color, color_hex, color_description, price (the shelf price), full_price, original_price (set only on sale), discount_percent, on_sale, currency, promotion{id, message ('See Price in Bag' …), ends_at}, badge, badges[], new_until, launch, coming_soon, customizable, base_style_color, gift_card, image, image_portrait, url, global_product_id, merch_product_id, colorways[]{product_code, style_color, color_description, price, full_price, discount_percent, image, url}, colorway_count}, count, total_results, page, page_size, page_count, has_more, country, language, currency, sort_applied, attribute_ids

### POST /nike/v1/filters — 2 credits
The filters nike.com shows for a search (or the whole catalogue) — gender, colour, sport, brand, size, width, best for — and the category links, each with its id and product count. The ids feed `attribute_ids` in search and category.

**Parameters:**
- `query` (string, optional) — Optional keyword: the filters (with counts) of that search. Without it, the filters of the whole catalogue.
- `country` (enum, optional, default "us") — Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country. [one of: us, gb, de, fr, it, es, nl, be, lu, at, ch, ie, pt, dk, se, no, fi, pl, cz, sk, hu, si, hr, bg, ro, gr, tr, il, za, jp, kr, cn, tw, sg, my, ph, th, vn, id, au, ca, mx]
- `language` (string, optional) — Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** filters[]{name, group_id, options[]{name, attribute_id, attribute_ids[], count, selected}}, categories[]{name, attribute_id, attribute_ids[], count}, total_results, query, country, language

### POST /nike/v1/product/detail — 1 credit
The full Nike product by style-colour or URL: price, full price and discount, every size with its localized label, GTIN and stock level, description and feature sections, all images and videos, colours, launch method and release time, member-exclusive and quantity-limit flags, star rating and review counts, and the other colourways of the style.

**Parameters:**
- `style_color` (string, required) — Nike style-colour code ('DM0032-037', printed on the box and in every product URL, returned as `style_color` by search) or a nike.com product / launch URL. A URL also sets the country and language.
- `country` (enum, optional, default "us") — Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country. [one of: us, gb, de, fr, it, es, nl, be, lu, at, ch, ie, pt, dk, se, no, fi, pl, cz, sk, hu, si, hr, bg, ro, gr, tr, il, za, jp, kr, cn, tw, sg, my, ph, th, vn, id, au, ca, mx]
- `language` (string, optional) — Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.
- `include_colorways` (boolean, optional, default true) — true (default): also list the other colours of the same style on sale in that country (one extra small request).
- `include_rating` (boolean, optional, default true) — true (default): add the star rating and review counts.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** product{style_color, style_code, color_code, content_language (the language the texts came in — the storefront's, or English when Nike has no translation), title, name, subtitle, brand, product_type, genders[], sport_tags[], color_description, colors[]{type, name, hex}, price, full_price, original_price, discount_percent, on_sale, currency, price_source ('product_feed' | 'storefront' — an inactive colourway still listed, priced as the storefront shows it | 'catalog_inactive' — no longer listed, last catalogue price), listed_on_storefront, member_price (always null — Nike publishes none), member_exclusive, status ('active'|'inactive'), available, sizes_in_stock, sizes[]{size, localized_size, size_system, gtin, sku_id, available, stock_level ('high'|'medium'|'low'|'out_of_stock'|null), inventory_listed}, quantity_limit, publish_type ('flow'|'launch'), launch{method, payment_method, starts_at}, release_date, hard_launch, pre_order, notify_me, promo_excluded, description_heading, description, sections[]{heading, items[]}, tech_spec, best_for[], widths[], countries_of_origin[], images[], videos[], size_chart_url, url, global_product_id, merch_product_id, pid, rating, rating_scale, review_count, related_review_count, own_review_count, colorways[]{style_color, color_description, price, full_price, discount_percent, currency, available, image, url}}, country, language

**Example request body:**
```json
{
  "style_color": "CW2288-111"
}
```

### POST /nike/v1/product/reviews — 1 credit
Customer reviews of a Nike style, newest first, paged: rating, title, text, date, reviewer country and usual size, fit / comfort / recommend answers, votes and photos — plus the rating and the review counts kept apart from reviews of related styles.

**Parameters:**
- `style_color` (string, required) — Nike style-colour ('CW2288-111'), style code ('CW2288') or product URL. Reviews are shared by every colour of a style.
- `country` (enum, optional, default "us") — Optional. Reviews are the same in every country; the country is only used to confirm that a style with no reviews exists. [one of: us, gb, de, fr, it, es, nl, be, lu, at, ch, ie, pt, dk, se, no, fi, pl, cz, sk, hu, si, hr, bg, ro, gr, tr, il, za, jp, kr, cn, tw, sg, my, ph, th, vn, id, au, ca, mx]
- `page` (integer, optional, default 1) — Review page, 1-based.
- `page_size` (integer, optional, default 20) — Reviews per page (1-100, default 20), newest first.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** style_code, product_title, reviews[]{review_id, rating, rating_scale, title, text, submitted_at, locale, reviewer_country, author, size_normally_worn, answers[]{question, value, scale_labels[]}, incentivized, up_votes, down_votes, media[], reviewed_item{title, sku}}, count, total_reviews, rating, rating_scale, review_count, related_review_count, own_review_count, page, page_size

**Example request body:**
```json
{
  "style_color": "CW2288-111"
}
```

### POST /nike/v1/launches — 1 credit
The upcoming SNKRS launch calendar of a Nike country, soonest first: style-colour, name, price, launch method (draw or first-come) and the exact moment it opens, member-exclusive flag, quantity limit and image.

**Parameters:**
- `country` (enum, optional, default "us") — Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country. [one of: us, gb, de, fr, it, es, nl, be, lu, at, ch, ie, pt, dk, se, no, fi, pl, cz, sk, hu, si, hr, bg, ro, gr, tr, il, za, jp, kr, cn, tw, sg, my, ph, th, vn, id, au, ca, mx]
- `language` (string, optional) — Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.
- `page` (integer, optional, default 1) — Result page, 1-based.
- `page_size` (integer, optional, default 24) — Launches per page (1-50, default 24), soonest first.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** results[]{style_color, style_code, title, launch_name, color_description, product_type, genders[], price, full_price, discount_percent, currency, publish_type, launch_method, payment_method, starts_at, member_exclusive, quantity_limit, available, image, url}, count, total_results, page, page_size, has_more, country, language

## More
- Try it live, no code: https://reefapi.com/playground?engine=nike
- Human docs page: https://reefapi.com/docs/nike
- Overview page: https://reefapi.com/nike-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
