Клодыч Открыть в Telegram

API

Claude API: подключение, SDK и совместимость

Anthropic-совместимый эндпоинт и OpenAI-совместимый эндпоинт поверх тех же моделей Claude. Интеграция — это две правки в уже написанном коде: base_url и ключ.

Endpoints и авторизация

Anthropic-совместимый https://app.claudich.dev/v1/messages
OpenAI-совместимый https://app.claudich.dev/v1/chat/completions

Авторизация: Authorization: Bearer <ваш_api_ключ>. Для прямых HTTP-запросов также поддерживается заголовок x-api-key.

Официальная документация Anthropic API подходит без адаптации: те же поля запроса и формат ответа, меняются только base_url и ключ.

Примеры подключения

curl https://app.claudich.dev/v1/messages \
  -H "x-api-key: ВАШ_КЛЮЧ_CLAUDICH" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Привет!"}]
  }'
from anthropic import Anthropic

client = Anthropic(
    api_key="ВАШ_КЛЮЧ_CLAUDICH",
    base_url="https://app.claudich.dev/v1",
)

message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Привет!"}],
)

print(message.content)
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: "ВАШ_КЛЮЧ_CLAUDICH",
  baseURL: "https://app.claudich.dev/v1",
});

const message = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Привет!" }],
});

console.log(message.content);
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://app.claudich.dev",
    "ANTHROPIC_API_KEY": "",
    "ANTHROPIC_DEFAULT_FABLE_MODEL": "claude-fable-5",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4.5",
    "ANTHROPIC_AUTH_TOKEN": "ВАШ_КЛЮЧ_CLAUDICH",
    "CLAUDE_CODE_SUBAGENT_MODEL": "claude-sonnet-5"
  },
  "model": "claude-sonnet-5"
}
{
  "gateway": {
    "port": 18789,
    "mode": "local",
    "bind": "loopback"
  },
  "models": {
    "mode": "merge",
    "providers": {
      "claudich": {
        "api": "anthropic-messages",
        "baseUrl": "https://app.claudich.dev/v1",
        "apiKey": "ВАШ_КЛЮЧ_CLAUDICH",
        "headers": {
          "x-client-provider": "openclaw"
        },
        "timeoutSeconds": 600,
        "models": [
          { "id": "claude-fable-5", "name": "Claude Fable 5", "input": ["text", "image"] },
          { "id": "claude-sonnet-5", "name": "Claude Sonnet 5", "input": ["text", "image"] },
          { "id": "claude-opus-5", "name": "Claude Opus 5", "input": ["text", "image"] },
          { "id": "claude-opus-5-fast", "name": "Claude Opus 5 Fast", "input": ["text", "image"] },
          { "id": "claude-haiku-4.5", "name": "Claude Haiku 4.5", "input": ["text", "image"] }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": { "primary": "claudich/claude-sonnet-5" }
    }
  }
}

Что поддерживается

Streaming (SSE) есть
Tool calls / function calling есть
system prompt есть
temperature, top_p есть
top_k есть только в Anthropic-эндпоинте — не часть OpenAI API
stop_sequences / stop есть
max_tokens есть выше лимита модели — автоматически ограничивается максимумом
Prompt caching (cache_control) есть только в Anthropic-эндпоинте
Extended thinking есть только в Anthropic-эндпоинте
Изображения / вложения есть
usage (токены, cache read/write) есть

Чего у меня нет

Claudich не полная копия платформ Anthropic или OpenAI. Не поддерживаются:

  • не-Anthropic модели
  • Batch API
  • embeddings
  • assistants API
  • responses API
  • vector stores
  • платформенный Files API (/v1/files)

Некоторые OpenAI-специфичные параметры не влияют на поведение Claude-моделей и игнорируются: logprobs, top_logprobs, seed, n, frequency_penalty, presence_penalty, logit_bias, response_format.

Ошибки

При ошибке Anthropic-эндпоинт возвращает {"type":"error","error":{"type":"...","message":"..."}}, OpenAI-эндпоинт — {"error":{"message":"...","type":"...","code":"...","param":null}}. HTTP-статус в обоих случаях соответствует смыслу ошибки — это то, что проверяют официальные SDK.

КодЗначениеТипичная причина
400 invalid_request_error Некорректное тело запроса — отсутствуют обязательные поля, неверный формат сообщений.
401 authentication_error Неверный или отсутствующий API-ключ.
402 billing_error / insufficient_funds Недостаточно баланса или превышен лимит расходов по ключу.
403 permission_error Аккаунт заблокирован.
409 conflict_error Повторный запрос с тем же Idempotency-Key ещё выполняется или использован с другим телом.
429 rate_limit_error / rate_limited Превышен лимит запросов — по IP, по ключу, или лимит апстрим-провайдера.
500 api_error Внутренняя ошибка гейтвея.
503 overloaded_error / api_error Апстрим-провайдер временно недоступен или перегружен — стоит повторить запрос позже.
Получить API-ключ