---
id: design-doc-list-block-artifacts
title: "GET /api/projects/:id/doc-content/:nodeId/artifacts — Артефакты блока"
domain: design-doc
kind: api-method
http: "GET /api/projects/:id/doc-content/:nodeId/artifacts"
---

# GET /api/projects/:id/doc-content/:nodeId/artifacts — Артефакты блока {#design-doc-list-block-artifacts}

## Сводка

| Поле | Значение |
|---|---|
| **HTTP** | `GET /api/projects/:id/doc-content/:nodeId/artifacts` |
| **Auth** | `optionalAuth, requireProjectAccess` — гость + авторизованный, доступ к проекту (read/write) |
| **Scope токена** | `read` |
| **PG-функции** | `api.get_all_artifact_doc_content` |
| **Таблицы** | `artifact_doc_content` |
| **SRM** | SRM-208 |
| **RP (права)** | RP-040, RP-041 |
| **Файл роута** | `server/routes/projects.js` |
| **Статус** | done |

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

_аргументов не обнаружено (подтвердить вручную по `server/routes/projects.js`)_

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

Чтение — токен со scope `read` (см. [Конвенции](../../../shared/conventions.md#conventions)). Доступ к проекту проверяется через `requireProjectAccess`.

**Путь-параметры:**

| Параметр | Назначение |
|---|---|
| `:id` | UUID проекта |
| `:nodeId` | id блока (ноды), чьи артефакты перечисляем |

Тела запроса нет.

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

```bash
curl https://specbuilder.vnimanie.ai/api/projects/{id}/doc-content/{nodeId}/artifacts \
  -H "Authorization: Bearer tak_..."
```

**Ответ `200`** — массив артефактов блока в порядке отображения (включая ещё не заполненные):

```json
[
  {
    "content_item_id": 51,
    "title": "Модель данных",
    "owner_role": "data-engineer",
    "description": "Схема таблиц и связей",
    "content": "## Таблицы\n\n- events\n- aggregates",
    "generated_by": "llm_generate",
    "version": 2,
    "updated_at": "2026-06-20T11:04:00Z"
  },
  {
    "content_item_id": 52,
    "title": "API-контракт",
    "owner_role": "backend",
    "description": "Эндпоинты сервиса",
    "content": "",
    "generated_by": null,
    "version": 0,
    "updated_at": null
  }
]
```

`content_item_id` — id артефакта, который дальше подставляется в [изменение](update-artifact.md#design-doc-update-artifact) и [генерацию](generate-artifact.md#design-doc-generate-artifact) (путь-параметр `:contentItemId`). Пустая заготовка приходит с `content: ""`, `version: 0` и `generated_by: null` — это нормально, артефакт ещё не наполняли. `owner_role` — ключ специальности-владельца.

**Формат.** Метод отдаёт только JSON. Markdown-зеркала и `ETag`/`304` у per-block списка нет. Если нужен Markdown по артефактам, его отдаёт проектный обзорный эндпоинт `GET /api/projects/:id/artifact-content` (с `Accept: text/markdown`), но он собирает артефакты по всему проекту, а не по одному блоку. Блок affordances здесь не строится (`server/agent/affordances.js`).

<!-- gen:start:related -->
## Связанные
- [Конвенции](../../../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/design-doc/api/list-block-artifacts/