---
id: auth-set-agent-context
title: "PATCH /api/agent/context — Запомнить контекст (последний проект/вид)"
domain: auth
kind: api-method
http: "PATCH /api/agent/context"
---

# PATCH /api/agent/context — Запомнить контекст (последний проект/вид) {#auth-set-agent-context}

## Сводка

| Поле | Значение |
|---|---|
| **HTTP** | `PATCH /api/agent/context` |
| **Auth** | `requireAuth` — только авторизованный |
| **Scope токена** | `read_write` |
| **PG-функции** | `api.set_user_context`, `api.get_user_active_org`, `api.get_agent_context` |
| **Таблицы** | `user_context`, `user_state`, `project` |
| **SRM** | SRM-354 |
| **RP (права)** | — |
| **Файл роута** | `server/routes/agent.js` |
| **Статус** | done |

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

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

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

Запись — нужен токен со scope `read_write` (см. [Конвенции](../../../shared/conventions.md#conventions)). Self-scope: метод пишет контекст только владельца токена (или cookie-сессии). Без авторизации — `401`. Риск операции — `SAFE`: подтверждение (`confirm`) не требуется.

Обычно вызывается в конце шага, чтобы следующая сессия могла продолжить с того же места (парно к [чтению контекста](agent-context.md#auth-agent-context)).

**Тело запроса (JSON, все поля необязательны):**

| Поле | Тип | Обяз. | Назначение |
|---|---|---|---|
| `org_id` | uuid | нет | Организация, к которой относится контекст. По умолчанию — ваша активная организация; если её нет — `400` |
| `last_project_id` | uuid | нет | Id последнего проекта. Не передан → прежнее значение сохраняется (частичный апдейт) |
| `last_view` | string | нет | Метка последнего вида (например `graph`). Не передан → прежнее значение сохраняется |

Апдейт частичный: непереданные поля не затираются (`COALESCE`-preserve). Если у вас ещё нет активной организации и `org_id` не задан — `400` (без организации контекст некуда записать).

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

```bash
curl -X PATCH https://specbuilder.vnimanie.ai/api/agent/context \
  -H "Authorization: Bearer tak_..." \
  -H "Content-Type: application/json" \
  -H "Accept: text/markdown" \
  -d '{"last_project_id":"a1b2c3d4-1111-4aaa-9bbb-000000000001","last_view":"graph"}'
```

**Ответ `200`** — свежий контекст (тот же формат, что у [чтения](agent-context.md#auth-agent-context)): токен с `Accept: text/markdown` получает Markdown-зеркало, иначе JSON. `active_org` и `last_project` — объекты с `id`/`name`; у `last_project` дополнительно `is_shared`, `space_is_guest`, `collection_is_public` (exposure-факты). Удалённый (в корзине) проект в ответ не попадёт — `last_project` вернётся `null`.

```json
{
  "active_org": { "id": "a1b2c3d4-0000-4000-9000-000000000000", "name": "ООО «Будущее»" },
  "last_project": {
    "id": "a1b2c3d4-1111-4aaa-9bbb-000000000001",
    "name": "Мониторинг полей",
    "is_shared": false,
    "space_is_guest": false,
    "collection_is_public": false
  },
  "last_view": "graph"
}
```

<!-- 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/auth/api/set-agent-context/