If you handle chemical compliance for products entering Korea, the question is rarely "is this chemical dangerous." It is "how does Korea classify it, is it registered, and does it carry a GHS label requirement." Those answers live in K-REACH — Korea's Act on Registration and Evaluation of Chemical Substances — and in the GHS classifications maintained alongside it.
The K-REACH Chemical Substance API exposes 47,517 registered substances, each with nine regulatory flags, plus GHS hazard data, through a single JSON interface. Like our cosmetics API, the data is Korean in origin, but the fields a chemical compliance workflow uses — CAS number, English name, the hazard flags, GHS pictogram codes, UN numbers — come back in English or in international standard form. A non-Korean-speaking analyst can run the whole thing.
This post walks through five real queries and what each one answers.
The nine flags
Every substance in the database carries nine boolean regulatory flags. They are the backbone of every query below:
is_toxic— toxic substanceis_prohibited— prohibited substanceis_restricted— restricted substanceis_priority— priority-management substanceis_cmr— carcinogenic, mutagenic, or reprotoxicis_persistent— persistent organic pollutantis_accident_prep— accident-preparedness substanceis_registration_req— registration requiredis_rotterdam— Rotterdam Convention (trade-controlled)
Scenario 1: Look up a substance by CAS number
The standard entry point. Given a CAS number, return the substance's identifiers, names, and all nine flags in one call. Here is a PFOS salt — one of the most heavily classified substances in the database.
GET /v1/substance/cas/2795-39-3
{
"substance": {
"id": 19387,
"cas_no": "2795-39-3",
"ke_no": "KE-18223",
"name_eng": "Potassium perfluorooctanesulfonate",
"name_kor": "퍼플루오로옥탄술폰산 칼륨", // Korean name
"formula": null,
"weight": null,
"flags": {
"is_toxic": true,
"is_restricted": false,
"is_prohibited": false,
"is_priority": true,
"is_cmr": true,
"is_accident_prep": false,
"is_persistent": true,
"is_registration_req": false,
"is_rotterdam": true
}
},
"regulations": [ ... ]
}
Five flags at once — toxic, priority-management, CMR, persistent organic pollutant, and Rotterdam. The ke_no is Korea's own substance identifier (KE number), used in MFDS and Ministry of Environment notices. The regulations array, abbreviated here, lists the Korean classification notices behind each flag with their dates. Everything a compliance analyst needs to read the substance's status is in English or numeric form; only name_kor is Korean.
Scenario 2: Pull GHS label data for an SDS
For anyone writing a Safety Data Sheet or a label, the GHS endpoint returns the signal word, pictogram codes, UN number, and hazard classifications. Here is benzene.
GET /v1/ghs/71-43-2
{
"substance": {
"cas_no": "71-43-2",
"name_eng": "Benzene",
"formula": "C6H6",
"weight": "78.11",
"flags": { "is_toxic": true, "is_priority": true,
"is_accident_prep": true, "is_registration_req": true, ... }
},
"ghs": {
"signal_word": "위험", // "Danger"
"pictograms": ["GHS02", "GHS07", "GHS08"],
"un_number": "1114",
"hazards": [ ... ]
}
}
The pictogram codes (GHS02 flammable, GHS07 irritant, GHS08 health hazard) and the UN number (1114) are international standards — the same on a label in Seoul, Frankfurt, or Houston. Only the signal word comes back in Korean (위험 = "Danger"), and the GHS code for it is universal. The benzene classification here matches its standard GHS profile: a Danger signal word with flammable, irritant, and serious-health-hazard pictograms.
Scenario 3: Search by name
When you do not have a CAS number, a name search returns every match with its flags. A partial match on "formaldehyde" returns the parent compound and its many reaction products and derivatives.
GET /v1/substance/search?q=formaldehyde
{
"page": 1,
"limit": 10,
"has_next_page": true,
"items": [
{
"id": 60,
"cas_no": "98219-66-0",
"name_eng": "Rosin, maleated, reaction products with formaldehyde",
"flags": { "is_toxic": false, "is_prohibited": false, ... }
},
...
]
}
Results are paginated (has_next_page tells you when to fetch more). This is how you map a whole chemical family — every formaldehyde derivative, every perfluoro compound — and see at a glance which carry flags and which do not. Searching by English name returns English-named results; the flags are English throughout.
Scenario 4: List everything under one regulation type
The regulations endpoint returns every substance under a chosen classification. This is the query behind our published analyses — for example, pulling the full prohibited list.
GET /v1/regulations/list?type=prohibited
{
"regulation_type": "prohibited",
"page": 1,
"has_next_page": true,
"items": [
{
"id": 2219,
"cas_no": "20859-73-8",
"name_eng": "Aluminum phosphide",
"flags": { "is_toxic": true, "is_prohibited": true,
"is_rotterdam": true, ... }
},
{
"id": 2522,
"cas_no": "92-67-1",
"name_eng": "4-Aminobiphenyl",
"flags": { "is_toxic": true, "is_prohibited": true, ... }
},
...
]
}
The type parameter accepts each of the nine flags: prohibited, toxic, restricted, priority, cmr, persistent, accident_prep, registration_req, and rotterdam. The prohibited list above is the data behind our 97-banned-substances post. Change the type to persistent and you get the persistent organic pollutants — the data behind our PFAS analysis.
Scenario 5: Cross-reference a class against a flag
Scenarios 3 and 4 combine into the query most compliance work actually needs. Pull a chemical family by name search, then check each member against a regulation list — for example, which perfluoro compounds are flagged as persistent organic pollutants.
GET /v1/regulations/list?type=persistent
{
"regulation_type": "persistent",
"items": [
{
"cas_no": "2043-53-0",
"name_eng": "Decane, ...heptadecafluoro-10-iodo-",
"flags": { "is_persistent": true, ... }
},
...
]
}
For a compliance team tracking PFAS or other substances of concern across markets, this is the core workflow: identify the family, pull the flagged subset, and compare against what other jurisdictions restrict. The flags map cleanly onto international frameworks — is_persistent to the Stockholm Convention, is_rotterdam to the Rotterdam Convention — so a Korean classification can be lined up against a global one without translation.
Working in English
Almost everything a chemical compliance workflow needs is English or international-standard: cas_no, ke_no, name_eng, formula, weight, all nine flags, the GHS pictogram codes, and the UN number. The Korean fields — name_kor, the signal word text, and the full Korean notice references in the regulations array — are preserved so a Korean-speaking analyst can verify against the source, but they are not needed to read a substance's regulatory status, build an SDS, or compare against another market's rules.
Sources and scope
The data is collected from Korea's official open-data portal (data.go.kr), drawing on the Ministry of Environment chemical substance and GHS datasets. It covers 47,517 registered substances with their K-REACH classifications and GHS hazard data. The flags reflect the classification notices recorded for each substance; the original notice references are preserved in the regulations array for verification.
For how this data turns into analysis, see 47,000 Chemicals in Korea's Database. Only 97 Are Banned and the PFAS analysis. For cosmetic ingredient data, see our K-Beauty API guide.
Getting started
The K-REACH Chemical Substance API is available on RapidAPI. The free tier covers exploration; higher tiers raise the request volume for bulk classification work.
Methodology and Sources
All API responses shown were retrieved directly from the live K-REACH Chemical Substance API. JSON payloads have been abbreviated for readability, and English annotations after // were added for explanation — they are not part of the API output. The full regulations arrays, containing Korean classification notices and dates, are not shown in full.
Underlying data: Korea's data.go.kr open-data portal, Ministry of Environment chemical substance and GHS datasets, covering 47,517 registered substances.
The benzene GHS classification (signal word Danger; pictograms GHS02, GHS07, GHS08; UN 1114) was cross-checked against published GHS classification references and standard safety data sheets.
Important Notice: This article is for informational purposes only. It is not legal, regulatory, or safety advice. Chemical classifications and GHS data change and must be verified against the current official source before use in any registration, SDS, or labeling decision. API responses reflect the database at the time of retrieval. 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