---
title: "List Ulta Beauty storefront categories"
method: GET
path: "/ulta/categories"
tags: ["Ulta Beauty"]
---

# List Ulta Beauty storefront categories

`GET /ulta/categories`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/ulta/categories`
- Auth: API key in header `x-api-key`

Lists Ulta Beauty's own storefront category navigation: department, group, name, and a URL usable directly as GET /ulta/category's own category parameter. Closes the discovery gap of not already knowing a category path. department, if set, filters to just that department's entries. group is empty for a department's own top-level link or a group's own heading link, and set to that group's name for the leaf categories nested under it. The exact same real category can legitimately appear more than once under a different department/group when the site's own navigation cross-lists it.

## Query parameters

- `department` 'makeup-nails' | 'skin-care' | 'hair-care' | 'fragrance' | 'body-care' | 'wellness' | 'mens-care' | 'tools-brushes'

## Headers

- `x-api-key` string, required

## Response `200`

OK

- UltaCategoriesResponseDoc
  - `code` integer
  - `data` UltaCategoriesResponse
    - `categories` UltaCategoryEntry[]
      - `department` string
      - `group` string
      - `name` string
      - `url` string
    - `fetched_at` string
    - `source_url` string
  - `msg` string

## Other responses

- `400`: Bad Request
- `429`: Too Many Requests
- `503`: Service Unavailable

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/0497899e2016?raw)
