Korean cosmetic regulatory data is hard to work with for three reasons. It is written in Korean. It is spread across two government agencies — MFDS for the rules and KCIA for the ingredient classifications. And what looks like a single restriction on paper is often three different texts in three different formats: a Korean notice, an English-translated CosIng entry, and a provisional KCIA clause.
The K-Beauty Cosmetic Ingredients API is the version of that data we wish we had had when we started. It exposes 21,796 ingredients with their regulatory status across 10 markets — the EU, Korea, ASEAN, China, Japan, Taiwan, Brazil, Argentina, Canada, and the US — through a single, consistent JSON interface. The Korean source text is preserved in the payload, but the fields most regulatory workflows depend on come back in English or numeric form. The 19 posts we have published on this blog are all built on this same database, in English.
This post walks through what the API actually returns, with real responses, and the questions each one answers.
What is in the database
A single call to the stats endpoint returns the headline numbers:
GET /v1/stats
{
"success": true,
"data": {
"total_ingredients": 21796,
"by_regulation_status": {
"Not Listed": 20301,
"Prohibited": 172,
"Restricted": 1046,
"Restricted / Prohibited": 277
},
"api_version": "3.1.0"
}
}
Of the 21,796 ingredients, 1,495 are subject to at least one regulation somewhere in the 10-market set. Across those markets, the database holds about 30,000 individual regulatory entries — every country-level prohibition, concentration limit, product-category restriction, and KCIA provisional clause linked back to the ingredient it applies to. The status labels themselves (Not Listed, Prohibited, Restricted) are returned in English.
Scenario 1: Look up an ingredient by INCI name
The most common starting point. Given an INCI name, return the ingredient's identifiers, purposes, regulatory status, and Korean MFDS classification. The annotations below the Korean fields are added here for explanation — they are not part of the response.
GET /v1/ingredient/inci?q=Methylparaben
{
"success": true,
"count": 1,
"data": [{
"code": 213,
"kr_name": "메틸파라벤", // Korean ingredient name
"inci_name": "Methylparaben",
"cas_numbers": "99-76-3",
"ec_numbers": "202-785-7(I)",
"purposes": "착향제, 보존제", // fragrance, preservative
"regulation_status": "Restricted",
"limit_value": "0.4%, 0.8%",
"mfds_classification": "한도", // "Limit" — capped, not banned
"kcia_proviso": "단일성분일 경우 0.4%(산으로서)
혼합사용의 경우 0.8%(산으로서)"
// 0.4% as acid for single use,
// 0.8% as acid for mixtures
}]
}
One call answers what a regulatory affairs analyst would otherwise piece together from three sources. The fields most cross-market workflows use — inci_name, cas_numbers, ec_numbers, regulation_status, and limit_value — are all English or numeric. The Korean fields (kr_name, mfds_classification, kcia_proviso) are kept verbatim so a Korean-speaking analyst can check against the original MFDS source, but they are not needed to read the regulatory status. The internal code (213) is the key used in every other endpoint.
Scenario 2: Pull every country's regulation for one ingredient
Using the code from scenario 1, the regulations endpoint returns every market that regulates the ingredient — with the local notice name, restriction type, and the full limit-condition text.
GET /v1/ingredient/213/regulations
{
"success": true,
"ingredient": {
"code": 213,
"inci_name": "Methylparaben"
},
"count": 8,
"data": [
{ "country": "EU", "regulate_type": "제한 (restricted)", ... },
{ "country": "한국 (Korea)", ... },
{ "country": "일본 (Japan)", ... },
{ "country": "중국 (China)", ... },
{ "country": "대만 (Taiwan)", ... },
{ "country": "아세안 (ASEAN)", ... },
{ "country": "브라질 (Brazil)", ... },
{ "country": "아르헨티나 (Argentina)", ... }
]
}
Eight markets restrict methylparaben; Canada and the US do not. For the markets that publish in English — the EU (CosIng), ASEAN, China, and Brazil — the limit_condition field contains the original English regulatory text alongside a Korean translation. For Korea, Japan, Taiwan, and Argentina, the local-language text is preserved with a Korean translation. A summary of the numerical limits, extracted from the response:
| Market | Single ester | Mixture |
|---|---|---|
| EU | 0.4% | 0.8% |
| Korea | 0.4% | 0.8% |
| ASEAN | 0.4% | 0.8% |
| Brazil | 0.4% | 0.8% |
| Argentina | 0.4% | 0.8% |
| China | 0.4% | 0.8% * |
| Taiwan | 0.4% | 0.8% |
| Japan | 1.0% total parabens per 100 g | |
* China additionally caps propyl- and butyl-paraben groups at 0.14% each. Limits shown are for methyl/ethyl esters as in the response.
The eight-market view is what a single ingredient page in the database returns. Korea and the EU align at 0.4% / 0.8%, the ASEAN-MERCOSUR-China-Taiwan group matches, and Japan applies its own total-parabens-per-100-g cap. The same call shape works for any ingredient in the database.
Scenario 3: Search by Korean name when you have one
INCI search is the default for international work. The Korean search endpoint is there for the case where you are starting from a Korean source — parsing an MFDS notice, a product registration, or a Korean ingredient label — and have the Hangul name rather than the INCI name. It resolves to the same record.
GET /v1/ingredient/kr?q=리날룰 // "Linalool" in Korean
{
"success": true,
"data": [{
"code": 9,
"kr_name": "리날룰",
"inci_name": "Linalool",
"cas_numbers": "78-70-6",
"purposes": "착향제", // fragrance
"regulation_status": "Restricted",
"limit_value": "0.01%, 0.001%",
"mfds_classification": "한도", // "Limit"
"kcia_proviso": "...사용 후 씻어내는 제품에는 0.01% 초과,
사용 후 씻어내지 않는 제품에는 0.001% 초과
함유하는 경우에 한함"
// labeling required above 0.01% in rinse-off,
// above 0.001% in leave-on products
}]
}
Linalool is a fragrance allergen with a Korean labeling requirement above two thresholds, depending on whether the product is rinsed off. The result comes back with the same English and numeric fields as an INCI search; the Korean name is just the way in.
Scenario 4: Pull a whole ingredient family
When the question is not about one ingredient but about a class — every paraben, every retinoid, every UV filter — a partial-match search on the INCI field returns the full set in one call.
GET /v1/ingredient/search?q=paraben&field=inci
{
"success": true,
"count": 22,
"data": [
{ "code": 213, "inci_name": "Methylparaben", "regulation_status": "Restricted" },
{ "code": 607, "inci_name": "Butylparaben", "regulation_status": "Restricted" },
{ "code": 608, "inci_name": "Ethylparaben", "regulation_status": "Restricted" },
{ "code": 609, "inci_name": "Propylparaben", "regulation_status": "Restricted" },
{ "code": 610, "inci_name": "Isobutylparaben", "regulation_status": "Prohibited" },
{ "code": 611, "inci_name": "Isopropylparaben", "regulation_status": "Prohibited" },
...
]
}
22 paraben variants in one response, each with its current status in English. Combined with scenario 2, the workflow is: get the family, take the codes, pull each one's 10-market regulatory picture. That is the pipeline behind every "we counted X across 10 countries" post on this blog — all written in English, from this data.
Working in English
Most of what a regulatory workflow needs comes back English or numeric: the INCI name, CAS number, EC number, regulation_status, and limit_value, plus the original English regulatory text for markets that publish in English. The Korean-only fields — kr_name, mfds_classification, kcia_proviso, and the full Korean notice text — are preserved verbatim so a Korean-speaking analyst can verify against the MFDS source, but they are not required to compare an ingredient's status across markets.
In practice, a non-Korean-speaking analyst can run the full workflow — look up an ingredient, read its status, pull its limits across 10 markets, and compare — without reading a word of Korean.
Sources, updates, and how it is checked
Every response carries its source attribution in the payload:
"data_source": "Ministry of Food and Drug Safety (MFDS, nedrug.mfds.go.kr),
European Commission CosIng Database
(ec.europa.eu/growth/tools-databases/cosing/reference/annexes)"
The Korean side comes from MFDS notices and KCIA ingredient classifications, refreshed when MFDS publishes amendments. The international side comes from CosIng and equivalent national publications. Each entry is normalized so the restriction type maps to a consistent field, while the original local-language text is preserved so a regulatory analyst can verify against the source.
For how this data turns into analysis, see our 10-country restriction count, the paraben analysis, and the retinoid follow-up.
Getting started
The K-Beauty Cosmetic Ingredients API is available on RapidAPI. The free BASIC tier covers exploration; the PRO and higher tiers unlock partial-match search and the per-country regulations endpoint used in scenarios 2 and 4 above.
For chemical substance data outside the cosmetic scope — registered chemicals under Korea's K-REACH, GHS classifications, and persistent organic pollutant flags — we maintain a separate K-REACH API, which we will cover in a follow-up post.
Methodology and Sources
All API responses shown in this post were retrieved directly from the live K-Beauty Cosmetic Ingredients API (version 3.1.0). JSON payloads have been abbreviated for readability, and English annotations after // were added for explanation — they are not part of the API output. Full limit_condition text fields, containing the original English and Korean regulatory language, run to several hundred characters per entry and are not shown in full.
Underlying data: Ministry of Food and Drug Safety (MFDS), Korea Cosmetic Association (KCIA), European Commission CosIng database, and the equivalent national publications for the eight other markets.
The methylparaben EU limits (0.4% single, 0.8% mixture, Annex V entry 12) were cross-checked against the SCCS final opinion of December 15, 2023 and Commission Regulation (EU) 1004/2014. Korea and the other markets' figures are taken from the API response as shown.
Important Notice: This article is for informational purposes only. It is not legal, regulatory, or medical advice. Cosmetic regulations change and vary by market. API responses reflect the database at the time of retrieval and should be verified against the current text of the relevant regulation before use in any compliance or formulation decision. For full terms, see our Disclaimer.
Decoded Korea publishes data-driven analysis of Korean cosmetic ingredients, chemical regulations, and safety data.
Comments
Post a Comment