# Ключ, эндпоинт и заголовки

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

Минимальный запрос к /v1/messages: обязательные заголовки x-api-key и anthropic-version. Ключ всегда живёт в переменной окружения, а не в коде.

## Куда и с чем стучимся

Любой запрос идёт на `POST https://api.anthropic.com/v1/messages` и несёт три обязательных заголовка:

- `x-api-key` — твой API-ключ (не `Authorization: Bearer`, а именно `x-api-key`).
- `anthropic-version` — версия API, всегда строка `2023-06-01`.
- `content-type` — `application/json`.

Вот тот же запрос в виде сырого [`curl`](/commands/curl):

```
curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-opus-4-8",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Привет!"}]
  }'
```

## Ключ — в переменной окружения

Обрати внимание: в команде стоит `$ANTHROPIC_API_KEY`, а не сам ключ. Это не каприз — это правило безопасности. Ключ нельзя писать прямо в коде или коммитить в git: утёкший ключ — это деньги с твоего счёта в чужих руках.

В Python это выглядит так — SDK сам читает ключ из окружения:

```
from anthropic import Anthropic

client = Anthropic()  # берёт ключ из переменной ANTHROPIC_API_KEY
```

Если в ответ прилетает `401` — это почти всегда проблема ключа: он не задан, неверный или отозван. `401` бесполезно ретраить, пока не починишь ключ.

Дальше соберём тело запроса детальнее: что такое `model`, `max_tokens` и `messages`.
