INCI Beauty APIincibeauty.com ↗
Access INCI Beauty data via API: ingredient safety ratings, CAS numbers, functions, product associations, and editorial dossiers for cosmetic formulation research.
What is the INCI Beauty API?
The INCI Beauty API provides access to cosmetic ingredient and product data across 10 endpoints, covering safety ratings, CAS registry numbers, ingredient functions, usage frequency, and associated product listings. The get_ingredient_detail endpoint returns up to eight structured fields per ingredient including origin, usage percentage, and a curated list of products that contain it — useful for formulation analysis, safety screening, and ingredient research.
curl -X GET 'https://api.parse.bot/scraper/b749d1dd-8e42-42c0-8cc8-dd7908e473aa/get_ingredients_by_letter?letter=A' \ -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 incibeauty-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.
"""
INCI Beauty API - Usage Example
Get your API key from: https://parse.bot/settings
"""
from parse_apis.inci_beauty_api import InciBeauty, Ingredient, IngredientDetail, Product, Letter
inci = InciBeauty()
# Search for ingredients by name using autocomplete
for result in inci.ingredients.search(query="glycerin"):
print(result.name, result.cas, result.product_count)
# Get ingredients starting with a specific letter using the Letter enum
for ingredient in inci.ingredients.by_letter(letter=Letter.B, limit=5):
print(ingredient.name, ingredient.safety_rating)
# Get full details via search result navigation
results = inci.ingredients.search(query="aqua")
for result in results:
detail = result.details()
print(detail.name, detail.safety_rating, detail.usage_percentage)
for func in detail.functions:
print(func)
break
# Browse products containing an ingredient via sub-resource
aqua = inci.ingredient(slug="5555-aqua")
for product in aqua.products.list(limit=5):
print(product.brand, product.name, product.score)
# List editorial dossiers and their articles
for dossier in inci.dossiers.list():
print(dossier.name, dossier.slug)
# Get articles for a specific dossier via constructible navigation
cosmetique = inci.dossier(slug="7-la-reglementation-cosmetique")
for article in cosmetique.articles.list():
print(article.title, article.url)
# Get most used ingredients
for link in inci.ingredients.most_used(limit=10):
print(link.name, link.url)
Get cosmetic ingredients starting with a specific letter. Returns ingredient names, safety ratings, slugs, and French common names. Letters A-Z filter alphabetically; digits 0-9 are mapped to a single numeric page.
| Param | Type | Description |
|---|---|---|
| letter | string | Letter to filter by (A-Z). Digits 0-9 are also accepted and mapped to a single numeric page. |
{
"type": "object",
"fields": {
"count": "integer, total number of ingredients returned",
"letter": "string, the letter used for filtering",
"ingredients": "array of ingredient objects with name, slug, url, common_name_fr, and safety_rating"
},
"sample": {
"data": {
"count": 1293,
"letter": "A",
"ingredients": [
{
"url": "https://incibeauty.com/ingredients/18085-a-terpinyl-acetate",
"name": "A-TERPINYL ACETATE",
"slug": "18085-a-terpinyl-acetate",
"safety_rating": "Good",
"common_name_fr": ""
}
]
},
"status": "success"
}
}About the INCI Beauty API
Ingredient Lookup and Search
Two dedicated search paths let you find ingredients efficiently. search_ingredients uses an autocomplete-style lookup that returns each match's id, name, main_inci_name, cas, product_count, url, and slug — useful when you know part of an ingredient name and want a precise match quickly. search_products_and_ingredients accepts a query string and an optional page parameter, returning paginated product listings alongside related brands, articles, and a total_results_text count. For alphabetical browsing, get_ingredients_by_letter accepts any letter A–Z (or a digit 0–9 mapped to a single numeric page) and returns each ingredient's name, slug, url, common_name_fr, and safety_rating.
Ingredient Detail and Product Associations
get_ingredient_detail is the primary enrichment endpoint. Given an id_slug (e.g. 6832-glycerin), it returns the ingredient's cas number, functions array, origin, usage_percentage, common_name (French), and a safety_rating drawn from one of five values: Good, Satisfactory, Unsatisfactory, Risk, or empty. The associated_products array within the response lists products that contain the ingredient, each with brand, name, url, and score. If you only need the product list for a given ingredient without the full detail payload, get_ingredient_products returns just the products array for a given id_slug.
Editorial Dossiers
get_dossiers lists all thematic editorial categories available on the site — topics like sunscreens, regulation, or nanoparticles — each with a name, slug, and url. get_dossier_detail takes an id_slug (e.g. 7-la-reglementation-cosmetique) and returns the dossier's title, description, and an array of associated articles with titles and URLs. These endpoints are useful for retrieving structured editorial context around cosmetic safety topics.
Bulk and Discovery Endpoints
get_all_ingredients aggregates data across all letters A–Z plus the numeric page, returning a flat list of all ingredients with a total_count. This endpoint issues approximately 27 internal requests and should be used when you need a complete snapshot rather than filtered subsets. get_most_used_ingredients and get_recently_seen_ingredients each return a light array of ingredient objects with name and url, useful for discovery features or populating suggestion widgets.
The INCI Beauty API is a managed, monitored endpoint for incibeauty.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when incibeauty.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 incibeauty.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?+
- Screen a cosmetic formula for ingredient safety ratings using
get_ingredient_detailto fetch each ingredient'ssafety_ratingandfunctions. - Build an ingredient glossary indexed by letter using
get_ingredients_by_letterwith A–Z iteration, capturingname,slug, andcommon_name_fr. - Look up the CAS number and origin of a specific ingredient for regulatory documentation via
get_ingredient_detail. - Find all products on the market containing a given ingredient using
get_ingredient_productsand the returnedbrand,name, andscorefields. - Populate a search autocomplete with ingredient matches by querying
search_ingredientsagainst a partial name string. - Compile a complete local ingredient database by running
get_all_ingredientsto retrieve all entries with their safety ratings and slugs. - Retrieve editorial content on cosmetic regulation or nanoparticle topics using
get_dossiersandget_dossier_detail.
| 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 INCI Beauty have an official developer API?+
What safety rating values does `get_ingredient_detail` return?+
safety_rating field returns one of four labeled values — Good, Satisfactory, Unsatisfactory, or Risk — or an empty string when no rating is available. The same field is also present in get_ingredients_by_letter results for quicker bulk filtering.Does `get_all_ingredients` return ingredient functions and CAS numbers?+
get_all_ingredients returns only name, slug, url, common_name_fr, and safety_rating per ingredient — the same fields as get_ingredients_by_letter. Full detail fields like cas, functions, origin, and usage_percentage require a follow-up call to get_ingredient_detail with the ingredient's id_slug. You can fork this API on Parse and revise it to add a batch-detail endpoint that fetches full data in bulk.Are ingredient names and common names available in languages other than French?+
common_name and common_name_fr fields reflect French common names as published on INCI Beauty. INCI names themselves are language-neutral by standard. You can fork the API on Parse and revise it to add a translation or localization layer if other languages are needed.How do I paginate through product search results?+
search_products_and_ingredients accepts an integer page parameter alongside the required query string. The response includes a total_results_text field with the site's reported result count, which you can parse to determine how many pages to fetch. The articles and brands arrays in each response are not paginated separately.