Skin type
Overview
Section titled “Overview”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_typerequest: query: "components=skin_type,skin_type_visualization"response_path: 'results[].description == "skin_type"'value: null # top-level value is unusedsum_measures: - skin_type # integer category 1..8 (see mapping below)measurement_locations: - t-zone # per-zone skin_type + contributing scores - u-zonealso_request: - skin_type_visualization # composite polygon-area features: # levels 1-4 = shine data, # levels 5-6 = pore dilation data, # levels 7-9 = redness datawarnings: [] # no skin_type-specific status codesValue mapping
Section titled “Value mapping”| Value | Type |
|---|---|
| 1 | Normal |
| 2 | Dry |
| 3 | Oily |
| 4 | Combination |
| 5 | Sensitive |
| 6 | Dry sensitive |
| 7 | Oily sensitive |
| 8 | Combination sensitive |
Rendering notes
Section titled “Rendering notes”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.
Per-zone breakdown
Section titled “Per-zone breakdown”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.
Edge cases
Section titled “Edge cases”- 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.
local_warnings[]
Section titled “local_warnings[]”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.
Related
Section titled “Related”- How metrics connect —
skin_typecompositesshine,pore_dilation,redness, anddull_skin. - Visualization data —
skin_type_visualizationis a composite Type-2 stream: levels 1-4 carry shine data, 5-6 pore dilation, 7-9 redness. Each level is a polygon-area feature. - Rendering recipes → Polygon areas — same renderer as the underlying metrics.