Skip to content

Skin age

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_age
request:
query: "components=skin_age"
response_path: "results[].description == \"skin_age\""
value: null # top-level value is unused
sum_measures:
- skin_age # integer apparent skin age (~0..100)
warnings: [7000]
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.”
  • 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.