# `TryOnReport.reason`

> Contract 2.0.0 · package sha256 `a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e` · generated from `configurator-runtime.d.ts` by `services/onsite-scripter/scripts/build-contract-docs.mjs`; edit the source, not this file.

Property of [`TryOnReport`](TryOnReport.md) · labs, `@experimental` · since 2.0.0

```ts
readonly reason?: 'unavailable' | 'unsupported' | 'camera-denied' | 'needs-tap' | 'error' | 'other';
```

Present when [`launched`](TryOnReport.launched.md) is false: 'unavailable' ([`canTryOn()`](Session.canTryOn.md) says no), 'unsupported' (this
device, one without a camera, or a mode or UI not offered), 'camera-denied' (the camera was
refused and try-on closed on that), 'needs-tap' (called without the shopper's tap), 'error',
or 'other' (closed before the camera picture showed, [`endAR()`](Session.endAR.md)).

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `reason` names no product |
| 2. A precedent | not recorded: no ledger row (coverage.json) names this member or its owner |
| 3. Two apps, or labs | labs (`@experimental` at a stable path, reached through `has()` or `supports()`): it graduates when a second app uses it |
| 4. The cheaper fix first | not recorded per member (Appendix B decides it per need) |
