DEV Community

Tagg
Tagg

Posted on

I Built an API for 21,000+ Korean Cosmetic Ingredients — Here's Why

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)
Enter fullscreen mode Exit fullscreen mode

Response:

{
  "success": true,
  "count": 3,
  "data": [
    {
      "inci_name": "RETINOL",
      "kr_name": "레티놀",
      "cas_numbers": "68-26-8",
      "regulation_status": "Restricted",
      "purposes": "Skin conditioning"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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

📂 GitHub - Example Code


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)