GET/ulta/categoriesapiKey3 credits/request
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.
Optional: department (8 allowed values: makeup-nails, skin-care, hair-care, fragrance, body-care, wellness, mens-care, tools-brushes).
Sampled 14 Oct 2026: 51 items. Filled in every item: department, name, url. Not in every item: group (42). In the sample: group: Face (12), Lips (8), Eyes (8) and 2 more; name: “Shop All Makeup & Nails” and 50 other values; url: ulta.com.
Open in Playground
GET/ulta/categoryapiKey3 credits/request
Browses an Ulta Beauty category page's product grid, with real page-based pagination and the category's own guided-navigation refinement options. category accepts a category path or full URL copied from Ulta's own site navigation (e.g. shop/makeup/eyes/mascara). filter narrows results using Ulta's own guided-navigation facet-code shape (e.g. BENEFIT--WATERPROOF, or a comma-joined combination of codes) -- discover valid codes for a category from that category's own response facets field, whose value is ready to use directly as this parameter. An unrecognized category returns 404.
Required: category. Optional: filter, page.
Sampled 14 Oct 2026: 71 items. Filled in every item: product_id, sku_id, brand_name, product_name, list_price, rating, review_count, image_url and 1 more. Not in every item: variant_label (53), sponsored (13), promo_text (25). In the sample: variant_label: 2 sizes (22), 3 sizes (20), 4 sizes (7) and 2 more; rating: 3.6 to 4.9, median 4.6; brand_name: “The Ordinary” and 29 other values; image_url: media.ultainc.com; sponsored: true in 13 of 13; product_name: “Glycolic Acid 7% Exfoliating and Brightening Daily Toner” and 70 other values; list_price: “$9.00 - $13.50” and 60 other values; review_count: 8 to 44,647, median 1,198.
Open in Playground
GET/ulta/product/{productId}apiKey3 credits/request
Returns one Ulta Beauty product's full detail: name, brand, description, category, pricing, rating, review count, images, and every purchasable color/shade variant. productId is taken from a search result's product_id field or a product page's URL (e.g. pimprod2020260). sku is optional and selects a specific color/shade variant; an omitted or invalid sku still resolves the base product using its own default variant. An unrecognized productId returns 404.
Required: productId. Optional: sku.
Sampled 14 Oct 2026: 9 items. Filled in every item: product_id, sku_id, name. In the sample: name: “Blackest Black” and 8 other values.
Open in Playground
GET/ulta/product/questionsapiKey3 credits/request
Returns one page of an Ulta Beauty product's customer questions, each with every answer it received. product_id is taken from a search result's product_id field or a product page's URL. A product with zero questions, or a well-formed but unrecognized product_id, returns a normal, empty result rather than an error.
Required: product_id. Optional: page.
Sampled 14 Oct 2026: 10 items. Filled in every item: id, text, author, location, created_at, answer_count, answers. In the sample: created_at: 2025-09-12 to 2025-12-15; answers: median 1 entry.
Open in Playground
GET/ulta/product/reviewsapiKey3 credits/request
Returns one page of an Ulta Beauty product's customer reviews, plus the retailer's own site-wide rating summary (rating count, average rating, recommended ratio, rating histogram) for the product. product_id is taken from a search result's product_id field or a product page's URL. A product with zero reviews, or a well-formed but unrecognized product_id, returns a normal, empty result rather than an error.
Required: product_id. Optional: page.
Sampled 14 Oct 2026: 10 items. Filled in every item: id, rating, headline, body, author, location, verified_purchase, created_at and 1 more. Not in every item: helpful_votes (3), not_helpful_votes (1). In the sample: created_at: 2026-09-15 to 2026-10-05; rating: 3 to 5, median 5; verified_purchase: true in 0 of 10; updated_at: 2026-09-15 to 2026-10-06; helpful_votes: 1 to 3, median 2.
Open in Playground
GET/ulta/searchapiKey3 credits/request
Searches Ulta Beauty's product catalog by keyword, with real page-based pagination. Returns products with brand, pricing, rating, and review count. An unrecognized/nonsense keyword returns a genuine empty result rather than a fallback set. Requesting a page beyond the available results returns a normal, empty result rather than an error.
Required: query. Optional: page.
Sampled 14 Oct 2026: 70 items. Filled in every item: product_id, sku_id, brand_name, product_name, list_price, image_url, url. Not in every item: promo_text (36), rating (69), review_count (69), variant_label (55), sponsored (12). In the sample: promo_text: Free Gift with purchase (23), Bundle & Save! (13); rating: 3.5 to 4.8, median 4.3; brand_name: “Maybelline” and 21 other values; image_url: media.ultainc.com; sponsored: true in 12 of 12; product_name: “Lash Sensational Sky High Mascara” and 69 other values; list_price: “$12.99 - $13.99” and 27 other values; review_count: 3 to 24,530, median 1,870.
Open in Playground
GET/ulta/storesapiKey3 credits/request
Returns Ulta Beauty physical retail store locations near a point: name, phone, full address, hours, services, and coordinates. Either search, or both lat and lng, is required. search is a free-text zip code, city, or address that is first resolved to coordinates; if it does not resolve to any location, a well-formed empty result is returned rather than an error. lat and lng, when given directly, skip that resolution step. radius_meters is optional (1000 to 50000, defaults to 25000). A location with no stores within the radius returns a well-formed empty result rather than an error.
Optional: search, lat, lng, radius_meters.
Sampled 14 Oct 2026: 15 items. Filled in every item: id, slug, name, phone, address, city, state, postal_code and 6 more. Not in every item: services (13). In the sample: city: Chicago (7), Skokie (2), River Forest (1) and 5 more; url: ulta.com; is_permanently_closed: true in 0 of 15; services: median 3 entries.
Open in Playground
GET/ulta/suggestapiKey3 credits/request
Returns Ulta Beauty's own search-suggestion (typeahead) result for a partial search term: suggested search terms, each with its own top product matches, plus a featured top result matching what a real user sees at the top of the dropdown. A partial term with no matches returns a normal, empty result rather than an error.
Required: query.
Sampled 14 Oct 2026: 8 items. Filled in every item: brand_name, product_name, image_url, url. In the sample: brand_name: “Tarte” and 5 other values; image_url: media.ultainc.com; product_name: “Tartelette Tubing Mascara” and 7 other values; url: ulta.com.
Open in Playground