Get Decathlon data with one API
Decathlon API returns live Decathlon data as clean JSON for decathlon The primary endpoint, search, returns product results including product id, handle, title, vendor and product type.
2 active endpoints. Every call is 1 credit.
- POST/decathlon/v1/search
- POST/decathlon/v1/product_detail
What Decathlon endpoints does ReefAPI ship?
2 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Decathlon API
2 of 2 endpoints, ready to run
Search or browse the decathlon.com (US) catalogue.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the Decathlon API works
Decathlon is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 185 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
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.
What people build with Decathlon
The jobs this data is most often used for.
endpoints
credit per call
Pricing and assortment teams use Decathlon to search or browse the decathlon.com (US) catalogue.
Brand-protection teams use Decathlon to get one Decathlon product in full, by handle, product id or decathlon.com URL.
Retail analysts use Decathlon to read a retailer's own catalogue with full product detail, variants, price and stock, all from one ReefAPI key and credit pool.
What Decathlon data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 185 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
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"])Have a question? We got answers.
The questions people actually ask before wiring up Decathlon.
Get a free key →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 API?▾
Decathlon API is a ReefAPI endpoint group for decathlon It returns live JSON through POST requests under /decathlon/v1.
Is the Decathlon API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Decathlon calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Decathlon login or account?▾
No login to Decathlon 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 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 API use?▾
Decathlon actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Decathlon 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.
15 More APIs APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Decathlon, you are one call away from the rest of the category — no second contract, no second integration.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts.