# Coach Platform API > Public API and MCP server for fitness coaches to manage trainees, training plans, nutrition menus, meetings, and messaging. Designed for AI agents (Claude, Cursor, ChatGPT) and automations. ## Authentication All requests require an API key (cp_live_..., or cp_test_... for a test-tagged key) issued in the dashboard under Settings > Developers. Test keys work against the same data as live keys; they are tagged as test in audit logs and responses carry X-Coach-Key-Mode: test. Send it as: Authorization: Bearer (or header X-API-Key: ). Each key has scopes; an endpoint returns 403 INSUFFICIENT_SCOPE if the scope is missing. ## Conventions - Base URL: https://api.coach-platform.com - Success: { "data": ... } List: { "data": [...] } - Errors: { "error": { "code": "...", "message": "..." } } - Dates are ISO-8601. Ids are 24-char Mongo ObjectIds. - Page-based list endpoints (e.g. /trainees, /products, /purchases, /webhooks) accept ?page=&limit= (limit default 25, max 500) and return pagination { page, limit, total, hasMore }. Some other list endpoints return the full result set, capped, with a truncated flag when the cap is hit. - POST, PATCH and DELETE requests accept an Idempotency-Key header (safe to retry for 24h). - Escort status values (lowercase): pending, active, canceled, completed, suspended. ## Machine-readable references - OpenAPI JSON: /api/public/docs/json - Interactive reference: /api/public/reference - Catalog (scopes, webhook events + payload schemas, MCP tools): /api/public/catalog - Error code reference: /api/public/errors - Limits: /api/public/limits - Changelog: /api/public/changelog ## Webhooks Each delivery is a POST with these headers: - X-Coach-Event: the event name, e.g. trainee.created - X-Coach-Delivery-Id: unique id for this delivery attempt (retries reuse it) - X-Coach-Signature: t=,v1= Verify X-Coach-Signature before trusting a delivery: 1. Parse the header into t and v1. Several v1=... values may be present during a secret rotation; the delivery is valid if any one of them matches. 2. Build the signed string as `${t}.${rawBody}` — the exact raw request body, before any JSON parsing or re-serialization. 3. Compute HMAC-SHA256 of that string with your webhook secret (whsec_...), hex-encoded, and compare against v1 in constant time. 4. Reject deliveries whose t is more than a few minutes old to prevent replay. Node example: const [tPart, ...vParts] = header.split(','); const t = tPart.split('=')[1]; const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex'); const ok = vParts.some((p) => crypto.timingSafeEqual(Buffer.from(p.split('=')[1]), Buffer.from(expected))); The secret is shown once when the webhook is created or rotated. Deliveries time out after 10s and retry up to 5 times with exponential backoff, so handlers must be idempotent on X-Coach-Delivery-Id. ## MCP (Model Context Protocol) Endpoint: /api/public/mcp (Streamable HTTP). Server info: /api/public/mcp/info Authenticate with the same Bearer API key. Tools are gated by the key's scopes. Write tools support dryRun=true to preview without saving. ### MCP tools - get_coach_profile (coach:read): Get the authenticated coach's profile - list_trainees (trainees:read): List trainees with search and pagination - get_trainee (trainees:read): Get a single trainee by id - create_trainee (trainees:write): Create a new trainee (name, email, phone). Supports dryRun preview - update_trainee (trainees:write): Update a trainee's personal details. Supports dryRun preview - list_labels (labels:read): List trainee labels - add_trainee_labels (labels:write): Add one or more labels to a trainee (creating new labels by text if they do not exist yet). Supports dryRun preview - remove_trainee_label (labels:write): Detach a single label from one trainee without deleting the label itself. Supports dryRun preview - update_label (labels:write): Rename a label or change its color. Supports dryRun preview - delete_label (labels:write): Delete a label; trainees keep their other labels. Supports dryRun preview - create_escort (escorts:write): Start a new coaching period (escort) for a trainee. Supports dryRun preview - update_escort (escorts:write): Update an existing coaching period, including whether the trainee is asked to fill registration forms, and detach the active training plan or nutrition menu. Supports dryRun preview - cancel_escort (escorts:write): Cancel a coaching period. Supports dryRun preview - get_active_escort (escorts:read): The trainee's active coaching-period context for personalising plans: goal, calorie/macro targets, coach notes, nutrition notes and the coach's private profile summary. Read this before changing a workout or menu so injuries, dislikes and preferences are respected - list_training_plans (workouts:read): List training plans - get_training_plan (workouts:read): Get a single training plan with full workout structure - get_active_training_plan (workouts:read): Get a trainee's currently active training plan, resolved via their active coaching period - assign_training_plan (workouts:write): Create a training plan and assign it to a trainee, or omit traineeId to leave it unassigned. Set isTemplate to save a reusable template. Supports dryRun preview - update_training_plan (workouts:write): Update an existing training plan. dryRun returns a per-exercise diff plus a confirmToken for two-step approval - delete_training_plan (workouts:write): Delete a training plan. Supports dryRun preview - list_workout_logs (workouts:read): List a trainee's workout logs - search_exercises (workouts:read): Search the exercise catalog - get_exercise_swaps (workouts:read): The exercise substitutions already active for a trainee: their saved preferences (original -> preferred alternative, with the reason and date) and the alternatives currently selected on their active plan, with exercise names resolved. Read this before swapping an exercise so you do not suggest a swap they already have - get_exercise_performance (workouts:read): A trainee's logged performance per exercise: per-set actual weight, reps, RPE and RIR over time, with exercise names resolved. Reads the active training block when one exists (including prescribed targets), otherwise falls back to workout log history. Use this to judge whether an exercise is too hard/easy and to load an alternative at the right weight - get_nutrition_adherence (nutrition:read): For a given day, the trainee's planned meals (calorie/macro targets from their active menu) compared with what they actually logged, per meal and as a daily total, with the deltas. Use this to see where the trainee is over or under and adjust the menu - get_trainee_progress_summary (trainees:read): Weight, body-fat, workout adherence and latest update rollup for a trainee - get_trainee_weekly_activity (trainees:read): A trainee's day-by-day activity for a week: workouts done, cardio, nutrition logging, water, measurements and form submissions - list_trainee_measurements (trainees:read): A trainee's body measurements: weight and body-fat history plus custom measurement types - list_trainee_nutrition_log (nutrition:read): What a trainee actually ate: daily food logs and per-day calorie/macro totals - list_trainee_exercise_notes (workouts:read): Per-exercise notes and video replies from a trainee's workout logs - list_trainee_photos (trainees:read): A trainee's progress photos as temporary viewable image URLs - list_nutrition_menus (nutrition:read): List nutrition menus - get_nutrition_menu (nutrition:read): Get a single nutrition menu with full meal structure - get_active_nutrition_menu (nutrition:read): Get a trainee's currently active nutrition menu, resolved via their active coaching period - assign_nutrition_menu (nutrition:write): Create a nutrition menu and assign it to a trainee, or omit traineeId to leave it unassigned. Set isTemplate to save a reusable template. Supports dryRun preview - update_nutrition_menu (nutrition:write): Update an existing nutrition menu. Supports dryRun preview - add_meal_alternative (nutrition:write): Add an alternative meal (its own foods and macros) to one meal of a nutrition menu, without resending the whole menu. Supports dryRun preview - delete_meal_alternative (nutrition:write): Remove one alternative meal from a meal of a nutrition menu. Supports dryRun preview - delete_nutrition_menu (nutrition:write): Delete a nutrition menu. Supports dryRun preview - list_meetings (meetings:read): List meetings in date range - create_meeting (meetings:write): Schedule a new meeting. Supports dryRun preview - update_meeting (meetings:write): Update an existing meeting. Supports dryRun preview - list_updates (trainees:read): List weekly trainee updates - list_form_responses (trainees:read): List submitted form responses - send_notification (notifications:send): Send an in-app notification (push/popup/both) to a trainee, immediately or scheduled (one-time or recurring). Supports dryRun preview - send_bulk_notification (notifications:send): Send the same in-app notification (push/popup/both) to many trainees at once, immediately or scheduled. Enforced two-step: the first call returns a preview plus a confirmToken; sending requires passing that token back after the coach approves - get_monitoring_overview (monitoring:read): Counts of trainees inactive in training, nutrition, water and weight, plus adherence graph data - list_training_inactive (monitoring:read): Trainees who have not logged training within the inactivity window - list_nutrition_inactive (monitoring:read): Trainees who have not logged nutrition within the inactivity window - list_steps_below_target (monitoring:read): Trainees who logged fewer steps than their daily step target on the target day (default today) - list_nutrition_logged_today (monitoring:read): Trainees who logged nutrition on the target day (default today), with logged calories and protein against target - list_nutrition_not_logged (monitoring:read): Trainees who did NOT log nutrition on the target day (default today); daysThreshold requires a longer gap - list_weight_inactive (monitoring:read): Weight monitoring: weight-inactive trainees, significant weight changes vs an aged baseline, trend vs goal, plateaus, and broken weekly weigh-in streaks - list_water_inactive (monitoring:read): Trainees who have not logged water within the inactivity window - list_monitoring_updates (monitoring:read): Weekly trainee updates (check-ins) for monitoring - list_incomplete_updates (monitoring:read): Updates submitted with missing measurements or photos - list_stalled_exercises (monitoring:read): Exercises where trainees stopped progressing - mark_incomplete_updates_read (monitoring:write): Mark a set of incomplete updates as read. Supports dryRun preview - dismiss_stalled_exercise (monitoring:write): Dismiss a single stalled exercise for a trainee. Supports dryRun preview - dismiss_all_stalled_exercises (monitoring:write): Dismiss many stalled exercises at once. Supports dryRun preview - undismiss_stalled_exercise (monitoring:write): Undismiss a single stalled exercise. Supports dryRun preview - undismiss_all_stalled_exercises (monitoring:write): Undismiss many stalled exercises at once. Supports dryRun preview - handle_stalled_exercise (monitoring:write): Mark a single stalled exercise as handled. Supports dryRun preview - handle_all_stalled_exercises (monitoring:write): Mark many stalled exercises as handled at once. Supports dryRun preview - get_trainee_overview (trainees:read): Call this FIRST for any "tell me about client X" / "what has X been doing" question. One call returns a complete snapshot of a trainee: identity + labels, active coaching-period context (goal, targets, coach notes), active training plan and nutrition menu summaries, recent personal records, this-week activity across all domains, weight/body-fat/adherence rollup, latest check-in, and journey progress. Each section is included only if the API key has the matching scope, so a narrower key still returns what it can. Resolve a name to a traineeId with list_trainees first - get_trainee_personal_records (workouts:read): A trainee's personal records per exercise: best weight, estimated 1RM, top-set reps, max reps, set and total volume, and max duration, each with the value achieved, the previous record and when it was set. Use this to celebrate progress and to load an exercise at the right weight - list_journeys (journeys:read): List the coach's customer journeys (automation templates) with search and pagination, including how many trainees are actively enrolled in each - get_journey (journeys:read): Get a single customer journey with its full step structure: triggers (day, week, escort_progress = percent of the escort length, or event), timing and the actions each step runs (messages, plan/menu assignment, labels, forms) - get_trainee_journey_progress (journeys:read): Where a trainee stands in their customer journey(s): current effective day and week, which steps are completed versus upcoming, and each journey's status. escort_progress steps also carry resolvedDay/resolvedDate (when that trainee reaches the percentage) - list_journey_enrollments (journeys:read): List trainee enrollments across journeys, filterable by journey, escort and status (active/paused/completed/cancelled), with the trainee, escort and journey resolved - get_journey_analytics (journeys:read): Enrollment and completion statistics for a single customer journey - list_custom_exercises (workouts:read): List the exercises this coach has added to their own catalog (createdBy = this coach), with search and muscle-group filters - create_custom_exercise (workouts:write): Add a new exercise to the coach's own catalog when a needed movement is not in the global library. Returns the new exercise id, which can then be used in assign_training_plan. Supports dryRun preview - update_custom_exercise (workouts:write): Edit one of the coach's own custom exercises (name, muscle group, instructions, media). Cannot edit global-catalog exercises. Supports dryRun preview - delete_custom_exercise (workouts:write): Delete one of the coach's own custom exercises. Refused if the exercise is still used by any training plan. Supports dryRun preview - duplicate_training_plan (workouts:write): Copy an existing training plan into a new, unassigned editable plan ("a plan like X"). The copy has no trainee attached; assign it afterwards by editing it onto an escort. Supports dryRun preview - reply_to_workout_exercise (workouts:write): Leave coach feedback on a single exercise inside a trainee's workout log, delivered as an in-app notification and/or WhatsApp. Supports dryRun preview - reply_to_workout_notes (workouts:write): Reply to the free-text notes a trainee attached to a whole workout log, via notification and/or WhatsApp. Supports dryRun preview - bulk_reply_to_workout_exercises (workouts:write): Send one coach reply to many (or all un-answered) exercises in a workout log at once. Supports dryRun preview - list_workout_blocks (workouts:read): List periodized training blocks (multi-week progressions) with status/date/trainee filters - get_workout_block (workouts:read): Get one periodized training block with its weekly phases, exercises and substitutions resolved - create_workout_block (workouts:write): Create a periodized multi-week training block for a trainee's escort (block type, workout method, progression model and per-week phases). Supports dryRun preview - edit_workout_block_exercise (workouts:write): Update the prescribed sets (weight/reps/RPE/RIR/rest) for one exercise in one week of a workout block. Supports dryRun preview - cancel_workout_block (workouts:write): Cancel an active workout block. Supports dryRun preview - delete_workout_block (workouts:write): Delete a workout block. Supports dryRun preview - duplicate_workout_block (workouts:write): Duplicate a workout block starting on a new date. Supports dryRun preview - list_workout_block_templates (workouts:read): List the coach's reusable periodization templates for workout blocks - create_workout_block_template (workouts:write): Create a reusable periodization template (block type, method, progression model, weekly phases). Supports dryRun preview - update_workout_block_template (workouts:write): Update a workout-block template. Supports dryRun preview - delete_workout_block_template (workouts:write): Delete a workout-block template. Supports dryRun preview - list_saved_workout_days (workouts:read): Browse the coach's workout-day library: saved days plus days derived from existing plans, with search/type/tag filters. Reuse these when building a plan - create_saved_workout_day (workouts:write): Save a reusable workout day (name, type, tags, ordered exercises) to the library. Supports dryRun preview - update_saved_workout_day (workouts:write): Update a saved workout day in the library. Supports dryRun preview - delete_saved_workout_day (workouts:write): Delete a saved workout day from the library. Supports dryRun preview - get_conversations (messaging:read): List the coach's WhatsApp conversations with each trainee: last message, unread count, and whether a reply is needed - get_chat_messages (messaging:read): Read the WhatsApp message history for one trainee, paginated - mark_chat_state (messaging:read): Set a trainee's WhatsApp chat to read, unread, or handled - message_trainee (messaging:send): Send a WhatsApp text message to a single trainee (requires an active WhatsApp connection). High-risk: always preview with dryRun and confirm the wording with the coach first - bulk_message_trainees (messaging:send): Queue a WhatsApp message to many trainees matched by filter (gender, labels, inactivity). Very high-risk, enforced two-step: the first call returns a recipient preview plus a confirmToken; sending requires passing that token back after the coach approves - list_pending_trainees (trainees:read): List trainees waiting in the coach's approval queue - approve_pending_trainee (trainees:write): Approve or reject one or more trainees from the pending queue. Supports dryRun preview - onboard_trainee (trainees:write): Flagship orchestration: approve a pending trainee, then optionally start a coaching period, duplicate a training plan and/or nutrition menu onto them, and add labels — in one call. Each step is skipped if its scope is missing. Supports dryRun preview - find_at_risk_trainees (monitoring:read): "Who is slipping" — a single ranked list of trainees showing disengagement, scored by how many signals fired (no training/nutrition/weight/water logging, insufficient volume) with the reasons for each. Composes the monitoring endpoints so you do not have to pull them separately - list_tasks (tasks:read): List the coach's tasks with filters (trainee, label, completion, date range, priority, type, search) - create_task (tasks:write): Create a task, optionally tied to trainees or a label, with subtasks, priority, due date and recurrence. Supports dryRun preview - update_task (tasks:write): Update a task's fields, completion, subtasks or recurrence. Supports dryRun preview - delete_task (tasks:write): Delete a task. Supports dryRun preview - bulk_task_action (tasks:write): Complete, delete or reassign many tasks at once. Supports dryRun preview - list_forms (forms:read): List the coach's forms (update and registration forms) - create_form (forms:write): Create a form (update or registration) with steps and fields. Supports dryRun preview - update_form (forms:write): Replace a form's definition (title, target, steps and fields). Supports dryRun preview - delete_form (forms:write): Delete a form. Supports dryRun preview - duplicate_form (forms:write): Duplicate a form. Supports dryRun preview - toggle_form_active (forms:write): Turn a form on or off for trainees. Supports dryRun preview - cancel_meeting (meetings:write): Cancel a meeting (optionally the whole recurring series) with an optional reason. Supports dryRun preview - respond_to_meeting_request (meetings:write): Approve or decline a meeting that is waiting for the coach's approval. Supports dryRun preview - generate_before_after_story (content:write): Render a before/after Instagram story image for a trainee from two of their progress photos (photo ids from list_trainee_photos). Returns a PNG image - search (trainees:read): Search the coach's trainees, training plans and nutrition menus by free-text query. Returns a list of matching results with an id, title and url. Pass a result id to fetch to read the full record. Used by ChatGPT connectors and Deep Research - fetch (trainees:read): Fetch the full content of a single record by the id returned from search. Used by ChatGPT connectors and Deep Research - schedule_plan_change (escorts:write): Schedule a training plan or nutrition menu to swap onto a trainee's coaching period on a future date or after N weeks. Supports dryRun preview - bulk_schedule_plan_change (escorts:write): Schedule the same training/nutrition plan swap across many coaching periods at once. Supports dryRun preview - list_scheduled_plan_changes (escorts:read): List the pending scheduled training and nutrition plan swaps queued on one coaching period - list_upcoming_plan_changes (escorts:read): List scheduled plan swaps coming up across all trainees within a window of days - update_scheduled_plan_change (escorts:write): Change the date, week, plan or settings of a queued plan swap. Supports dryRun preview - apply_scheduled_plan_change_now (escorts:write): Immediately apply a queued plan swap instead of waiting for its scheduled date. Supports dryRun preview - delete_scheduled_plan_change (escorts:write): Cancel a queued plan swap. Supports dryRun preview - suspend_escort (escorts:write): Put a trainee's coaching period on hold with a reason and optional auto-resume date. Supports dryRun preview - resume_escort (escorts:write): Resume a suspended coaching period, optionally extending the end date by the days it was on hold. Supports dryRun preview - restore_escort (escorts:write): Reactivate a cancelled or finished coaching period. Supports dryRun preview - add_escort_note (escorts:write): Add a coach note to a trainee's coaching period, optionally pinned. Supports dryRun preview - edit_escort_note (escorts:write): Edit an existing coaching-period note. Supports dryRun preview - delete_escort_note (escorts:write): Delete a coaching-period note. Supports dryRun preview - bulk_add_escort_note (escorts:write): Add the same note to many coaching periods at once. Supports dryRun preview - get_food_replacements (nutrition:read): Get replacement suggestions for a food item by its product code: popular community swaps and AI-generated alternatives with similar macros - get_food_replacements_by_food (nutrition:read): Get AI-generated replacement foods for an arbitrary food described by name and optional macros (per 100g), when you do not have a product code - get_batch_food_replacements (nutrition:read): Get AI replacement suggestions for many food product codes at once, honoring diet type, allergies and preferences - list_recipes (nutrition:read): List the coach's recipes with category, diet-tag, target and search filters - get_recipe (nutrition:read): Get a single recipe by id with its full ingredient and nutrition detail - create_recipe (nutrition:write): Create a recipe (ingredients, servings, nutrition, targeting). Supports dryRun preview - update_recipe (nutrition:write): Update an existing recipe. Supports dryRun preview - delete_recipe (nutrition:write): Delete a recipe. Supports dryRun preview - list_recipe_categories (nutrition:read): List the coach's recipe categories - update_recipe_categories (nutrition:write): Replace the coach's recipe category list. Supports dryRun preview - list_food_items (nutrition:read): List the coach's own food-item catalog with search, favorites and recent filters - search_global_food_items (nutrition:read): Search external food databases (USDA and OpenFoodFacts) for a food by name - search_food_items (nutrition:read): Search the food database the dashboard searches (shared catalog plus the coach's own items) and get each food's product code, per-100g macros and units with their gram weight, ready to put on a meal food item - create_food_item (nutrition:write): Add a new food item to the coach's catalog with macros and measurements. Supports dryRun preview - update_food_item (nutrition:write): Edit a food item in the coach's catalog. Supports dryRun preview - delete_food_item (nutrition:write): Delete a food item from the coach's catalog. Supports dryRun preview - toggle_favorite_food_item (nutrition:write): Mark a food item as a favorite or remove it from favorites. Supports dryRun preview - list_portion_templates (nutrition:read): List the coach's portion-library templates, optionally filtered by category - get_portion_template (nutrition:read): Get one portion-library template with its categories and substitutes - create_portion_template (nutrition:write): Create a portion-library template (categories, points, substitutes). Supports dryRun preview - update_portion_template (nutrition:write): Update a portion-library template. Supports dryRun preview - delete_portion_template (nutrition:write): Delete a portion-library template. Supports dryRun preview - get_portion_settings (nutrition:read): Get the coach's portion rounding, classification and category-default settings - update_portion_settings (nutrition:write): Update the coach's portion rounding, classification and category-default settings. Supports dryRun preview - schedule_whatsapp_message (messaging:send): Schedule a WhatsApp text message to a trainee, or to a filtered group, for a future time, optionally recurring. High-risk: preview with dryRun first. Supports dryRun preview - list_scheduled_whatsapp_messages (messaging:read): List queued/sent/failed/cancelled scheduled WhatsApp messages with status and source filters - update_scheduled_whatsapp_message (messaging:send): Change the time or content of a pending scheduled WhatsApp message. Supports dryRun preview - cancel_scheduled_whatsapp_message (messaging:send): Cancel (or delete) a scheduled WhatsApp message. Supports dryRun preview - restore_scheduled_whatsapp_message (messaging:send): Restore a cancelled scheduled WhatsApp message back to pending if its time has not passed. Supports dryRun preview - edit_whatsapp_message (messaging:send): Edit the text of a WhatsApp message you sent recently (within the provider time limit). Supports dryRun preview - delete_whatsapp_message (messaging:send): Delete a WhatsApp message you sent recently. Supports dryRun preview - forward_whatsapp_message (messaging:send): Forward an existing WhatsApp message to one or more trainees. High-risk: preview with dryRun first. Supports dryRun preview - get_pinned_whatsapp_messages (messaging:read): Get the pinned messages in a trainee's WhatsApp chat - list_whatsapp_automations (messaging:read): List the coach's WhatsApp automation rules and supported languages - update_whatsapp_automation (messaging:send): Enable/disable a WhatsApp automation and set its custom messages and pacing rules. Supports dryRun preview - get_whatsapp_automation_settings (messaging:read): Get the coach's general WhatsApp automation settings (recent-conversation window, Shabbat, workout pacing) - update_whatsapp_automation_settings (messaging:send): Update the coach's general WhatsApp automation settings. Supports dryRun preview - list_whatsapp_templates (messaging:read): List the coach's reusable WhatsApp message templates - create_whatsapp_template (messaging:send): Create a reusable WhatsApp message template. Supports dryRun preview - update_whatsapp_template (messaging:send): Update a WhatsApp message template. Supports dryRun preview - delete_whatsapp_template (messaging:send): Delete a WhatsApp message template. Supports dryRun preview - add_subtask (tasks:write): Add a subtask to a task. Supports dryRun preview - update_subtask (tasks:write): Rename a subtask or toggle its completion. Supports dryRun preview - delete_subtask (tasks:write): Delete a subtask from a task. Supports dryRun preview - list_task_automations (tasks:read): List the coach's task automation rules - create_task_automation (tasks:write): Create a task automation that auto-creates tasks on a trigger. Supports dryRun preview - update_task_automation (tasks:write): Update a task automation rule. Supports dryRun preview - delete_task_automation (tasks:write): Delete a task automation rule. Supports dryRun preview - list_task_types (tasks:read): List the default and custom task types available to the coach - add_custom_task_type (tasks:write): Add a custom task type. Supports dryRun preview - delete_custom_task_type (tasks:write): Delete a custom task type; tasks using it are migrated to general. Supports dryRun preview - cancel_task_recurrence (tasks:write): Cancel an entire recurring-task series. Supports dryRun preview - get_form_analytics (forms:read): Get submission analytics for one form over a date range - get_form_response (forms:read): Get the full detail of one submitted form response, including plan data and photos for pending update forms - create_journey (journeys:write): Create a customer journey (automation template) with its step structure. Supports dryRun preview - update_journey (journeys:write): Update a customer journey's fields or steps. Supports dryRun preview - delete_journey (journeys:write): Delete a customer journey and cancel all its active enrollments and pending actions. Supports dryRun preview - clone_journey (journeys:write): Clone a customer journey into a new inactive copy. Supports dryRun preview - toggle_journey_active (journeys:write): Turn a customer journey on or off. Supports dryRun preview - enroll_trainee_in_journey (journeys:write): Enroll one coaching period into a customer journey, optionally shifting the start date or starting at a step. Supports dryRun preview - bulk_enroll_in_journey (journeys:write): Enroll many coaching periods into a customer journey at once. Supports dryRun preview - enroll_by_labels_in_journey (journeys:write): Enroll all trainees with the given labels (and an active coaching period) into a customer journey. Supports dryRun preview - cancel_journey_enrollment (journeys:write): Cancel a trainee's enrollment in a customer journey. Supports dryRun preview - preview_journey_overlap (journeys:read): Preview which of the given coaching periods are already in another active or paused journey and would be skipped by a bulk enroll - skip_journey_step (journeys:write): Mark one step of a trainee's journey enrollment as skipped. Supports dryRun preview - rerun_journey_step (journeys:write): Re-run one step of a journey enrollment; its actions fire again. Supports dryRun preview - set_journey_step (journeys:write): Move a journey enrollment's pointer to a specific step. Supports dryRun preview - reset_journey_progress (journeys:write): Reset a journey enrollment back to the start, clearing all completed steps. Supports dryRun preview - shift_journey_start_date (journeys:write): Shift a journey enrollment's effective start date by a number of days. Supports dryRun preview - set_journey_enrollment_pause (journeys:write): Pause or resume a trainee's journey enrollment. Supports dryRun preview - list_journey_dispatches (journeys:read): List the form/notification dispatches for one journey enrollment - cancel_journey_dispatch (journeys:write): Cancel one pending journey form dispatch. Supports dryRun preview - resend_journey_dispatch (journeys:write): Resend a journey form dispatch as a new pending dispatch. Supports dryRun preview - bulk_cancel_journey_artifacts (journeys:write): Bulk-cancel pending journey artifacts (forms, pushes, whatsapp or tasks) for a journey or step. Supports dryRun preview - list_global_journey_dispatches (journeys:read): List pending journey form dispatches across all journeys with filters - list_guides (content:read): List the coach's guides ("documents and tips") with pagination - list_guide_labels (content:read): List the distinct labels used across the coach's guides - create_guide (content:write): Create a link or file guide for trainees, with targeting (all/males/females/specific trainees/by labels) and optional day-gating. Supports dryRun preview - update_guide (content:write): Update a guide's fields or targeting. Supports dryRun preview - delete_guide (content:write): Delete a guide; if used in journeys, pass confirmJourneys=true. Supports dryRun preview - update_guide_disclosure (content:write): Set or clear a guide's availableFromDay day-gating and reveal notification. Supports dryRun preview - get_gamification_profile (gamification:read): Get a trainee's XP profile: level, available XP and progress - get_gamification_leaderboard (gamification:read): Get the coach's weekly XP leaderboard across trainees - get_trainee_gamification_leaderboard (gamification:read): Get the leaderboard as one trainee sees it, with their rank and neighbors - get_gamification_badges (gamification:read): Get a trainee's earned badges and progress toward the rest - get_gamification_rewards (gamification:read): Get the reward catalog with which a trainee can afford or already owns each - get_gamification_xp_history (gamification:read): Get a trainee's XP-earning history - award_xp (gamification:write): Manually award XP to a trainee for an action. Supports dryRun preview - get_steps_leaderboard (gamification:read): Get the coach's step-competition leaderboard (daily or weekly) - get_trainee_steps_leaderboard (gamification:read): Get the step-competition leaderboard as one trainee sees it - list_employees (admin:manage): List the coach's employees with role, status and trainee counts. Owner-only - get_employee (admin:manage): Get one employee's details, permissions and trainee access. Owner-only - get_employee_hierarchy (admin:manage): Get the employee reporting hierarchy. Owner-only - add_employee (admin:manage): Add an employee with role, permissions and trainee access. Owner-only. Supports dryRun preview - update_employee (admin:manage): Update an employee's basic details. Owner-only. Supports dryRun preview - update_employee_permissions (admin:manage): Update an employee's role and feature permissions. Owner-only. Supports dryRun preview - update_employee_trainee_access (admin:manage): Update which trainees an employee can access. Owner-only. Supports dryRun preview - update_employee_status (admin:manage): Set an employee active or inactive. Owner-only. Supports dryRun preview - delete_employee (admin:manage): Delete an employee and reassign their reports. Owner-only. Supports dryRun preview - list_sites (admin:manage): List the coach's sites/branches with member counts. Owner-only - get_site (admin:manage): Get one site by id. Owner-only - create_site (admin:manage): Create a site/branch. Owner-only. Supports dryRun preview - update_site (admin:manage): Update a site's details. Owner-only. Supports dryRun preview - delete_site (admin:manage): Delete a site. Owner-only. Supports dryRun preview - get_site_members (admin:manage): Get the employees and trainees assigned to a site. Owner-only - update_site_members (admin:manage): Add or remove employees and trainees from a site. Owner-only. Supports dryRun preview - get_autopilot_settings (admin:manage): Get the coach's autopilot notification settings. Owner-only - update_autopilot_settings (admin:manage): Update the coach's autopilot notification settings. Owner-only. Supports dryRun preview - toggle_autopilot (admin:manage): Turn autopilot master or a specific type on/off. Owner-only. Supports dryRun preview - get_business_overview (coach:read): A single cross-trainee snapshot of the whole business: trainee counts by status, the at-risk/inactive digest, upcoming meetings, open task count, and active-journey enrollment counts. Call this for "how is my business doing" or "give me the big picture" questions