> ## Documentation Index
> Fetch the complete documentation index at: https://synapse-docs.apart.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Camera observation

> An optional, consented camera session analysed on the participant's device. Only numbers reach Synapse.

# Camera observation

The participant turns on their camera and carries on as normal for a couple of
minutes. Their browser measures what the camera sees: blinks, where they look,
head movement, mouth and smile, posture, and how active they are. It sends only
the numbers. Staff read them on the evaluation as context.

> [!WARNING]
>
> The numbers are descriptive. They never change the assessment score, and
> Synapse never labels them as emotions, personality, honesty or suitability.

## Turn it on

Set `SYNAPSE_OBSERVATION_ENABLED=true` on the API and on the web app. You can
restrict it to some apps with `SYNAPSE_OBSERVATION_APP_IDS`. To turn it off for
one experience, set `"observation": { "enabled": false }`. The same block sets
`target_seconds` (60–180), `min_seconds`, `prompt_text` and
`show_participant_results`.

## Participant API

The participant's own `spt_` token authenticates every call. The session
needs its own `camera_observation` consent; record it like any consent
event, using the notice from `getObservation()`.

```typescript theme={null}
const offer = await participant.getObservation();
await participant.sendEvents([{
  client_event_id: crypto.randomUUID(),
  type: "consent_accepted",
  occurred_at: new Date().toISOString(),
  metadata: { purpose: offer.consent.purpose, notice_version: offer.consent.notice_version },
}]);
await participant.startObservation();
// ... the browser analyses the camera and builds { summary, timeline, client } ...
const saved = await participant.finishObservation(numbers, undefined, `observation-${attemptId}`);
```

`finishObservation` refuses any field it doesn't know, and refuses a duration
longer than the session has actually been running. `discardObservation()`
deletes the numbers. Withdrawing the consent deletes them too.

## Read it as staff

```typescript theme={null}
const record = await synapse.evaluations.getObservation(organizationId, appId, environmentId, evaluationId);
record.summary?.eyes.blinks_per_min;
record.summary?.gaze.on_screen_pct;
record.timeline; // one row per analysed second
```

```python theme={null}
record = client.evaluations.get_observation(organization_id, app_id, environment_id, evaluation_id)
record.summary.head.nods
```

A 404 means the evaluation has no camera session.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.