Где получить ключ Claude API
Создайте ключ в кабинете CLODEx и проверьте доступные ему модели через /v1/models. Сохраните секрет в CLODEX_API_KEY, а выбранный ID — в CLODEX_MODEL. Публичная карточка Claude Fable не означает, что любой ключ получит к нему доступ.
claude-fable-5 и claude-fable-5.1 — разные ID. Не заменяйте точку дефисом и не переносите настройки одной версии на другую без проверки. Для IDE и терминального агента используйте отдельную инструкцию Claude Code: успешный текстовый запрос сам по себе не проверяет работу tools.
Адрес и обязательные поля
Роль system задаётся отдельным верхнеуровневым полем Messages, а не сообщением с role=system. В минимальном примере ниже системная инструкция не нужна. Не переносите параметры Chat Completions в Messages по совпадению названий.
| Пункт | Значение | Частая ошибка |
|---|---|---|
| Raw HTTP | https://clodex.xyz/v1/messages | Вызов /chat/completions с телом Messages. |
| Anthropic SDK base URL | https://clodex.xyz | Дублирование /v1: SDK добавляет его сам. |
| Заголовки | x-api-key; anthropic-version: 2023-06-01; content-type: application/json | Ключ в теле запроса вместо заголовка. |
| Тело | model, max_tokens, messages | Пропущенный max_tokens или ID, которого нет у ключа. |
Один текстовый запрос на Python
Нужен Python 3; пример использует стандартную библиотеку, без установки SDK. CLODEX_API_KEY и CLODEX_MODEL должны быть заданы в защищённом окружении. Запуск выполняет платную генерацию. max_tokens=128 ограничивает выход, но не делает запрос бесплатным.
Если сервер вернёт HTTP-ошибку, urlopen завершится исключением. Пример не повторяет запрос автоматически. При таймауте сначала проверьте расход и состояние запроса, а не запускайте ту же генерацию снова.
import json
import os
from urllib.request import Request, urlopen
payload = {
"model": os.environ["CLODEX_MODEL"],
"max_tokens": 128,
"stream": False,
"messages": [{"role": "user", "content": "Reply with one word: ready"}],
}
request = Request(
"https://clodex.xyz/v1/messages",
data=json.dumps(payload).encode("utf-8"),
headers={
"content-type": "application/json",
"x-api-key": os.environ["CLODEX_API_KEY"],
"anthropic-version": "2023-06-01",
},
method="POST",
)
with urlopen(request, timeout=60) as response:
result = json.load(response)
if result.get("stop_reason") != "end_turn":
raise RuntimeError(f"Incomplete text turn: {result.get('stop_reason')}")
blocks = result.get("content", [])
if not blocks or any(block.get("type") != "text" for block in blocks):
raise RuntimeError("Expected text blocks only")
print("\n".join(block["text"] for block in blocks))
print(result.get("usage"))
Как разбирать ответ с несколькими блоками
content — массив блоков. Текст может находиться в нескольких блоках type=text; пример объединяет их по порядку. Он намеренно отвергает другой тип блока, потому что в этой пробе инструменты не запрашивались.
end_turn означает завершение хода. max_tokens означает, что лимит выхода достигнут: не считайте такой ответ полным. tool_use требует отдельного обработчика инструментов, проверки аргументов и разрешения на действие; выполнять команду только потому, что её вернула модель, нельзя.
Для streaming нужен обработчик событий Messages. Закрытие TCP-соединения не заменяет ожидаемое завершающее событие message_stop. Проверяйте поток отдельно после обычного запроса.
Публичные цены и единицы расчёта
Сверьте тариф точного ID перед отправкой и фактический расход после неё. Не выводите цену Fable 5 из цены Fable 5.1 и не путайте лимит max_tokens с числом реально использованных токенов.
Доступ через CLODEx не является подпиской на сайт Anthropic. Ключ работает с адресом CLODEx; совместимость протокола не подтверждает все beta-функции, лимиты контекста или официальное партнёрство.
Актуальные тарифы · Справочник расхода · Разобрать ошибку Messages
Документация и проверка примера
Адреса и настройки подключения сверены с документацией CLODEx. Примеры предназначены для указанного протокола; они не являются журналом выполненных запросов и не обещают одинаковые функции у всех моделей. Рабочий запрос на генерацию может списать средства.
Частые вопросы
Почему нельзя читать choices[0] в ответе Claude?
В Messages ответ находится в content blocks. choices относится к Chat Completions; смешение обработчиков приводит к ошибке даже при HTTP 200.
Работает ли любой Claude alias из чужой инструкции?
Нет такой гарантии. Используйте точный ID, доступный ключу CLODEx, и поддерживаемый им маршрут.
Что приложить к обращению в поддержку?
Время, HTTP-статус, ID модели, stop_reason или текст ошибки и безопасный ID запроса. Удалите ключ и личные данные; не отправляйте полный заголовок x-api-key.