Rules Beta Get a free key

Ingredient Rules API

Beta

Look up an ingredient by INCI, CAS or EC and get every rule in every market, with the legal quote.

Substances with the rules that list them in the EU, Great Britain, US federal law and eight US states; machine-readable rules per market with scope, limits, dates and citations; a side-by-side comparison across markets.

At a glance

Status
Beta
Endpoints
GET /v1/cosmetics/ingredients
GET /v1/cosmetics/ingredients/{id}
GET /v1/cosmetics/rules
GET /v1/cosmetics/compare
GET /v1/cosmetics/categories
Cost
1 unit (each endpoint)
MCP tools
cosmetics_ingredient_lookup
cosmetics_ingredient_get
cosmetics_rules_by_market
cosmetics_compare_markets
cosmetics_categories
Data
Cosmetics dataset 1.0.0, built 2026-10-14.

Try it

Choose an endpoint and a sample, change the parameters, and send. Without a key the public demo answers the sample requests (marked demo, not counted against any quota, limited per IP address). With your key, or your account when you are signed in, any values work and the call counts against your plan. A key stays in this page's memory: it is never stored. Get a free key.

1 unit per call. Endpoint docs

query

query

query

query

Your API key (optional)

Leave empty for the demo. With a key the playground calls the real endpoint from your browser; the key is kept in memory only.

Recorded answer of the real API on the current data for this sample (long arrays trimmed).

Response

Response 200GET/v1/cosmetics/ingredients
{
  "data": {
    "count": 3,
    "substances": [
      {
        "id": "inci:SALICYLIC ACID",
        "id_type": "inci",
        "value": "SALICYLIC ACID",
        "display_name": "Salicylic acid",
        "linked_identifiers": [
          {
            "id": "cas:69-72-7",
            "via_rule_ids": ["EU-III-98", "GB-III-98", "… 1 more"],
            "method": "CAS and legal-glossary INCI of a rule with exactly one CAS (code)"
          }
        ],
        "rule_count": 8,
        "markets": {
          "EU": [
            {
              "rule_id": "EU-III-98",
              "jurisdiction": "EU",
              "instrument": "Regulation (EC) No 1223/2009",
              "annex": "III",
              "entry": "98",
              "provision": "Annex III, entry 98",
              "status": "restricted",
              "chemical_name": "Benzoic acid, 2-hydroxy-",
              "…": "8 more fields"
            },
            {
              "rule_id": "EU-III-98",
              "jurisdiction": "EU",
              "instrument": "Regulation (EC) No 1223/2009",
              "annex": "III",
              "entry": "98",
              "provision": "Annex III, entry 98",
              "status": "restricted",
              "chemical_name": "Benzoic acid, 2-hydroxy-",
              "…": "8 more fields"
            },
            "… 2 more"
          ],
          "GB": [
            {
              "rule_id": "GB-III-98",
              "jurisdiction": "GB",
              "instrument": "Regulation (EC) No 1223/2009 (GB)",
              "annex": "III",
              "entry": "98",
              "provision": "Annex III, entry 98",
              "status": "restricted",
              "chemical_name": "Benzoic acid, 2-hydroxy-",
              "…": "8 more fields"
            },
            {
              "rule_id": "GB-III-98",
              "jurisdiction": "GB",
              "instrument": "Regulation (EC) No 1223/2009 (GB)",
              "annex": "III",
              "entry": "98",
              "provision": "Annex III, entry 98",
              "status": "restricted",
              "chemical_name": "Benzoic acid, 2-hydroxy-",
              "…": "8 more fields"
            },
            "… 2 more"
          ]
        }
      },
      {
        "id": "name:SALICYLIC ACID",
        "id_type": "name",
        "value": "SALICYLIC ACID",
        "display_name": "Salicylic acid",
        "linked_identifiers": [],
        "rule_count": 2,
        "markets": {
          "EU": [
            {
              "rule_id": "EU-V-3",
              "jurisdiction": "EU",
              "instrument": "Regulation (EC) No 1223/2009",
              "annex": "V",
              "entry": "3",
              "provision": "Annex V, entry 3",
              "status": "allowed_preservative",
              "chemical_name": "Salicylic acid and its salts",
              "…": "8 more fields"
            }
          ],
          "GB": [
            {
              "rule_id": "GB-V-3",
              "jurisdiction": "GB",
              "instrument": "Regulation (EC) No 1223/2009 (GB)",
              "annex": "V",
              "entry": "3",
              "provision": "Annex V, entry 3",
              "status": "allowed_preservative",
              "chemical_name": "Salicylic acid and its salts",
              "…": "8 more fields"
            }
          ]
        }
      },
      "… 1 more"
    ],
    "note": "Identifiers as listed in the legal texts (CAS, EC, legal-glossary INCI, chemical names) and CosIng example INCI names; each rule says how it matched."
  },
  "meta": {
    "request_id": "req_…",
    "api_version": "1",
    "dataset": "cosmetics",
    "dataset_version": "1.0.0",
    "dataset_built_at": "2026-10-14T21:29:15+00:00",
    "data_status": "released",
    "sources": [
      {
        "id": "eur_lex_regulation_ec_no_1223_2009_conso",
        "name": "EUR-Lex: Regulation (EC) No 1223/2009, consolidated text 02009R1223-20260518, and amending acts M1-M54",
        "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02009R1223-20260518",
        "licence": "© European Union; reuse incl. commercial authorised with acknowledgement (Commission Decision 2011/833/EU). Consolidated text is documentation only.",
        "commercial_redistribution_ok": true
      },
      {
        "id": "cosing_annex_exports_and_ingredient_inve",
        "name": "CosIng annex exports and ingredient inventory (European Commission)",
        "url": "https://ec.europa.eu/growth/tools-databases/cosing/",
        "licence": "© European Union; Commission reuse policy (Decision 2011/833/EU). CosIng has no legal value: used only for INCI names, their CAS / EC numbers and cross-checks.",
        "commercial_redistribution_ok": true
      },
      "… 8 more"
    ],
    "provenance_note": "Every value carries provenance (source, id or URL, retrieval date; method and confidence where an AI judged). Calculations list their inputs and method.",
    "disclaimer": "Regulatory reference data. Not a safety assessment; a Responsible Person or safety assessor must sign off products.",
    "usage": "…"
  }
}
  1. 1Pin and diff: the version is also in the X-Dataset-Version header

