H&M API endpoint
Returns H&M's own search-box typeahead suggestions. When query is given, returns spelling-complete phrase suggestions and merchandised content results. When query is omitted or empty, instead returns trending searches and popular-search shortcuts (phrase/content suggestions are both empty in that mode). search_history is not session-scoped -- it returns the identical list for every request, so treat it as fixed default content rather than a real per-caller history.
/hm/search/suggestionsquery is optional, a free-text search-box input (e.g. jean).
Notable response behavior:
query given, the response carries phrase_suggestions (spelling-complete phrases) and content_suggestions (merchandised results). trending_searches and popular_searches are both empty in this mode.query omitted or empty, the response instead carries trending_searches and popular_searches. phrase_suggestions and content_suggestions are both empty in this mode.search_history is part of the real upstream response but confirmed NOT session-scoped: separate cookie-free requests returned the identical list, so treat it as fixed default content, not a real per-caller search history, despite the field name.blocked mirrors the same content-filter flag hm-search's own search_meta.blocked documents; its exact trigger conditions are not documented by H&M.content_suggestions[]/popular_searches[] entries do not all carry every field -- link, deep_link, image_url, and content_type are each populated only when H&M's own response includes them.{"code":200,"msg":"OK","data":{"query":"","trending_searches":["back to school","sweatpants","shorts","dress","socks"],"popular_searches":[{"title":"Back to school "},{"title":"Spiderman","deep_link":"/content/hmonline/en_us/kids/seasonal-trending/character/boys","link":"/en_us/kids/seasonal-trending/character/character-youngboy.html"}],"search_history":["jeans","shirt","t-shirt"],"blocked":false,"source_url":"https://api.hm.com/search-services/v1/en_us/search/suggestions?query=...","fetched_at":"2026-08-15T06:37:00Z"}}
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| query | string | No | Free-text search-box input; omit or leave empty for trending/popular searches instead | jean | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/hm/search/suggestions?query=coffee" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "jean",
"phrase_suggestions": [
"jeans",
"jeans women",
"jeans men",
"jean shorts",
"jeans girls"
],
"blocked": false,
"source_url": "https://api.hm.com/search-services/v1/en_us/search/suggestions?query=jean...",
"fetched_at": "2026-08-15T06:37:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/hm.suggestResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | hm.SuggestResponse | No | ||||
| data.blocked | boolean | No | ||||
| data.content_suggestions | array | No | ||||
| data.content_suggestions[].content_type | string | No | ||||
| data.content_suggestions[].deep_link | string | No | ||||
| data.content_suggestions[].image_url | string | No | ||||
| data.content_suggestions[].link | string | No | ||||
| data.content_suggestions[].title | string | No | ||||
| data.fetched_at | string | No | ||||
| data.phrase_suggestions | array | No | ||||
| data.popular_searches | array | No | ||||
| data.popular_searches[].content_type | string | No | ||||
| data.popular_searches[].deep_link | string | No | ||||
| data.popular_searches[].image_url | string | No | ||||
| data.popular_searches[].link | string | No | ||||
| data.popular_searches[].title | string | No | ||||
| data.query | string | No | ||||
| data.search_history | array | No | ||||
| data.source_url | string | No | ||||
| data.trending_searches | array | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/hm/search/suggestions?query=coffee" \
-H "x-api-key: $CRAWLORA_API_KEY"