> 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.

# digitisation.assessment.settled

POST 

An assessment finished: `data.object` is its id and `status`.

Sent as canonical JSON with `MorphiaOne-Signature: t=<unix>,v1=<hex>` (HMAC-SHA256
over `t.` + the raw body; two `v1=` values during a secret rotation). Verify the
raw bytes with the SDK's `webhooks.verify` before parsing. `id` is stable across
every retry and resend, so deduplicate on it. No ordering is promised.

Reference: https://docs.morphiaone.ai/api-reference/endpoints/webhooks/webhook-digitisation-assessment-settled

## Request

### Headers

- `MorphiaOne-Signature` (string, required)
- `MorphiaOne-Event-Id` (string, required)
- `MorphiaOne-Event-Type` (string, required)
- `MorphiaOne-Delivery-Attempt` (integer, required)

### Payload

- `created` (datetime, required)
- `data` (WebhookEventDataV1, required)
- `id` (string, required)
- `type` (enum, required)
  - Allowed values: `job.succeeded`, `job.failed`, `job.cancelled`, `digitisation.assessment.settled`, `digitisation.candidate.reviewed`, `catalogue.revision.staged`, `test.ping`
- `api_version` ("v1", optional, default: v1)
- `livemode` (boolean, optional, nullable)
- `object` ("event", optional, default: event)

## Types

### WebhookEventDataV1

- `object` (WebhookEventDataV1Object, required)

### WebhookEventDataV1Object

- JobV1: JobV1
- WebhookDeletedJobV1: WebhookDeletedJobV1
- WebhookTestObjectV1: WebhookTestObjectV1
- AssessmentSettledV1: AssessmentSettledV1
- CandidateReviewedV1: CandidateReviewedV1
- RevisionStagedV1: RevisionStagedV1

### JobV1

- `completed_at` (datetime, required, nullable)
- `created_at` (datetime, required)
- `error` (JobErrorV1, required, nullable)
- `expires_at` (datetime, required, nullable)
- `id` (string, required)
- `inputs` (list of JobInputRef, required)
- `operation` (enum, required) — What a job does: the operation's authorization scope. An operation is not its output's `type`: `OPERATION_OUTPUT_TYPE` is the one place the two meet.
  - Allowed values: `makeup.apply`, `skin.analyze`, `hair.try_on`
- `output` (JobV1Output, required, nullable)
- `status` (enum, required)
  - Allowed values: `queued`, `running`, `succeeded`, `failed`, `cancelled`
- `updated_at` (datetime, required)
- `livemode` (boolean, optional)
- `resolution` (MakeupResolution, optional) — `JobV1.resolution`: how a job's custom applications were resolved. Fixed at admission, so an exact retry and every later read answer the profile versions the job was admitted under, whatever the declaration says now.

### WebhookDeletedJobV1

``data.object`` once the job was deleted: the id and nothing else.

- `id` (string, required)
- `deleted` (true, optional, default: true)
- `object` ("job", optional, default: job)

### WebhookTestObjectV1

``data.object`` of a ``test.ping``: which endpoint the console pinged.

- `endpoint_id` (string, required)
- `object` ("test", optional, default: test)

### AssessmentSettledV1

``data.object`` of ``digitisation.assessment.settled``: it finished.

- `id` (string, required)
- `status` (enum, required)
  - Allowed values: `succeeded`, `failed`, `cancelled`
- `object` ("digitisation.assessment", optional, default: digitisation.assessment)

### CandidateReviewedV1

``data.object`` of ``digitisation.candidate.reviewed``: accepted or rejected.

- `id` (string, required)
- `review_status` (enum, required)
  - Allowed values: `accepted`, `rejected`
- `reviewed_by` (ReviewActor, required) — Who made a decision: ``user``, a person in the Platform, or ``api_key``. It names no person; the Platform shows who.
- `object` ("digitisation.candidate", optional, default: digitisation.candidate)

### RevisionStagedV1

``data.object`` of ``catalogue.revision.staged``: an accepted candidate is now an unpublished draft revision of ``variant_id``.

- `candidate_id` (string, required)
- `id` (string, required)
- `revision` (integer, required)
- `variant_id` (string, required)
- `object` ("digitisation.stage", optional, default: digitisation.stage)

### JobErrorV1

- `code` (enum, required)
  - Allowed values: `INPUT_UNPROCESSABLE`, `INPUT_EXPIRED`, `PROCESSING_FAILED`, `EXECUTION_ENVIRONMENT_UNAVAILABLE`
- `message` (string, required)

### JobInputRef

One input as a job reports it: an open role and a tolerant shape.

- `asset_id` (string, required)
- `role` (string, required)

### JobV1Output

