Skip to content

Skin type

Skin type returns a categorical classification — not a 0..1 score. The classification is an integer 1..8 mapping to dermatological skin types and their sensitive variants, useful for routine recommendations. It is returned in sum_measures[] (description "skin_type") — the finding’s top-level value is unused. A per-zone breakdown (t-zone / u-zone) is also returned in measurement_locations[].

component: skin_type
request:
query: "components=skin_type,skin_type_visualization"
response_path: 'results[].description == "skin_type"'
value: null # top-level value is unused
sum_measures:
- skin_type # integer category 1..8 (see mapping below)
measurement_locations:
- t-zone # per-zone skin_type + contributing scores
- u-zone
also_request:
- skin_type_visualization # composite polygon-area features:
# levels 1-4 = shine data,
# levels 5-6 = pore dilation data,
# levels 7-9 = redness data
warnings: [] # no skin_type-specific status codes
ValueType
1Normal
2Dry
3Oily
4Combination
5Sensitive
6Dry sensitive
7Oily sensitive
8Combination sensitive

Read the integer from sum_measures[], not from value:

const SKIN_TYPE = {
1: "Normal", 2: "Dry", 3: "Oily", 4: "Combination", 5: "Sensitive",
6: "Dry sensitive", 7: "Oily sensitive", 8: "Combination sensitive",
};
const t = response.results.find((r) => r.description === "skin_type");
const skinTypeId = t?.sum_measures.find((m) => m.description === "skin_type")?.value;
const label = SKIN_TYPE[skinTypeId];

For routine recommendations, surface the label and pair with shine, texture, and pore_dilation for nuance.

measurement_locations[] carries one entry per face zone — t-zone and u-zone — each with its own skin_type integer (same 1..8 mapping) plus the contributing per-zone scores (Skin shine, pore_dilation, redness, dull_skin) in its measures[], and the zone’s mask shapes. Use these when you want to show, e.g., an oily T-zone alongside a normal U-zone rather than a single whole-face label.

  • Recently-applied product can shift the classifier toward “oily” or “combination” depending on finish.
  • Sensitive variants are inferred from redness and visible irritation patterns; they are conservative — many users with sensitive skin will be classified as their non-sensitive base type.

The skin_type metric emits no metric-specific local_warnings[] codes (it sets message: "Ok"). It inherits the global image-quality codes; its contributing metrics (shine, redness, pore_dilation) carry their own codes if requested.