Sephora product reviews
Reviews of a Sephora product, up to 100 a page: rating, title, text, date, author, recommended or not, helpful votes, verified purchase, free-sample and staff flags, the reviewer's traits (skin tone and type, eye and hair colour, age range, concerns), the shade or size reviewed, photos, videos and brand replies. Also returns the product's rating distribution, recommendation counts and the breakdown of reviewers by trait. Filter by rating, photos, traits, keywords and more.
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
product_idrequired | string | Sephora product id (P followed by digits) or a product link. Example: P510799 |
page | integer | Page number. |
limit | integer | Reviews per page (1-100, default 100). |
sort | newest | oldest | highest | lowest | helpful | relevance | Order (default newest). |
rating | string | Only these star ratings, comma separated (e.g. 1,2). |
photos | 1 | 0 | 1: only reviews with photos. |
recommended | 1 | 0 | 1: only reviewers who recommend it; 0: only those who do not. |
verified | 1 | 0 | 1: only verified purchases. |
incentivized | 1 | 0 | 1: only reviews of free samples; 0: leave them out. |
skin_tone | string | Reviewer skin tone value(s) from stats.reviewer_traits.skinTone, comma separated (e.g. fair,light). |
skin_type | string | Reviewer skin type value(s), e.g. oilySk, drySk, comboSk, normalSk. |
eye_color | string | Reviewer eye colour value(s), e.g. brown, blue. |
hair_color | string | Reviewer hair colour value(s). |
age_range | string | Reviewer age range value(s) from stats.reviewer_traits.ageRange. |
skin_concerns | string | Reviewer skin concern value(s) from stats.reviewer_traits.skinConcerns. |
hair_type | string | Reviewer hair type value(s). |
q | string | Only reviews that mention this text. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/sephora/v1/reviews?product_id=P510799" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/sephora/v1/reviews",
params={"product_id": "P510799"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/sephora/v1/reviews");
url.searchParams.set("product_id", "P510799");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).