The Problem Nobody Talks About
If you've ever tried to check whether a cosmetic ingredient is legal in South Korea, you know the pain:
- 🇰🇷 Government websites only in Korean
- 📄 Data buried in PDFs, not databases
- 🔍 No search functionality
- 🚫 No official API
For cosmetic brands trying to enter the Korean market, this means hours of manual research, expensive consultants, or just... guessing.
I decided to fix this.
What I Built
K-Beauty Cosmetic Ingredients API — A REST API with:
- ✅ 21,796 ingredients from official Korean sources
- ✅ INCI names, CAS numbers, Korean translations
- ✅ Regulatory status (Prohibited / Restricted / Not Listed)
- ✅ Concentration limits and conditions
- ✅ Fast JSON responses (<50ms)
Data comes directly from:
- MFDS (Ministry of Food and Drug Safety) — Korea's FDA
- KCIA (Korea Cosmetic Industry Association)
Quick Example
Want to check if Retinol is restricted in Korea?
import requests
response = requests.get(
"https://k-beauty-cosmetic-ingredients.p.rapidapi.com/v1/ingredient/inci",
params={"q": "retinol"},
headers={
"X-RapidAPI-Key": "YOUR_API_KEY",
"X-RapidAPI-Host": "k-beauty-cosmetic-ingredients.p.rapidapi.com"
}
)
data = response.json()
print(data)
Response:
{
"success": true,
"count": 3,
"data": [
{
"inci_name": "RETINOL",
"kr_name": "레티놀",
"cas_numbers": "68-26-8",
"regulation_status": "Restricted",
"purposes": "Skin conditioning"
}
]
}
Now you know: Retinol is restricted (allowed with conditions) in Korean cosmetics. No PDF digging required.
Who Is This For?
| User | Use Case |
|---|---|
| 🧪 Cosmetic Formulators | Check ingredients before formulating |
| 📋 Regulatory Consultants | Speed up compliance audits |
| 🏭 Manufacturers | Validate formulations for Korea export |
| 📱 App Developers | Build ingredient scanner apps |
| 🛒 E-commerce | Show safety info on product pages |
API Endpoints
| Endpoint | Description |
|---|---|
/v1/ingredient/inci?q= |
Search by INCI name |
/v1/ingredient/cas?q= |
Search by CAS number |
/v1/ingredient/kr?q= |
Search by Korean name |
/v1/ingredient/search?q= |
Partial text search |
/v1/ingredient/status?s= |
Filter by regulatory status |
/v1/stats |
Database statistics |
Tech Stack
For those curious about how it's built:
- Backend: Python, FastAPI
- Database: SQLite (read-only mode)
- Server: Gunicorn + Uvicorn workers
- Infrastructure: AWS EC2, Docker
- Monitoring: Telegram alerts
- Distribution: RapidAPI
- Security: OWASP Top 10 hardened (Rate Limiting, Input Validation, LIKE Wildcard Escaping, Proxy Secret)
Why SQLite?
The data is essentially static (updated monthly). SQLite in read-only mode gives us:
- Zero configuration
- Fast reads
- No separate database server
- Easy backups
For a read-heavy API with ~22K records, it's perfect.
Lessons Learned
1. Government Data is Messy
Scraping and normalizing data from multiple sources took 10x longer than building the API itself.
2. B2B > B2C for Niche APIs
Consumer apps want "safety scores." Businesses want regulatory compliance data. They're willing to pay for it.
3. Documentation Matters
Good docs = fewer support questions = more time for features.
Try It Free
The API is live on RapidAPI with a free tier (100 requests/month).
🔗 K-Beauty Cosmetic Ingredients API
What's Next?
- [ ] Monthly data updates
- [ ] More search filters
- [ ] Batch lookup endpoint
- [ ] Python/JS SDK packages
Questions?
Drop a comment below or reach out on RapidAPI. Happy to help!
If you're working on cosmetic tech or regulatory compliance tools, I'd love to hear about your use case.
Top comments (0)