---
search:
  tags:
    - Training
    - POST
seo:
  description: >-
    Plans a mesocycle from a split template or explicit days of muscle slots.
    The last… Reference for the POST /api/training/mesocycles endpoint in the
    skcal API.
sidebar:
  label: Create a mesocycle
  badge: POST
title: Create a mesocycle
type: openapi-operation
---
Plans a mesocycle from a split template or explicit days of muscle slots. The last week is a deload. Week 1 starts each muscle at its MEV split across its slots, at 3 reps in reserve; later weeks are planned from what was lifted and the per-muscle feedback. One mesocycle can be active at a time.

`POST /api/training/mesocycles`

**Request body** (`application/json`, required)

The plan.

- `name` (string) — Name (default the template's).
- `weeks` (integer) — Total weeks including the final deload (default 5).
- `startDate` (string<date>) — First day (default today).
- `template` (string) — A template key from the library.
- `days` (object[]) — Explicit training days; overrides the template's days.
- `notes` (string) — Free-text notes.

Request body example:

```json
{
  "name": "Winter bulk meso 1",
  "weeks": 5,
  "startDate": "2026-10-26",
  "template": "upper_lower_4",
  "days": [
    {
      "label": "Push",
      "slots": [
        {
          "muscle": "chest",
          "exerciseId": "barbell_bench_press"
        },
        {
          "muscle": "side_delts"
        }
      ]
    }
  ],
  "notes": "focus on chest and side delts"
}
```

**Responses**

- `200` — The created mesocycle.
- `400` — The request body or parameters failed validation.

Response example, 200:

```json
{
  "ok": true,
  "week": 2,
  "day": 1,
  "exerciseName": "Barbell Bench Press",
  "muscle": "chest"
}
```
