Developer
Public API
A free, read-only REST API for EU cosmetic ingredient data. No authentication required. Returns JSON.
Base URL
https://cosingchecker.com/api/v1/
Annex entries
GET /api/v1/entries/
Search annex entries. At least one parameter is required.
| Parameter | Type | Description |
|---|---|---|
q | string | Search term — name, CAS, EC or colour index |
annex | string | Annex code: II, III, IV, V or VI |
cmr | 1 / true | Filter to CMR substances only |
page | integer | Page number (default 1) |
per_page | integer | Results per page (max 100, default 50) |
Example requests:
GET https://cosingchecker.com/api/v1/entries/?q=sodium+benzoate
GET https://cosingchecker.com/api/v1/entries/?annex=III&cmr=1
GET https://cosingchecker.com/api/v1/entries/?annex=V&page=2&per_page=20
GET /api/v1/entries/{slug}/
Get a single annex entry by its slug (from the entry page URL).
GET https://cosingchecker.com/api/v1/entries/iii-12-benzoic-acid-sodium-benzoate/
Entry response fields
| Field | Description |
|---|---|
id | Internal record ID |
slug | URL slug |
url | Relative URL of the entry page |
annex | Annex code (II, III, IV, V, VI) |
entry_number | Entry number within the annex |
display_name | Primary display name |
chemical_name | Chemical name |
inci_glossary_name | INCI / Glossary name |
cas_number | CAS number(s) |
ec_number | EC number(s) |
product_type | Product type restrictions |
max_concentration | Maximum allowed concentration |
warnings | Warning labels |
other_restrictions | Other restrictions |
cmr | CMR classification |
update_date | Last update date |
Ingredient inventory
GET /api/v1/ingredients/
Search the CosIng ingredient inventory by INCI name, INN name, CAS or EC number.
| Parameter | Description |
|---|---|
q | Search term (required) |
page | Page number (default 1) |
per_page | Results per page (max 100, default 50) |
GET https://cosingchecker.com/api/v1/ingredients/?q=glycerin
GET /api/v1/ingredients/{slug}/
Get a single ingredient by slug.
GET https://cosingchecker.com/api/v1/ingredients/12345-glycerin/
Response format
All list endpoints return paginated JSON:
{
"count": 1739,
"num_pages": 35,
"page": 1,
"per_page": 50,
"results": [ ... ]
}
Usage and terms
This API is free to use for non-commercial and commercial projects. No API key required. Please cache responses where possible to avoid excessive load.
Data is derived from publicly available European Commission materials. Always verify regulatory decisions against official source documents. See the sources page for provenance details.