Coaching Presets
A coaching preset is a trusted, server-stored session configuration. Send
presetIdinstead of buildinginteractionMode,feedbackTask,metrics, and the rest yourself — the endpoint loads the real values and the client cannot override them.
Atanzo AI ships 18 canonical coaching experiences — golf swing analysis, tennis form, pitching mechanics, physical therapy, exercise form checks, public speaking delivery, deposition prep, and a set of field-service inspection/procedure experiences (HVAC, plumbing, roofing, fire safety, pest control, auto mechanics, building inspection, home repair, care procedures). Each one is a fully-tuned immediate_feedback (or, for HomeAssist, guided_steps) session: the interaction mode, feedback cadence, video processor, metrics, and end-of-session scorer are all pre-configured by Atanzo. You don't assemble any of that yourself — you reference the preset by id.
This page covers the developer/API path: launching a preset from your own backend via POST /guide/session. If you're choosing between coaching and guided steps conceptually, or looking at the console side, start with Coaching Mode.
What a Preset Is
Each preset is one canonical entry, defined once and seeded server-side into two places:
picoagentmedia(catid: "agent") — surfaces the preset in the console's agent picker as a synthetic__coach-<slug>agent.picoagentusers(catid: "agent:system") — the row the embed API (guidedSessionToken) loads.
Every preset row is flagged is_coaching_preset: true and carries a required_planmodule — a per-experience entitlement (coachgolf, coachpresent, coachwitness, …) that gates who can run it. A preset bundles: device_mode, interaction_mode, feedback_task, feedback_tips_per_cycle, feedback_auto_interval_seconds, feedback_timing, video_processor, video_fps, realtime_provider, enable_rag, active_accesstag, pose_guidance, metrics, final_report, and stt_options.
How to Use One
Send presetId in place of agentId when calling the token endpoint:
POST /guide/session
{
"presetId": "coach-golf",
"endUserRef": "user-42"
}
agentId and presetId are mutually exclusive ways of identifying what to run — the endpoint accepts either, and presetId takes priority if you supply both (effectiveAgentId = presetId || agentId).
The preset's config wins, always. When presetId is present, the endpoint loads the trusted row and overrides the session knobs from it — a client-supplied interactionMode, feedbackTask, videoProcessor, videoFps, realtimeProvider, enableRag, activeAccesstag, metrics, finalReport, sttOptions, or poseGuidance in the request body is ignored in favor of the preset's stored value. mode (voice/video) is likewise derived from the preset's device_mode, not from what you send. You cannot use presetId to bootstrap a session and then tune it with your own body fields — the values you send for those fields are simply discarded.
The extractor allow-list that normally sanitizes client-supplied metrics is not applied to preset rows — they're trusted server-side config, not client input.
Partner-scoped presets take priority over the shared system preset. The endpoint first looks for a row at picoagentusers { id: presetId, catid: "agent:{cid}" } (a copy scoped to your company); if that doesn't exist, it falls back to picoagentusers { id: presetId, catid: "agent:system" } (the shared preset seeded from the canonical catalog). This lets a partner override a stock preset's config under the same id without affecting other tenants. If neither row exists, or the row isn't flagged is_coaching_preset, the endpoint returns 404 PRESET_NOT_FOUND.
Gating and the Errors You'll See
Two coaching-specific failure modes sit on top of the endpoint's normal scope/plan checks (403 SCOPE_REQUIRED for invoke_voice/invoke_video, 403 PLAN_DISALLOWS_VOICE/PLAN_DISALLOWS_VIDEO for the account-level embed entitlement — see Getting a Session Credential):
| Code | When it fires |
|---|---|
403 COACHING_MODULE_REQUIRED | Your credential authenticated a specific end-user (euid, via the password grant) and that end-user's planmodules don't include the preset's required_planmodule. Checked against the resolved end-user, not the company. |
403 COACHING_PRESET_NOT_ALLOWED | Your credential is anonymous (no euid) and the company's picoagentutility access record has a coaching_presets_allowed array that doesn't include this presetId. This is an optional per-company allow-list — if the field isn't set, anonymous callers can request any preset (subject to the account's voice/video plan modules). |
In short: authenticated end-users are gated by their individual planmodule; anonymous embed deployments are optionally gated by a company-level allow-list. Both checks only apply when presetId is used — plain agentId sessions don't go through either path.
The Console Side
The same 18 presets appear as branded entries in the console's dashboard agent picker, gated by the same required_planmodule mechanism (granted per-company via planmodulesavail), running through the same guided-task LiveKit path. See Coaching Mode for the non-developer view of what these sessions look and feel like, and Session Reports for how their end-of-session scoring shows up.
The 18 Presets
presetId | Brand | Skill | Mode | Required module |
|---|---|---|---|---|
coach-golf | FAIRWAY/AI | Golf Swing Analysis | video | coachgolf |
coach-tennis | Baseline | Tennis Form Analysis | video | coachtennis |
coach-baseball | Diamond Mechanics | Pitching Mechanics | video | coachbaseball |
coach-rehab | Restora | Physical Therapy | video | coachrehab |
coach-formcheck | REPSET | Exercise Form | video | coachformcheck |
coach-care | Tend | Care Procedures | video | coachcare |
coach-present | Cadence | Public Speaking | video | coachpresent |
coach-homeassist | Handyman | Home Repair | voice | coachhomeassist |
coach-witness | Counsel | Deposition Prep | video | coachwitness |
coach-spark | Spark | HVAC Field Service | video | coachspark |
coach-firesafety | FireGuard | NFPA 25 Inspection | video | coachfiresafety |
coach-roofing | StormProof | Storm Damage Documentation | video | coachroofing |
coach-roofcheck | TopLine | Final Quality Walkthrough | video | coachroofcheck |
coach-hvac | TrueClimate | HVAC Commissioning | video | coachhvac |
coach-building-inspection | Greenlight | Occupancy Inspection | video | coachbuildinginspection |
coach-plumbing | PLUMBLINE | Water Heater Replacement | video | coachplumbing |
coach-auto-mechanics | FULLPOINT | Multi-Point Inspection | video | coachautomechanics |
coach-pest-control | CLEARZONE | Chemical Application Protocol | video | coachpestcontrol |
coach-homeassist is the only voice-only, guided_steps-style preset in the set — every other preset runs immediate_feedback over video.
Next Steps
- Coaching Mode — what coaching sessions look like for the person choosing or running one
- Getting a Session Credential — the full
POST /guide/sessionparameter reference and scope enforcement - Session Reports — reading the end-of-session scorer output a preset's
finalReportconfig produces