# Анатомия первого запроса

Курс: Claude API для разработчиков — https://zero2claude.ru/learn/api
Канонический URL: https://zero2claude.ru/learn/api/0-3-anatomiya-zaprosa

Тело запроса к /v1/messages — это model, max_tokens и messages плюс необязательный system. Что значит каждое поле и что вернёт сервер.

## Три обязательных поля

Тело запроса — это JSON с тремя обязательными полями:

```
{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "messages": [
    {"role": "user", "content": "Сделай вежливый ответ клиенту: где мой заказ?"}
  ]
}
```

- **`model`** — какую модель звать (точная строка, без выдуманных дат — об этом отдельный урок).
- **`max_tokens`** — потолок длины ответа в токенах. Поле **обязательное**. Поставишь слишком мало — ответ оборвётся на полуслове.
- **`messages`** — список сообщений диалога. Каждое — объект с `role` (`user` или `assistant`) и `content` (текст).

## Необязательный system

Есть ещё `system` — это инструкция верхнего уровня, которая задаёт роль и правила поведения модели. Она лежит **рядом** с `messages`, а не внутри них:

```
{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "system": "Ты — оператор поддержки интернет-магазина. Отвечай кратко и вежливо.",
  "messages": [
    {"role": "user", "content": "Где мой заказ №1542?"}
  ]
}
```

`system` — это отдельное поле верхнего уровня, а не сообщение с `role: "system"` внутри `messages`. Не путай: роли в `messages` — только `user` и `assistant`.

## Что вернёт сервер

По такому запросу сервер пришлёт JSON с ответом ассистента: текст внутри массива `content`, причину остановки `stop_reason` и счётчики токенов `usage`. Разберём ответ детально в следующем уроке.

Для обычных ответов `max_tokens` ~16000 — нормальный потолок. При стриминге больших ответов берут до ~64000. Главное — не лишать модель места: ответ молча обрежется по этому лимиту.
