Sneaker and streetwear resale-price research
Use StockX endpoints to turn sneaker and streetwear resale-price research into repeatable API requests with documented inputs and JSON responses.
Turn public StockX pages into structured sneaker and streetwear resale data — keyword product search, full product detail with market pricing, the brand and category/subcategory directories, and the upcoming release calendar, all as normalized JSON. Credential-free.
Search StockX products and get product detail, brand and category directories, and the release calendar as structured JSON.
Endpoint families
5
Documented params
23
Examples
5
Live catalog snapshot
Active endpoints
5
Methods
GET
Required params
7
Schema refs
5
{
"platform": "StockX",
"endpoint": "stockx-search",
"method": "GET",
"path": "/stockx/search",
"auth": "apiKey"
}Use cases
Search StockX products and get product detail, brand and category directories, and the release calendar as structured JSON.
Use StockX endpoints to turn sneaker and streetwear resale-price research into repeatable API requests with documented inputs and JSON responses.
Use StockX endpoints to turn release-calendar tracking into repeatable API requests with documented inputs and JSON responses.
Use StockX endpoints to turn brand and category demand analysis into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live StockX endpoint catalog — 5 endpoints, 23 documented request parameters, and 5 published response schemas — the same catalog Docs and Playground run against.
5 documented StockX endpoints, grouped into 5 request families — Brands, Categories and Product, plus 2 more.
23 request parameters are documented across those StockX endpoints, 7 of them required — the full input contract is public before you write any integration code.
5 of the 5 StockX endpoints ship a recorded example response, and 5 carry a documented response schema — you can code against the real JSON before the first request.
StockX endpoints document their error responses (400, 404, 500 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
5 hosted MCP tools back the StockX endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/stockx/brands
/stockx/categories
/stockx/product/{slug}
/stockx/releases
/stockx/search
Endpoint catalog
/stockx/searchBrowses StockX's product catalog by category with optional free-text keyword search and facet filters (gender, brand, color, shoe height, activity, availability), returning normalized product summaries with headline pricing plus the total matching count. Credential-free public data from the same GraphQL API backing StockX's own category browse pages.
Response notes
- `total_count` reflects StockX's full matching-result count for the applied filters, not just `len(products)`. - An invalid `category`, `gender`, `color`, `shoe_height`, `activity`, `sort`, or malformed `brand`/`model` value returns `400` before any upstream request is made, as does `model` set without exactly one `brand` value. - `sort` in the response reports the sort StockX actually applied; an unrecognized `sort` value is rejected as `400` rather than silently falling back to `featured`. Example response: ```json { "code": 200, "msg": "OK", "data": { "category": "sneakers", "query": "jordan 5", "sort": "featured", "page": 1, "limit": 20, "total_count": 1000, "products": [ { "id": "9acafeb5-bc4a-4d66-bc3a-4899d2e64775", "url_key": "air-jordan-4-retro-toro-bravo-2026", "title": "Jordan 4 Retro Toro Bravo (2026)", "brand": "Jordan", "model": "Jordan 4 Retro", "gender": "men", "product_category": "sneakers", "image_url": "https://images.stockx.com/images/toro-bravo-thumb.jpg", "lowest_ask": 173, "highest_bid": 267, "last_sale": 176 } ] } } ```
MCP tool stockx_search
/stockx/product/{slug}Returns a normalized StockX product: identity (title, brand, model, colorway, style id, retail price, release date, description, image), current market data (lowest ask, highest bid, last sale, trailing average price/sales count, delivery-speed ask tiers), individual seller listings (price, condition, size), related-product recommendations (other colorways/siblings StockX surfaces on the product page), and any promotional badges. Credential-free public data from StockX's own product-page GraphQL API.
Response notes
- A slug that is well-formed but does not match a real product returns `404`, not an empty `200`. - `market.ask_service_levels` is a map keyed by StockX's own delivery-speed tier names (commonly `standard`, `express_standard`, `express_next_day`, `express_expedited`), each reporting the number of active asks and the lowest ask price at that tier. - `listings` is a page of individual active seller asks (price, condition, size). StockX does not expose seller identity on its public product pages, so none is included. - `related_products` is up to 15 other products StockX recommends alongside this one (typically sibling colorways of the same model, but can include other related products); each entry uses the same shape as a `/stockx/search` result row. Omitted when StockX's related-products call fails or returns nothing — it is a recommendation shelf, not core identity or pricing data, so a failure there does not fail the whole request. - `traits` mirrors StockX's own publicly displayed attribute list for the product (style, colorway, retail price, release date, and any others StockX adds); `colorway`, `retail_price`, and `release_date` are lifted out as typed top-level fields for convenience when present. - `badges` is omitted when StockX's badges call fails or the product has no active badges — it is a purely cosmetic marker (e.g. "Selling Fast"), not core identity or pricing data, so a failure there does not fail the whole request. Example response: ```json { "code": 200, "msg": "OK", "data": { "id": "019ac251-3a0d-7243-bb16-5128353be8bf", "url_key": "air-jordan-5-retro-black-university-blue-2026", "title": "Jordan 5 Retro Black University Blue (2026)", "primary_title": "Jordan 5 Retro", "secondary_title": "Black University Blue (2026)", "brand": "Jordan", "model": "Jordan 5 Retro", "gender": "men", "product_category": "sneakers", "primary_category": "Air Jordan", "style_id": "DD0587-008", "colorway": "Black/University Blue/White", "retail_price": "220", "release_date": "2026-06-20", "description": "The Air Jordan 5 Retro in Black, University Blue, and White for 2026 ...", "image_url": "https://images.stockx.com/images/Air-Jordan-5-Retro-Black-University-Blue-2026-Product.jpg", "traits": [ {"name": "Style", "value": "DD0587-008"}, {"name": "Colorway", "value": "Black/University Blue/White"}, {"name": "Retail Price", "value": "220", "format": "currency"}, {"name": "Release Date", "value": "2026-06-20", "format": "date"} ], "market": { "lowest_ask": 260, "highest_bid": 315, "number_of_asks": 1341, "number_of_bids": 334, "last_sale": 271, "sales_last_72_hours": 713, "annual_average_price": 253, "annual_sales_count": 12394, "ask_service_levels": { "standard": {"count": 1341, "lowest_ask": 260}, "express_standard": {"count": 668, "lowest_ask": 271, "inventory_type": "CUSTODIAL"}, "express_next_day": {"count": 234, "lowest_ask": 271, "inventory_type": "CUSTODIAL"} } }, "listings": [ {"price": 250, "condition": "New - Other", "condition_alias": "new-other", "condition_description": "Replacement box", "size": "12", "size_descriptor": "Size"} ], "related_products": [ {"id": "63aff9cd-af0e-4027-b54d-555bf1f80bf7", "url_key": "air-jordan-5-retro-wolf-grey-2026", "title": "Jordan 5 Retro Wolf Grey (2026)", "brand": "Jordan", "model": "Jordan 5 Retro", "gender": "men", "product_category": "sneakers", "lowest_ask": 197, "highest_bid": 195, "last_sale": 288} ], "badges": [ {"id": "SELLING_FAST", "title": "713 Sold in Last 3 Days!", "subtitle": "This item sells fast."} ], "source_url": "https://stockx.com/air-jordan-5-retro-black-university-blue-2026" } } ```
MCP tool stockx_product
/stockx/brandsReturns StockX's full brand catalog (name and URL slug for every brand in its own brand directory), suitable for building GET /stockx/search's brand parameter or GET /stockx/search's model parameter's required single-brand context. Credential-free public data from the same navigation API backing StockX's own site menu.
Response notes
- `total_count` always equals `len(brands)` -- 396 brands confirmed live 2026-08-04. This is the full catalog, not a paginated subset. - `brands[].slug` is the exact value `/stockx/search`'s `brand` parameter (and, combined with a `model` value, its `model` parameter) expects, e.g. `nike`, `jordan`, `new-balance`. - `brands[].group` is the A-Z letter group StockX's own brand directory files each brand under -- a UI grouping, not part of the brand identity. Allowed values: `0-9`, `A-C`, `D-F`, `G-I`, `J-L`, `M-O`, `P-R`, `S-U`, `V-X`, `Y-Z`. Most callers can ignore this field. - The catalog can grow or shrink as StockX adds or retires brands -- treat this endpoint, not any cached list, as the source of truth. Example response: ```json { "code": 200, "msg": "OK", "data": { "total_count": 396, "brands": [ {"name": "47 Brand", "slug": "47-brand", "group": "0-9"}, {"name": "Jordan", "slug": "jordan", "group": "J-L"}, {"name": "Nike", "slug": "nike", "group": "M-O"} ] } } ```
MCP tool stockx_brands
/stockx/categoriesReturns StockX's full category/subcategory reference: the 7 top-level categories accepted by GET /stockx/search's category parameter, each with its subcategories (e.g. Shoes -> Boots, Cleats, Clogs). Credential-free public data from the same navigation API backing StockX's own site menu.
Response notes
- `categories[].slug` matches `SearchOption.Category`'s allowed values exactly: `sneakers`, `shoes`, `apparel`, `accessories`, `collectibles`, `electronics`, `trading-cards`. - `subcategories` is not currently exposed as a `/stockx/search` filter parameter -- it is reference data for building category-scoped browsing, matching the `https://stockx.com/category/{category}/{subcategory}` URL pattern (e.g. `https://stockx.com/category/shoes/boots`). - Every category currently has at least one subcategory. Confirmed live 2026-08-04 (all values below, category → subcategory slugs): - `sneakers` → `lifestyle`, `luxury`, `performance` - `shoes` → `boots`, `cleats`, `clogs`, `flats`, `heels`, `loafers`, `oxfords`, `sandals`, `slides-and-sandals`, `slippers`, `spikes` - `apparel` → `bottoms`, `other-apparel`, `outerwear`, `tops`, `undergarments` - `accessories` → `bags`, `belts`, `eyewear`, `face-masks`, `headwear`, `home-and-lifestyle`, `jewelry`, `lanyards-and-keychains`, `other-accessories`, `tech-accessories`, `wallets-and-card-holders`, `watches` - `collectibles` → `analog-music`, `comic-books`, `figures`, `food-and-consumer-products`, `homeware`, `other-collectibles`, `pins-and-keychains`, `plushes`, `prints`, `skate-decks`, `sports-equipment`, `toys` - `electronics` → `audio`, `cellphones`, `computer-and-gaming-accessories`, `computer-components`, `gaming-consoles`, `laptops-and-desktops`, `other-electronics`, `small-appliances`, `smart-watches`, `tablets`, `video-games` - `trading-cards` → `sealed-boxes`, `graded-singles`, `ungraded-singles` This set can drift as StockX adds or reorganizes subcategories -- treat it as a snapshot, not a permanently fixed enum, and always prefer the live response over this list. Example response: ```json { "code": 200, "msg": "OK", "data": { "categories": [ { "name": "Shoes", "slug": "shoes", "subcategories": [ {"name": "Boots", "slug": "boots"}, {"name": "Cleats", "slug": "cleats"}, {"name": "Sandals", "slug": "sandals"} ] }, { "name": "Trading Cards", "slug": "trading-cards", "subcategories": [ {"name": "Sealed Boxes", "slug": "sealed-boxes"}, {"name": "Graded Singles", "slug": "graded-singles"}, {"name": "Ungraded Singles", "slug": "ungraded-singles"} ] } ] } } ```
MCP tool stockx_categories
/stockx/releasesReturns a date-ordered page (release date ascending) of StockX's upcoming release calendar: new and restocked products releasing on or after the given date, with normalized product summaries, headline pricing, and each item's published release date. Credential-free public data from the same GraphQL API backing StockX's own releases page.
Response notes
- Results are always sorted by release date ascending, starting from `from`. StockX's release calendar mixes true street-date releases with items whose original street date has passed but were newly listed/restocked, so an occasional older `release_date` appearing near the top of the page is expected upstream behavior, not a parser bug. - `total_count` reflects StockX's full matching-result count for the applied `from` filter, not just `len(releases)`. - Each `releases[]` entry uses the same shape as a `/stockx/search` result row, with `release_date` additionally populated from StockX's own published release-date trait. - An invalid `from` value (not `YYYY-MM-DD`) returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "from": "2026-08-04", "page": 1, "limit": 20, "total_count": 469, "releases": [ { "id": "019eaf97-6952-7315-aaca-64a3d36b691d", "url_key": "nike-kobe-5-protro-jalen-brunson-ny-vs-ny-pe", "title": "Nike Kobe 5 Protro Jalen Brunson NY vs. NY PE", "brand": "Nike", "model": "Nike Kobe 5 Protro", "gender": "men", "product_category": "sneakers", "image_url": "https://images.stockx.com/images/nike-kobe-5-protro-jalen-brunson-ny-vs-NY-pe.jpg", "release_date": "2026-08-04", "lowest_ask": 520, "highest_bid": 550, "last_sale": 599 } ] } } ```
MCP tool stockx_releases
Related APIs
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
Marketplaces & Retail
Turn public Shop.app product and merchant pages into structured JSON for e-commerce product intelligence, price research, shop monitoring, and marketplace discovery workflows.
How to scrape StockX
Crawlora's five StockX endpoints return product search, detail, the brand and category directories, and the release calendar as normalized JSON with one API key — the two directory endpoints exist so you can build valid filter values before you search, rather than guessing them.
/stockx/brands returns StockX's full brand catalog — 396 brands at the time of writing, not a paginated subset — and /stockx/categories returns the 7 top-level categories with their subcategories. The brand slugs (nike, jordan, new-balance) are exactly what the search endpoint's brand parameter expects.
/stockx/search requires a category — sneakers, shoes, apparel, accessories, collectibles, trading-cards or electronics — and takes an optional free-text query plus facets for gender, brand, model, color, shoe height, activity, availability and sort. An invalid enum value returns a 400 naming the allowed values before any upstream request is made, so bad filters fail fast rather than silently returning nothing.
total_count is StockX's own match count for your filters, but it tops out at 1,000: a narrow search such as pink Crocs returns a real 209 while broad ones report a flat 1,000. Treat 1,000 as "at least this many" and narrow the facets if you need a figure you can trust.
Pass a product's url_key slug to /stockx/product/{slug} for identity (title, brand, model, colorway, style id, retail price, release date) plus live market data — lowest ask, highest bid, last sale, trailing average price and sales count, and per-delivery-tier ask levels. A well-formed slug that matches nothing returns a 404 rather than an empty 200.
/stockx/releases returns a date-ascending page of upcoming and restocked products from a given from date, with normalized summaries and headline pricing.
FAQ
Call Crawlora's /stockx/search endpoint with a category — it is required — plus an optional keyword query and facet filters. Results are normalized product cards carrying lowest ask, highest bid and last sale alongside the product identity.
Because that is StockX's own reporting ceiling, not a Crawlora limit. Verified live: a broad category search reports a flat 1,000, while a narrow one — pink Crocs under shoes — reports a genuine 209 and a nonsense keyword reports 0. So the number is a real count below the cap and a floor above it. Narrow by brand, color or activity if you need an exact figure.
/stockx/product/{slug} returns lowest ask, highest bid, last sale, a trailing average price and sales count, the individual active seller listings, and ask levels broken out by StockX's own delivery-speed tiers (standard, express standard, express next day, express expedited) with the number of active asks and lowest ask at each.
No, and that is what the directory endpoints are for. /stockx/brands returns every brand with the exact slug the search endpoint expects, and /stockx/categories returns the seven valid category values with their subcategories. Fetch those once, cache them, and build filters from real values instead of guessing.
No StockX account or login is required from the caller — only your Crawlora API key. StockX itself sits behind Cloudflare and does not answer plain automated requests, so the credential-free part that matters is that Crawlora absorbs that rather than passing it to you.
Yes — /stockx/releases returns the calendar date-ascending from whatever from date you pass. StockX's own calendar mixes true street-date releases with items whose original date has passed but were newly listed or restocked, so an occasional older release date near the top of a page is upstream behaviour rather than a parsing fault.