Skip to main content

What's Inside the K-Beauty Cosmetic Ingredients API: 4 Queries That Show You the Data

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
EU0.4%0.8%
Korea0.4%0.8%
ASEAN0.4%0.8%
Brazil0.4%0.8%
Argentina0.4%0.8%
China0.4%0.8% *
Taiwan0.4%0.8%
Japan1.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

Popular posts from this blog

Sunscreen UV Filters: A 10-Country Comparison

A sunscreen formulated for sale in Seoul cannot always be sold as-is in New York, Paris, or São Paulo. Each country maintains its own list of permitted UV filters, and the lists rarely match. A filter that is legal at 10% in one market may be banned in the next, or capped at 5%, or allowed only in specific product types. We mapped UV filter approvals across 10 markets — the EU, Korea, Japan, China, Taiwan, ASEAN, the US, Canada, Brazil, and Argentina — using a structured database of 21,796 cosmetic ingredients with 30,960 regulatory records. Below is what the data shows. What every country agrees on Two UV filters are approved in all 10 markets: Zinc Oxide — mineral filter, broad spectrum (UVA + UVB) Titanium Dioxide — mineral filter, UVB and partial UVA These are the only filters with universal approval. Any formulation designed to sell identically across all 10 markets without reformulation must rely on these two ingredients. This is why most global brands lead with minera...

Banned in Europe, Legal in Korea: 5 Ingredients That Split Global Regulators

The same moisturizer that sits on a shelf in Seoul could be pulled from a store in Paris. Not because of a labeling error or a packaging defect — but because an ingredient inside is classified differently by two governments looking at the same scientific data. This happens more often than most consumers realize. The EU and South Korea — both major cosmetics markets with sophisticated regulatory systems — frequently disagree on where to draw the line. The EU's cosmetics regulation (EC 1223/2009) maintains one of the strictest banned substance lists in the world, with over 1,600 entries in Annex II. Korea's MFDS takes a different approach, often allowing the same ingredients under specific concentration limits or without restriction. Neither system is wrong. They operate under different regulatory philosophies: the EU leans toward the precautionary principle — restrict first, revisit later. Korea tends toward risk management — allow under controlled conditions, monitor outcomes...

Your 20% Vitamin C Serum Has No Concentration Limit. In Any Country.

Vitamin C serums are sold at 10%, 15%, 20%, and sometimes 30% concentration. These are high numbers for an active ingredient. For comparison, the EU recently capped retinol at 0.3% in most cosmetics. So how is 20% vitamin C legal when 0.3% retinol is the EU limit? Because no country regulates L-Ascorbic Acid concentration in cosmetics. None of the 10 markets in our database — EU, Korea, Japan, China, Taiwan, ASEAN, Brazil, Argentina, the US, or Canada — has a limit. 76 forms of vitamin C Our database contains 76 ingredients with "Ascorbic" or "Ascorbyl" in their INCI names. Vitamin C in skincare is not a single ingredient — it is a family of compounds, each with different stability, potency, and skin penetration characteristics. The ones consumers encounter most often: Form INCI name Characteristics L-Ascorbic Acid Ascorbic Acid Most potent, least stable. Requires low pH. The form used in 10–20% serums MAP Magnesium Ascorbyl Phosphate Stable,...