API

H&M API: προϊόντα, τιμές και μεγέθη του H&M Ελλάδας σε JSON

Ό,τι βλέπει ο πελάτης στο ελληνικό ηλεκτρονικό κατάστημα του H&M (www2.hm.com/el_gr) — ονομασία, τιμή σε ευρώ, χρώματα, ποια μεγέθη υπάρχουν ακόμη, σύνθεση υφάσματος, βαθμολογία — το παίρνετε εδώ ως JSON, χωρίς σύνδεση σε λογαριασμό. Δεν είναι διασύνδεση για προμηθευτές ή συνεργάτες του H&M και δεν έχει πρόσβαση σε παραγγελίες ή λογαριασμούς πελατών: διαβάζει ζωντανά τον δημόσιο κατάλογο, από την πλευρά του αγοραστή. Για την ελληνική αγορά βάζετε σε κάθε κλήση `"country": "gr"`· αν λείπει, η αίτηση πηγαίνει στο κατάστημα των ΗΠΑ και οι τιμές έρχονται σε δολάρια.

Endpoints

endpointΤι επιστρέφειΥποχρεωτικά
searchΑναζήτηση με λέξη στα ελληνικά, με ή χωρίς τόνους, ή στα αγγλικά. Κάθε γραμμή είναι ένα προϊόν σε ένα χρώμα, με την τιμή που πληρώνει ο πελάτης, την αρχική τιμή όταν τρέχει έκπτωση, την τιμή για μέλη χωριστά και τα μεγέθη που υπάρχουν. Ταξινόμηση κατά νέα ή κατά τιμή· φίλτρα τμήματος, χρώματος και υλικού με τα αναγνωριστικά που επιστρέφει το ίδιο το `filters_available` (π.χ. `Λινό`, `μαύρο_000000`). Έως 72 προϊόντα ανά σελίδα.query
product/detailΌλα τα στοιχεία ενός προϊόντος σε ένα χρώμα, με κωδικό 10 ψηφίων (`article_code`), κωδικό προϊόντος 7 ψηφίων ή URL: περιγραφή, σύνθεση ανά τμήμα του ρούχου («Επάνω μέρος», «Φόδρα κάτω μέρους»), προτιμώμενα υλικά, οδηγίες φροντίδας όπου δημοσιεύονται, κάθε μέγεθος με την ετικέτα του και με το αν έχουν μείνει λίγα κομμάτια, βαθμολογία και όλα τα υπόλοιπα χρώματα με τις δικές τους τιμές και μεγέθη.article_code
categoryΌλα τα προϊόντα μιας σελίδας κατηγορίας, με σελιδοποίηση και ταξινόμηση. Δέχεται το URL ή τη διαδρομή της κατηγορίας, όπως εμφανίζεται στο `breadcrumb` κάθε προϊόντος· η σελίδα `/el_gr/paidika/koritsia/rouxa/foremata.html` (φορέματα για κορίτσια) είχε 434 προϊόντα στη μέτρησή μας.όλα προαιρετικά
search/suggestΟι προτάσεις του πεδίου αναζήτησης του H&M για ό,τι έχει πληκτρολογήσει ο πελάτης. Για «φορ»: φόρμα, φορμάκια, φορμάκια ύπνου, φόρεμα, φόρμα εξόδου.query
product/availabilityΖωντανή διαθεσιμότητα μεγεθών για όλα τα χρώματα ενός προϊόντος, σε μία μικρή κλήση: ποια μεγέθη παραγγέλνονται και σε ποια το H&M σημειώνει ότι έχουν μείνει λίγα κομμάτια. Κατάλληλο για παρακολούθηση αποθέματος.article_code

Κάθε κλήση χρεώνεται σε credits. Οι αποτυχημένες και μπλοκαρισμένες κλήσεις είναι δωρεάν.

Παράδειγμα που δουλεύει

Η αναζήτηση αγνοεί τους τόνους: το «φορεμα» έφερε τα ίδια 4.114 προϊόντα με το «φόρεμα», και το αγγλικό «dress» 4.039, πάλι με ελληνικές ονομασίες. Τα greeklish όμως δεν αναγνωρίζονται: το «foremata» επέστρεψε 0. Κοιτάξτε και το `filters_available.sale`: στις 24 Οκτωβρίου 2026 κανένα από τα 4.114 φορέματα δεν ήταν σε έκπτωση, γι' αυτό το `regular_price` είναι null. Τιμή για μέλη δεν είχε επίσης καμία από τις 12 γραμμές (`member_price`: null).

Αίτημα
curl -X POST https://api.reefapi.com/hm/v1/search \
  -H "x-api-key: ΤΟ_ΚΛΕΙΔΙ_ΣΑΣ" \
  -H "content-type: application/json" \
  -d '{"query": "φόρεμα", "country": "gr", "page_size": 12}'
