---
title: "POST /api/public/escorts"
method: POST
path: "/api/public/escorts"
tags: ["Escorts"]
---

# POST /api/public/escorts

`POST /api/public/escorts`

Start a new coaching period (escort) for a trainee. The plan ids required depend on escortType: "Training" needs trainingPlanId, "Nutrition" needs nutritionMenuId, "Nutrition and training" needs both, and "Other" needs neither. Create the plan or menu first (POST /training-plans, POST /nutrition-menus) and pass its id here. A trainee may only have one active escort at a time.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `traineeId` string, required
  - `escortType` 'Nutrition' | 'Training' | 'Nutrition and training' | 'Other', required — Determines which plan ids are required: Training -> trainingPlanId, Nutrition -> nutritionMenuId, Nutrition and training -> both, Other -> none.
  - `startDate` string, required — ISO date.
  - `endDate` string — ISO date. Provide this or months.
  - `months` number — Duration in months. Provide this or endDate.
  - `goal` string
  - `price` number
  - `paymentDate` string
  - `paymentMethod` 'Cash' | 'Credit card' | 'Bank transfer' | 'Other'
  - `paymentNumber` number
  - `escortMeetingType` 'Online' | 'In person'
  - `onlineEscort` string
  - `inPersonEscort` string
  - `notes` string — Optional first note on the coaching period.
  - `cardioDays` number
  - `cardioTime` number
  - `trainingDays` number
  - `dailyStepsTarget` number
  - `trainingPlanId` string — Assign an existing training plan. Required when escortType is "Training" or "Nutrition and training".
  - `nutritionMenuId` string — Assign an existing nutrition menu. Required when escortType is "Nutrition" or "Nutrition and training".

## Response `201`

Created

- object — Created
  - `data` object
    - `id` string
    - `coach` string
    - `trainee` object — The escorted trainee. email and phoneNumber are returned only when the key also has the trainees:read scope.
      - `id` string
      - `name` string
      - `email` string
      - `phoneNumber` string
    - `status` 'pending' | 'active' | 'canceled' | 'completed' | 'suspended'
    - `escortType` string
    - `startDate` string, date-time
    - `endDate` string, date-time — When the coaching period ends. null when the escort runs with no time limit, in which case isUnlimited is true.
    - `months` unknown
    - `isUnlimited` boolean — True when the escort has no end date.
    - `training` object
      - `activeTrainingPlan` object, nullable
        - `id` string
        - `title` string
        - `level` string
      - `trainingDays` unknown
    - `nutrition` object
      - `activeNutritionPlan` object, nullable
        - `id` string
        - `title` string
        - `level` string
    - `createdAt` string, date-time
  - `warnings` object[] — Non-fatal problems with follow-up writes. The resource was created, but each listed field was not applied.
    - `field` string
    - `message` string

## Other responses

- `400` — Default Response
- `401` — Default Response
- `403` — Default Response
- `404` — Default Response
- `409` — Default Response
- `429` — Default Response
- `500` — Default Response

---

[API](https://skmtc.dev/coach-platform/apis/coach-platform-api.md) · [All operations](https://skmtc.dev/coach-platform/apis/coach-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/coach-platform/coach-platform-api/revisions/3d18b514ae8c/schema)
