H&M API

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.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a H&M endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
H
/hm/v1

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.

5 endpoints

search

1 cr

Search H&M in any of its 41 markets by keyword.

required
query
optional
country, language, page, page_size, sort, department, sale_only, color, material, max_rotations

product/detail

2 cr

The full H&M article by article code, product code or URL.

required
article_code
optional
country, language, max_rotations

category

2 cr

Every product on one H&M category page (a department, a product type, a sale page), paged and…

required
optional
category, category_id, page_id, country, language, page, page_size, sort, max_rotations

search/suggest

1 cr

H&M's search-box suggestions for what a shopper has typed.

required
query
optional
country, language, max_rotations

product/availability

1 cr

Live size availability for every colour of one H&M product in one market.

required
article_code
optional
country, language, max_rotations

Every parameter, every allowed value →

H&M API

3 of 5 endpoints, ready to run

View docs ↗

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.

1 credit1 required · 3 optional
POST/hm/v1/search
ok948 ms · 36 records · sample
{
  "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"
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

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.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 252 engines.

02
Call
POST /hm/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

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.

01search
POST/hm/v1/search
{"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.

02detail
POST/hm/v1/product/detail
{"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.

request
curl -X POST https://api.reefapi.com/hm/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"dress"}'
response envelope
{
  "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 articlepriceregular_pricemember_priceWhat H&M shows
Baggy Regular Waist Jeans, washed denim blue (France)27.99 EURnull15.99 EURMember price 15.99 - non-members pay 27.99
Baggy Regular Waist Jeans, light beige (France)19.99 EUR27.99 EURnullSale price for every shopper
Lace-Trimmed Jersey Dress, black (US)11.99 USD27.99 USDnullSale -57%, "Sale price in effect for 90+ days"
Long-sleeved tulle-skirt dress (UK)9.99 GBPnullnullRegular 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.

41 markets, one call each

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.

Three prices kept apart

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.

Every colour with its own numbers

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.

Checked against H&M's own product data

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.

Searches say what H&M did

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.

Materials and care

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.

Against us: no GTIN and no stock quantities

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.

Against us: a sample of reviews, not all of them

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.

Against us: some fields are often empty at the source

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.

Against us: two H&M sites are named by H&M's own labels

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.

5

endpoints

1/2

credits per call

01

Price trackers follow H&M sale and member prices per colour across 41 markets and currencies.

02

Fashion analytics teams compare the same article's price between markets, from USD to TRY and JPY.

03

Resale and sustainability apps read composition, preferred materials, care instructions and country of production.

04

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 →
$0.67–$1.50 / 1,000 credits
  • 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
curl -X POST https://api.reefapi.com/hm/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"dress"}'
python
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"])
FAQ

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.

Already paying for something else?H&M vs ParseHubH&M vs DiffbotH&M vs DataForSEO

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.

0/4000

No account needed · we reply from [email protected]

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.