Drunk Elephant APIdrunkelephant.com ↗
Access Drunk Elephant skincare, hair care, and body care product data including ingredients, pricing, ratings, and reviews via 5 structured API endpoints.
What is the Drunk Elephant API?
The Drunk Elephant API exposes 5 endpoints covering product search, detailed product data, category browsing, customer reviews, and collection discovery across Drunk Elephant's full skincare, hair care, and body care catalog. The get_product_details endpoint returns granular fields including ingredients, usage instructions, price, and availability — identified by either a URL slug or a product SKU.
curl -X GET 'https://api.parse.bot/scraper/573b13c1-62d3-468e-b9c7-3da1f20a1ee9/search_products?query=moisturizer' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace drunkelephant-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Drunk Elephant SDK — search, browse collections, drill into details and reviews."""
from parse_apis.drunk_elephant_product_api import DrunkElephant, CategorySlug, ProductNotFound
client = DrunkElephant()
# Search for products by keyword — limit caps total items fetched.
for product in client.productsummaries.search(query="vitamin c", limit=3):
print(product.name, product.price, product.rating)
# Browse a collection using the enum for category slugs.
collection = client.collection(slug=CategorySlug.BEST_SELLERS)
for item in collection.products.list(limit=3):
print(item.name, item.stock_status, item.num_reviews)
# Drill into full product details from a search result.
result = client.productsummaries.search(query="protini", limit=1).first()
if result:
detail = result.details()
print(detail.name, detail.price, detail.availability)
print(detail.how_to_use)
for ingredient in detail.key_ingredients:
print(ingredient.name, ingredient.description)
# Read customer reviews for a product.
product = client.products.get(product_id="999DE00000103")
for review in product.reviews.list(limit=3):
print(review.headline, review.rating, review.nickname)
# Typed error handling for a non-existent product.
try:
client.products.get(product_id="DOES_NOT_EXIST_999")
except ProductNotFound as exc:
print(f"Product not found: {exc.product_id}")
print("exercised: productsummaries.search / collection.products.list / details / products.get / reviews.list")Full-text search over Drunk Elephant products by keyword. Returns matching products with price, star rating, review count, stock status, and image URL. Supports multi-word queries. Results are not paginated — the site returns all matches in one response.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword or phrase (e.g., 'moisturizer', 'vitamin c serum', 'protini') |
{
"type": "object",
"fields": {
"items": "array of product summary objects matching the search query"
},
"sample": {
"data": {
"items": [
{
"id": "999DE00000103",
"name": "Protini™ Polypeptide Firming Refillable Moisturizer",
"price": 72,
"img_url": "https://www.drunkelephant.com/dw/image/v2/BBSK_PRD/on/demandware.static/-/Sites-itemmaster_drunkelephant/default/dwc318f9ff/products/images/2026/January/Protini_new_images/Protini-PDP_2026_Standard-Hero.jpg?sw=540&sh=540&sm=fit",
"variant": "50 ML/1.69 FL OZ",
"subCategory": "Skincare",
"productNumReviews": 3455,
"productOutOfStock": "IN_STOCK",
"productStarRating": 4.5
}
]
},
"status": "success"
}
}About the Drunk Elephant API
Product Search and Detail
The search_products endpoint accepts a query string — single-word terms like moisturizer or multi-word phrases like vitamin c serum — and returns an array of matching product objects with name, price, rating, and stock status. For deeper data, get_product_details accepts either a url_slug (e.g., protini-polypeptide-firming-refillable-moisturizer-999DE00000103.html) or a product_id (e.g., 999DE00000103) and returns a full product object including ingredients, how_to_use, availability, and pricing.
Category and Collection Browsing
get_all_collections returns a flat array of all navigable collections with each entry's name, url, and slug — no parameters required. Those slugs feed directly into get_products_by_category, which accepts a required category_slug (e.g., skincare, best-sellers, kits-bundles) and optional pagination controls sz (products per page) and start (pagination index). The response includes a products array, a total count, and a page number.
Ratings and Reviews
get_product_ratings_and_reviews retrieves PowerReviews data for a given product_id. The response contains rollup statistics (aggregate rating, review count, distribution) alongside individual review objects with per-reviewer ratings and text. Pagination is controlled via page (1-based) and limit parameters.
The Drunk Elephant API is a managed, monitored endpoint for drunkelephant.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when drunkelephant.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official drunkelephant.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build an ingredient comparison tool by fetching the
ingredientsfield fromget_product_detailsacross multiple SKUs - Populate a skincare product catalog filtered by category using
get_products_by_categorywith slugs fromget_all_collections - Monitor price and stock changes for Drunk Elephant products by polling
get_product_detailswith known product IDs - Aggregate customer sentiment by pulling rollup stats and review text from
get_product_ratings_and_reviews - Build a keyword-driven product discovery tool using
search_productswith ingredient names or product types as queries - Identify best-selling or curated product sets by querying
get_products_by_categorywith thebest-sellersorkits-bundlesslug
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Drunk Elephant offer an official developer API?+
What does `get_product_details` return beyond basic pricing?+
name, price, ingredients, how_to_use, availability, and additional metadata. You can identify a product using either a url_slug (with the .html extension) or a product_id / SKU string.How does pagination work in `get_products_by_category`?+
sz to set the number of products per page and start as the zero-based index offset. The response includes a total count so you can calculate how many pages to walk. The category_slug parameter is required; use get_all_collections first to retrieve valid slugs.