> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.morphiaone.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.morphiaone.ai/_mcp/server.

# Makeup and hair catalogue

`GET /v1/makeup/capabilities` answers the same declaration as JSON, with a
`declaration_digest` that changes whenever what may be sent changes.

## Custom mode

A custom product is `"mode": "custom"`, a `category`, a `color` (`#RGB` or
`#RRGGBB`) and the options below; the server resolves the rest from the
category's current profile. An option left out takes its default.

| Category      | Options                                                                                                            | Profile                   |
| ------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------- |
| `foundation`  | `intensity`: `medium` (default), `strong`                                                                          | `foundation.natural` v2   |
| `blush`       | `intensity`: `medium` (default), `strong`                                                                          | `blush.standard` v2       |
| `contour`     | `intensity`: `medium` (default), `strong`                                                                          | `contour.standard` v2     |
| `eyeshadow`   | `intensity`: `medium` (default), `strong`                                                                          | `eyeshadow.lid` v2        |
| `eyeliner`    | `style`: `normal` (default), `dark_matte`; `intensity`: `medium` (default), `strong`                               | `eyeliner.standard` v2    |
| `highlighter` | `intensity`: `medium` (default), `strong`                                                                          | `highlighter.standard` v2 |
| `mascara`     | `style`: `volume` (default), `curl`, `length`, `volume_curl`, `volume_length`, `curl_length`, `volume_curl_length` | `mascara.standard` v2     |
| `lipstick`    | `finish`: `matte` (default), `gloss`, `metallic`                                                                   | `lipstick.standard` v2    |
| `lip_liner`   | `intensity`: `medium` (default), `strong`                                                                          | `lip_liner.standard` v2   |
| `concealer`   | `intensity`: `medium` (default), `strong`                                                                          | `concealer.standard` v2   |
| `bronzer`     | `intensity`: `medium` (default), `strong`                                                                          | `bronzer.standard` v2     |

## Foundation

`category: foundation`

| Field                | Accepts                     | Default   |
| -------------------- | --------------------------- | --------- |
| `color`              | `#RRGGBB`                   | required  |
| `opacity`            | number `0`–`1`, step `0.01` | `1`       |
| `finish`             | `natural`, `bright`         | `natural` |
| `coverage`           | number `0`–`1.5`            | `1.0`     |
| `coverage_opacity`   | number `0.5`–`1.5`          | `1.0`     |
| `coverage_face_blur` | number `0.5`–`1.5`          | `1.0`     |

Known limitations:

* `finish`: bright renders like natural; use coverage or opacity for a visible change.

## Blush

`category: blush`

| Field             | Accepts                     | Default               |
| ----------------- | --------------------------- | --------------------- |
| `color`           | `#RRGGBB`                   | required              |
| `opacity`         | number `0`–`1`, step `0.01` | `1`                   |
| `texture`         | texture id (below)          | required              |
| `glitter.texture` | texture id (below)          | required in `glitter` |
| `glitter.opacity` | number `0`–`1`              | `1.0`                 |

Textures:

* `blush.1` — Blush 1
* `blush.2` — Blush 2
* `blush.3` — Blush 3
* `blush.4` — Blush 4
* `blush.diamond` — Diamond
* `blush.heart` — Heart
* `blush.new` — New
* `blush.square` — Square

Glitter textures (`glitter.texture`):

* `glitter.1` — Glitter 1
* `glitter.2` — Glitter 2
* `glitter.3` — Glitter 3

Known limitations:

* `opacity`: 0 renders no product; leave the product out instead.

## Contour

`category: contour`

| Field     | Accepts                     | Default  |
| --------- | --------------------------- | -------- |
| `color`   | `#RRGGBB`                   | required |
| `opacity` | number `0`–`1`, step `0.01` | `1`      |
| `texture` | texture id (below)          | required |

Textures:

* `contour.1` — Contour 1
* `contour.2` — Contour 2
* `contour.3` — Contour 3
* `contour.4` — Contour 4
* `contour.5` — Contour 5
* `contour.6` — Contour 6

Known limitations:

* `texture`: contour.1 is the same artwork as bronzer.1.
* `opacity`: 0 renders no product; leave the product out instead.

## Eyeshadow

`category: eyeshadow`

| Field     | Accepts                                           | Default  |
| --------- | ------------------------------------------------- | -------- |
| `texture` | texture id (below)                                | required |
| `shades`  | array of `{color, opacity}`, one per texture slot | required |

Textures:

* `eyeshadow.mostly-lids-eyeshadow` — Eyeshadow - Mostly Lids
* `eyeshadow.neon` — Neon
* `eyeshadow.pastel` — Pastel
* `eyeshadow.primary` — Primary

## Eyeliner

`category: eyeliner`

| Field     | Accepts                     | Default  |
| --------- | --------------------------- | -------- |
| `color`   | `#RRGGBB`                   | required |
| `opacity` | number `0`–`1`, step `0.01` | `1`      |
| `texture` | texture id (below)          | required |
| `style`   | `normal`, `dark_matte`      | `normal` |

Textures:

* `eyeliner.1` — Eyeliner 1
* `eyeliner.eyepencil-1` — Eye Pencil 1

Known limitations:

* `opacity`: 0 renders no product; leave the product out instead.

