Куда и с чем стучимся
Любой запрос идёт на 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:
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.