Hermes API endpoint
Returns Hermès' worldwide store directory: name, street address, city, postal code, country, geographic coordinates, phone, displayed opening hours, whether in-store appointments are offered, and store photos. Optionally narrowed to one country (by name or ISO-2 code) or city. Hermès publishes the same worldwide directory for every market, so locale selects the language names are returned in rather than which stores are listed.
/hermes/storesQuery parameters:
locale (optional) — market and language, default us_en. One of:
at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en.
Any other value returns 400 before any upstream request is made.country (optional) — case-insensitive country filter, matched against
either the country name (France) or its ISO-2 code (FR).city (optional) — case-insensitive city filter.Notable response behavior:
locale selects the language store names are returned in, not which
stores are listed. Filter with country/city to narrow the set.country or city filter that matches nothing returns total 0 with
an empty stores array. An unfiltered request that parses to zero stores
is treated as upstream drift and returns an error instead, so an empty
result is never mistaken for "Hermès has no stores".opening_hours is Hermès' own HTML fragment, returned verbatim rather
than parsed into a structured schedule, because the format varies by
market.appointment_in_store reports whether that store offers booked
appointments.| Field | Filled in, of 27 checked | Values in the sample |
|---|---|---|
| id | 27 | |
| name | 27 | “Hermès Nice” and 26 other values |
| street | 27 | |
| city | 27 | “Nice” and 18 other values |
| postal_code | 27 | |
| country | 27 | France in all 27 |
| country_code | 27 | |
| continent | 27 | Europe in all 27 |
| phone | 25 | |
| latitude | 27 | |
| longitude | 27 | |
| opening_hours | 27 | median 70 characters |
| appointment_in_store | 27 | true in 0 of 27 |
| url | 27 | hermes.com |
| images | 27 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| locale | string | No | Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en Allowed values: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en. | ||
| country | string | No | Case-insensitive country filter, matched against the country name or its ISO-2 code | France | |
| city | string | No | Case-insensitive city filter | Paris | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/hermes/stores?locale=at_de&country=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "ok",
"data": {
"locale": "us_en",
"total": 305,
"stores": [
{
"id": "04D84F8F",
"name": "Hermès Faubourg Saint-Honoré",
"street": "24 rue du Faubourg Saint-Honoré",
"city": "Paris",
"postal_code": "75008",
"country": "France",
"country_code": "fr",
"continent": "Europe",
"phone": "+33 1 40 17 46 00",
"latitude": 48.8703,
"longitude": 2.3169,
"opening_hours": "<li>Monday to Saturday - 10:30 am to 7 pm</li>",
"appointment_in_store": true,
"url": "https://www.hermes.com/us/en/find-store/france/paris/hermes-faubourg-04D84F8F/",
"images": [
"https://assets.hermes.com/is/image/hermesedito/store-04D84F8F-1"
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/hermes.storesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | hermes.StoresResponse | No | ||||
| data.locale | string | No | ||||
| data.stores | array | No | ||||
| data.stores[].appointment_in_store | boolean | No | ||||
| data.stores[].city | string | No | ||||
| data.stores[].continent | string | No | ||||
| data.stores[].country | string | No | ||||
| data.stores[].country_code | string | No | ||||
| data.stores[].id | string | No | ||||
| data.stores[].images | array | No | ||||
| data.stores[].latitude | number | No | ||||
| data.stores[].longitude | number | No | ||||
| data.stores[].name | string | No | ||||
| data.stores[].opening_hours | string | No | ||||
| data.stores[].phone | string | No | ||||
| data.stores[].postal_code | string | No | ||||
| data.stores[].street | string | No | ||||
| data.stores[].url | string | No | ||||
| data.total | integer | No | ||||
| msg | string | No | ok |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 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/hermes/stores?locale=at_de&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"