# AI Trainer Chat Parameters

Parameters specific to the [AI Trainer Chat](/docs/ai-trainer-chat) view. **Applies to: AI Trainer only** — every other integration option ignores them.

| Parameter | Type | Default | Applies to | What it does internally |
|-----------|------|---------|------------|-------------------------|
| isSubscribed | boolean | true | AI Trainer | Missing or `true` = subscribed. Only an explicit `false` (string `"false"` is also accepted for URL launches) gates workout generation and triggers the `open_subscription_flow` event — see the [subscription gating guide](/docs/guides/guide-subscription-gating). **For session-authenticated companies the backend's subscription status overrides this flag entirely** — the server is the source of truth and also gates generation server-side |
| subscriptionReturnUrl | string | — | AI Trainer | For link/standalone integrations with no host app: non-subscribed users are redirected here at the generation step instead of receiving `open_subscription_flow`. Accepts https:// URLs or app deep links; script-executing schemes are rejected |
| aiTrainerName | string | — | AI Trainer | Renames the AI trainer everywhere it's labelled (header title, reply labels). Shown verbatim in every language |
| aiTrainerColor | string | — | AI Trainer | Recolors the trainer's star icon — any CSS color, e.g. `"#7C3AED"`. Missing = the theme's brand color |
| aiTrainerGreeting | string | - | AI Trainer | Your own opening line, typed by the trainer at most once per launch (skipped while another prompt is on screen). Display only, not sent to the AI |
| aiTrainerOnboardingGreeting | string | - | AI Trainer | Opening line when a user with no chat history starts onboarding. Falls back to `aiTrainerGreeting` |
| aiTrainerOnboardingCompleteMessage | string | - | AI Trainer | Line typed once when onboarding ends and the first plan starts generating |
| customProfileAction | boolean | false | AI Trainer | The "Profile and more settings" row in the header settings menu sends `trainer_profile_clicked` (with the current profile) instead of opening the KinesteX profile screen. Use it to open your own profile UI |
| customCalendarAction | boolean | false | AI Trainer | The calendar button in the header sends `trainer_calendar_clicked` instead of opening the My Progress screen |
| hideCalendarButton | boolean | false | AI Trainer | Hides the calendar button in the header |
| hideProfileButton | boolean | false | AI Trainer | Hides the settings button in the header, which also removes its quick settings (music, AI motion tracking, pose model) and the "Profile and more settings" row. Takes priority over `customProfileAction` |
| captureDateOfBirth | boolean | false | AI Trainer | The profile step asks for a full date of birth instead of a birth year. KinesteX stores only the age; the date is sent back to you as `date_of_birth` in the profile events |
| date_of_birth | string | - | AI Trainer | `"YYYY-MM-DD"`. Prefills the date of birth. Ignored unless it gives an age between 3 and 120 |

**Runtime subscription reply:** after your host handles `open_subscription_flow`, post `{ subscription_result: "purchased" }` (resumes the parked generation) or `{ subscription_result: "dismissed" }` back to the WebView.

**Fitness-profile prefill fields** (same names as the `trainer_profile_updated` event, so you can round-trip the schema; invalid values are silently dropped, never errored):

| Field | Accepted values |
|-------|-----------------|
| fitness_goals | string[] from: `weight_loss`, `muscle_gain`, `strength`, `general_fitness`, `wellness_flexibility`, `cardio_endurance`. `weight_loss` is not offered to users with an underweight BMI (under 18.5) and is dropped when they save their goals |
| injuries | Array of `{ body_part, preference, severity }`. `body_part`: Neck, Shoulders, Chest, Arms, Forearms, Abdomen, Knees, Hips, Ankles, Upper Back, Lower Back, Glutes, Hamstrings, Calves, Heels (case/underscore-insensitive). `preference`: `avoid` (default) or `include`. `severity` (optional): `light`, `moderate`, `severe`. Empty array = explicitly "no injuries" |
| health_conditions | string[] — standard values: Diabetes, Hypertension, Asthma, Osteoporosis, Other. Non-standard strings are kept as free-text "Other" details |
| fitness_level_pushups | `"0-5"`, `"6-15"`, `"16+"` |
| fitness_level_squats | `"0-10"`, `"11-21"`, `"22+"` |
| fitness_level_cardio | One of the cardio self-assessment sentences shown in the trainer wizard (unrecognized values make the wizard re-ask) |
| other_preferences | Free text |

See [Pre-filling user data](/docs/ai-trainer-chat#prefill) for the full guide. Prefill seeds the wizard's answers — the questions are still shown, pre-answered. Demographics (`age`/`height`/`weight`/`gender`/`lifestyle`) also prefill the trainer, but only when explicitly provided at launch.

---
Source: https://www.kinestex.com/docs/customization-parameters/ai-trainer-params · Index: https://www.kinestex.com/llms.txt