- `type`: `hair.try_on` (HairTryOnOutput)
  - `applied` (HairTryOnApplied, required)
  - `image` (ResultAsset, required) — One named part of a job output, served through the V1 asset content route.
  - `revision` (integer, optional, default: 1)
- `type`: `makeup.try_on` (MakeupTryOnOutput)
  - `image` (ResultAsset, required) — One named part of a job output, served through the V1 asset content route.
  - `revision` (integer, optional, default: 1)
- `type`: `skin.analysis` (SkinAnalysisOutput)
  - `concerns` (list of SkinConcernResult, required)
  - `analysis_version` (string, optional, default: skin-2026-09-draft.1)
  - `visualizations` (list of ResultAsset, optional, default: [])

### MakeupResolution

`JobV1.resolution`: how a job's custom applications were resolved. Fixed at admission, so an exact retry and every later read answer the profile versions the job was admitted under, whatever the declaration says now.

- `applications` (list of MakeupResolvedApplication, required)
- `look` (MakeupResolutionLook, optional) — The catalogue look revision a look request expanded (P3 F3.2).
- `purpose` ("preview", optional)
- `target` (MakeupResolutionTarget, optional) — The exact catalogue revision a preview rendered (P3 F3.3; F0.2 §8): the revision's identity and the digest of what was authored at it.

### ReviewActor

Who made a decision: ``user``, a person in the Platform, or ``api_key``. It names no person; the Platform shows who.

- `type` (enum, required)
  - Allowed values: `user`, `api_key`

### HairTryOnApplied

- `color_gradient` (HairAppliedColorGradient, required)

### ResultAsset

One named part of a job output, served through the V1 asset content route.

- `expires_at` (datetime, required)
- `href` (string, required)
- `id` (string, required)
- `media_type` (enum, required)
  - Allowed values: `image/png`, `image/webp`
- `role` (string, required)
- `size_bytes` (integer, required)
- `height` (integer, optional, nullable)
- `width` (integer, optional, nullable)

### SkinConcernResult

- `concern` (enum, required)
  - Allowed values: `acne`, `dark_circle`, `eye_bag`, `redness`, `oiliness`, `wrinkles`, `firmness`, `moisture`, `pore`, `tear_trough`, `hyper_pigmentation`, `droopy_upper_eyelid`
- `score` (double, required, nullable)
- `status` (enum, required)
  - Allowed values: `measured`, `unavailable`
- `unavailable_reason` (enum, required, nullable)
  - Allowed values: `not_measured`, `not_measurable`

### MakeupResolvedApplication

What one custom application was resolved as (P1.5 §9): the profile, the shade and the options with their defaults filled. The explicit product it compiled to is internal (the job's admitted plan) and never published.

- `category` (enum, required) — Public makeup categories enabled in the V1 draft, in native type order.
  - Allowed values: `foundation`, `blush`, `contour`, `eyeshadow`, `eyeliner`, `highlighter`, `mascara`, `lipstick`, `lip_liner`, `concealer`, `bronzer`
- `color` (string, required)
- `index` (integer, required)
- `options` (map from string to string, required)
- `profile` (MakeupResolutionProfile, required) — The profile version a custom application resolved under.
- `components` (map from string to map from string to string, optional)
- `design` (MakeupResolutionDesign, optional) — The design version a profile implements (Foundation V1 D10).
- `placement` (string, optional)
- `variant` (MakeupResolutionVariant, optional) — The catalogue variant revision a variant application resolved as (P2.3).
- `warnings` (list of MakeupResolutionWarning, optional, default: [])

### MakeupResolutionLook

The catalogue look revision a look request expanded (P3 F3.2).

- `id` (string, required)
- `revision` (integer, required)

### MakeupResolutionTarget

The exact catalogue revision a preview rendered (P3 F3.3; F0.2 §8): the revision's identity and the digest of what was authored at it.

- `authored_intent_digest` (string, required)
- `id` (string, required)
- `kind` (enum, required)
  - Allowed values: `variant_revision`, `look_revision`
- `revision` (integer, required)

### HairAppliedColorGradient

- `dark` (HairAppliedColorStop, required)
- `light` (HairAppliedColorStop, required)

### MakeupResolutionProfile

The profile version a custom application resolved under.

- `digest` (string, required)
- `id` (string, required)
- `version` (integer, required)

### MakeupResolutionDesign

The design version a profile implements (Foundation V1 D10).

- `digest` (string, required)
- `id` (string, required)
- `version` (integer, required)

### MakeupResolutionVariant

The catalogue variant revision a variant application resolved as (P2.3).

- `id` (string, required)
- `revision` (integer, required)

### MakeupResolutionWarning

- `code` (string, required)
- `field` (string, required)

### HairAppliedColorStop

- `color` (string, required)
- `opacity` (double, required)