---
title: "Draft INCI list of your ingredients in label order (the NanoBase™ ingredients are merged into the final list by Pensive Beauty® Nanoscience Labs for approved commercial accounts: https://nanobaselabs.com/register/)"
method: POST
path: "/inci/label"
---

# Draft INCI list of your ingredients in label order (the NanoBase™ ingredients are merged into the final list by Pensive Beauty® Nanoscience Labs for approved commercial accounts: https://nanobaselabs.com/register/)

`POST /inci/label`

## Request

- Base URL: `https://api.nanobaselabs.com`
- URL: `https://api.nanobaselabs.com/inci/label`
- Auth: API key in header `x-nb-key`

## Request body

- object
  - `variant` 'classic' | 'luxe' | 'clinical'
  - `nbPct` number
  - `lines` Line[]
    - `n` string
    - `pct` number
    - `blend` object[]
      - `n` string
      - `f` union: fraction of the raw material, or "trace"
        - number
        - 'trace'
      - `props` Props: Properties of an ingredient the library does not list, researched by the caller's AI. The line is then assessed like a library ingredient of that class and echoed under declared_by_caller. Library entries win unless override is true. Invalid props return 400 invalid_props with the field.
        - `class` 'oil' | 'water_soluble' | 'peptide' | 'lipopeptide' | 'charged' | 'polymer' | 'surfactant' | 'preservative' | 'humectant' | 'neutral', required
        - `charge` 'nonionic' | 'zwitterionic' | 'cationic' | 'anionic'
        - `oil_type` 'insoluble_heavy' | 'light_ester_ripening_prone' | 'polar'
        - `mw_class` 'low' | 'medium' | 'high'
        - `mw` number
        - `valence` integer
        - `ionized_fraction` number
        - `form` 'nonionic' | 'salt' | 'acid'
        - `override` boolean
      - `source` union
        - Source: A supplier document that confirms an ingredient's information. Ask your user to upload it and send its text. Stored, never fetched; the text is kept privately and never returned or shown to other users; responses echo doc_type and doc_date only. A submission is used right away for your own account and added to the shared library after review by Pensive Beauty® Nanoscience Labs; a document whose text (doc_type plus at least about 200 characters) names the ingredient supports the review (a url alone does not count). Invalid sources return 400 invalid_source with the field.
          - `doc_type` 'TDS' | 'SDS' | 'CoA' | 'spec', required
          - `supplier` string
          - `doc_date` string: YYYY, YYYY-MM or YYYY-MM-DD
          - `url` string: http(s); never fetched
          - `excerpt` string: accepted as the same field as text
          - `text` string: the document text, up to 200 KB (204,800 bytes UTF-8)
        - Source[]
          - `doc_type` 'TDS' | 'SDS' | 'CoA' | 'spec', required
          - `supplier` string
          - `doc_date` string: YYYY, YYYY-MM or YYYY-MM-DD
          - `url` string: http(s); never fetched
          - `excerpt` string: accepted as the same field as text
          - `text` string: the document text, up to 200 KB (204,800 bytes UTF-8)
    - `props` Props: Properties of an ingredient the library does not list, researched by the caller's AI. The line is then assessed like a library ingredient of that class and echoed under declared_by_caller. Library entries win unless override is true. Invalid props return 400 invalid_props with the field.
      - `class` 'oil' | 'water_soluble' | 'peptide' | 'lipopeptide' | 'charged' | 'polymer' | 'surfactant' | 'preservative' | 'humectant' | 'neutral', required
      - `charge` 'nonionic' | 'zwitterionic' | 'cationic' | 'anionic'
      - `oil_type` 'insoluble_heavy' | 'light_ester_ripening_prone' | 'polar'
      - `mw_class` 'low' | 'medium' | 'high'
      - `mw` number
      - `valence` integer
      - `ionized_fraction` number
      - `form` 'nonionic' | 'salt' | 'acid'
      - `override` boolean
    - `source` union
      - Source: A supplier document that confirms an ingredient's information. Ask your user to upload it and send its text. Stored, never fetched; the text is kept privately and never returned or shown to other users; responses echo doc_type and doc_date only. A submission is used right away for your own account and added to the shared library after review by Pensive Beauty® Nanoscience Labs; a document whose text (doc_type plus at least about 200 characters) names the ingredient supports the review (a url alone does not count). Invalid sources return 400 invalid_source with the field.
        - `doc_type` 'TDS' | 'SDS' | 'CoA' | 'spec', required
        - `supplier` string
        - `doc_date` string: YYYY, YYYY-MM or YYYY-MM-DD
        - `url` string: http(s); never fetched
        - `excerpt` string: accepted as the same field as text
        - `text` string: the document text, up to 200 KB (204,800 bytes UTF-8)
      - Source[]
        - `doc_type` 'TDS' | 'SDS' | 'CoA' | 'spec', required
        - `supplier` string
        - `doc_date` string: YYYY, YYYY-MM or YYYY-MM-DD
        - `url` string: http(s); never fetched
        - `excerpt` string: accepted as the same field as text
        - `text` string: the document text, up to 200 KB (204,800 bytes UTF-8)
  - `base` 'classic' | 'luxe' | 'clinical': alias of variant
  - `basePct` number: alias of nbPct
  - `architecture` 'classic' | 'luxe' | 'clinical': alias (MCP spelling)
  - `architecture_pct` number: alias (MCP spelling)

## Response `200`

mode label (draft): label_status draft_nanobase_merge_by_pensive, your_inci (your ingredients in label order), finished_inci (a placeholder for the NanoBase ingredients, then your_inci), ordered, tail (your lines with position in finished_inci), final_label {how, privacy}, nanobase_inci, allergen_prompt and colorants when relevant. mode composition: composition[{name,pct}], composition_sheet (NanoBase one line, with %)

- object
  - `api_version` string
  - `usage` Usage
    - `tier` string
    - `month` string
    - `runsUsed` number
    - `runsLimit` number
    - `runs_remaining` number
    - `run_window_ends_at` string, nullable: ISO end of the open 60-minute run session; null when none is open
    - `runCallsUsed` number
    - `runCallsLimit` number

## Other responses

- `400`: error (see Error)
- `401`: error (see Error)
- `403`: error (see Error)
- `429`: limited; Retry-After gives the seconds to wait
- `500`: error (see Error)

---

[API](https://skmtc.dev/nanobaselabs/apis/nanobase-api.md) · [All operations](https://skmtc.dev/nanobaselabs/apis/nanobase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nanobaselabs/apis/nanobase-api/revisions/f9c58488c2fb?raw)
