INCIDecoder APIincidecoder.com ↗
Access INCIDecoder.com data via API. Search products and ingredients, decode INCI lists, and retrieve safety ratings, functions, and comedogenicity data.
What is the INCIDecoder API?
The INCIDecoder API exposes 7 endpoints covering cosmetic product lookup, ingredient analysis, and raw INCI list decoding. The decode_inci endpoint accepts a comma-separated ingredient list and returns a full breakdown including irritancy scores, comedogenicity ratings, and hashtag highlights. The get_ingredient endpoint surfaces per-ingredient facts, INCIDecoder ratings, and linked EU CosIng database URLs where available.
curl -X GET 'https://api.parse.bot/scraper/26d3324f-d356-4a3d-9697-1848b547d38f/search?ppage=1&query=niacinamide&activetab=products' \ -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 incidecoder-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.
from parse_apis.incidecoder_api import INCIDecoder, Product, IngredientSummary
client = INCIDecoder()
# Search for products containing niacinamide
for product in client.productsummaries.search(query="niacinamide", limit=5):
print(product.title, product.brand, product.slug)
# Get full product details
full_product = client.products.get(slug="cerave-moisturizing-cream")
print(full_product.name, full_product.brand)
for entry in full_product.ingredients_table[:3]:
print(entry.name, entry.rating, entry.functions)
# Navigate from search result to full details
for result in client.productsummaries.search(query="retinol serum", limit=2):
detail = result.details()
print(detail.name, detail.brand, detail.highlights)
# Get similar products via constructible product
cerave = client.product(slug="cerave-moisturizing-cream")
for similar in cerave.similar(limit=3):
print(similar.title, similar.brand)
# Search ingredients and navigate to detail
for ing in client.ingredientsummaries.search(query="retinol", limit=3):
full_ing = ing.details()
print(full_ing.name, full_ing.rating)
for prod in full_ing.products[:2]:
print(prod.title, prod.brand)
# Decode a raw INCI list
decoded = client.decodedincis.decode(texts="Aqua, Glycerin, Niacinamide")
for entry in decoded.ingredients_table:
print(entry.name, entry.rating, entry.comedogenicity)
print(decoded.highlights)
# Browse featured ingredients
for ing in client.ingredientsummaries.list(limit=5):
print(ing.name, ing.slug)
Search for products and/or ingredients by query string. Returns paginated results with title, brand, slug, URL, and type for each match. Supports filtering by included/excluded ingredient slugs. The activetab param switches between product and ingredient results.
| Param | Type | Description |
|---|---|---|
| ppage | integer | Page number for pagination. |
| queryrequired | string | Search keyword. |
| exclude | string | Comma-separated ingredient slugs that must not be present in results. |
| include | string | Comma-separated ingredient slugs that must be present in results. |
| activetab | string | Tab to search in. Accepted values: 'products', 'ingredients'. |
{
"type": "object",
"fields": {
"page": "current page number as string",
"query": "the search query echoed back",
"results": "array of search result objects with title, brand, slug, url, and type"
},
"sample": {
"data": {
"page": "1",
"query": "niacinamide",
"results": [
{
"url": "https://incidecoder.com/products/wellwell-niacinamide",
"slug": "wellwell-niacinamide",
"type": "product",
"brand": "",
"title": "Wellwell Niacinamide"
}
]
},
"status": "success"
}
}About the INCIDecoder API
Product and Ingredient Lookup
The get_product endpoint accepts a product slug (e.g. cerave-moisturizing-cream) and returns the product's name, brand, description, highlights (hashtag strings like #alcohol-free), key_ingredients grouped by category, and a full ingredients_table. Each row in the ingredients table carries name, slug, functions, irritancy, comedogenicity, and rating. If the slug doesn't resolve, the response includes a stale_input field with kind input_not_found. The get_similar_products endpoint takes the same slug and returns title-keyword-matched product suggestions with title, brand, and slug.
Ingredient Details and INCI Decoding
The get_ingredient endpoint resolves an ingredient slug such as niacinamide or retinol and returns structured facts (key-value pairs covering aliases and functions), an INCIDecoder rating string (e.g. superstar, goodie), a description prose block, a cosing_url pointing to the EU CosIng entry when available, and an array of products that contain the ingredient. For bulk analysis, decode_inci accepts a raw texts parameter — a comma-separated INCI string — and returns the same ingredients_table, highlights, and key_ingredients structure as get_product without requiring a known product slug.
Search and Browse
The search endpoint accepts a query string and supports filtering by include and exclude parameters (comma-separated ingredient slugs), so you can find products that contain niacinamide but not alcohol. An activetab parameter scopes results to either products or ingredients. Pagination is handled via the ppage integer across search, list_products, and list_ingredients. The list_products and list_ingredients endpoints browse featured content and return paginated summaries with title/brand/slug for products and name/slug for ingredients.
The INCIDecoder API is a managed, monitored endpoint for incidecoder.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when incidecoder.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 incidecoder.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?+
- Decode a product's INCI list to flag high-irritancy or comedogenic ingredients before recommending it to users
- Build a skincare ingredient checker that looks up INCIDecoder ratings for each ingredient in a formula
- Filter product search results to only show items containing niacinamide but excluding alcohol using include/exclude params
- Retrieve EU CosIng database links for ingredients to support regulatory compliance workflows
- Compare ingredient tables of two products by fetching get_product for each and diffing the ingredients_table arrays
- Populate an ingredient glossary with facts, functions, and descriptions sourced from get_ingredient
- Surface similar product alternatives in a skincare app using get_similar_products by product slug
| 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.