---
title: "POST /api/public/trainees/{traineeId}/restore"
method: POST
path: "/api/public/trainees/{traineeId}/restore"
tags: ["Trainees"]
---

# POST /api/public/trainees/{traineeId}/restore

`POST /api/public/trainees/{traineeId}/restore`

Bring a trainee back from the archive, exactly as the dashboard does it. Their last coaching period with you is revived (status Active when its end date is still ahead, Finished when it has passed) and its training plan and nutrition menu are re-linked, so the trainee keeps the history they had before being removed. A trainee with no previous coaching period is simply moved back to the active list.

Use this instead of POST /trainees for a returning trainee: re-creating them by email does attach the same account rather than a duplicate, but it leaves them without a coaching period, plan or menu, which looks like a brand-new empty trainee.

Fires the trainee.restored webhook. Returns 404 when the trainee is not in the archive (list it with GET /trainees?status=archived), 422 when restoring would exceed your trainee limit, and 422 when the trainee has since been taken on by another coach.

## Path parameters

- `traineeId` string, required

## Headers

- `Idempotency-Key` string

## Response `200`

Successful response

- object — Successful response
  - `data` object
    - `id` string
    - `name` string
    - `email` string
    - `phoneNumber` string
    - `goal` string
    - `profileImageUrl` string
    - `personalDetails` object
    - `labels` object[]
      - `id` string
      - `text` string
      - `color` string
      - `coachId` string
    - `assignedEmployees` object[]
      - `id` string
      - `name` string
    - `activeCoachDetails` object
      - `activeEscort` string, nullable — Id of the escort currently in use for this trainee. Fetch the full escort with GET /escorts/{escortId}.
      - `pendingCoach` string, nullable — Coach id this trainee is pending approval for. Set when the trainee was invited but has not been approved yet; null once approved. Use ?status=pending on GET /trainees to list only these.
      - `pendingCoachDate` string, date-time, nullable — When the trainee entered the pending state. Use it to measure how long approval has been waiting.
    - `createdAt` string, date-time

## 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)
