> ## Documentation Index
> Fetch the complete documentation index at: https://docs.laozhang.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Claude API в формате Anthropic Messages: /v1/messages

> Как вызывать LaoZhang API в формате Anthropic Messages: заголовки /v1/messages, примеры cURL и Python SDK, блоки content, потоковая передача, инструменты и ошибки.

Протокол Claude — это формат Messages API от Anthropic. SDK Anthropic и Claude Code подключаются к LaoZhang API после замены базового URL на наш и подстановки вашего API-ключа.

| Параметр | Значение |
| - | - |
| Эндпоинт | `POST https://api.laozhang.ai/v1/messages` |
| Заголовки | API-ключ в `Authorization: Bearer` и `anthropic-version: 2023-06-01` |
| Обязательные поля тела | `model`, `messages` и `max_tokens` |
| Ответ | Типизированные блоки в `content[]` |
| Базовый URL для SDK | Задайте `base_url` в Anthropic Python SDK равным `https://api.laozhang.ai` |
| Модель в примерах | `glm-5.2` |

```text theme={null}
POST https://api.laozhang.ai/v1/messages
```

Если приложение использует OpenAI SDK, воспользуйтесь [протоколом OpenAI](https://docs.laozhang.ai/ru/api-reference/chat-completions.md): перечисленные ниже модели принимают оба формата. Структуры запросов и ответов у форматов разные, поэтому для каждого клиента выбирайте один из них.

## Выбор модели

Берите модель, у которой в столбце **Endpoints** [каталога моделей](https://docs.laozhang.ai/ru/models.md) указан Anthropic Messages. В публичном прайс-листе на 18 октября 2026 года это, в частности:

* Модели Claude: 11 моделей, например `claude-sonnet-5-5` и `claude-opus-5-5`, доступных в группе токенов `default`. Полный список и цены — в [разделе Anthropic каталога](https://docs.laozhang.ai/ru/models.md).
* `glm-5.2`, которая используется в примерах на этой странице. Она доступна в группе токенов `default` и через этот протокол ведёт себя почти так же, как официальный Messages API.
* `deepseek-v4-pro`
* `deepseek-v4-flash`

> [!NOTE]
>
> **Модели Claude снова доступны с 18 октября 2026 года.** Перед переключением прочитайте раздел «Ограничения моделей Claude», а подробности смотрите в [объявлении](https://docs.laozhang.ai/en/announcements/claude-models-2026-10.md).

Копируйте ID моделей точно из каталога или [страницы цен в консоли](https://api.laozhang.ai/account/pricing), а не составляйте их из названия продукта или ID в Bedrock или Vertex AI.

### Ограничения моделей Claude

Модели Claude поддерживают потоковую передачу, использование инструментов, адаптивное мышление, кэширование промптов со временем жизни 5 минут и 1 час, а также ввод изображений. Несколько вещей работают иначе, чем в собственном API Anthropic:

* **Длина вывода:** каждый ответ ограничен 32 768 токенами. Если `max_tokens` больше, значение уменьшается до этого предела.
* **PDF и документы:** блоки содержимого `document` не поддерживаются. Сначала извлеките текст и передайте его в блоке `text`.
* **Серверные инструменты:** серверные инструменты Anthropic, такие как `web_search`, `web_fetch` и `code_execution`, не поддерживаются, а запросы с их объявлением возвращают 400.
* **Другие эндпоинты:** `/v1/messages/count_tokens`, Message Batches и Files API недоступны.
* **Стоп-последовательности:** при срабатывании стоп-последовательности `stop_reason` равен `end_turn`, а `stop_sequence` — `null`.
* **Длинные промпты Haiku:** если промпт `claude-haiku-5-5` превышает 100 000 токенов (с учётом чтения и записи кэша), весь запрос оплачивается по тарифу длинного контекста, указанному в ступенчатых ценах каталога.

## Отправка сообщения

Создайте API-ключ в разделе [Управление токенами](https://api.laozhang.ai/token), выбрав режим оплаты «сначала по использованию» (в консоли — 按量优先, рекомендуется) или «оплата по использованию» (按量计费), и сохраните его в переменной окружения:

```bash theme={null}
export LAOZHANG_API_KEY="YOUR_LAOZHANG_API_KEY"
```

> [tab] cURL
>
> ```bash theme={null}
> curl --fail-with-body --max-time 120 \
>   "https://api.laozhang.ai/v1/messages" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "anthropic-version: 2023-06-01" \
>   -H "content-type: application/json" \
>   -d '{
>     "model": "glm-5.2",
>     "max_tokens": 1024,
>     "system": "Ты лаконичный ассистент.",
>     "messages": [
>       {"role": "user", "content": "Ответь только одним словом: connected"}
>     ]
>   }'
> ```

> [tab] Python
>
> Установите SDK командой `python -m pip install anthropic`.
>
> ```python theme={null}
> import os
> from anthropic import Anthropic
>
> client = Anthropic(
>     api_key=os.environ["LAOZHANG_API_KEY"],
>     base_url="https://api.laozhang.ai",
>     timeout=120.0,
>     max_retries=0,
> )
> message = client.messages.create(
>     model="glm-5.2",
>     max_tokens=1024,
>     system="Ты лаконичный ассистент.",
>     messages=[{"role": "user", "content": "Ответь только одним словом: connected"}],
> )
> for block in message.content:
>     if block.type == "text":
>         print(block.text)
> ```

В ответ ожидается `connected`.

SDK сам отправляет API-ключ и заголовок `anthropic-version` и добавляет `/v1/messages` к базовому URL, поэтому `/v1` в `base_url` не указывайте.

Системные инструкции передаются в поле `system` верхнего уровня, а не сообщением с ролью `system`.

В `messages` чередуются реплики `user` и `assistant`; чтобы продолжить диалог, отправьте предыдущие реплики и следом новое сообщение `user`.

## Чтение ответа

Сокращённый ответ показывает поля, которые нужно читать:

```json theme={null}
{
  "type": "message",
  "role": "assistant",
  "model": "glm-5.2",
  "content": [
    {"type": "text", "text": "connected"}
  ],
  "stop_reason": "end_turn",
  "usage": {"input_tokens": 21, "output_tokens": 4}
}
```

`content` — это список блоков, и в одном ответе их может быть несколько. Читайте каждый блок по его `type`, а не считайте, что `content[0]` — это текст:

| Тип блока | Что содержит | Что делать |
| - | - | - |
| `text` | Ответ в поле `text` | Показать или сохранить. |
| `thinking` | Рассуждения модели в поле `thinking` | Не включать в отображаемый ответ. |
| `tool_use` | Вызов инструмента с `id`, `name` и `input` | Выполнить инструмент и вернуть `tool_result`. |

`stop_reason` объясняет, почему ответ закончился:

* `end_turn`: ответ завершён.
* `max_tokens`: ответ оборван лимитом вывода.
* `tool_use`: модель ждёт результат инструмента.

Число токенов указано в `usage`, а сумма списания по каждому запросу — в [журнале вызовов](https://docs.laozhang.ai/en/faq/call-logs.md).

## Потоковый ответ

Добавьте `"stream": true`, чтобы получать ответ как server-sent events.

Текст приходит в событиях `content_block_delta`, у которых `delta.type` равен `text_delta`, а поток заканчивается событием `message_stop`.

> [tab] cURL
>
> Флаг `-N` отключает буферизацию вывода cURL, так что каждое событие печатается сразу после получения.
>
> ```bash theme={null}
> curl --fail-with-body -N --max-time 300 \
>   "https://api.laozhang.ai/v1/messages" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "anthropic-version: 2023-06-01" \
>   -H "content-type: application/json" \
>   -d '{
>     "model": "glm-5.2",
>     "max_tokens": 1024,
>     "stream": true,
>     "messages": [
>       {"role": "user", "content": "Дай три коротких совета по именованию переменных."}
>     ]
>   }'
> ```

> [tab] Python
>
> ```python theme={null}
> import os
> from anthropic import Anthropic
>
> client = Anthropic(
>     api_key=os.environ["LAOZHANG_API_KEY"],
>     base_url="https://api.laozhang.ai",
>     timeout=300.0,
>     max_retries=0,
> )
> with client.messages.stream(
>     model="glm-5.2",
>     max_tokens=1024,
>     messages=[{"role": "user", "content": "Дай три коротких совета по именованию переменных."}],
> ) as stream:
>     for text in stream.text_stream:
>         print(text, end="", flush=True)
> print()
> ```

Потоковый ответ идёт в такой последовательности (сокращено до нужных полей):

```text theme={null}
event: message_start
data: {"type":"message_start","message":{"type":"message","role":"assistant","content":[]}}

event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"1. Name variables"}}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"}}

event: message_stop
data: {"type":"message_stop"}
```

Как читать поток:

* Склеивайте фрагменты `text_delta` для каждого `index` блока, чтобы собрать ответ.
* Рассуждения и ввод инструментов приходят в дельтах других типов, а в потоке бывают и события `ping`, поэтому пропускайте типы событий, которые не обрабатываете.
* В Python `text_stream` отдаёт только текст и завершается после `message_stop`.
* Если соединение закрылось до `message_stop`, считайте ответ неполным.

## Использование инструментов

Инструменты, которые вы описываете в массиве `tools`, выполняются в вашем приложении, а не в LaoZhang API. Когда ответ завершается с `stop_reason: "tool_use"`:

1. Прочитайте `id`, `name` и `input` каждого блока `tool_use`.
2. Выполните соответствующую функцию в своём коде.
3. Отправьте следующий запрос: реплику ассистента без изменений, а за ней реплику `user` с одним блоком `tool_result` на каждый вызов. `tool_use_id` в каждом из них должен совпадать с `id` вызова, на который он отвечает.

Массив `messages` для такого повторного запроса выглядит так:

```json theme={null}
[
  {"role": "user", "content": "Какая погода в Париже?"},
  {"role": "assistant", "content": [
    {"type": "tool_use", "id": "toolu_01", "name": "get_weather", "input": {"city": "Paris"}}
  ]},
  {"role": "user", "content": [
    {"type": "tool_result", "tool_use_id": "toolu_01", "content": "18°C, облачно"}
  ]}
]
```

Этот цикл проводит весь обмен через Python SDK: он объявляет функцию погоды, выполняет её локально по запросу модели и возвращает результат, пока модель не ответит текстом:

```python theme={null}
import os
from anthropic import Anthropic

client = Anthropic(
    api_key=os.environ["LAOZHANG_API_KEY"],
    base_url="https://api.laozhang.ai",
    timeout=120.0,
    max_retries=0,
)
tools = [{
    "name": "get_weather",
    "description": "Получить текущую погоду в городе",
    "input_schema": {
        "type": "object",
        "properties": {"city": {"type": "string", "description": "Название города"}},
        "required": ["city"],
    },
}]


def get_weather(city):
    # Замените своей логикой, например вызовом сервиса погоды
    return f"{city}: облачно, 18°C"


messages = [{"role": "user", "content": "Какая погода в Париже?"}]
for _ in range(5):
    message = client.messages.create(
        model="glm-5.2",
        max_tokens=1024,
        tools=tools,
        messages=messages,
    )
    tool_uses = [block for block in message.content if block.type == "tool_use"]
    if not tool_uses:
        break
    messages.append({"role": "assistant", "content": message.content})
    results = []
    for block in tool_uses:
        if block.name == "get_weather":
            output = get_weather(**block.input)
        else:
            output = f"Неизвестный инструмент: {block.name}"
        results.append({
            "type": "tool_result",
            "tool_use_id": block.id,
            "content": output,
        })
    messages.append({"role": "user", "content": results})

print("".join(block.text for block in message.content if block.type == "text"))
```

Передавайте те же `tools` в каждом повторном запросе и сохраняйте реплику ассистента ровно в том виде, в каком она пришла.

Серверные инструменты Anthropic, например типы `web_search_*` и `code_execution_*`, шлюз не выполняет. Модели Claude отклоняют запрос с их объявлением ошибкой 400. Остальные модели возвращают вызов как обычный блок `tool_use`, не выполняя поиск и никакой код. Обрабатывайте такие вызовы в своём приложении, как клиентский инструмент, или не включайте эти инструменты в запрос.

## Использование с Claude Code

Claude Code работает в формате Anthropic Messages:

* Задайте для `ANTHROPIC_BASE_URL` значение `https://api.laozhang.ai` (корень хоста, без `/v1`).
* Выберите модель, у которой в **Endpoints** указан Anthropic Messages, например `claude-sonnet-5-5` или `glm-5.2`. Обе доступны в группе токенов `default`.
* Используйте токен группы `default` с режимом оплаты «сначала по использованию». Токены, ранее созданные в группе `Claude Code` (раньше claude\_code), продолжают работать; для новых токенов эта группа не нужна.

Полный `~/.claude/settings.json` приведён в материале [настройка Claude Code с LaoZhang API](https://docs.laozhang.ai/en/scenarios/programming/claude-code.md). Если Claude Code возвращает 400 ValidationException, смотрите [исправление ошибки 400 ValidationException в Claude Code](https://docs.laozhang.ai/en/faq/claude-code-aws-400-validation-error.md).

## Устранение неполадок

* **401:** проверьте заголовок `Authorization: Bearer` и используйте API-ключ для моделей из раздела [Управление токенами](https://api.laozhang.ai/token), а не AccessToken аккаунта.
* **400 с упоминанием `max_tokens`:** добавьте `max_tokens`. В отличие от Chat Completions, Messages требует это поле.
* **В URL запроса есть `/v1/v1/messages`:** базовый URL SDK заканчивается на `/v1`. Задайте `https://api.laozhang.ai`.
* **404 или модель не найдена:** проверьте точный ID модели и убедитесь по [каталогу моделей](https://docs.laozhang.ai/ru/models.md), что для группы вашего токена указан Anthropic Messages.
* **Claude Code возвращает `400 ValidationException` или `Extra inputs are not permitted`:** следуйте материалу [исправление ошибки 400 ValidationException в Claude Code](https://docs.laozhang.ai/en/faq/claude-code-aws-400-validation-error.md).
* **400 после объявления `web_search` или другого серверного инструмента у модели Claude:** уберите серверный инструмент из `tools`. Выполняйте поиск в приложении и возвращайте результаты блоками `tool_result`.
* **529 с сообщением о занятости upstream:** в часы пик не хватает мощности. Повторите запрос после короткой паузы; SDK Anthropic по умолчанию сами повторяют 529.

При таймауте или ошибке 5xx проверьте [журнал вызовов](https://api.laozhang.ai/log), прежде чем отправлять запрос снова. В примерах на Python автоматические повторы отключены, чтобы момент повтора выбирало ваше приложение.

## Связанные материалы

* [Справочник Anthropic Messages API](https://platform.claude.com/docs/en/api/messages/create)
* [Справочник Anthropic по потоковой передаче](https://platform.claude.com/docs/en/build-with-claude/streaming)
* [Обзор использования инструментов в Anthropic](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview)
* [Обзор моделей Anthropic](https://platform.claude.com/docs/en/models/overview)
* [Протокол OpenAI: Chat Completions](https://docs.laozhang.ai/ru/api-reference/chat-completions.md)
* [Доступность моделей и права доступа](https://docs.laozhang.ai/en/faq/model-availability.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.