Request

curlGET/v1/cosmetics/ingredients
curl -s "https://api.cosmeticrules.com/demo/v1/cosmetics/ingredients?inci=Salicylic+Acid"

Endpoints

Endpoints of the Ingredient Rules API
EndpointWhat it doesCostMCP toolDocumentation
GET /v1/cosmetics/ingredientsIngredient lookup by INCI, CAS or text1 unitcosmetics_ingredient_lookupDocs
GET /v1/cosmetics/ingredients/{id}Get a substance by id1 unitcosmetics_ingredient_getDocs
GET /v1/cosmetics/rulesRules by market1 unitcosmetics_rules_by_marketDocs
GET /v1/cosmetics/compareCompare an ingredient's rules across markets1 unitcosmetics_compare_marketsDocs
GET /v1/cosmetics/categoriesProduct categoriesfreecosmetics_categoriesDocs

What is included

  • Lookup by INCI name, CAS or EC number, or text
  • Rules by market with clauses, limits copied by code and verbatim quotes
  • Comparison across markets with EU and GB divergence
  • Product categories the checks accept

How it differs

  • Verbatim quotes and the snapshot of the text each rule rests on.
  • How the two extraction passes agreed, on every rule.
  • EU and GB compared entry by entry.

Plans

One key and one plan cover every Cosmetic Rules product, this one included. Free: 2,500 units a month (2,500 calls of /v1/cosmetics/ingredients). Paid plans are coming soon. Caching inside your product is allowed, and so is use by AI agents. Plans and units.

Status: Beta (new: the interface may still change, with notice in the docs). All products.