H&M product data as JSON, with sale and member prices never mixed up
The H&M API turns hm.com into clean JSON in five actions: search, product/detail, category, search/suggest and product/availability.
5 active endpoints, on 1 and 2 credit tiers.
- POST/hm/v1/search
- POST/hm/v1/product/detail
- POST/hm/v1/category
- POST/hm/v1/search/suggest
- POST/hm/v1/product/availability
What H&M endpoints does ReefAPI ship?
5 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
H&M API
3 of 5 endpoints, ready to run
H&M products for a keyword in any of 41 markets: the price, the regular price on sale, the member price, currency, colours, sizes in stock and markers.
{ "ok": true, "meta": { "api": "hm", "endpoint": "search", "mode": "live", "latency_ms": 948.1, "record_count": 36, "cache_hit": false }, "data": { "results": [ { "article_code": "1307418014", "product_code": "1307418", "name": "Relaxed-Fit Linen-Blend Resort Shirt", "brand": "H&M", "url": "https://www2.hm.com/en_us/productpage.1307418014.html", "image": "https://image.hm.com/assets/hm/30/eb/30eb3ba3181758146c2448d0af10692e3262b1f8.jpg", "model_image": "https://image.hm.com/assets/hm/38/a5/38a53b8bfaf4db7fc0e887294a896304a19a2ab2.jpg", "images": [ "https://image.hm.com/assets/hm/20/57/20570a0ac8205da22115b5d059d05ae6411aaaf7.jpg", "https://image.hm.com/assets/hm/59/6c/596c46d001393262df700760b78c8e32a2882cb2.jpg", "https://image.hm.com/assets/hm/84/6b/846bd1603b120df172508c68ea2818841803fe4f.jpg" ], "price": 29.99, "regular_price": null, "on_sale": false, "discount_percent": null, "member_price": null, "price_formatted": "$29.99", "price_range": null, "currency": "USD", "color_name": "Dark brown", "color_hex": "#3F3838", "color_shades": [], "colors": [ { "article_code": "1307418014", "color_name": "Dark brown", "hex": "#3F3838", "url": "https://www2.hm.com/en_us/productpage.1307418014.html", "image": "https://image.hm.com/assets/hm/30/eb/30eb3ba3181758146c2448d0af10692e3262b1f8.jpg" }, { "article_code": "1307418003", "color_name": "Black", "hex": "#272627", "url": "https://www2.hm.com/en_us/productpage.1307418003.html", "image": "https://image.hm.com/assets/hm/d9/9c/d99c251537935da287d63489a71c2c03e4127da3.jpg" }, { "article_code": "1307418004", "color_name": "White/striped", "hex": "#EEEDE4", "url": "https://www2.hm.com/en_us/productpage.1307418004.html", "image": "https://image.hm.com/assets/hm/1d/37/1d377bf5324b3e80dd0de1286790523e6a0b1e02.jpg" } ], "color_count": 8, "sizes": [ { "size_code": "001", "label": "XS", "in_stock": true }, { "size_code": "002", "label": "S", "in_stock": true }, { "size_code": "003", "label": "M", "in_stock": true } ], "sizes_in_stock": 6, "availability": "Available", "coming_soon": false, "online": true, "pre_shopping": false, "new_arrival": false, "multipack": false, "external_brand": false, "markers": [], "main_category": "men_shirts_casual", "has_video": false }, { "article_code": "1307417006", "product_code": "1307417", "name": "Relaxed-Fit Linen-Blend Shirt", "brand": "H&M", "url": "https://www2.hm.com/en_us/productpage.1307417006.html", "image": "https://image.hm.com/assets/hm/40/5a/405a4987743735f7b1d6adf5624c127403f6193f.jpg", "model_image": "https://image.hm.com/assets/hm/7e/0a/7e0afa97d7dd5aa4917f96ebeb1b1fe72af71069.jpg", "images": [ "https://image.hm.com/assets/hm/8e/fc/8efc6e07b3ad5d811e6c19485653c089ad0a4d66.jpg", "https://image.hm.com/assets/hm/31/fd/31fd7fe117f641232f0c46442600d5f99d306778.jpg", "https://image.hm.com/assets/hm/8c/39/8c3919f043101b552420bc66267bf503ce8cf850.jpg" ], "price": 39.99, "regular_price": null, "on_sale": false, "discount_percent": null, "member_price": null, "price_formatted": "$39.99", "price_range": null, "currency": "USD", "color_name": "Light beige", "color_hex": "#B3AB98", "color_shades": [], "colors": [ { "article_code": "1307417006", "color_name": "Light beige", "hex": "#B3AB98", "url": "https://www2.hm.com/en_us/productpage.1307417006.html", "image": "https://image.hm.com/assets/hm/40/5a/405a4987743735f7b1d6adf5624c127403f6193f.jpg" }, { "article_code": "1307417025", "color_name": "Dark blue", "hex": "#31344A", "url": "https://www2.hm.com/en_us/productpage.1307417025.html", "image": "https://image.hm.com/assets/hm/46/bf/46bf9a1915eff10996840159767b56c61eb3d98f.jpg" }, { "article_code": "1307417018", "color_name": "White/striped", "hex": "#F0F1F0", "url": "https://www2.hm.com/en_us/productpage.1307417018.html", "image": "https://image.hm.com/assets/hm/f1/97/f197cb65ea885c92c6c79370f6cf447297c5e31d.jpg" } ], "color_count": 8, "sizes": [ { "size_code": "001", "label": "XS", "in_stock": false }, { "size_code": "002", "label": "S", "in_stock": false }, { "size_code": "003", "label": "M", "in_stock": true } ], "sizes_in_stock": 4, "availability": "Available", "coming_soon": false, "online": true, "pre_shopping": false, "new_arrival": false, "multipack": false, "external_brand": false, "markers": [ { "text": "H&M Premium Selection", "type": "qualityMarker" } ], "main_category": "men_shirts_casual", "has_video": false }, { "article_code": "1307417025", "product_code": "1307417", "name": "Relaxed-Fit Linen-Blend Shirt", "brand": "H&M", "url": "https://www2.hm.com/en_us/productpage.1307417025.html", "image": "https://image.hm.com/assets/hm/46/bf/46bf9a1915eff10996840159767b56c61eb3d98f.jpg", "model_image": "https://image.hm.com/assets/hm/8c/b5/8cb591bb916d681443b51d296ec2cb10c2d78ce2.jpg", "images": [ "https://image.hm.com/assets/hm/d3/0d/d30d56e8402e1c3aecb835b71f5ecb2278f13bbd.jpg", "https://image.hm.com/assets/hm/5d/b0/5db034fd58a7fde899d7d806c421662e5c6f36d5.jpg", "https://image.hm.com/assets/hm/cf/7b/cf7b2f4f405008c51b6fd6c2593e60fa6c17936a.jpg" ], "price": 39.99, "regular_price": null, "on_sale": false, "discount_percent": null, "member_price": null, "price_formatted": "$39.99", "price_range": null, "currency": "USD", "color_name": "Dark blue", "color_hex": "#31344A", "color_shades": [ "Bright blue", "Cobalt blue", "Dark blue" ], "colors": [ { "article_code": "1307417025", "color_name": "Dark blue", "hex": "#31344A", "url": "https://www2.hm.com/en_us/productpage.1307417025.html", "image": "https://image.hm.com/assets/hm/46/bf/46bf9a1915eff10996840159767b56c61eb3d98f.jpg" }, { "article_code": "1307417006", "color_name": "Light beige", "hex": "#B3AB98", "url": "https://www2.hm.com/en_us/productpage.1307417006.html", "image": "https://image.hm.com/assets/hm/40/5a/405a4987743735f7b1d6adf5624c127403f6193f.jpg" }, { "article_code": "1307417018", "color_name": "White/striped", "hex": "#F0F1F0", "url": "https://www2.hm.com/en_us/productpage.1307417018.html", "image": "https://image.hm.com/assets/hm/f1/97/f197cb65ea885c92c6c79370f6cf447297c5e31d.jpg" } ], "color_count": 8, "sizes": [ { "size_code": "001", "label": "XS", "in_stock": true }, { "size_code": "002", "label": "S", "in_stock": true }, { "size_code": "003", "label": "M", "in_stock": true } ], "sizes_in_stock": 6, "availability": "Available", "coming_soon": false, "online": true, "pre_shopping": false, "new_arrival": false, "multipack": false, "external_brand": false, "markers": [ { "text": "H&M Premium Selection", "type": "qualityMarker" } ], "main_category": "men_shirts_casual", "has_video": false } ], "count": 36, "page": 1, "page_size": 36, "total_results": 132, "total_pages": 4, "has_more": true, "page_out_of_range": null, "filters_available": { "departments": [ { "id": "all", "label": "All", "count": 132 }, { "id": "ladies_all", "label": "Women", "count": 50 }, { "id": "men_all", "label": "Men", "count": 52 } ], "colors": [ { "id": "beige_f5f5dc", "count": 31 }, { "id": "black_000000", "count": 8 }, { "id": "blue_0000ff", "count": 27 } ], "materials": [ { "id": "Linen", "count": 125 }, { "id": "Poplin", "count": 8 }, { "id": "Twill", "count": 1 } ], "sale": { "false": 115, "true": 17 }, "price_range": { "min": 7.49, "max": 109 } }, "query": "linen shirt", "matched_query": null, "did_you_mean": [], "related_searches": [ "shirt" ], "query_blocked": null, "sort_applied": "relevance", "filters_applied": null, "country": "us", "language": "en", "locale": "en_us", "currency": "USD" } }
How the H&M API works
H&M 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 252 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.
Compare what members and non-members pay for one H&M product, colour by colour
H&M prices each colour separately, and member prices sit next to sale prices on the same product. Two calls give a table you can store.
{"query": "jean", "country": "fr"}Rows with price and member_price. On 2026-09-15, 15 of 36 rows carried a member price below the price.
{"article_code": "1323075003", "country": "fr"}27.99 EUR with member_price 15.99 EUR, rating 4.8 from 16 reviews, and 10 colours: 2 on sale at 19.99, 4 with a member price, 4 at the regular price.
A colour-by-colour price table with the sale, regular and member price of each article and its sizes in stock - in any of 41 markets.
curl -X POST https://api.reefapi.com/hm/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"dress"}'{
"ok": true,
"data": { … },
"meta": {
"api": "hm",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}H&M shows up to three prices - the API tells you which is which
A sale price every shopper gets, a regular price, and a lower price only H&M members get. Taking the lowest number would quote a member-only price as the shelf price. Values measured on 2026-09-15.
| H&M article | price | regular_price | member_price | What H&M shows |
|---|---|---|---|---|
| Baggy Regular Waist Jeans, washed denim blue (France) | 27.99 EUR | null | 15.99 EUR | Member price 15.99 - non-members pay 27.99 |
| Baggy Regular Waist Jeans, light beige (France) | 19.99 EUR | 27.99 EUR | null | Sale price for every shopper |
| Lace-Trimmed Jersey Dress, black (US) | 11.99 USD | 27.99 USD | null | Sale -57%, "Sale price in effect for 90+ days" |
| Long-sleeved tulle-skirt dress (UK) | 9.99 GBP | null | null | Regular price, no promotion |
The two jeans rows are colours of the same product: product/detail returned 10 colours, 2 on sale at 19.99 EUR, 4 with a member price (15.99 or 19.99 EUR) and 4 at the regular 27.99 EUR.
Which market, which price, which code, and what H&M does not publish
41 H&M markets, one currency each, several languages where H&M offers them. Measured on 2026-09-15 across 120 searches, 75 product reads in all 41 markets, 107 controlled checks and a check of 6 products against H&M's own published product data. Four of these lines go against us.
country picks the market and language the version where H&M offers several. A search and a product read succeeded in all 41 markets on 2026-09-15 and the currency matched the market 41 of 41 times.
price is what any shopper pays, regular_price is set only while a sale price runs, member_price is the H&M member price and never replaces price. discount_percent and H&M's legal price note come with a sale.
product/detail lists every colour of the product as its own article with prices, sizes in stock and few-left flags. The French jeans returned 10 colours with three different price situations.
On 6 of 6 products, name, price, member price, rating, review count and the set of in-stock sizes matched H&M's published product data. Search rows and product pages agreed on 75 of 75 prices and 399 of 400 size flags. No HTML tags or entities in 240 payloads.
A misspelling H&M corrects comes back with matched_query; a keyword with no match is empty (8 of 8 nonsense keywords, 0 of 23 real keywords emptied); a page past the end is empty with page_out_of_range instead of repeating page 1.
Composition per garment part (shell, lace, lining), preferred materials with their share, material explanations, care instructions and the recycled share and country of production where H&M publishes them.
H&M publishes its own 13-digit size codes, not EAN or GTIN, and says whether a size can be ordered or is down to a few pieces - never how many are left, and not per store.
rating and review_count are H&M's figures; reviews_sample carries the up to 10 reviews H&M shows on the product page, not the full list.
On 24 sampled products care instructions were present on 12, preferred materials on 11, and country of production and model height on 2 each. member_price exists only in markets and on products where H&M runs member prices.
H&M's asia1 (HKD) and asia3 (TWD) sites and its English Europe site are served under the names H&M gives them, because H&M does not say which countries they sell to.
What people build with H&M
The jobs this data is most often used for.
endpoints
credits per call
Price trackers follow H&M sale and member prices per colour across 41 markets and currencies.
Fashion analytics teams compare the same article's price between markets, from USD to TRY and JPY.
Resale and sustainability apps read composition, preferred materials, care instructions and country of production.
Stock alerts watch which sizes of a colour are back in stock or down to a few pieces.
What H&M 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 252 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/hm/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"dress"}'import requests
r = requests.post(
"https://api.reefapi.com/hm/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "dress"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up H&M.
Get a free key →Which price does a shopper without an H&M membership pay?▾
price. It is the sale price when one is running, otherwise the regular price. member_price is the H&M member price and is only filled where H&M shows one; it is never copied into price. On 2026-09-15 a French search for jean returned 15 rows with a member price among 36, and not one of them had the member price as price.
Article code or product code - which do I pass?▾
Either, or the hm.com URL. The 10-digit number in an H&M link (1323075003) is one colour of a product; its first 7 digits (1323075) are the product. A product code returns the product's default colour, and variants lists every colour with its own article code, prices and sizes.
Which markets and languages are covered?▾
41 H&M markets, each with its own prices and currency: the United States, Canada, Mexico, the UK, Ireland, Germany, Austria, Switzerland, France, Belgium, the Netherlands, Spain, Portugal, Italy, Greece, Sweden, Norway, Denmark, Finland, Poland, Czechia, Slovakia, Hungary, Romania, Bulgaria, Serbia, Ukraine, Türkiye, Israel, India, Japan, South Korea, Hong Kong, Singapore, Malaysia, the Philippines, Vietnam, Australia, H&M's asia1 (HKD) and asia3 (TWD) sites and H&M's English Europe site. A search and a product read succeeded in every one of them on 2026-09-15, and the currency matched the market 41 of 41 times.
How do I know which sizes are available?▾
Every size carries in_stock, and product/detail adds few_left where H&M shows "few pieces left". product/availability returns the same for every colour of a product in one small call: for the French jeans that was 8 colours, 72 sizes in stock and 3 flagged few left. Quantities are not published.
Do the filters and sorts really apply?▾
Yes. dress in the US on 2026-09-15: 2,001 results; sale_only returned 428, every row on sale; department ladies_all returned 1,562; color black_000000 returned 322; shirt with material Linen returned 127 of 1,461. price_asc and price_desc come back in price order and newest reorders the list. The department, colour and material ids to pass come back in filters_available.
What happens with a misspelling or a search with no match?▾
H&M corrects common misspellings and the API says so: jaket returned jacket results with matched_query jacket, sweatr returned sweater. A keyword with no match returns an empty result - 8 of 8 nonsense keywords came back empty and 0 of 23 real keywords in seven languages were emptied.
What does H&M NOT publish here?▾
No GTIN or EAN (H&M's own size codes are returned instead), no stock quantities, no per-store stock and no full review list - only the sample of up to 10 reviews on the product page. Care instructions were present on 12 of 24 sampled products, country of production only where H&M publishes it (the French pages in the sample), and model height on few products.
What is the H&M API?▾
H&M API is a ReefAPI endpoint group for h&m prices in 41 markets with the sale price, the member price and every colour's sizes in stock kept apart. It returns live JSON through POST requests under /hm/v1.
Is the H&M API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. H&M calls use the same shared credit balance as every other ReefAPI engine.
Do I need a H&M login or account?▾
No login to H&M 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 H&M 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 H&M API use?▾
H&M actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call H&M from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call hm actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the H&M API a H&M scraper?▾
It is the managed alternative to a DIY H&M 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 h&m prices in 41 markets with the sale price, the member price and every colour's sizes in stock kept apart back as clean JSON.
91 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling H&M, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
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 251 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. Field notes were captured on 2026-09-15.