# Drift · персональный агент через API — neuraldeep.ru API

> Раздел машиночитаемой справки. Все разделы: https://neuraldeep.ru/llms.txt · всё одним файлом: https://neuraldeep.ru/llms-full.txt

Base URL: `https://drift.neuraldeep.ru/v1`
Auth: `Authorization: Bearer dft_...`

**Drift** — наш self-hosted AI-агент с памятью, sandbox'ом, скиллами и Google/Telegram-интеграциями. Обычно ты с ним общаешься на [neuraldeep.ru/driftagent](https://neuraldeep.ru/driftagent) или через Telegram-бота. Но можно ходить и через публичный API — из curl, Python-SDK, Cursor/Cline/Continue, своих ботов или CI.

**Доступ:** только при оплаченном Drift (Starter / Pro). Trial и admin-grant — нет.
**Лимиты:** наследуются от тарифа Hub-аккаунта (RPM / parallel / session / week — см. `limits` ниже).
**Source-метка:** каждый запрос через API стампится как `source=api` — видно в логах кабинета и админки (web / api / telegram / scheduler).

#### 1 · Выпустить токен

Открой [Dashboard](/app) → секция «🤖 Drift API tokens» → «+ создать токен». Имя — для своих заметок («cursor», «my-bot», etc.). Plaintext значение (`dft_*`) показывается **один раз** при создании — скопируй сразу. Лимит 5 активных токенов на юзера. Отозвать можно в любой момент кнопкой «отозвать».

#### 2 · Отправить сообщение

OpenAI-совместимый `/v1/chat/completions`. Внутри запускается ReAct-агент с тулзами (sandbox shell, web-search, Google, etc.) — ответ может прилететь не сразу, агент может крутить несколько итераций. Stream через `stream: true` рекомендуется для длинных задач.

```bash
curl https://drift.neuraldeep.ru/v1/chat/completions \
  -H "Authorization: Bearer dft_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-oss-120b",
    "messages": [
      {"role": "user", "content": "Что у меня запланировано на завтра?"}
    ]
  }'
```

```bash
curl -N https://drift.neuraldeep.ru/v1/chat/completions \
  -H "Authorization: Bearer dft_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-oss-120b",
    "messages": [{"role":"user","content":"Прочитай мой MEMORY.md и пересскажи кратко"}],
    "stream": true
  }'

# event-stream возвращает:
#   data: {"choices":[{"delta":{"content":"..."}}],...}
#   data: [DONE]
```

```python
from openai import OpenAI

# base_url указывает на Drift, токен — личный dft_*
client = OpenAI(
    api_key="dft_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    base_url="https://drift.neuraldeep.ru/v1",
)

# Non-stream
r = client.chat.completions.create(
    model="gpt-oss-120b",  # или qwen3.6-35b-a3b — две основные LLM Hub'а
    messages=[{"role": "user", "content": "Запиши в память: проект Y стартует 1 июня"}],
)
print(r.choices[0].message.content)

# Stream
stream = client.chat.completions.create(
    model="gpt-oss-120b",
    messages=[{"role": "user", "content": "Покажи список моих файлов и пересскажи MEMORY.md"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
```

> Поле `model` — это какой upstream LLM использовать внутри агента: `gpt-oss-120b` (131k ctx, длинный reasoning, рекомендуется по умолчанию) или `qwen3.6-35b-a3b` (256k ctx, нативные tool-calls). Если не указать — fallback на gpt-oss-120b.
> **Не передавай весь history** в `messages` — Drift сам поднимает память из своей БД, иначе будет дубль. Шли только последний user-промпт.

#### 3 · Управлять чатами (conversations)

По умолчанию все сообщения идут в один дефолтный чат юзера. Если хочешь разделять контексты (например, рабочий и личный) — создавай chat'ы явно и передавай `conversation_id`.

```bash
# список своих чатов
curl https://drift.neuraldeep.ru/v1/conversations \
  -H "Authorization: Bearer dft_..."

# создать новый
curl -X POST https://drift.neuraldeep.ru/v1/conversations \
  -H "Authorization: Bearer dft_..." \
  -H "Content-Type: application/json" \
  -d '{"title": "Project X — research"}'
# → {"id": 1234, "title": "Project X — research", ...}

# отправить сообщение в конкретный чат
curl -X POST https://drift.neuraldeep.ru/v1/chat/completions \
  -H "Authorization: Bearer dft_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-oss-120b",
    "messages": [{"role":"user","content":"Какой статус по project X?"}],
    "conversation_id": 1234
  }'

# удалить чат
curl -X DELETE https://drift.neuraldeep.ru/v1/conversations/1234 \
  -H "Authorization: Bearer dft_..."
```

#### 4 · Прочитать историю

```bash
curl "https://drift.neuraldeep.ru/v1/history?conversation_id=1234&limit=50" \
  -H "Authorization: Bearer dft_..."
# → {"messages":[{"id":..., "role":"user|assistant", "content":"...", "created_at":..., "source":"api"}, ...]}
```

> Поле `source` в каждом сообщении показывает откуда оно пришло: `web` (neuraldeep.ru/driftagent), `api` (этот endpoint), `telegram` (бот), `scheduler` (фоновая задача по расписанию). Используй его если у тебя смешанные источники и нужно фильтровать.

#### Что НЕ поддерживается

· редактирование/regenerate сообщений (только append) · · branching (forks) · · webhook'и события · · multi-image в одном сообщении (один — да, через `/v1/files/upload`)

> **Свои tools / skills / MCP-серверы** — поддерживается с 28.05.26. См. раздел «🔌 Свои tools, skills, MCP» ниже: можно передавать caller-tools (return-to-caller pattern), inline SKILL.md и подключать remote MCP-серверы прямо в запросе.
