Sephora API endpoint
Returns Sephora's own live storefront category navigation (department, group, name, and slug for each), sourced from the site's own "Shop" mega-nav. Each entry's slug is directly usable as GET /sephora/category's own `slug` query parameter.
/sephora/categoriesLists Sephora's own live storefront category navigation: department,
group, name, and a slug usable directly as /sephora/category's own
slug query parameter. Use this endpoint to discover valid category
slugs without already knowing one.
Query parameters:
department (optional): filter the result to one storefront department.
Allowed values: new, makeup, skincare, fragrance, hair,
bath-body, mini-size, brands, gifts-value-sets, sale-offers.Notable response behavior:
group is empty for a department's own direct child entry (e.g.
Makeup's "Face", "Eye", "Brushes & Applicators" headings, each of which
is itself a real, browsable category one level above the leaf items
nested under it), and set to that heading's own name for every leaf item
nested under it (e.g. "Foundation" carries group "Face").mascara). This endpoint reflects
that faithfully rather than deduplicating by slug.gifts-under-25,
shop-travel-size-makeup) and are included. "50% Off Deals" and "Gift
Cards" are present in Sephora's own mega-nav but resolve zero category
slugs each, so they are excluded from both the department enum and the
response.| Field | Filled in, of 67 checked | Values in the sample |
|---|---|---|
| department | 67 | makeup in all 67 |
| name | 67 | “All Makeup” and 64 other values |
| slug | 67 | |
| group | 50 | Face (11), Eye (11), Lip (10) and 3 more |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| department | string | No | Filter to one storefront department Allowed values: new, makeup, skincare, fragrance, hair, bath-body, mini-size, brands, gifts-value-sets, sale-offers. | makeup | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sephora/categories?department=new" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://www.sephora.com/",
"fetched_at": "2026-09-15T12:00:00Z",
"categories": [
{
"department": "makeup",
"name": "All Makeup",
"slug": "makeup-cosmetics"
},
{
"department": "makeup",
"name": "Eye",
"slug": "eye-makeup"
},
{
"department": "makeup",
"group": "Eye",
"name": "Mascara",
"slug": "mascara"
},
{
"department": "gifts-value-sets",
"name": "Gifts Under $25",
"slug": "gifts-under-25"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sephora.categoriesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sephora.CategoriesResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].department | string | No | makeup | |||
| data.categories[].group | string | No | Eye | |||
| data.categories[].name | string | No | Mascara | |||
| data.categories[].slug | string | No | mascara | |||
| data.fetched_at | string | No | ||||
| data.source_url | string | 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/sephora/categories?department=new" \
-H "x-api-key: $CRAWLORA_API_KEY"