Skin age
Overview
Section titled “Overview”Skin age estimates the apparent age of the user’s skin from visible signs of aging in the face image. It is not chronological age — two people of the same chronological age can receive different estimates.
component: skin_agerequest: query: "components=skin_age"response_path: "results[].description == \"skin_age\""value: null # top-level value is unusedsum_measures: - skin_age # integer apparent skin age (~0..100)warnings: [7000]Rendering notes
Section titled “Rendering notes”const age = response.results.find((r) => r.description === "skin_age");// The integer is in sum_measures (description "skin_age"), not the top-level value.const years = age?.sum_measures.find((m) => m.description === "skin_age")?.value; // integer ~0..100, or null
// The sum-measure is present even when the analysis failed (status 7000),// carrying value: null. Guard on the value, not on the measure existing.if (years == null) { // hide the skin-age card}UX considerations:
- Surface with care. Many users find a high estimate distressing. Pair with copy that emphasizes lifestyle factors and improvement potential.
- Treat it as an estimate, not a measurement. The result can shift between captures of the same person as lighting, expression and framing change. Establish your own expected variation on your capture flow before you present it as a trackable number.
- Show a range, not a point. “Your skin reads as 32–35” reads better than “34.”
local_warnings[]
Section titled “local_warnings[]”7000(error) — Skin Age analysis aborted due to image quality concerns or internal error.
When 7000 is present the finding is still returned, with message: "Error" and the skin_age sum-measure carrying value: null. Treat the null as “unavailable” rather than assuming the measure is missing.