---
id: spaces-get-space
title: "GET /api/spaces/:spaceId — Получить спейс"
domain: spaces
kind: api-method
http: "GET /api/spaces/:spaceId"
---

# GET /api/spaces/:spaceId — Получить спейс {#spaces-get-space}

## Сводка

| Поле | Значение |
|---|---|
| **HTTP** | `GET /api/spaces/:spaceId` |
| **Auth** | `requireSpaceAccess` — requireSpaceAccess |
| **Scope токена** | `read` |
| **PG-функции** | `api.get_space` |
| **Таблицы** | `space` |
| **SRM** | SRM-169 |
| **RP (права)** | — |
| **Файл роута** | `server/routes/spaces.js` |
| **Статус** | done |

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

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

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

Чтение — токен со scope `read`. Маршрут защищён `requireSpaceAccess`: токен увидит спейс, только если его владелец имеет доступ (участник / наблюдатель / org_admin / владелец личного), иначе `403`. Гостевой спейс доступен и без привязки.

**Путь:**

| Параметр | Где | Назначение |
|---|---|---|
| `id` | path | UUID спейса |

Это **единственный метод домена с Markdown-зеркалом**: хендлер отдаёт ресурс через `sendResource` (`server/agent/negotiate.js`), поэтому работает согласование формата, `ETag` и блок `## Actions`.

**Запрос JSON (по умолчанию):**

```bash
curl https://specbuilder.vnimanie.ai/api/spaces/f9e8d7c6-1234-4abc-9def-0123456789ab \
  -H "Authorization: Bearer tak_..."
```

**Ответ `200` (JSON):**

```json
{
  "id": "f9e8d7c6-1234-4abc-9def-0123456789ab",
  "type": "team",
  "org_id": "0011aabb-...",
  "org_name": "ООО «Будущее»",
  "org_slug": "buduschee",
  "collection_id": "0660b640-86b0-42c5-8e22-93973848bb56",
  "collection_name": "ML/AI Development",
  "collection_code": "ml-ai-dev",
  "owner_id": null,
  "name": "Маркетинг",
  "slug": "marketing",
  "description": "Спейс отдела маркетинга",
  "created_at": "2026-05-01T10:00:00.000Z",
  "updated_at": "2026-06-12T08:30:00.000Z",
  "specialty_count": 9,
  "block_count": 26,
  "layer_count": 6,
  "member_count": 5,
  "project_count": 7
}
```

**Запрос Markdown-зеркала** (`Accept: text/markdown` или `?format=md`):

```bash
curl https://specbuilder.vnimanie.ai/api/spaces/f9e8d7c6-1234-4abc-9def-0123456789ab \
  -H "Authorization: Bearer tak_..." \
  -H "Accept: text/markdown"
```

```text
# space f9e8d7c6-1234-4abc-9def-0123456789ab
version: 2026-06-12T08:30:00.000Z
updated: 2026-06-12T08:30:00.000Z

name: Маркетинг
type: team
collection: ML/AI Development

## Actions
- GET /api/spaces/f9e8d7c6-1234-4abc-9def-0123456789ab — read-space — returns this space overlay
```

Зеркало выводит ровно три поля (`name`, `type`, `collection`) — поле-билдер в хендлере (`fields: (j) => …`) берёт их из того же JSON, что и UI. Блок `## Actions` для read-токена содержит только навигацию: один read-аффорданс `read-space` (`server/agent/affordances.js`).

**ETag/304.** В ответе есть `ETag` (на базе `updated_at`). Повтор с `If-None-Match: "<etag>"` → `304 Not Modified` без тела — спейс не менялся, токены экономятся.

<!-- gen:start:related -->
## Связанные
- Экраны: [Настройки](../screens/settings.md#spaces-screen-settings)
- [Конвенции](../../../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/spaces/api/get-space/