Wethenew API & Scraper
The Wethenew API turns wethenew.com, the Paris sneaker and streetwear resale marketplace, into JSON in four actions.
🤖 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.
search finds products by model (dunk low), colourway or style code (DD1391-100) and narrows them by brand, model line, streetwear category, 48-hour express delivery, stock and price, 40 rows a page. collection lists one of the site's collections (a brand such as nike, a line such as air-jordan-4, or a theme such as livraison-48h) with the same filters and five sort orders. Every row has the product id, handle, style code, brand, model, the EU sizes you can buy and the from-price, which is the cheapest size you can buy, with that size and whether it is the marketplace or the express offer. product returns one product in full: every EU size with its US size and up to two offers, the marketplace price and Wethenew's own 48-hour express price with its stock, each with its variant id, barcode and before-discount price where there is one. Choose the market with country: Wethenew prices the United Arab Emirates in AED, Poland in PLN, Saudi Arabia in SAR and its other markets in EUR, and every price in the answer says which. One ReefAPI key, the standard { ok, data, meta, error } envelope, no Wethenew account.
One shoe, four currencies — the Air Jordan 4 'Vivid Sulfur' from-price by market
The cheapest size you could buy of the Air Jordan 4 'Vivid Sulfur' (AQ9129-101) on 2026-10-15, as the API returned it for each market. Pass country to choose the market.
| market | currency | from-price |
|---|---|---|
| France (FR) | EUR | 175 |
| Germany (DE) | EUR | 175 |
| United Arab Emirates (AE) | AED | 898 |
| Poland (PL) | PLN | 781 |
| Saudi Arabia (SA) | SAR | 1008 |
| United States (US) | EUR | 175 |
Wethenew lists 233 markets; three of them have their own currency and the rest are priced in EUR.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/wethenew/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "dunk low",
"country": "FR"
}
}{
"ok": true,
"meta": {
"api": "wethenew",
"endpoint": "search",
"mode": "live",
"latency_ms": 919.5,
"record_count": 40,
"bytes": 175263,
"cache_hit": false,
"has_more": true,
"next_cursor": "eyJjIjoiZXlKd1lXZGxJam95TENKc1lYTjBYMmxrSWpvMk56STRNVEF6T1RVeU5Ea3pMQ0p5WlhabGNuTmxJanAwY25WbExDSnZabVp6WlhRaU9qTTVmUT09IiwicCI6WyI3MjkxMTY0NTI0NjUzIiwiNDg3MjE1NjY0MzQzNyIsIjY1NTc5NzIyMDE1ODEiLCI2NjM4MzA5MjQ1MDM3IiwiNDg5MDg3MDM0OTkzMyIsIjcwNTIxMjU2Njc0MzciLCI2NjkzMjA5NTA1OTAxIiwiNjk1ODk0MjMyMjc5NyIsIjY5NDcyNDk2MTkwNTMiLCI2NzMxNzc5MDQ3NTMzIiwiNjY4NTAzMTQ2NTA2OSIsIjcxMDU0NDU4NTUzNDEiLCI2NjQ5MDYxMDE1NjYxIiwiNjYxMTk3MTgwMTE5NyIsIjY2NTA2ODM3NTI1NTciLCI3NDQ5MzAyMjA0NTI1IiwiNzIyMzYwNTEzMzQyMSIsIjY2NDEwMzY5NTE2NjEiLCI2NTcwNTE2NTc4NDEzIiwiNzAxNTYxMzk1NjIwNSIsIjY5MDQ3ODQ4NDY5NTciLCI2NjUwNjg4MTEwNzAxIiwi",
"duplicates_dropped": 0,
"limit": 40,
"sort": "relevance",
"filters_applied": {
"in_stock_only": true
},
"facets": {
"brand": [
{
"value": "Air Jordan",
"count": 327
},
{
"value": "Nike",
"count": 1000
},
{
"value": "Adidas",
"count": 39
}
],
"model": [
{
"value": "Air Jordan 4",
"count": 1
},
{
"value": "Air Force 1",
"count": 316
},
{
"value": "Air Jordan 1 Low",
"count": 270
}
],
"category": [
{
"value": "T-Shirt",
"count": 1
},
{
"value": "Pantalon",
"count": 2
},
{
"value": "Lacets",
"count": 2
}
],
"availability": [
{
"value": "In stock",
"count": 1000
},
{
"value": "Out of stock",
"count": 1000
}
],
"express_delivery": [
{
"value": "Yes",
"count": 61
},
{
"value": "No",
"count": 1000
}
]
},
"country": "FR",
"currency": "EUR",
"language": "EN",
"price_basis": "price_from = the cheapest buyable size (marketplace or 48-hour express) under the site's own availability rule; price_min_all_sizes includes sold-out sizes",
"total": 1000,
"total_capped": true,
"total_is_exact": false,
"upstream_requests": 1,
"token_source": "[redacted-secret]",
"warnings": [
"the source's count stops at 1000; the real number is higher"
],
"charged_credits": 2,
"version": "1.0.0",
"request_id": "385c932864f3430f",
"queue_ms": 1.6,
"fetched_at": "2026-10-15T17:03:00.597Z"
},
"data": {
"rows": [
{
"product_id": "7291164524653",
"handle": "nike-dunk-low-next-nature-olive-aura",
"url": "https://wethenew.com/en/products/nike-dunk-low-next-nature-olive-aura",
"title": "Dunk Low Next Nature Olive Aura",
"brand": "Nike",
"model": "Nike Dunk",
"product_type": "Sneakers",
"style_code": "HF5384-300",
"in_stock": true,
"price_from": 125,
"price_from_size": "39",
"price_from_offer": "marketplace",
"express_price_from": null,
"express_price_from_size": null,
"price_min_all_sizes": 52.5,
"sizes_in_stock": [
"35.5",
"36",
"36.5"
],
"express_sizes_in_stock": [],
"currency": "EUR",
"country": "FR",
"image": "https://cdn.shopify.com/s/files/1/2358/2817/files/nike-dunk-low-next-nature-olive-aura1.webp?v=1712655367",
"created_at": "2024-04-09T08:35:44Z"
},
{
"product_id": "4872156643437",
"handle": "nike-dunk-low-black-white",
"url": "https://wethenew.com/en/products/nike-dunk-low-black-white",
"title": "Dunk Low Black White",
"brand": "Nike",
"model": "Nike Dunk",
"product_type": "Sneakers",
"style_code": "DD1391-100",
"in_stock": true,
"price_from": 70,
"price_from_size": "38.5",
"price_from_offer": "marketplace",
"express_price_from": 120,
"express_price_from_size": "44.5",
"price_min_all_sizes": 46,
"sizes_in_stock": [
"35.5",
"36",
"36.5"
],
"express_sizes_in_stock": [
"44.5",
"46"
],
"currency": "EUR",
"country": "FR",
"image": "https://cdn.shopify.com/s/files/1/2358/2817/files/Dunk_Low_Black_White_2069.webp?v=1754475147",
"created_at": "2020-12-31T12:00:12Z"
},
{
"product_id": "6557972201581",
"handle": "nike-dunk-low-spartan-green",
"url": "https://wethenew.com/en/products/nike-dunk-low-spartan-green",
"title": "Dunk Low Spartan Green",
"brand": "Nike",
"model": "Nike Dunk",
"product_type": "Sneakers",
"style_code": "DD1391-101",
"in_stock": true,
"price_from": 105,
"price_from_size": "40.5",
"price_from_offer": "marketplace",
"express_price_from": null,
"express_price_from_size": null,
"price_min_all_sizes": 105,
"sizes_in_stock": [
"35.5",
"36",
"36.5"
],
"express_sizes_in_stock": [],
"currency": "EUR",
"country": "FR",
"image": "https://cdn.shopify.com/s/files/1/2358/2817/products/dunk-low-spartan-green-305008.png?v=1638813958",
"created_at": "2021-04-06T16:43:16Z"
}
]
}
}What the Wethenew API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Wethenew's catalogue by model, colourway or style code, with brand, model, category, express-delivery, stock and price filters. Each row has the cheapest buyable size and the in-stock EU sizes, in the chosen market's currency. | Pricing teams call search to search Wethenew's catalogue by model, colourway or style code, with brand, model, category, e…. | query, brand, model, category, express_only, ... |
| collection | One collection (a brand, a model line or a theme such as livraison-48h) with the same filters and row shape as `search`, and five sort orders. | Marketplace operators call collection to get one collection (a brand, a model line or a theme such as livraison-48h) with the same filters…. | collection, brand, model, category, express_only, ... |
| product | One product in full: every EU size with its US size, the marketplace offer and the 48-hour express offer (each with price, buyable flag, variant id, barcode; express with its stock count), the cheapest buyable size, style code, brand, model, description, collections and images. Give `handle` (from a row) or `style_code`. | Catalog enrichment teams call product to get one product in full. | handle, style_code, country, language |
| suggest | The site's own search-as-you-type: matching products (handle, title, brand), collections (handle, title) and query completions. | Retail analysts call suggest to get the site's own search-as-you-type. | query, limit, country, language |
Call search from your stack
curl -X POST https://api.reefapi.com/wethenew/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"dunk low","country":"FR"}'import requests
r = requests.post(
"https://api.reefapi.com/wethenew/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "dunk low",
"country": "FR"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/wethenew/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "dunk low",
"country": "FR"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.wethenew.search with {"query":"dunk low","country":"FR"}.Who uses this API and why
- Compare a size's price across resale sites: product by style code gives Wethenew's price for every EU size next to StockX or GOAT.
- Find what ships in 48 hours: search with express_only, then read the express offer and stock per size.
- Price a shoe for the Gulf or Poland: call product with country AE, SA or PL and get the local price per size.
- Track a model line: collection air-jordan-4 sorted newest every day and watch the from-price and sizes in stock.
- Spot discounted express sizes: the express offer carries compare_at_price when Wethenew cuts its own price.
Questions developers ask before integrating
Why does a size have two prices?
Wethenew sells each size two ways: from its marketplace sellers, and from its own stock with delivery in 48 hours. product returns both as marketplace and express, each with its own price and whether you can buy it; express also gives the stock count, which was 0 or 1 on every express size measured. On the Air Jordan 4 'Vivid Sulfur' the EU 38 size was 175 EUR on the marketplace and 112 EUR express (sold out) on 2026-10-15.
What is the from-price on a search row?
price_from is the price of the cheapest size you can buy, from either offer; price_from_size names the EU size and price_from_offer says marketplace or express. Sold-out sizes keep a price on Wethenew, sometimes far below what you can buy, so they are left out of it; price_min_all_sizes gives the lowest price over every size, sold-out ones included. On 14 of 14 products the from-price on the search row equalled the product's own.
How is 'available' decided?
The way the site decides it: a size offer is buyable when Wethenew does not mark it unavailable, its price is not zero and, for the 48-hour express offer, stock is above zero. The store's raw flag is also returned as shopify_available_for_sale, because the two can differ; meta.flag_conflicts counts the sizes where they do.
Which currency are the prices in?
The currency of the market you pass as country (FR by default): AED for AE, PLN for PL, SAR for SA and EUR for the other 230 markets. Every row and every offer carries its currency, and the answer does not depend on where the call comes from.
Can I look a product up by style code?
Yes. product takes style_code (for example AQ9129-101) as well as handle, and returns the product whose sizes carry exactly that code. On the 14 products measured the style code on the search row matched the product's on 14 of 14.
How many results does a search return?
40 rows a page; pass meta.next_cursor to get the next page. meta.total is the source's own count, which stops at 1000 (total_capped says so). Rows the source repeats across a page boundary are dropped and counted in meta.duplicates_dropped (1 to 2 per page measured).
Are the prices current?
Yes. They come from the store itself, the price you would pay at checkout. All 348 size prices of 14 products matched the store's own product feed fetched separately on 2026-10-15.
What is not included?
Sales history, bids and the prices Wethenew pays sellers: the seller side of Wethenew needs a seller account. Item condition is not published per product; Wethenew lists new items.
What is the Wethenew API?
Wethenew API is a ReefAPI endpoint group for wethenew sneaker and streetwear prices as json: every eu size with its marketplace price and its 48-hour express price and stock, style code and barcode, in eur, aed, pln or sar. It returns live JSON through POST requests under /wethenew/v1.
Is the Wethenew API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Wethenew calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Wethenew login or account?
No login to Wethenew 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 Wethenew data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Wethenew API use?
Wethenew actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Wethenew from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call wethenew actions with the same key, credit pool and JSON envelope used by normal REST requests.