StockX API
The StockX API returns live resale-market data for sneakers, streetwear and collectibles as clean JSON.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary product_detail endpoint returns a product's title, brand, model, SKU, colorway, retail price, release date and live market data — lowest ask, highest bid and last sale. You can also search, pull recent_sales, price_history and sales_history, browse and see what is trending. It is built for resale-price intelligence, sneaker apps and reselling tools that need StockX market data without scraping a defended marketplace. One ReefAPI key, one shared credit pool, the standard envelope.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/stockx/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "jordan 1"
}
}{
"ok": true,
"meta": {
"api": "stockx",
"endpoint": "search",
"mode": "live",
"latency_ms": 813.8,
"record_count": 40,
"bytes": 30731,
"cache_hit": false,
"currency": "USD",
"market": "US",
"page": 1,
"total": 159479,
"pagination": {
"page": 1,
"has_more": true
}
},
"data": {
"query": "jordan 1",
"results": [
{
"id": "019cfdb4-3545-7b[redacted-phone]f7411145fb",
"url_key": "air-jordan-1-retro-low-og-sp-travis-scott-sail-tropical-pink",
"url": "https://stockx.com/air-jordan-1-retro-low-og-sp-travis-scott-sail-tropical-pink",
"title": "Jordan 1 Retro Low OG SP Travis Scott Sail Tropical Pink",
"brand": "Jordan",
"sku": "IQ7604-101",
"category": "sneakers",
"gender": "men",
"image": "https://images.stockx.com/images/Air-Jordan-1-Retro-Low-OG-SP-Travis-Scott-Sail-Tropical-Pink-Product.jpg?fit=fill&bg=FFFFFF&w=700&h=500&fm=webp&auto=compress&q=90&dpr=2&trim=color&updated_at=[redacted-phone]",
"lowest_ask": 307,
"highest_bid": 652,
"last_sale": 343
},
{
"id": "019b0a03-b142-73e7-b0f9-3cf04d719268",
"url_key": "air-jordan-1-retro-low-og-sp-travis-scott-shy-pink",
"url": "https://stockx.com/air-jordan-1-retro-low-og-sp-travis-scott-shy-pink",
"title": "Jordan 1 Retro Low OG SP Travis Scott Shy Pink",
"brand": "Jordan",
"sku": "IQ7604-100",
"category": "sneakers",
"gender": "men",
"image": "https://images.stockx.com/images/Air-Jordan-1-Retro-Low-OG-SP-Travis-Scott-Shy-Pink-Product.jpg?fit=fill&bg=FFFFFF&w=700&h=500&fm=webp&auto=compress&q=90&dpr=2&trim=color&updated_at=[redacted-phone]",
"lowest_ask": 293,
"highest_bid": 632,
"last_sale": 356
},
{
"id": "61e4b088-c550-40cb-bec7-9589f6cee907",
"url_key": "air-jordan-11-retro-gamma-blue-2025",
"url": "https://stockx.com/air-jordan-11-retro-gamma-blue-2025",
"title": "Jordan 11 Retro Gamma Blue (2025)",
"brand": "Jordan",
"sku": "CT8012-047",
"category": "sneakers",
"gender": "men",
"image": "https://images.stockx.com/images/Air-Jordan-11-Retro-Gamma-Blue-2025-Product.jpg?fit=fill&bg=FFFFFF&w=700&h=500&fm=webp&auto=compress&q=90&dpr=2&trim=color&updated_at=[redacted-phone]",
"lowest_ask": 180,
"highest_bid": 379,
"last_sale": 225
}
],
"page_info": {
"page": 1,
"limit": 40,
"total": 159479
}
}
}What the StockX API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| product_detail | full product by `url` OR `url_key`/`id`/`uuid`: title/brand/model/sku/category/colorway/retail_price/release_date/image + market{lowest_ask,highest_bid,number_of_asks/bids,last_sale,sales_last_72h,last_sale_change_pct/value,avg_price_72h/90d/annual,sales_count_*,price_premium=(last_sale-retail)/retail, volatility=CV-of-recent-sales, ask_service_levels{standard/express_*: count,lowest_ask,processing_fee,delivery}} + per-size variants[]{size,lowest_ask,highest_bid,last_sale}. The market-data moat. `currency` (USD/EUR/GBP/…) + `market` (US/GB/DE/…) optional. | Pricing teams call product_detail to get full product by `url` OR `url_key`/`id`/`uuid`. | url, url_key, id, uuid, currency, ... |
| search | product search → results[]{id,url_key,url,title,brand,sku,category,image,lowest_ask,highest_bid,last_sale} + page_info{page,limit,total}. Resolves url_keys for product_detail. Optional facet filters: `brand` (e.g. Jordan), `gender` (men/women/…), `category` (sneakers/apparel/…) + `sort` (most-active/featured/release_date/lowest_ask). `page` (40/page) + `currency`/`market` optional. | Marketplace operators call search to get product search → results[]{id,url_key,url,title,brand,sku,category,image,lowest_ask,highest_b…. | query, page, currency, market, brand, ... |
| recent_sales | recent transaction feed by `url`/`url_key`/`id` → sales[]{amount,created_at} (most recent first) + product ref. Best-effort market-history. `currency`/`market` optional. | Catalog enrichment teams call recent_sales to get recent transaction feed by `url`/`url_key`/`id` → sales[]{amount,created_at} (most recent fir…. | url, url_key, id, uuid, currency, ... |
| suggest | autocomplete query suggestions for `query` (QuerySuggestion text; falls back to search-derived titles if the suggest op drifts). | Retail analysts call suggest to get autocomplete query suggestions for `query` (QuerySuggestion text; falls back to search-derive…. | query |
| price_history | historical price time-series for a product, aggregated from the deep sales feed → series[]{date,count,avg,min,max,last} (oldest→newest) + summary{points,sales_sampled,min,max,avg,first_date,last_date,window_complete}. `window` (30d/90d/180d/365d/all) bounds lookback; `bucket` (day/week/month) sets granularity; optional `size` for per-size history. The #1 resale-trader ask. `currency` optional. | Pricing teams call price_history to get historical price time-series for a product, aggregated from the deep sales feed → series[]{da…. | url, url_key, id, uuid, window, ... |
| sales_history | deep paginated transaction log → sales[]{amount,created_at,cursor} (newest first) + page_info{cursor,has_more,total,limit,returned} + product. Far deeper than recent_sales (StockX exposes the full ledger, e.g. 60k+ sales). Cursor-paginate with `cursor`; optional `size` filters to one variant. `limit` ≤ 50 (StockX page cap). `currency` optional. | Marketplace operators call sales_history to get deep paginated transaction log → sales[]{amount,created_at,cursor} (newest first) + page_info…. | url, url_key, id, uuid, cursor, ... |
| browse | category/vertical grids + sort + facet filters → results[]{id,url_key,url,title,brand,sku,category,image,lowest_ask,highest_bid,last_sale} + page_info{page,limit,total}. Needs at least one of `category` (sneakers/apparel/electronics/collectibles/accessories), `query`, or a facet filter (`brand`/`gender`). `sort` (most-active/featured/release_date/lowest_ask) + `page` (40/page) optional. The catalog-discovery surface. | Catalog enrichment teams call browse to get category/vertical grids + sort + facet filters → results[]{id,url_key,url,title,brand,sku,cat…. | category, query, brand, gender, sort, ... |
| trending | movers / most-active products (global or within a `category`) → results[] (same card shape as browse) + page_info. Defaults `sort`=most-active. Optional `category`, `brand`, `gender`, `page`. Surfaces what's trading right now. | Retail analysts call trending to get movers / most-active products (global or within a `category`) → results[] (same card shape as…. | category, brand, gender, sort, page, ... |
Call search from your stack
curl -X POST https://api.reefapi.com/stockx/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"jordan 1"}'import requests
r = requests.post(
"https://api.reefapi.com/stockx/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "jordan 1"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/stockx/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "jordan 1"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.stockx.search with {"query":"jordan 1"}.Who uses this API and why
- Resale-price tools call product_detail to track lowest ask, highest bid and last sale for a SKU.
- Sneaker apps use price_history and recent_sales to chart a product's market value over time.
- Resellers use trending and browse to spot rising products before they spike.
Questions developers ask before integrating
What is the StockX API?
StockX API is a ReefAPI endpoint group for live resale prices, market stats and sales history. It returns live JSON through POST requests under /stockx/v1.
Is the StockX API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. StockX calls use the same shared credit balance as every other ReefAPI engine.
Do I need a StockX login or account?
No login to StockX is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the StockX data?
The page example is captured from a live product_detail call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the StockX API use?
StockX actions currently cost 1-3 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call StockX from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call stockx actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the StockX API a StockX scraper?
It is the managed alternative to a DIY StockX scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same live resale prices, market stats and sales history back as clean JSON.
Why does my StockX scraper keep getting blocked?
Most StockX scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.