---
id: projects-restore-project
title: "POST /api/projects/:id/restore — Восстановить проект"
domain: projects
kind: api-method
http: "POST /api/projects/:id/restore"
---

# POST /api/projects/:id/restore — Восстановить проект {#projects-restore-project}

## Сводка

| Поле | Значение |
|---|---|
| **HTTP** | `POST /api/projects/:id/restore` |
| **Auth** | `requireAuth` — только авторизованный |
| **Scope токена** | `read_write` |
| **PG-функции** | `api.restore_project` |
| **Таблицы** | `project`, `space` |
| **SRM** | SRM-036, SRM-238 |
| **RP (права)** | RP-020 |
| **Файл роута** | `server/routes/projects.js` |
| **Статус** | done |

**Аргументы запроса** (best-effort из хендлера; путь-параметры опущены):

| Аргумент | Где | Обяз. | Заметка |
|---|---|---|---|
| `restore_space` | query | | _подтвердить_ |

**Коды ответов/ошибок** (из хендлера): `403`, `409` (+ `200`) — _уточнить причины вручную_

Запись — нужен токен со scope `read_write` (см. [Конвенции](../../../shared/conventions.md#conventions)). Эндпоинт под `requireAuth`: нужен авторизованный владелец токена, гостю недоступно. Вызов идёт под его ролью.

Тела у запроса нет. Управляющий параметр — в query-строке:

| Параметр | Где | Обяз. | Назначение |
|---|---|---|---|
| `restore_space` | query | нет | `1` (или `true`) — заодно восстановить родительский спейс, если он тоже в корзине |

Если родительский спейс лежит в корзине, а `restore_space` не передан, запрос завершится `409 SPACE_IN_TRASH` — в теле придут `space_id` и `space_name`, чтобы можно было показать подтверждение и повторить запрос с `restore_space=1`.

**Пример запроса:**

```bash
curl -X POST "https://specbuilder.vnimanie.ai/api/projects/a1b2c3d4-.../restore?restore_space=1" \
  -H "Authorization: Bearer tak_..."
```

**Ответ `200`:**

```json
{ "id": "a1b2c3d4-...", "title": "Сервис аналитики продаж", "deleted_at": null }
```

Если PG-функция не вернула тело, ответ — `{ "ok": true }`. Cookie-клиент (браузер) всегда получает JSON; Markdown-зеркало отдаётся только токену с `Accept: text/markdown` (`server/agent/negotiate.js`).

**Коды ошибок:** [`409 SPACE_IN_TRASH`](../../../shared/errors.md#errors) — родительский спейс в корзине, нужен `restore_space=1` (тело: `space_id`, `space_name`); `403` — нет прав на восстановление этого проекта. Подробнее — [Ошибки](../../../shared/errors.md#errors).

<!-- gen:start:related -->
## Связанные
- Экраны: [Корзина](../screens/trash.md#projects-screen-trash)
- [Конвенции](../../../shared/conventions.md#conventions) · [Роли](../../../shared/roles.md#roles) · [Ошибки](../../../shared/errors.md#errors) · [Глоссарий](../../../shared/glossary.md#glossary)
<!-- gen:end:related -->

---

Human view: https://docs.vnimanie.ai/specbuilder/v1/domains/projects/api/restore-project/