INCI Resolver API · Public endpoint

Resolve a free-text query to a canonical INCI row.

A thin, read-only JSON endpoint over the same curated ingredient table that backs the directory. No account, no API key — designed for indie-brand spreadsheets, partner platforms, and internal tools that need a deterministic INCI lookup.

  • Method

    GET

  • Rate limit

    60 / min / IP

  • Response

    JSON

  • Auth

    None

Sample response · 200

GET /api/inci/resolve?q=niacinamide
{
  "query": "niacinamide",
  "count": 1,
  "results": [
    {
      "slug": "niacinamide",
      "name": "Niacinamide",
      "canonicalInciName": "Niacinamide",
      "cas": "98-92-0",
      "sourceUrl": "https://www.cir-cpanel.org/sites/default/files/ingredients/niacinamide.pdf",
      "matchScore": 100,
      "url": "/ingredients/niacinamide"
    }
  ]
}

Parameters

Two query-string keys.

Both keys are passed as URL parameters. A non-integer limit is treated as omitted (and reverted to the default). Validation failures return a 400 with a flat { errors: { field: 'message' } } body.

NameRequiredTypeDefault
q
Required

Free-text query. Matched case- and whitespace-insensitively against the INCI name, the slug, and the display name. Minimum 1 character, maximum 200.

Yesstring
limit
Optional

Maximum rows returned. Integer 1–50. Defaults to 10.

Nointeger10

curl

Paste-and-run from your terminal.

The endpoint is exposed at the platform domain under /api/inci/resolve. Copy the line below verbatim — no headers, no auth, no body.

curl 'https://tinctloom.com/api/inci/resolve?q=niacinamide'

A 429 indicates the per-IP bucket is exhausted — back off for the next minute. A 400 means the query string itself was rejected (oversize, missing, or non-integer where an integer was expected).

Try it

Resolve from this page.

The widget below hits the live endpoint from your browser. It only fires on submit — landing on Tinctloom /ingredients/api does not count against the 60-per-minute bucket.

Live

Try-it

Resolve from this page.
Fires a single GET against /api/inci/resolve. Submit-driven — landing on this page does not call the endpoint.

Type a query above and hit Resolve to see the JSON the endpoint returns.