v1-observation
Finish Participant Observation
Finish Participant Observation
curl --request POST \
--url https://api.example.com/v1/participant/observation/finish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"client": {
"models": [],
"engine": ""
},
"summary": {
"activity": {
"active_pct": 50,
"away_pct": 50,
"hidden_pct": 50,
"keys_per_min": 5000,
"mean_motion": 0.5,
"pointer_per_min": 5000,
"still_pct": 50
},
"analysed_s": 1800,
"body": {
"available": true,
"posture_shifts": 50000,
"fidget_energy": 5000,
"shoulder_tilt_deg": 0,
"uprightness_change_pct": 0
},
"calibration_s": 1800,
"duration_s": 1800,
"eyes": {
"blinks": 50000,
"blinks_per_min_by_third": [
5000
],
"long_closures": 50000,
"blinks_per_min": 5000,
"mean_blink_ms": 2500
},
"face": {
"brow_raises": 50000,
"mouth_open_events": 50000,
"smile_events": 50000,
"talking_like_s": 1800,
"expression_variability": 0.5,
"lip_press_pct": 50,
"mouth_open_pct": 50,
"smile_pct": 50
},
"fps": 120,
"frames": 500000,
"gaze": {
"heatmap": [
50
],
"longest_off_screen_s": 1800,
"off_screen_glances": 50000,
"fixation_spread_deg": 5000,
"mean_glance_s": 1800,
"on_screen_pct": 50,
"rapid_shifts_per_min": 5000
},
"hands": {
"available": true,
"face_touches": 50000,
"visible_pct": 50
},
"head": {
"longest_still_s": 1800,
"nods": 50000,
"shakes": 50000,
"mean_speed_deg_s": 5000,
"pitch": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"roll": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"yaw": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
}
},
"lighting": {
"mean_brightness": 0.5
},
"metrics_version": 1,
"presence": {
"face_pct": 50,
"longest_absence_s": 1800,
"multiple_faces_s": 1800,
"distance_variability_pct": 5000,
"lean_change_pct": 0
},
"quality_reasons": [
"<string>"
]
},
"timeline": [
{
"blinks": 10,
"face_pct": 50,
"head_speed": 5000,
"keys": 500,
"motion": 0.5,
"mouth_open_pct": 50,
"on_screen_pct": 50,
"pointer": 5000,
"s": 1800,
"smile_pct": 50
}
]
}
'import requests
url = "https://api.example.com/v1/participant/observation/finish"
payload = {
"client": {
"models": [],
"engine": ""
},
"summary": {
"activity": {
"active_pct": 50,
"away_pct": 50,
"hidden_pct": 50,
"keys_per_min": 5000,
"mean_motion": 0.5,
"pointer_per_min": 5000,
"still_pct": 50
},
"analysed_s": 1800,
"body": {
"available": True,
"posture_shifts": 50000,
"fidget_energy": 5000,
"shoulder_tilt_deg": 0,
"uprightness_change_pct": 0
},
"calibration_s": 1800,
"duration_s": 1800,
"eyes": {
"blinks": 50000,
"blinks_per_min_by_third": [5000],
"long_closures": 50000,
"blinks_per_min": 5000,
"mean_blink_ms": 2500
},
"face": {
"brow_raises": 50000,
"mouth_open_events": 50000,
"smile_events": 50000,
"talking_like_s": 1800,
"expression_variability": 0.5,
"lip_press_pct": 50,
"mouth_open_pct": 50,
"smile_pct": 50
},
"fps": 120,
"frames": 500000,
"gaze": {
"heatmap": [50],
"longest_off_screen_s": 1800,
"off_screen_glances": 50000,
"fixation_spread_deg": 5000,
"mean_glance_s": 1800,
"on_screen_pct": 50,
"rapid_shifts_per_min": 5000
},
"hands": {
"available": True,
"face_touches": 50000,
"visible_pct": 50
},
"head": {
"longest_still_s": 1800,
"nods": 50000,
"shakes": 50000,
"mean_speed_deg_s": 5000,
"pitch": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"roll": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"yaw": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
}
},
"lighting": { "mean_brightness": 0.5 },
"metrics_version": 1,
"presence": {
"face_pct": 50,
"longest_absence_s": 1800,
"multiple_faces_s": 1800,
"distance_variability_pct": 5000,
"lean_change_pct": 0
},
"quality_reasons": ["<string>"]
},
"timeline": [
{
"blinks": 10,
"face_pct": 50,
"head_speed": 5000,
"keys": 500,
"motion": 0.5,
"mouth_open_pct": 50,
"on_screen_pct": 50,
"pointer": 5000,
"s": 1800,
"smile_pct": 50
}
]
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
client: {models: [], engine: ''},
summary: {
activity: {
active_pct: 50,
away_pct: 50,
hidden_pct: 50,
keys_per_min: 5000,
mean_motion: 0.5,
pointer_per_min: 5000,
still_pct: 50
},
analysed_s: 1800,
body: JSON.stringify({
available: true,
posture_shifts: 50000,
fidget_energy: 5000,
shoulder_tilt_deg: 0,
uprightness_change_pct: 0
}),
calibration_s: 1800,
duration_s: 1800,
eyes: {
blinks: 50000,
blinks_per_min_by_third: [5000],
long_closures: 50000,
blinks_per_min: 5000,
mean_blink_ms: 2500
},
face: {
brow_raises: 50000,
mouth_open_events: 50000,
smile_events: 50000,
talking_like_s: 1800,
expression_variability: 0.5,
lip_press_pct: 50,
mouth_open_pct: 50,
smile_pct: 50
},
fps: 120,
frames: 500000,
gaze: {
heatmap: [50],
longest_off_screen_s: 1800,
off_screen_glances: 50000,
fixation_spread_deg: 5000,
mean_glance_s: 1800,
on_screen_pct: 50,
rapid_shifts_per_min: 5000
},
hands: {available: true, face_touches: 50000, visible_pct: 50},
head: {
longest_still_s: 1800,
nods: 50000,
shakes: 50000,
mean_speed_deg_s: 5000,
pitch: {max: 0, mean: 0, min: 0, sd: 180},
roll: {max: 0, mean: 0, min: 0, sd: 180},
yaw: {max: 0, mean: 0, min: 0, sd: 180}
},
lighting: {mean_brightness: 0.5},
metrics_version: 1,
presence: {
face_pct: 50,
longest_absence_s: 1800,
multiple_faces_s: 1800,
distance_variability_pct: 5000,
lean_change_pct: 0
},
quality_reasons: ['<string>']
},
timeline: [
{
blinks: 10,
face_pct: 50,
head_speed: 5000,
keys: 500,
motion: 0.5,
mouth_open_pct: 50,
on_screen_pct: 50,
pointer: 5000,
s: 1800,
smile_pct: 50
}
]
})
};
fetch('https://api.example.com/v1/participant/observation/finish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/participant/observation/finish",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'client' => [
'models' => [
],
'engine' => ''
],
'summary' => [
'activity' => [
'active_pct' => 50,
'away_pct' => 50,
'hidden_pct' => 50,
'keys_per_min' => 5000,
'mean_motion' => 0.5,
'pointer_per_min' => 5000,
'still_pct' => 50
],
'analysed_s' => 1800,
'body' => [
'available' => true,
'posture_shifts' => 50000,
'fidget_energy' => 5000,
'shoulder_tilt_deg' => 0,
'uprightness_change_pct' => 0
],
'calibration_s' => 1800,
'duration_s' => 1800,
'eyes' => [
'blinks' => 50000,
'blinks_per_min_by_third' => [
5000
],
'long_closures' => 50000,
'blinks_per_min' => 5000,
'mean_blink_ms' => 2500
],
'face' => [
'brow_raises' => 50000,
'mouth_open_events' => 50000,
'smile_events' => 50000,
'talking_like_s' => 1800,
'expression_variability' => 0.5,
'lip_press_pct' => 50,
'mouth_open_pct' => 50,
'smile_pct' => 50
],
'fps' => 120,
'frames' => 500000,
'gaze' => [
'heatmap' => [
50
],
'longest_off_screen_s' => 1800,
'off_screen_glances' => 50000,
'fixation_spread_deg' => 5000,
'mean_glance_s' => 1800,
'on_screen_pct' => 50,
'rapid_shifts_per_min' => 5000
],
'hands' => [
'available' => true,
'face_touches' => 50000,
'visible_pct' => 50
],
'head' => [
'longest_still_s' => 1800,
'nods' => 50000,
'shakes' => 50000,
'mean_speed_deg_s' => 5000,
'pitch' => [
'max' => 0,
'mean' => 0,
'min' => 0,
'sd' => 180
],
'roll' => [
'max' => 0,
'mean' => 0,
'min' => 0,
'sd' => 180
],
'yaw' => [
'max' => 0,
'mean' => 0,
'min' => 0,
'sd' => 180
]
],
'lighting' => [
'mean_brightness' => 0.5
],
'metrics_version' => 1,
'presence' => [
'face_pct' => 50,
'longest_absence_s' => 1800,
'multiple_faces_s' => 1800,
'distance_variability_pct' => 5000,
'lean_change_pct' => 0
],
'quality_reasons' => [
'<string>'
]
],
'timeline' => [
[
'blinks' => 10,
'face_pct' => 50,
'head_speed' => 5000,
'keys' => 500,
'motion' => 0.5,
'mouth_open_pct' => 50,
'on_screen_pct' => 50,
'pointer' => 5000,
's' => 1800,
'smile_pct' => 50
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/participant/observation/finish"
payload := strings.NewReader("{\n \"client\": {\n \"models\": [],\n \"engine\": \"\"\n },\n \"summary\": {\n \"activity\": {\n \"active_pct\": 50,\n \"away_pct\": 50,\n \"hidden_pct\": 50,\n \"keys_per_min\": 5000,\n \"mean_motion\": 0.5,\n \"pointer_per_min\": 5000,\n \"still_pct\": 50\n },\n \"analysed_s\": 1800,\n \"body\": {\n \"available\": true,\n \"posture_shifts\": 50000,\n \"fidget_energy\": 5000,\n \"shoulder_tilt_deg\": 0,\n \"uprightness_change_pct\": 0\n },\n \"calibration_s\": 1800,\n \"duration_s\": 1800,\n \"eyes\": {\n \"blinks\": 50000,\n \"blinks_per_min_by_third\": [\n 5000\n ],\n \"long_closures\": 50000,\n \"blinks_per_min\": 5000,\n \"mean_blink_ms\": 2500\n },\n \"face\": {\n \"brow_raises\": 50000,\n \"mouth_open_events\": 50000,\n \"smile_events\": 50000,\n \"talking_like_s\": 1800,\n \"expression_variability\": 0.5,\n \"lip_press_pct\": 50,\n \"mouth_open_pct\": 50,\n \"smile_pct\": 50\n },\n \"fps\": 120,\n \"frames\": 500000,\n \"gaze\": {\n \"heatmap\": [\n 50\n ],\n \"longest_off_screen_s\": 1800,\n \"off_screen_glances\": 50000,\n \"fixation_spread_deg\": 5000,\n \"mean_glance_s\": 1800,\n \"on_screen_pct\": 50,\n \"rapid_shifts_per_min\": 5000\n },\n \"hands\": {\n \"available\": true,\n \"face_touches\": 50000,\n \"visible_pct\": 50\n },\n \"head\": {\n \"longest_still_s\": 1800,\n \"nods\": 50000,\n \"shakes\": 50000,\n \"mean_speed_deg_s\": 5000,\n \"pitch\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"roll\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"yaw\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n }\n },\n \"lighting\": {\n \"mean_brightness\": 0.5\n },\n \"metrics_version\": 1,\n \"presence\": {\n \"face_pct\": 50,\n \"longest_absence_s\": 1800,\n \"multiple_faces_s\": 1800,\n \"distance_variability_pct\": 5000,\n \"lean_change_pct\": 0\n },\n \"quality_reasons\": [\n \"<string>\"\n ]\n },\n \"timeline\": [\n {\n \"blinks\": 10,\n \"face_pct\": 50,\n \"head_speed\": 5000,\n \"keys\": 500,\n \"motion\": 0.5,\n \"mouth_open_pct\": 50,\n \"on_screen_pct\": 50,\n \"pointer\": 5000,\n \"s\": 1800,\n \"smile_pct\": 50\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/participant/observation/finish")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"client\": {\n \"models\": [],\n \"engine\": \"\"\n },\n \"summary\": {\n \"activity\": {\n \"active_pct\": 50,\n \"away_pct\": 50,\n \"hidden_pct\": 50,\n \"keys_per_min\": 5000,\n \"mean_motion\": 0.5,\n \"pointer_per_min\": 5000,\n \"still_pct\": 50\n },\n \"analysed_s\": 1800,\n \"body\": {\n \"available\": true,\n \"posture_shifts\": 50000,\n \"fidget_energy\": 5000,\n \"shoulder_tilt_deg\": 0,\n \"uprightness_change_pct\": 0\n },\n \"calibration_s\": 1800,\n \"duration_s\": 1800,\n \"eyes\": {\n \"blinks\": 50000,\n \"blinks_per_min_by_third\": [\n 5000\n ],\n \"long_closures\": 50000,\n \"blinks_per_min\": 5000,\n \"mean_blink_ms\": 2500\n },\n \"face\": {\n \"brow_raises\": 50000,\n \"mouth_open_events\": 50000,\n \"smile_events\": 50000,\n \"talking_like_s\": 1800,\n \"expression_variability\": 0.5,\n \"lip_press_pct\": 50,\n \"mouth_open_pct\": 50,\n \"smile_pct\": 50\n },\n \"fps\": 120,\n \"frames\": 500000,\n \"gaze\": {\n \"heatmap\": [\n 50\n ],\n \"longest_off_screen_s\": 1800,\n \"off_screen_glances\": 50000,\n \"fixation_spread_deg\": 5000,\n \"mean_glance_s\": 1800,\n \"on_screen_pct\": 50,\n \"rapid_shifts_per_min\": 5000\n },\n \"hands\": {\n \"available\": true,\n \"face_touches\": 50000,\n \"visible_pct\": 50\n },\n \"head\": {\n \"longest_still_s\": 1800,\n \"nods\": 50000,\n \"shakes\": 50000,\n \"mean_speed_deg_s\": 5000,\n \"pitch\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"roll\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"yaw\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n }\n },\n \"lighting\": {\n \"mean_brightness\": 0.5\n },\n \"metrics_version\": 1,\n \"presence\": {\n \"face_pct\": 50,\n \"longest_absence_s\": 1800,\n \"multiple_faces_s\": 1800,\n \"distance_variability_pct\": 5000,\n \"lean_change_pct\": 0\n },\n \"quality_reasons\": [\n \"<string>\"\n ]\n },\n \"timeline\": [\n {\n \"blinks\": 10,\n \"face_pct\": 50,\n \"head_speed\": 5000,\n \"keys\": 500,\n \"motion\": 0.5,\n \"mouth_open_pct\": 50,\n \"on_screen_pct\": 50,\n \"pointer\": 5000,\n \"s\": 1800,\n \"smile_pct\": 50\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/participant/observation/finish")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"client\": {\n \"models\": [],\n \"engine\": \"\"\n },\n \"summary\": {\n \"activity\": {\n \"active_pct\": 50,\n \"away_pct\": 50,\n \"hidden_pct\": 50,\n \"keys_per_min\": 5000,\n \"mean_motion\": 0.5,\n \"pointer_per_min\": 5000,\n \"still_pct\": 50\n },\n \"analysed_s\": 1800,\n \"body\": {\n \"available\": true,\n \"posture_shifts\": 50000,\n \"fidget_energy\": 5000,\n \"shoulder_tilt_deg\": 0,\n \"uprightness_change_pct\": 0\n },\n \"calibration_s\": 1800,\n \"duration_s\": 1800,\n \"eyes\": {\n \"blinks\": 50000,\n \"blinks_per_min_by_third\": [\n 5000\n ],\n \"long_closures\": 50000,\n \"blinks_per_min\": 5000,\n \"mean_blink_ms\": 2500\n },\n \"face\": {\n \"brow_raises\": 50000,\n \"mouth_open_events\": 50000,\n \"smile_events\": 50000,\n \"talking_like_s\": 1800,\n \"expression_variability\": 0.5,\n \"lip_press_pct\": 50,\n \"mouth_open_pct\": 50,\n \"smile_pct\": 50\n },\n \"fps\": 120,\n \"frames\": 500000,\n \"gaze\": {\n \"heatmap\": [\n 50\n ],\n \"longest_off_screen_s\": 1800,\n \"off_screen_glances\": 50000,\n \"fixation_spread_deg\": 5000,\n \"mean_glance_s\": 1800,\n \"on_screen_pct\": 50,\n \"rapid_shifts_per_min\": 5000\n },\n \"hands\": {\n \"available\": true,\n \"face_touches\": 50000,\n \"visible_pct\": 50\n },\n \"head\": {\n \"longest_still_s\": 1800,\n \"nods\": 50000,\n \"shakes\": 50000,\n \"mean_speed_deg_s\": 5000,\n \"pitch\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"roll\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"yaw\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n }\n },\n \"lighting\": {\n \"mean_brightness\": 0.5\n },\n \"metrics_version\": 1,\n \"presence\": {\n \"face_pct\": 50,\n \"longest_absence_s\": 1800,\n \"multiple_faces_s\": 1800,\n \"distance_variability_pct\": 5000,\n \"lean_change_pct\": 0\n },\n \"quality_reasons\": [\n \"<string>\"\n ]\n },\n \"timeline\": [\n {\n \"blinks\": 10,\n \"face_pct\": 50,\n \"head_speed\": 5000,\n \"keys\": 500,\n \"motion\": 0.5,\n \"mouth_open_pct\": 50,\n \"on_screen_pct\": 50,\n \"pointer\": 5000,\n \"s\": 1800,\n \"smile_pct\": 50\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"available": true,
"consent": {
"notice_text": "<string>",
"notice_version": "<string>",
"purpose": "<string>"
},
"consented": true,
"min_seconds": 123,
"prompt_text": "<string>",
"show_participant_results": true,
"status": "not_started",
"target_seconds": 123,
"summary": {
"activity": {
"active_pct": 50,
"away_pct": 50,
"hidden_pct": 50,
"keys_per_min": 5000,
"mean_motion": 0.5,
"pointer_per_min": 5000,
"still_pct": 50
},
"analysed_s": 1800,
"body": {
"available": true,
"posture_shifts": 50000,
"fidget_energy": 5000,
"shoulder_tilt_deg": 0,
"uprightness_change_pct": 0
},
"calibration_s": 1800,
"duration_s": 1800,
"eyes": {
"blinks": 50000,
"blinks_per_min_by_third": [
5000
],
"long_closures": 50000,
"blinks_per_min": 5000,
"mean_blink_ms": 2500
},
"face": {
"brow_raises": 50000,
"mouth_open_events": 50000,
"smile_events": 50000,
"talking_like_s": 1800,
"expression_variability": 0.5,
"lip_press_pct": 50,
"mouth_open_pct": 50,
"smile_pct": 50
},
"fps": 120,
"frames": 500000,
"gaze": {
"heatmap": [
50
],
"longest_off_screen_s": 1800,
"off_screen_glances": 50000,
"fixation_spread_deg": 5000,
"mean_glance_s": 1800,
"on_screen_pct": 50,
"rapid_shifts_per_min": 5000
},
"hands": {
"available": true,
"face_touches": 50000,
"visible_pct": 50
},
"head": {
"longest_still_s": 1800,
"nods": 50000,
"shakes": 50000,
"mean_speed_deg_s": 5000,
"pitch": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"roll": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"yaw": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
}
},
"lighting": {
"label": "dark",
"mean_brightness": 0.5
},
"metrics_version": 1,
"presence": {
"face_pct": 50,
"longest_absence_s": 1800,
"multiple_faces_s": 1800,
"distance_variability_pct": 5000,
"lean_change_pct": 0
},
"quality": "good",
"quality_reasons": [
"<string>"
]
},
"timeline": [
{
"blinks": 10,
"face_pct": 50,
"head_speed": 5000,
"keys": 500,
"motion": 0.5,
"mouth_open_pct": 50,
"on_screen_pct": 50,
"pointer": 5000,
"s": 1800,
"smile_pct": 50,
"state": "active"
}
],
"unavailable_reason": "embedded"
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}Authorizations
Short-lived token bound to one participant session.
Headers
Required string length:
1 - 255Body
application/json
What ran on the device; never a user agent string or device identifier.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Maximum array length:
240Show child attributes
Show child attributes
Response
Successful Response
Whether the camera session is offered, and where it stands.
Show child attributes
Show child attributes
Available options:
not_started, active, completed Show child attributes
Show child attributes
Show child attributes
Show child attributes
Available options:
embedded, closed ⌘I
Finish Participant Observation
curl --request POST \
--url https://api.example.com/v1/participant/observation/finish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"client": {
"models": [],
"engine": ""
},
"summary": {
"activity": {
"active_pct": 50,
"away_pct": 50,
"hidden_pct": 50,
"keys_per_min": 5000,
"mean_motion": 0.5,
"pointer_per_min": 5000,
"still_pct": 50
},
"analysed_s": 1800,
"body": {
"available": true,
"posture_shifts": 50000,
"fidget_energy": 5000,
"shoulder_tilt_deg": 0,
"uprightness_change_pct": 0
},
"calibration_s": 1800,
"duration_s": 1800,
"eyes": {
"blinks": 50000,
"blinks_per_min_by_third": [
5000
],
"long_closures": 50000,
"blinks_per_min": 5000,
"mean_blink_ms": 2500
},
"face": {
"brow_raises": 50000,
"mouth_open_events": 50000,
"smile_events": 50000,
"talking_like_s": 1800,
"expression_variability": 0.5,
"lip_press_pct": 50,
"mouth_open_pct": 50,
"smile_pct": 50
},
"fps": 120,
"frames": 500000,
"gaze": {
"heatmap": [
50
],
"longest_off_screen_s": 1800,
"off_screen_glances": 50000,
"fixation_spread_deg": 5000,
"mean_glance_s": 1800,
"on_screen_pct": 50,
"rapid_shifts_per_min": 5000
},
"hands": {
"available": true,
"face_touches": 50000,
"visible_pct": 50
},
"head": {
"longest_still_s": 1800,
"nods": 50000,
"shakes": 50000,
"mean_speed_deg_s": 5000,
"pitch": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"roll": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"yaw": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
}
},
"lighting": {
"mean_brightness": 0.5
},
"metrics_version": 1,
"presence": {
"face_pct": 50,
"longest_absence_s": 1800,
"multiple_faces_s": 1800,
"distance_variability_pct": 5000,
"lean_change_pct": 0
},
"quality_reasons": [
"<string>"
]
},
"timeline": [
{
"blinks": 10,
"face_pct": 50,
"head_speed": 5000,
"keys": 500,
"motion": 0.5,
"mouth_open_pct": 50,
"on_screen_pct": 50,
"pointer": 5000,
"s": 1800,
"smile_pct": 50
}
]
}
'import requests
url = "https://api.example.com/v1/participant/observation/finish"
payload = {
"client": {
"models": [],
"engine": ""
},
"summary": {
"activity": {
"active_pct": 50,
"away_pct": 50,
"hidden_pct": 50,
"keys_per_min": 5000,
"mean_motion": 0.5,
"pointer_per_min": 5000,
"still_pct": 50
},
"analysed_s": 1800,
"body": {
"available": True,
"posture_shifts": 50000,
"fidget_energy": 5000,
"shoulder_tilt_deg": 0,
"uprightness_change_pct": 0
},
"calibration_s": 1800,
"duration_s": 1800,
"eyes": {
"blinks": 50000,
"blinks_per_min_by_third": [5000],
"long_closures": 50000,
"blinks_per_min": 5000,
"mean_blink_ms": 2500
},
"face": {
"brow_raises": 50000,
"mouth_open_events": 50000,
"smile_events": 50000,
"talking_like_s": 1800,
"expression_variability": 0.5,
"lip_press_pct": 50,
"mouth_open_pct": 50,
"smile_pct": 50
},
"fps": 120,
"frames": 500000,
"gaze": {
"heatmap": [50],
"longest_off_screen_s": 1800,
"off_screen_glances": 50000,
"fixation_spread_deg": 5000,
"mean_glance_s": 1800,
"on_screen_pct": 50,
"rapid_shifts_per_min": 5000
},
"hands": {
"available": True,
"face_touches": 50000,
"visible_pct": 50
},
"head": {
"longest_still_s": 1800,
"nods": 50000,
"shakes": 50000,
"mean_speed_deg_s": 5000,
"pitch": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"roll": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"yaw": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
}
},
"lighting": { "mean_brightness": 0.5 },
"metrics_version": 1,
"presence": {
"face_pct": 50,
"longest_absence_s": 1800,
"multiple_faces_s": 1800,
"distance_variability_pct": 5000,
"lean_change_pct": 0
},
"quality_reasons": ["<string>"]
},
"timeline": [
{
"blinks": 10,
"face_pct": 50,
"head_speed": 5000,
"keys": 500,
"motion": 0.5,
"mouth_open_pct": 50,
"on_screen_pct": 50,
"pointer": 5000,
"s": 1800,
"smile_pct": 50
}
]
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
client: {models: [], engine: ''},
summary: {
activity: {
active_pct: 50,
away_pct: 50,
hidden_pct: 50,
keys_per_min: 5000,
mean_motion: 0.5,
pointer_per_min: 5000,
still_pct: 50
},
analysed_s: 1800,
body: JSON.stringify({
available: true,
posture_shifts: 50000,
fidget_energy: 5000,
shoulder_tilt_deg: 0,
uprightness_change_pct: 0
}),
calibration_s: 1800,
duration_s: 1800,
eyes: {
blinks: 50000,
blinks_per_min_by_third: [5000],
long_closures: 50000,
blinks_per_min: 5000,
mean_blink_ms: 2500
},
face: {
brow_raises: 50000,
mouth_open_events: 50000,
smile_events: 50000,
talking_like_s: 1800,
expression_variability: 0.5,
lip_press_pct: 50,
mouth_open_pct: 50,
smile_pct: 50
},
fps: 120,
frames: 500000,
gaze: {
heatmap: [50],
longest_off_screen_s: 1800,
off_screen_glances: 50000,
fixation_spread_deg: 5000,
mean_glance_s: 1800,
on_screen_pct: 50,
rapid_shifts_per_min: 5000
},
hands: {available: true, face_touches: 50000, visible_pct: 50},
head: {
longest_still_s: 1800,
nods: 50000,
shakes: 50000,
mean_speed_deg_s: 5000,
pitch: {max: 0, mean: 0, min: 0, sd: 180},
roll: {max: 0, mean: 0, min: 0, sd: 180},
yaw: {max: 0, mean: 0, min: 0, sd: 180}
},
lighting: {mean_brightness: 0.5},
metrics_version: 1,
presence: {
face_pct: 50,
longest_absence_s: 1800,
multiple_faces_s: 1800,
distance_variability_pct: 5000,
lean_change_pct: 0
},
quality_reasons: ['<string>']
},
timeline: [
{
blinks: 10,
face_pct: 50,
head_speed: 5000,
keys: 500,
motion: 0.5,
mouth_open_pct: 50,
on_screen_pct: 50,
pointer: 5000,
s: 1800,
smile_pct: 50
}
]
})
};
fetch('https://api.example.com/v1/participant/observation/finish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/participant/observation/finish",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'client' => [
'models' => [
],
'engine' => ''
],
'summary' => [
'activity' => [
'active_pct' => 50,
'away_pct' => 50,
'hidden_pct' => 50,
'keys_per_min' => 5000,
'mean_motion' => 0.5,
'pointer_per_min' => 5000,
'still_pct' => 50
],
'analysed_s' => 1800,
'body' => [
'available' => true,
'posture_shifts' => 50000,
'fidget_energy' => 5000,
'shoulder_tilt_deg' => 0,
'uprightness_change_pct' => 0
],
'calibration_s' => 1800,
'duration_s' => 1800,
'eyes' => [
'blinks' => 50000,
'blinks_per_min_by_third' => [
5000
],
'long_closures' => 50000,
'blinks_per_min' => 5000,
'mean_blink_ms' => 2500
],
'face' => [
'brow_raises' => 50000,
'mouth_open_events' => 50000,
'smile_events' => 50000,
'talking_like_s' => 1800,
'expression_variability' => 0.5,
'lip_press_pct' => 50,
'mouth_open_pct' => 50,
'smile_pct' => 50
],
'fps' => 120,
'frames' => 500000,
'gaze' => [
'heatmap' => [
50
],
'longest_off_screen_s' => 1800,
'off_screen_glances' => 50000,
'fixation_spread_deg' => 5000,
'mean_glance_s' => 1800,
'on_screen_pct' => 50,
'rapid_shifts_per_min' => 5000
],
'hands' => [
'available' => true,
'face_touches' => 50000,
'visible_pct' => 50
],
'head' => [
'longest_still_s' => 1800,
'nods' => 50000,
'shakes' => 50000,
'mean_speed_deg_s' => 5000,
'pitch' => [
'max' => 0,
'mean' => 0,
'min' => 0,
'sd' => 180
],
'roll' => [
'max' => 0,
'mean' => 0,
'min' => 0,
'sd' => 180
],
'yaw' => [
'max' => 0,
'mean' => 0,
'min' => 0,
'sd' => 180
]
],
'lighting' => [
'mean_brightness' => 0.5
],
'metrics_version' => 1,
'presence' => [
'face_pct' => 50,
'longest_absence_s' => 1800,
'multiple_faces_s' => 1800,
'distance_variability_pct' => 5000,
'lean_change_pct' => 0
],
'quality_reasons' => [
'<string>'
]
],
'timeline' => [
[
'blinks' => 10,
'face_pct' => 50,
'head_speed' => 5000,
'keys' => 500,
'motion' => 0.5,
'mouth_open_pct' => 50,
'on_screen_pct' => 50,
'pointer' => 5000,
's' => 1800,
'smile_pct' => 50
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/participant/observation/finish"
payload := strings.NewReader("{\n \"client\": {\n \"models\": [],\n \"engine\": \"\"\n },\n \"summary\": {\n \"activity\": {\n \"active_pct\": 50,\n \"away_pct\": 50,\n \"hidden_pct\": 50,\n \"keys_per_min\": 5000,\n \"mean_motion\": 0.5,\n \"pointer_per_min\": 5000,\n \"still_pct\": 50\n },\n \"analysed_s\": 1800,\n \"body\": {\n \"available\": true,\n \"posture_shifts\": 50000,\n \"fidget_energy\": 5000,\n \"shoulder_tilt_deg\": 0,\n \"uprightness_change_pct\": 0\n },\n \"calibration_s\": 1800,\n \"duration_s\": 1800,\n \"eyes\": {\n \"blinks\": 50000,\n \"blinks_per_min_by_third\": [\n 5000\n ],\n \"long_closures\": 50000,\n \"blinks_per_min\": 5000,\n \"mean_blink_ms\": 2500\n },\n \"face\": {\n \"brow_raises\": 50000,\n \"mouth_open_events\": 50000,\n \"smile_events\": 50000,\n \"talking_like_s\": 1800,\n \"expression_variability\": 0.5,\n \"lip_press_pct\": 50,\n \"mouth_open_pct\": 50,\n \"smile_pct\": 50\n },\n \"fps\": 120,\n \"frames\": 500000,\n \"gaze\": {\n \"heatmap\": [\n 50\n ],\n \"longest_off_screen_s\": 1800,\n \"off_screen_glances\": 50000,\n \"fixation_spread_deg\": 5000,\n \"mean_glance_s\": 1800,\n \"on_screen_pct\": 50,\n \"rapid_shifts_per_min\": 5000\n },\n \"hands\": {\n \"available\": true,\n \"face_touches\": 50000,\n \"visible_pct\": 50\n },\n \"head\": {\n \"longest_still_s\": 1800,\n \"nods\": 50000,\n \"shakes\": 50000,\n \"mean_speed_deg_s\": 5000,\n \"pitch\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"roll\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"yaw\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n }\n },\n \"lighting\": {\n \"mean_brightness\": 0.5\n },\n \"metrics_version\": 1,\n \"presence\": {\n \"face_pct\": 50,\n \"longest_absence_s\": 1800,\n \"multiple_faces_s\": 1800,\n \"distance_variability_pct\": 5000,\n \"lean_change_pct\": 0\n },\n \"quality_reasons\": [\n \"<string>\"\n ]\n },\n \"timeline\": [\n {\n \"blinks\": 10,\n \"face_pct\": 50,\n \"head_speed\": 5000,\n \"keys\": 500,\n \"motion\": 0.5,\n \"mouth_open_pct\": 50,\n \"on_screen_pct\": 50,\n \"pointer\": 5000,\n \"s\": 1800,\n \"smile_pct\": 50\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/participant/observation/finish")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"client\": {\n \"models\": [],\n \"engine\": \"\"\n },\n \"summary\": {\n \"activity\": {\n \"active_pct\": 50,\n \"away_pct\": 50,\n \"hidden_pct\": 50,\n \"keys_per_min\": 5000,\n \"mean_motion\": 0.5,\n \"pointer_per_min\": 5000,\n \"still_pct\": 50\n },\n \"analysed_s\": 1800,\n \"body\": {\n \"available\": true,\n \"posture_shifts\": 50000,\n \"fidget_energy\": 5000,\n \"shoulder_tilt_deg\": 0,\n \"uprightness_change_pct\": 0\n },\n \"calibration_s\": 1800,\n \"duration_s\": 1800,\n \"eyes\": {\n \"blinks\": 50000,\n \"blinks_per_min_by_third\": [\n 5000\n ],\n \"long_closures\": 50000,\n \"blinks_per_min\": 5000,\n \"mean_blink_ms\": 2500\n },\n \"face\": {\n \"brow_raises\": 50000,\n \"mouth_open_events\": 50000,\n \"smile_events\": 50000,\n \"talking_like_s\": 1800,\n \"expression_variability\": 0.5,\n \"lip_press_pct\": 50,\n \"mouth_open_pct\": 50,\n \"smile_pct\": 50\n },\n \"fps\": 120,\n \"frames\": 500000,\n \"gaze\": {\n \"heatmap\": [\n 50\n ],\n \"longest_off_screen_s\": 1800,\n \"off_screen_glances\": 50000,\n \"fixation_spread_deg\": 5000,\n \"mean_glance_s\": 1800,\n \"on_screen_pct\": 50,\n \"rapid_shifts_per_min\": 5000\n },\n \"hands\": {\n \"available\": true,\n \"face_touches\": 50000,\n \"visible_pct\": 50\n },\n \"head\": {\n \"longest_still_s\": 1800,\n \"nods\": 50000,\n \"shakes\": 50000,\n \"mean_speed_deg_s\": 5000,\n \"pitch\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"roll\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"yaw\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n }\n },\n \"lighting\": {\n \"mean_brightness\": 0.5\n },\n \"metrics_version\": 1,\n \"presence\": {\n \"face_pct\": 50,\n \"longest_absence_s\": 1800,\n \"multiple_faces_s\": 1800,\n \"distance_variability_pct\": 5000,\n \"lean_change_pct\": 0\n },\n \"quality_reasons\": [\n \"<string>\"\n ]\n },\n \"timeline\": [\n {\n \"blinks\": 10,\n \"face_pct\": 50,\n \"head_speed\": 5000,\n \"keys\": 500,\n \"motion\": 0.5,\n \"mouth_open_pct\": 50,\n \"on_screen_pct\": 50,\n \"pointer\": 5000,\n \"s\": 1800,\n \"smile_pct\": 50\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/participant/observation/finish")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"client\": {\n \"models\": [],\n \"engine\": \"\"\n },\n \"summary\": {\n \"activity\": {\n \"active_pct\": 50,\n \"away_pct\": 50,\n \"hidden_pct\": 50,\n \"keys_per_min\": 5000,\n \"mean_motion\": 0.5,\n \"pointer_per_min\": 5000,\n \"still_pct\": 50\n },\n \"analysed_s\": 1800,\n \"body\": {\n \"available\": true,\n \"posture_shifts\": 50000,\n \"fidget_energy\": 5000,\n \"shoulder_tilt_deg\": 0,\n \"uprightness_change_pct\": 0\n },\n \"calibration_s\": 1800,\n \"duration_s\": 1800,\n \"eyes\": {\n \"blinks\": 50000,\n \"blinks_per_min_by_third\": [\n 5000\n ],\n \"long_closures\": 50000,\n \"blinks_per_min\": 5000,\n \"mean_blink_ms\": 2500\n },\n \"face\": {\n \"brow_raises\": 50000,\n \"mouth_open_events\": 50000,\n \"smile_events\": 50000,\n \"talking_like_s\": 1800,\n \"expression_variability\": 0.5,\n \"lip_press_pct\": 50,\n \"mouth_open_pct\": 50,\n \"smile_pct\": 50\n },\n \"fps\": 120,\n \"frames\": 500000,\n \"gaze\": {\n \"heatmap\": [\n 50\n ],\n \"longest_off_screen_s\": 1800,\n \"off_screen_glances\": 50000,\n \"fixation_spread_deg\": 5000,\n \"mean_glance_s\": 1800,\n \"on_screen_pct\": 50,\n \"rapid_shifts_per_min\": 5000\n },\n \"hands\": {\n \"available\": true,\n \"face_touches\": 50000,\n \"visible_pct\": 50\n },\n \"head\": {\n \"longest_still_s\": 1800,\n \"nods\": 50000,\n \"shakes\": 50000,\n \"mean_speed_deg_s\": 5000,\n \"pitch\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"roll\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n },\n \"yaw\": {\n \"max\": 0,\n \"mean\": 0,\n \"min\": 0,\n \"sd\": 180\n }\n },\n \"lighting\": {\n \"mean_brightness\": 0.5\n },\n \"metrics_version\": 1,\n \"presence\": {\n \"face_pct\": 50,\n \"longest_absence_s\": 1800,\n \"multiple_faces_s\": 1800,\n \"distance_variability_pct\": 5000,\n \"lean_change_pct\": 0\n },\n \"quality_reasons\": [\n \"<string>\"\n ]\n },\n \"timeline\": [\n {\n \"blinks\": 10,\n \"face_pct\": 50,\n \"head_speed\": 5000,\n \"keys\": 500,\n \"motion\": 0.5,\n \"mouth_open_pct\": 50,\n \"on_screen_pct\": 50,\n \"pointer\": 5000,\n \"s\": 1800,\n \"smile_pct\": 50\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"available": true,
"consent": {
"notice_text": "<string>",
"notice_version": "<string>",
"purpose": "<string>"
},
"consented": true,
"min_seconds": 123,
"prompt_text": "<string>",
"show_participant_results": true,
"status": "not_started",
"target_seconds": 123,
"summary": {
"activity": {
"active_pct": 50,
"away_pct": 50,
"hidden_pct": 50,
"keys_per_min": 5000,
"mean_motion": 0.5,
"pointer_per_min": 5000,
"still_pct": 50
},
"analysed_s": 1800,
"body": {
"available": true,
"posture_shifts": 50000,
"fidget_energy": 5000,
"shoulder_tilt_deg": 0,
"uprightness_change_pct": 0
},
"calibration_s": 1800,
"duration_s": 1800,
"eyes": {
"blinks": 50000,
"blinks_per_min_by_third": [
5000
],
"long_closures": 50000,
"blinks_per_min": 5000,
"mean_blink_ms": 2500
},
"face": {
"brow_raises": 50000,
"mouth_open_events": 50000,
"smile_events": 50000,
"talking_like_s": 1800,
"expression_variability": 0.5,
"lip_press_pct": 50,
"mouth_open_pct": 50,
"smile_pct": 50
},
"fps": 120,
"frames": 500000,
"gaze": {
"heatmap": [
50
],
"longest_off_screen_s": 1800,
"off_screen_glances": 50000,
"fixation_spread_deg": 5000,
"mean_glance_s": 1800,
"on_screen_pct": 50,
"rapid_shifts_per_min": 5000
},
"hands": {
"available": true,
"face_touches": 50000,
"visible_pct": 50
},
"head": {
"longest_still_s": 1800,
"nods": 50000,
"shakes": 50000,
"mean_speed_deg_s": 5000,
"pitch": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"roll": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
},
"yaw": {
"max": 0,
"mean": 0,
"min": 0,
"sd": 180
}
},
"lighting": {
"label": "dark",
"mean_brightness": 0.5
},
"metrics_version": 1,
"presence": {
"face_pct": 50,
"longest_absence_s": 1800,
"multiple_faces_s": 1800,
"distance_variability_pct": 5000,
"lean_change_pct": 0
},
"quality": "good",
"quality_reasons": [
"<string>"
]
},
"timeline": [
{
"blinks": 10,
"face_pct": 50,
"head_speed": 5000,
"keys": 500,
"motion": 0.5,
"mouth_open_pct": 50,
"on_screen_pct": 50,
"pointer": 5000,
"s": 1800,
"smile_pct": 50,
"state": "active"
}
],
"unavailable_reason": "embedded"
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}{
"detail": {
"code": "<string>",
"message": "<string>",
"context": {},
"request_id": "<string>"
}
}