## Highlighter

`category: highlighter`

| Field                 | Accepts                     | Default  |
| --------------------- | --------------------------- | -------- |
| `color`               | `#RRGGBB`                   | required |
| `opacity`             | number `0`–`1`, step `0.01` | `1`      |
| `texture`             | texture id (below)          | required |
| `silvery`             | boolean                     | `false`  |
| `silvery_opacity`     | number `0`–`1`              | `0.5`    |
| `colored`             | boolean                     | `false`  |
| `light_control`       | integer `0`–`100`           | `50`     |
| `reflectance_control` | integer `0`–`100`           | `50`     |
| `intensity`           | integer `0`–`100`           | `50`     |

Textures:

* `highlighter.1` — Highlighter 1
* `highlighter.2` — Highlighter 2
* `highlighter.3` — Highlighter 3
* `highlighter.4` — Highlighter 4
* `highlighter.5` — Highlighter 5
* `highlighter.6` — Highlighter 6
* `highlighter.7` — Highlighter 7
* `highlighter.8` — So Diffused

Known limitations:

* `opacity`: renders like the default; intensity (0 to 100) is the strength control.
* `silvery_opacity`: has no effect unless silvery is true.

## Mascara

`category: mascara`

| Field     | Accepts                                                                                         | Default  |
| --------- | ----------------------------------------------------------------------------------------------- | -------- |
| `color`   | `#RRGGBB`                                                                                       | required |
| `opacity` | number `0`–`1`, step `0.01`                                                                     | `1`      |
| `texture` | texture id (below)                                                                              | required |
| `style`   | `volume`, `curl`, `length`, `volume_curl`, `volume_length`, `curl_length`, `volume_curl_length` | `volume` |

Textures:

* `mascara.1` — Mascara 1

Known limitations:

* `opacity`: 0 renders no product; leave the product out instead.

## Lipstick

`category: lipstick`

| Field                         | Accepts                      | Default                    |
| ----------------------------- | ---------------------------- | -------------------------- |
| `color`                       | `#RRGGBB`                    | required                   |
| `opacity`                     | number `0`–`1`, step `0.01`  | `1`                        |
| `finish`                      | `matte`, `gloss`, `metallic` | `matte`                    |
| `look`                        | `full`, `ombre`              | `full`                     |
| `ombre`                       | `{color, opacity}`           | required for `look: ombre` |
| `shading.darkness_opacity`    | number `0`–`1`               | `0.8`                      |
| `shading.darkness_smooth`     | integer `0`–`4`              | `1`                        |
| `shading.lightness_opacity`   | number `0`–`1`               | `0.4`                      |
| `shading.lightness_smooth`    | integer `0`–`4`              | `2`                        |
| `shading.reflectance`         | number `0`–`1`               | `0.9`                      |
| `shading.reflectance_opacity` | number `0`–`1`               | `0.24`                     |

Known limitations:

* `shading`: reflectance has no effect on the default matte finish; use finish gloss or metallic.
* `opacity`: 0 renders no product; leave the product out instead.

## Lip liner

`category: lip_liner`

| Field              | Accepts                     | Default  |
| ------------------ | --------------------------- | -------- |
| `color`            | `#RRGGBB`                   | required |
| `opacity`          | number `0`–`1`, step `0.01` | `1`      |
| `thickness`        | number `0`–`1`              | `0.0`    |
| `wideness`         | number `0`–`1`              | `0.0`    |
| `upper_lip_offset` | number `0`–`1`              | `0.0`    |
| `lower_lip_offset` | number `0`–`1`              | `0.0`    |

Known limitations:

* `opacity`: 0 renders no product; leave the product out instead.

## Concealer

`category: concealer`

| Field      | Accepts                     | Default  |
| ---------- | --------------------------- | -------- |
| `color`    | `#RRGGBB`                   | required |
| `opacity`  | number `0`–`1`, step `0.01` | `1`      |
| `texture`  | texture id (below)          | required |
| `coverage` | number `0`–`1.5`            | `1.0`    |

Textures:

* `concealer.1` — Concealer 1

## Bronzer

`category: bronzer`

| Field     | Accepts                     | Default  |
| --------- | --------------------------- | -------- |
| `color`   | `#RRGGBB`                   | required |
| `opacity` | number `0`–`1`, step `0.01` | `1`      |
| `texture` | texture id (below)          | required |

Textures:

* `bronzer.1` — Bronzer 1
* `bronzer.2` — Bronzer 2
* `bronzer.3` — Bronzer 3
* `bronzer.4` — Bronzer 4
* `bronzer.5` — Bronzer 5

Known limitations:

* `texture`: bronzer.1 is the same artwork as contour.1.
* `opacity`: 0 renders no product; leave the product out instead.

## Hair

`POST /v1/hair/try-ons` takes an optional `blend`:

* `tint`
* `color` (default)
* `overlay`

## Not available

* **Eye pencil** (`eye_pencil`): not available.
* **Eyebrow** (`eyebrow`): not available.
* **Fun mask** (`fun_mask`): not available.
* **Textured lipstick** (sheer, shimmer, glitter and semi-bright finishes): not available.

A category or texture missing from this page is refused with `400 INVALID_REQUEST`; a category's detail code is `unsupported_category`.