---
title: "Завершить спринт"
method: POST
path: "/api/v1/tasks/scrum/{project}/sprints/{id}/complete"
tags: ["Tasks"]
---

# Завершить спринт

`POST /api/v1/tasks/scrum/{project}/sprints/{id}/complete`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/tasks/scrum/{project}/sprints/{id}/complete`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)
  - HTTP bearer

Только владелец или совладелец проекта. Незавершённые задачи — в бэклог запланированного спринта или нового, созданного с настройками завершаемого. Без выбора спринт завершается, только если все задачи готовы.

## Request body

- SprintComplete
  - `carry_over` 'sprint' | 'new': Куда незавершённые задачи: бэклог запланированного спринта или нового; без значения — только если все задачи готовы
  - `target_sprint` string, uuid
  - `new_sprint_name` string

## Response `200`

Итог завершения

- SprintCompletion
  - `sprint` Sprint, required
    - `id` string, uuid, required
    - `project` string, uuid, required
    - `name` string, required
    - `goal` string, required
    - `starts_at` string, nullable, required
    - `ends_at` string, nullable, required
    - `status` 'planned' | 'active' | 'completed', required
    - `started_at` string, nullable, required
    - `completed_at` string, nullable, required
    - `order` integer, required
    - `length_days` integer, required
    - `members` integer[], required
    - `daily_time` string, nullable, required
    - `daily_minutes` 5 | 10 | 15 | 30, required: Длительность ежедневной встречи в минутах; по умолчанию 15
    - `timezone` string, required
    - `daily_event` string, uuid, required
    - `task_count` integer, required
    - `tasks_done` integer, required
    - `points` integer, required: Сумма баллов задач спринта сейчас
    - `points_done` integer, required
    - `planned_points` integer, nullable, required: Снимок плана на старте
    - `completed_points` integer, nullable, required: Снимок факта на завершении: только задачи в «Готово»
    - `points_in_progress` integer, required: Баллы задач в колонке «В работе» сейчас
    - `progress` SprintProgress, required: Где идущий спринт сейчас. Идеал — сколько баллов должно быть готово к началу сегодняшнего дня (план × (день − 1) / дней); «в графике», если отставание не больше 10% плана (не меньше 1 балла).
      - `day` integer, required: День спринта в его поясе
      - `days` integer, required
      - `days_left` integer, required
      - `plan` integer, required: Снимок плана на старте, без снимка — текущий объём
      - `plan_fixed` boolean, required
      - `scope` integer, required: Текущий объём спринта
      - `done` integer, required
      - `in_progress` integer, required
      - `todo` integer, required: Баллы ещё не начатых задач (бэклог спринта и «Туду»)
      - `ideal_done` number, required
      - `behind` integer, required: На сколько баллов готово меньше идеала
      - `on_track` boolean, required
    - `created_at` string, required
    - `updated_at` string, required
  - `done` integer, required
  - `carried_over` integer, required
  - `target` Sprint, required
    - `id` string, uuid, required
    - `project` string, uuid, required
    - `name` string, required
    - `goal` string, required
    - `starts_at` string, nullable, required
    - `ends_at` string, nullable, required
    - `status` 'planned' | 'active' | 'completed', required
    - `started_at` string, nullable, required
    - `completed_at` string, nullable, required
    - `order` integer, required
    - `length_days` integer, required
    - `members` integer[], required
    - `daily_time` string, nullable, required
    - `daily_minutes` 5 | 10 | 15 | 30, required: Длительность ежедневной встречи в минутах; по умолчанию 15
    - `timezone` string, required
    - `daily_event` string, uuid, required
    - `task_count` integer, required
    - `tasks_done` integer, required
    - `points` integer, required: Сумма баллов задач спринта сейчас
    - `points_done` integer, required
    - `planned_points` integer, nullable, required: Снимок плана на старте
    - `completed_points` integer, nullable, required: Снимок факта на завершении: только задачи в «Готово»
    - `points_in_progress` integer, required: Баллы задач в колонке «В работе» сейчас
    - `progress` SprintProgress, required: Где идущий спринт сейчас. Идеал — сколько баллов должно быть готово к началу сегодняшнего дня (план × (день − 1) / дней); «в графике», если отставание не больше 10% плана (не меньше 1 балла).
      - `day` integer, required: День спринта в его поясе
      - `days` integer, required
      - `days_left` integer, required
      - `plan` integer, required: Снимок плана на старте, без снимка — текущий объём
      - `plan_fixed` boolean, required
      - `scope` integer, required: Текущий объём спринта
      - `done` integer, required
      - `in_progress` integer, required
      - `todo` integer, required: Баллы ещё не начатых задач (бэклог спринта и «Туду»)
      - `ideal_done` number, required
      - `behind` integer, required: На сколько баллов готово меньше идеала
      - `on_track` boolean, required
    - `created_at` string, required
    - `updated_at` string, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `409`: Конфликт версии, идемпотентности или бизнес-состояния

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/a99574d597cc?raw)
