Rules Beta Get a free key

Label Tools API

Beta

Fragrance allergen labelling and INCI label validation for the EU, GB and the US.

Which fragrance allergens must be named (concentrations from the fragrance composition, isomers and groups summed, leave-on and rinse-off thresholds, dated by the 2023 EU list), and a check of an ingredient list as printed.

At a glance

Status
Beta
Endpoints
POST /v1/cosmetics/allergen-label
POST /v1/cosmetics/label-check
Cost
10 units (each endpoint)
MCP tools
cosmetics_allergen_label
cosmetics_label_check
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.

10 units per call. Endpoint docs

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 200POST/v1/cosmetics/allergen-label
{
  "data": {
    "verdict": "NEEDS_ATTENTION",
    "markets": {
      "EU": {
        "engine": "allergen_label_calculator",
        "dataset_version": "1.0.0",
        "market": "EU",
        "as_of": "2026-10-10",
        "exposure": "leave_on",
        "must_label": [
          {
            "rule_id": "EU-III-84",
            "label_as": ["Linalool"],
            "threshold_pct": 0.001,
            "total_pct": 0.064,
            "members": [
              {
                "input": "Linalool",
                "pct_in_product": 0.064,
                "derived": "8 % in fragrance x 0.8 % fragrance dose / 100"
              }
            ],
            "citation": {
              "rule_id": "EU-III-84",
              "provision": "Annex III, entry 84",
              "jurisdiction": "EU",
              "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:02009R1223-20260518",
              "quote": "84 1,6-Octadien-3-ol, 3,7-dimethyl- Linalool 78-70-6 201-134-4",
              "source": "EUR-Lex: Regulation (EC) No 1223/2009, consolidated text 02009R1223-20260518, and its amending acts",
              "retrieved_at": "2026-10-10T09:57:19Z"
            },
            "effective_from": "2013-07-11"
          },
          {
            "rule_id": "EU-III-88",
            "label_as": ["Limonene"],
            "threshold_pct": 0.001,
            "total_pct": 0.04,
            "members": [
              {
                "input": "Limonene",
                "pct_in_product": 0.04,
                "derived": "5 % in fragrance x 0.8 % fragrance dose / 100"
              }
            ],
            "citation": {
              "rule_id": "EU-III-88",
              "provision": "Annex III, entry 88",
              "jurisdiction": "EU",
              "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:02009R1223-20260518",
              "quote": "88 1-methyl-4-prop-1-en-2-yl-cyclohexene; dl-limonene (racemic); Dipentene ( 37 ) Limonene 138-86-3/ 7705-14-8 205-341-0/ 231-732-0",
              "source": "EUR-Lex: Regulation (EC) No 1223/2009, consolidated text 02009R1223-20260518, and its amending acts",
              "retrieved_at": "2026-10-10T09:57:19Z"
            },
            "effective_from": "2026-08-01"
          },
          "… 1 more"
        ],
        "below_threshold": [],
        "needs_attention": [],
        "not_yet_applicable": [],
        "unrecognised_inputs": [],
        "label_names": ["Citral", "Limonene", "… 1 more"],
        "verdict": "OK"
      },
      "GB": {
        "engine": "allergen_label_calculator",
        "dataset_version": "1.0.0",
        "market": "GB",
        "as_of": "2026-10-10",
        "exposure": "leave_on",
        "must_label": [
          {
            "rule_id": "GB-III-84",
            "label_as": ["Linalool"],
            "threshold_pct": 0.001,
            "total_pct": 0.064,
            "members": [
              {
                "input": "Linalool",
                "pct_in_product": 0.064,
                "derived": "8 % in fragrance x 0.8 % fragrance dose / 100"
              }
            ],
            "citation": {
              "rule_id": "GB-III-84",
              "provision": "Annex III, entry 84",
              "jurisdiction": "GB",
              "url": "https://www.legislation.gov.uk/eur/2009/1223/annex/III",
              "quote": "84 1,6-Octadien-3-ol, 3,7-dimethyl- Linalool 78-70-6 201-134-4",
              "source": "legislation.gov.uk: Regulation (EC) No 1223/2009 as it applies in Great Britain (Annexes II-VI, valid from 2026-08-15) and the amending UK S.I.s",
              "retrieved_at": "2026-10-10T10:01:32Z"
            },
            "effective_from": "2013-07-11"
          },
          {
            "rule_id": "GB-III-88",
            "label_as": ["Limonene"],
            "threshold_pct": 0.001,
            "total_pct": 0.04,
            "members": [
              {
                "input": "Limonene",
                "pct_in_product": 0.04,
                "derived": "5 % in fragrance x 0.8 % fragrance dose / 100"
              }
            ],
            "citation": {
              "rule_id": "GB-III-88",
              "provision": "Annex III, entry 88",
              "jurisdiction": "GB",
              "url": "https://www.legislation.gov.uk/eur/2009/1223/annex/III",
              "quote": "88 d-Limonene(4R)-1-Methyl-4-(1-methylethenyl) cyclohexene Limonene 5989-27-5 227-813-5",
              "source": "legislation.gov.uk: Regulation (EC) No 1223/2009 as it applies in Great Britain (Annexes II-VI, valid from 2026-08-15) and the amending UK S.I.s",
              "retrieved_at": "2026-10-10T10:01:32Z"
            },
            "effective_from": "2013-07-11"
          }
        ],
        "below_threshold": [],
        "needs_attention": [],
        "not_yet_applicable": [],
        "unrecognised_inputs": ["Geranial", "Neral"],
        "label_names": ["Limonene", "Linalool"],
        "verdict": "NEEDS_ATTENTION"
      }
    },
    "disclaimer": "Reference calculation from the published rule texts; not legal advice or a safety assessment."
  },
  "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

curlPOST/v1/cosmetics/allergen-label
curl -s -X POST "https://api.cosmeticrules.com/demo/v1/cosmetics/allergen-label" \
  -H "Content-Type: application/json" \
  -d '{"markets":["EU","GB"],"product_category":"body_lotion","as_of":"2026-10-10","fragrance":{"dose_pct":0.8,"composition":[{"inci":"Linalool","pct_in_fragrance":8},{"inci":"Limonene","pct_in_fragrance":5},{"inci":"Geranial","pct_in_fragrance":0.15},{"inci":"Neral","pct_in_fragrance":0.1}]}}'

Endpoints

Endpoints of the Label Tools API
EndpointWhat it doesCostMCP toolDocumentation
POST /v1/cosmetics/allergen-labelAllergen label calculation10 unitscosmetics_allergen_labelDocs
POST /v1/cosmetics/label-checkValidate an INCI ingredient list10 unitscosmetics_label_checkDocs

What is included

  • Allergens above the labelling thresholds, from the fragrance composition and dose
  • Ingredient list checks: order, fragrance term, nano and CI formats, prohibited ingredients
  • Each finding cites Article 19 of Regulation 1223/2009, the GB text or 21 CFR 701.3

How it differs

  • Group members and isomers summed as the rules require.
  • Exactly at the threshold is not labelled; above it is.
  • Dates of the 2023 EU allergen list applied by placing on the market.

Plans

One key and one plan cover every Cosmetic Rules product, this one included. Free: 2,500 units a month (250 calls of /v1/cosmetics/allergen-label). 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.