Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com API & Scraper
Decathlon US and Brazil search/product detail API.
🤖 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.
country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com API returns live Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com data as clean JSON for decathlon us and brazil search/product detail api. country=br selects source-ranked brazil search; default us preserves its existing catalogue. us scope: search the decathlon.com The primary endpoint, search, returns BR: products[]{product_id,handle,url,title,vendor,description,description_html,image,image_count,available,price_min,price_max,currency,v…. Developers reach for it when they need to track product listings, prices, availability, variants and reviews without maintaining one-off scraping code or separate API contracts. If you were about to build or fix a Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com scraper, this API is the maintained alternative — it returns the same data as clean JSON, with the proxies, rotation and anti-bot handling already solved. This page covers the live example, request shape, response shape and available actions: search, product_detail. Every request uses the same ReefAPI envelope, one API key and one shared credit pool, so it fits alongside the rest of your data stack.
Decathlon US: which ids resolve, and which unit to trust
This covers decathlon.com, which is the United States store and nothing else. Prices are USD and the whole US catalog was 510 products at measurement time, so a term the US store does not carry legitimately returns nothing. Rows measured 2026-08-27 on handle kiprun-kipride-mens-running-shoes-380020 and its 22 variants unless noted.
| Field | What it is | Measured example |
|---|---|---|
| handle | The key that resolves in a single round trip: the last path segment of decathlon.com/products/<handle>. | kiprun-kipride-mens-running-shoes-380020 |
| product_id | Numeric store id returned as a string. Accepted, but resolved via a catalog index because the store does not serve a product by id. | "8042533847102" |
| variants[].variant_id | Per size-and-color variant id, also a string. | "42582963060798" |
| variants[].sku | Decathlon's own 7-digit item code, one per variant. | "5815513" |
| variants[].barcode | EAN-13, one per variant. | "3608394355507" |
| grams vs weight + weight_unit | grams is normalized on every variant; weight is the raw figure and its unit changes row to row. | 433 g on all 22 variants, but weight_unit "kg" on one row and "lb" on the next |
| inventory_quantity | Live per-variant stock count, with inventory_policy deny. | 9, 5, 10, 2 across the first four sizes |
| price / compare_at_price / currency | USD only. compare_at_price is null unless the item is on sale. | 140.0 USD; compare_at_price present on 0 of 22 variants |
| collection.products_count vs products_published | Decathlon's declared collection size against how many it actually serves. | 107 vs 91 on the `womens` collection |
| facets.vendor | Live counts for Decathlon's house brands within your result set. | Quechua 34, Simond 20, Wedze 13, Forclaz 11, Kiprun 9, Van Rysel 4 |
weight_unit_varies came back true on a product whose every variant weighs exactly the same 433 g, because Decathlon stores identical weights in different units on different rows. Use `grams` for anything you compute and treat weight and weight_unit as raw passthrough.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/decathlon/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "hiking boots"
}
}{
"ok": true,
"meta": {
"api": "decathlon",
"endpoint": "search",
"mode": "live",
"latency_ms": 2871.5,
"record_count": 20,
"bytes": 4916206,
"cache_hit": false,
"completeness_pct": 100,
"stop_reason": "limit_reached",
"search_mode": "catalog",
"ranking": "engine_relevance",
"source": {
"route": "/products.json",
"upstream_calls": 4,
"catalog_source": "live",
"scanned": 536
},
"pagination": {
"page": 1,
"per_page": 20,
"total_results": 35,
"returned": 20,
"has_more": true,
"next_page": 2
},
"filters": {
"applied": [
"query"
],
"ignored": []
},
"matching": {
"all_terms": 35,
"any_term": 0
},
"notes": null,
"charged_credits": 1,
"version": "1.0.0"
},
"data": {
"products": [
{
"product_id": "7840733397054",
"handle": "quechua-mens-waterproof-snow-hiking-boots-nh100-high-top-zip-black-351123-fw25",
"url": "https://www.decathlon.com/products/quechua-mens-waterproof-snow-hiking-boots-nh100-high-top-zip-black-351123-fw25",
"title": "Quechua Men’s NH100 Warm Waterproof Easy-On Snow Hiking Boots",
"vendor": "Quechua",
"product_type": "Snow boots",
"tags": [
"8851794",
"FAMILY: 11354",
"Footwear"
],
"description": "Made for men who want to embrace the simple joys of snow—walking, playing, having fun, and reconnecting with their inner child.",
"description_html": "<p>Made for men who want to embrace the simple joys of snow—walking, playing, having fun, and reconnecting with their inner child.</p>",
"image": "https://cdn.shopify.com/s/files/1/1330/6287/files/8851794-product_image-p2904869.jpg?v=1755553663",
"image_count": 8,
"available": true,
"price_min": 45,
"price_max": 45,
"compare_at_price_min": 69.99,
"compare_at_price_max": 69.99,
"currency": "USD",
"on_sale": true,
"variant_count": 9,
"in_stock_variant_count": 5,
"grams_min": 986,
"grams_max": 1318,
"skus": [
"5057675",
"5057676",
"5057677"
],
"options": [
"Color",
"Size"
],
"published_at": "2025-12-29T08:56:20-08:00",
"created_at": "2025-08-18T14:20:22-07:00",
"updated_at": "2026-09-23T14:36:07-07:00"
},
{
"product_id": "7840732348478",
"handle": "quechua-womens-warm-and-waterproof-snow-hiking-boots-nh100-mid-black-346334-fw25",
"url": "https://www.decathlon.com/products/quechua-womens-warm-and-waterproof-snow-hiking-boots-nh100-mid-black-346334-fw25",
"title": "Quechua Women's NH100 Warm Waterproof Mid Snow Hiking Boots",
"vendor": "Quechua",
"product_type": "Snow boots",
"tags": [
"8873835",
"FAMILY: 11354",
"FW25"
],
"description": "A great balance of warmth and waterproof protection at an affordable price—perfect for occasional winter outings in town or on trails with light snow.",
"description_html": "<p>A great balance of warmth and waterproof protection at an affordable price—perfect for occasional winter outings in town or on trails with light snow.</p>",
"image": "https://cdn.shopify.com/s/files/1/1330/6287/files/8873835-product_image-p2904938.jpg?v=1755553615",
"image_count": 8,
"available": true,
"price_min": 30,
"price_max": 30,
"compare_at_price_min": 49.99,
"compare_at_price_max": 49.99,
"currency": "USD",
"on_sale": true,
"variant_count": 7,
"in_stock_variant_count": 2,
"grams_min": 725,
"grams_max": 978,
"skus": [
"5177939",
"5177940",
"5177941"
],
"options": [
"Color",
"Size"
],
"published_at": "2026-01-21T11:03:25-08:00",
"created_at": "2025-08-18T14:11:42-07:00",
"updated_at": "2026-09-23T14:36:07-07:00"
},
{
"product_id": "7278947926078",
"handle": "womens-sh500-warm-waterproof-snow-hiking-boots-332914",
"url": "https://www.decathlon.com/products/womens-sh500-warm-waterproof-snow-hiking-boots-332914",
"title": "Quechua Women's SH500 Warm Waterproof Snow Hiking Boots",
"vendor": "Quechua",
"product_type": "Snow boots",
"tags": [
"8644860",
"BSG",
"DEAL"
],
"description": "As elegant as they are technical, these warm leather winter snow boots are suitable for all types of terrain thanks to their Snowcontact soles",
"description_html": "As elegant as they are technical, these warm leather winter snow boots are suitable for all types of terrain thanks to their Snowcontact soles",
"image": "https://cdn.shopify.com/s/files/1/1330/6287/files/8644860-product_image-p2289103.jpg?v=1703075803",
"image_count": 13,
"available": true,
"price_min": 95,
"price_max": 95,
"compare_at_price_min": 139,
"compare_at_price_max": 139,
"currency": "USD",
"on_sale": true,
"variant_count": 7,
"in_stock_variant_count": 2,
"grams_min": 900,
"grams_max": 1300,
"skus": [
"4294662",
"4294663",
"4294664"
],
"options": [
"Color",
"Size"
],
"published_at": "2023-11-14T14:55:43-08:00",
"created_at": "2023-11-14T14:55:43-08:00",
"updated_at": "2026-09-23T14:36:09-07:00"
}
],
"collection": null,
"facets": {
"product_type": [
{
"value": "Shoes",
"count": 24
},
{
"value": "Snow boots",
"count": 9
},
{
"value": "Trousers/pants",
"count": 2
}
],
"vendor": [
{
"value": "Quechua",
"count": 35
}
],
"tag": [
{
"value": "Published",
"count": 30
},
{
"value": "INVENTORY_FC_IS_NOT_0",
"count": 26
},
{
"value": "SIZE_MSG_TOO_SMALL",
"count": 26
}
],
"price": {
"min": 14,
"max": 100
}
}
}
}What the Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Select country=br for Brazil's source-ranked query search: relevance only, page 1..50, max_results 1..24. BR prices are BRL, source pages contain up to 24 products, and US filters/collections/suggest are unavailable in BR. With default country=us: search or browse the decathlon.com (US) catalogue. Give a free-text `query` ('hiking boots', 'bike helmet', 'kiprun'), a `collection` handle to browse (`running`, `womens`, `mens-hiking-boots`, `all`), or both to search inside one collection. Every result carries Decathlon's own product id and handle, the product title, house brand, product type, tags, image, price range, sale price, stock flag and — in catalogue and collection mode — the variant count, SKU list and shipping-weight range. Narrow with product_type, vendor, tag, min_price, max_price and available_only; sort by price, name or publish date; page through the whole match set. Live facet vocabularies with counts come back with every catalogue-mode response, so the filter values are never a guess. Feed a result's `handle` straight into `product_detail` for barcodes and per-variant weights. | Pricing teams call search to get select country=br for Brazil's source-ranked query search. | country, query, collection, mode, max_results, ... |
| product_detail | For country=br: resolve a search product_id by exact source search match, then fetch its actual product page. Or pass the returned handle / Brazil URL. Detail includes source identity, BRL SKU offers, availability, images, description, published EAN and seller fields; weights are optional/null. Default US scope: get one Decathlon product in full, by handle, product id or decathlon.com URL — title, house brand, product type, tags, the marketing description in both plain text and its original HTML, every image with dimensions and the variants it belongs to, product video and 3D media, the option axes with their values, and one row per size x colour variant. Each variant row carries Decathlon's own variant id, the retail SKU, the **EAN-13 barcode**, the **shipping weight in grams** (plus the merchant's own weight + unit pair), the live **inventory quantity** as a real integer, the buyable flag, price, compare-at price, tax and shipping flags, and any volume-pricing rules. Built for shipping-cost and catalogue-matching work: barcode and grams are the two fields this endpoint exists for. | Marketplace operators call product_detail to get for country=br. | country, handle, product_id, url |
Call search from your stack
curl -X POST https://api.reefapi.com/decathlon/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"hiking boots"}'import requests
r = requests.post(
"https://api.reefapi.com/decathlon/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "hiking boots"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/decathlon/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "hiking boots"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.decathlon.search with {"query":"hiking boots"}.Who uses this API and why
- Pricing teams use Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com to get select country=br for Brazil's source-ranked query search.
- Marketplace operators use Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com to get for country=br.
- Catalog enrichment teams use Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com to track product listings, prices, availability, variants and reviews, all from one ReefAPI key and credit pool.
Questions developers ask before integrating
Which Decathlon country store does this cover?
The United States store at decathlon.com, and only that one. Every price came back with currency USD and a live catalog read scanned 510 products in total. Decathlon's European storefronts are separate sites with separate catalogs, different prices and different product handles, and none of them sit behind this API. A US catalog that small also means a search returning nothing is usually a real answer rather than a failure.
Should I pass handle or product_id?
handle, whenever you have it. It is the only key the store's own product route resolves, so it costs a single round trip. product_id is accepted for convenience, but the store returns 404 for a product fetched by id, so the id has to be mapped to its handle through a cached catalog index first, and the first such call after that cache expires also pays for a full catalog read. The search action returns both, so store the handle.
Why does weight_unit change between variants of the same product?
Because Decathlon's own records store them that way. On one running shoe all 22 variants returned grams 433, but weight and weight_unit alternated between 0.433 kg and 0.9546 lb depending on the row, and the product-level weight_units_seen came back as ["kg", "lb"] with weight_unit_varies true. Read `grams`: it is normalized on every variant and does not vary for variants that genuinely weigh the same.
Does this return real stock levels?
Yes, as an integer per variant. The measured running shoe returned inventory_quantity 9, 5, 10 and 2 for its first four size-and-color combinations, with inventory_policy "deny" (the store will not oversell) and inventory_management "shopify". At the product level, variant_count against in_stock_variant_count lets you spot partial sell-through without walking the variant list: a snow boot in the same run returned 9 variants with only 6 in stock.
Why is compare_at_price null on a product I know was discounted?
compare_at_price is populated only while the item is actually on sale. The running shoe measured returned compare_at_price null on all 22 variants, meta.coverage.with_compare_at_price 0 and on_sale false. A snow boot in the same run returned price_min 45.0 against compare_at_price_min 69.99 with on_sale true. So null means not currently discounted rather than missing data, and on_sale is the flag to branch on.
Why does a collection's products_count not match how many products I get back?
Because Decathlon's declared figure and its served figure disagree, and both are returned rather than one being quietly preferred. Browsing the `womens` collection returned collection.products_count 107, collection.products_published 91 and pagination.total_results 91. products_published is what you can actually page through; products_count is Decathlon's own number. Page against total_results and pagination.has_more.
What are the odd values in the tags array?
Decathlon mixes merchandising tags with internal bookkeeping in one list and they are returned verbatim. A single snow boot came back with tags including "hiking_boots" and "FW25" (a season code) next to "FAMILY: 11354" and a bare numeric "8851794". Rather than guessing which tags exist, read facets.tag from your own result set: it lists only the values your matches actually carry, with counts.
What is the difference between catalog mode and suggest mode?
catalog is the default and searches the full US catalog: a query for "hiking boots" returned pagination.total_results 35 out of 510 products scanned, with facets, sorting and paging. suggest calls the store's type-ahead index instead, which is one fast request but hard-capped at 10 results with no total and no second page. Use suggest only behind a search box, never for data collection. Any explicit `sort` forces catalog mode so the ordering covers the whole match set rather than one page.
What is the Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com API?
Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com API is a ReefAPI endpoint group for decathlon us and brazil search/product detail api. country=br selects source-ranked brazil search; default us preserves its existing catalogue. us scope: search the decathlon.com It returns live JSON through POST requests under /decathlon/v1.
Is the Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com login or account?
No login to Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com 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 Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com 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 Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com API use?
Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call decathlon actions with the same key, credit pool and JSON envelope used by normal REST requests.