Απάντηση (συντομευμένη)
{
  "ok": true,
  "data": {
    "results": [
      {
        "article_code": "1343810001",
        "product_code": "1343810",
        "name": "Φόρεμα-καφτάνι με ύφανση ζακάρ και στρας",
        "price": 119.0,
        "regular_price": null,
        "on_sale": false,
        "member_price": null,
        "price_formatted": "119,00 €",
        "currency": "EUR",
        "color_name": "Σκούρο καφέ",
        "sizes": [
          { "size_code": "001", "label": "XS/S", "in_stock": true },
          { "size_code": "003", "label": "M/L", "in_stock": true },
          { "size_code": "006", "label": "XL/XXL", "in_stock": true }
        ],
        "markers": [{ "text": "ELIE SAAB H&M", "type": "custom" }],
        "main_category": "ladies_occasion_partywear_dresses"
      },
      {
        "article_code": "1343736004",
        "product_code": "1343736",
        "name": "Μακρυμάνικο φόρεμα με τούλινο κάτω μέρος",
        "price": 15.99,
        "regular_price": null,
        "member_price": null,
        "price_formatted": "15,99 €",
        "currency": "EUR",
        "color_name": "Σκούρο κόκκινο",
        "color_count": 6,
        "sizes_in_stock": 5,
        ...
      },
      ...
    ],
    "total_results": 4114,
    "total_pages": 343,
    "has_more": true,
    "filters_available": {
      "departments": [{ "id": "ladies_all", "label": "Γυναικεία", "count": 3426 }, { "id": "kids_all", "label": "Παιδικά", "count": 688 }, ...],
      "sale": { "false": 4114 },
      ...
    },
    "locale": "el_gr",
    "currency": "EUR"
  },
  "meta": { "record_count": 12, "country": "gr", "cache_hit": false, "mode": "live" }
}

Τρία σημεία όπου ένας scraper για το H&M μετράει λάθος

Το απόθεμα στα δεδομένα του H&M δεν είναι ποσότητα. Το πεδίο `stock` κάθε μεγέθους είναι κωδικός: σε 144 γραμμές που ελέγξαμε είχε μόνο τις τιμές 888 και 0, ποτέ 1. Ένας parser που το διαβάζει ως τεμάχια «βλέπει» 888 κομμάτια από κάθε διαθέσιμο μέγεθος. Εδώ γίνεται `in_stock` (ναι ή όχι), και από τη σελίδα του προϊόντος προστίθεται το `few_left`.

Κάποια φίλτρα γίνονται δεκτά και αγνοούνται σιωπηλά. Με εύρος τιμής (`priceRange=10-20`) η αναζήτηση του H&M επέστρεψε ακριβώς όσα αποτελέσματα και χωρίς αυτό, ενώ το φίλτρο μεγέθους έδινε 0 σε όποια γραφή κι αν δοκιμάσαμε. Γι' αυτό εδώ δεν υπάρχει φίλτρο τιμής ή μεγέθους: φιλτράρετε μόνοι σας στα `price` και `sizes`, αντί να βασιστείτε σε ένα φίλτρο που δεν εφαρμόστηκε ποτέ.

Ούτε το όνομα είναι κλειδί. Στην αναζήτηση «μπουφάν» (36 γραμμές) η ονομασία «Μπουφάν από συνθετικό μαλλί προβάτου» εμφανίστηκε 13 φορές: 7 διαφορετικά προϊόντα, γυναικεία και παιδικά, από 17,99 έως 23,99 €, και το καθένα σε όσα χρώματα κυκλοφορεί. Ιστορικό τιμών με κλειδί την ονομασία ανακατεύει αυτά τα προϊόντα μεταξύ τους· κρατήστε ως κλειδί το `article_code`, δηλαδή προϊόν και χρώμα μαζί.

Όρια και ειλικρινείς σημειώσεις

  • Επίσημο API του H&M δεν είναι, ούτε έχουμε συμφωνία συνεργασίας με το H&M.
  • Αρχική τιμή, ποσοστό έκπτωσης και τιμή για μέλη υπάρχουν μόνο όταν το H&M τις τρέχει στην ελληνική αγορά. Στις 24 Οκτωβρίου 2026 οι αναζητήσεις «φόρεμα», «μπουφάν», «πουλόβερ» και «τζιν» (12.072 προϊόντα συνολικά) δεν είχαν κανένα προϊόν σε έκπτωση, σύμφωνα με το ίδιο το φίλτρο εκπτώσεων του H&M, και στις 120 γραμμές που διαβάσαμε δεν υπήρχε ούτε τιμή για μέλη· τα πεδία ήρθαν null.
  • Για τον ίδιο λόγο το `sale_only` επέστρεψε 0 και δεν μπορέσαμε να το επαληθεύσουμε στο gr. Στη ρουμανική αγορά το ίδιο φίλτρο έδωσε 0 ενώ υπήρχαν προϊόντα σε έκπτωση, οπότε τις εκπτώσεις αναγνωρίζετε πιο σίγουρα από τα `regular_price` και `discount_percent`.
  • Ελληνικά με ή χωρίς τόνους και αγγλικά λειτουργούν· greeklish δεν βρίσκουν τίποτα («foremata» → 0).
  • Αρκετές ονομασίες μένουν στα αγγλικά όπως τις γράφει το H&M: στην αναζήτηση «τζιν» ήρθαν π.χ. «Mom Slim Fit High Waist Ankle Jeans» και «Wide High Waist Jeans». Αν φιλτράρετε με κείμενο στο `name`, μην περιμένετε πάντα ελληνικά.
  • Το απόθεμα είναι ένδειξη (`in_stock`, `few_left`), όχι αριθμός τεμαχίων, και αφορά το ηλεκτρονικό κατάστημα· διαθεσιμότητα ανά φυσικό κατάστημα δεν επιστρέφεται.
  • Το `product/availability` δίνει τα μεγέθη ως κωδικούς (`006`)· τις ετικέτες τους, όπως `92 (1½-2Y)`, τις έχει το `product/detail`.
  • Barcode (EAN) δεν δημοσιεύεται: υπάρχουν μόνο οι 13ψήφιοι κωδικοί μεγέθους του H&M (`size_code`). Το `reviews_sample` περιέχει έως 10 κριτικές, όσες ενσωματώνει η σελίδα του προϊόντος, όχι όλες.
  • Τιμές και διαθεσιμότητα διαβάζονται από το H&M σε κάθε κλήση· δεν σερβίρονται από αποθηκευμένο αντίγραφο.