OpenAI-совместимый

Документация API

OpenAI-совместимый API для доступа к 80+ языковым моделям. Оплата в рублях, без VPN.

80+
моделей
12
интеграций
25
разделов

Быстрый старт

Clavis.to, единый OpenAI-совместимый API для 80+ нейросетей. Для начала нужен только API-ключ.

1

Создайте аккаунт

Зарегистрируйтесь на clavis.to

2

Пополните баланс

Оплата в рублях, от 100₽

3

Создайте API-ключ

Dashboard → API-ключи

4

Отправьте запрос

Любой OpenAI SDK

Первый запрос

bash
curl https://api.clavis.to/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

Python (OpenAI SDK)

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://api.clavis.to/v1"
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

JavaScript / TypeScript (OpenAI SDK)

javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-your-api-key",
  baseURL: "https://api.clavis.to/v1",
});

const response = await client.chat.completions.create({
  model: "gpt-4o",
  messages: [{ role: "user", content: "Hello!" }],
});
console.log(response.choices[0].message.content);

Аутентификация

Все запросы к API требуют заголовок Authorization с API-ключом. Ключи создаются в Dashboard → API-ключи.

http
Authorization: Bearer sk-your-api-key

Для совместимости с Anthropic SDK также поддерживается заголовок x-api-key.

http
x-api-key: sk-your-api-key

Base URL

https://api.clavis.to/v1

Замените base_url в любом OpenAI SDK, никаких других изменений не нужно.

Claude Code

Официальный CLI Anthropic для разработки с AI. Работает через Anthropic Messages API, совместимый с Clavis.to.

1. Установите Node.js

powershell (admin)
# Через winget (встроен в Windows 10/11)
winget install OpenJS.NodeJS.LTS

# Проверка установки
node --version
npm --version
Также можно скачать установщик .msi с nodejs.org → LTS версия.

2. Установите Claude Code CLI

powershell (admin)
npm install -g @anthropic-ai/claude-code

# Проверка
claude --version

3. Создайте API-ключ

Перейдите в Dashboard → API-ключи, нажмите «Создать», скопируйте ключ (показывается один раз).

4. Настройте конфигурацию

Файл конфигурации: %USERPROFILE%\.claude\settings.json

powershell
# Создайте папку и файл
mkdir %USERPROFILE%\.claude
notepad %USERPROFILE%\.claude\settings.json
json
{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "${KEY}",
    "ANTHROPIC_BASE_URL": "https://api.clavis.to",
    "API_TIMEOUT_MS": "600000"
  }
}
Замените ${KEY} на ключ из вашего Dashboard → API-ключи.

5. Запустите Claude Code

cmd
cd ваш-проект
claude

OpenAI CodeX

Корпоративный AI-помощник для программирования от OpenAI. Поддерживает агентный режим и поиск в сети.

1. Установите CodeX CLI

powershell (admin)
npm install -g @openai/codex@latest
codex --version

2. Создайте файлы конфигурации

Создайте папку %USERPROFILE%\.codex\

config.toml

toml
model_provider = "clavis"
model = "gpt-5.6-luna"
model_reasoning_effort = "high"
network_access = "enabled"
disable_response_storage = true

[model_providers.clavis]
name = "clavis"
base_url = "https://api.clavis.to/v1"
wire_api = "responses"
requires_openai_auth = true

auth.json

json
{
  "OPENAI_API_KEY": "${KEY}"
}

3. Запустите CodeX

cmd
cd ваш-проект
codex

Gemini CLI

AI-помощник от Google с контекстным окном 1M токенов, агентным режимом и поиском в интернете.

1. Установите Gemini CLI

powershell
npm install -g @google/gemini-cli
gemini --version

2. Создайте конфигурацию

Создайте папку %USERPROFILE%\.gemini\

.env

env
GOOGLE_GEMINI_BASE_URL=https://api.clavis.to
GEMINI_API_KEY=${KEY}
GEMINI_MODEL=gemini-2.5-pro

settings.json

json
{
  "security": {
    "auth": { "selectedType": "gemini-api-key" }
  }
}

3. Запустите

cmd
gemini

SillyTavern

Мощная платформа для создания историй с поддержкой OpenAI и Claude (Native Anthropic).

1. Установите SillyTavern

Скачайте и установите с GitHub. Запустите start.bat (Windows) или start.sh (macOS/Linux).

2. Настройте API

Откройте браузер http://localhost:8000 → кнопка «API» → выберите «Claude» (Anthropic Native):

Claude API URLhttps://api.clavis.to/v1
API Key${KEY}
Если получаете ошибку 400 Bad Request, установите Top_P = 0 в настройках AI Response Configuration.

JanitorAI

Чат с персонажами прямо в браузере. Clavis подключается как внешний «Прокси», вместо моделей Janitor отвечает любая модель из нашего каталога, а токены списываются с вашего баланса.

1. Откройте настройки API

Зайдите в чат с любым персонажем → три полоски (☰) в правом верхнем углу → пункт «Настройки» (API Settings) в открывшемся меню.

2. Провайдер → «Прокси»

Смените провайдера с Janitor на «Прокси» (Proxy), затем нажмите «+ Новая» (+ New), откроется форма новой конфигурации.

3. Заполните поля

Имя конфигурацииclavisto
URL проксиhttps://api.clavis.to/v1/chat/completions
API-ключ${KEY}
Модельgemini-3.6-flash@gemini

API-ключ берётся в кабинете → «API-ключи». Нажмите «Добавить», затем перезагрузите страницу (F5), после этого можно общаться.

URL указывается полностью, вместе с /chat/completions , просто https://api.clavis.to/v1 здесь не сработает: JanitorAI шлёт запрос ровно на тот адрес, который вы ввели, и ничего к нему не дописывает.

4. Какую модель вписать

На странице Модели выберите модель и пул, и вставьте идентификатор в поле «Модель» целиком, вместе с @пулом.

text
gemini-3.6-flash@gemini          // быстро и дёшево, длинный контекст
claude-sonnet-4-6@claudecodecheap // лучший слог, держит характер
deepseek-v4-flash@alibabacloud   // самый бюджетный вариант
aion-rp-llama-3.1-8b             // модель специально под ролеплей

Если чат не отвечает

  • Сетевая ошибка / «Failed to fetch», сперва перезагрузите страницу: JanitorAI кеширует настройки прокси до перезагрузки. Затем проверьте, что URL заканчивается на /chat/completions.
  • Отключите на janitorai.com блокировщики рекламы и «антитрекинг»-расширения, они режут запросы к сторонним доменам, и до нас запрос просто не доходит.
  • 401, ключ скопирован не полностью или удалён в кабинете. 402, закончился баланс.
  • 404, модель написана неточно: идентификатор нужен ровно такой, как на странице модели (регистр и @пул важны).
  • Ответ обрывается на середине, увеличьте лимит токенов в настройках генерации JanitorAI.

Cline · Roo Code · Kilo Code

AI-агенты для VS Code, которые пишут и правят код прямо в проекте. Настройка у всех трёх одинаковая, провайдер «OpenAI Compatible».

1. Установите расширение

Поставьте Cline, Roo Code или Kilo Code из маркетплейса VS Code (Extensions → поиск по названию).

2. Провайдер «OpenAI Compatible»

Откройте настройки расширения → API Provider → «OpenAI Compatible» и заполните:

Base URLhttps://api.clavis.to/v1
API Key${KEY}
Model IDclaude-sonnet-4-6

Рекомендуемые модели для кодинга

shell
claude-sonnet-4-6     // баланс цена / качество
claude-opus-4-8       // топ-качество для сложных задач
gpt-5.4               // сильный агентный кодинг
glm-4.7               // очень дёшево

Сравнить все модели по коду и цене на странице «Рейтинг». У одной модели бывает несколько пулов (дешевле/дороже) открой её страницу и выбери поставщика.

Пулы с id вида @gate-…, это сторонние поставщики нашего маркетплейса на их собственной инфраструктуре. Мы не можем утверждать, что запросы и ответы не логируются на их стороне, поэтому такие пулы помечены на сайте как сторонние. Запрос без явного указания пула к ним никогда не уходит.

Агенты читают много контекста на каждый шаг. Модели Claude поддерживают prompt caching, повторный контекст тарифицируется дешевле, следи за балансом на больших проектах.

Cherry Studio

Многофункциональный десктопный AI-ассистент для Windows / macOS / Linux.

Настройка API

Откройте Cherry Studio → Настройки → Провайдеры моделей → Добавить → OpenAI:

API URLhttps://api.clavis.to
API Key${KEY}

Рекомендуемые модели

shell
claude-sonnet-4-6
gpt-4o
gemini-2.5-pro

🦞 OpenClaw

Агентный инструмент с локальным шлюзом, дашбордом и каналами. Подключается к Clavis как кастомный провайдер (Anthropic- или OpenAI-совместимый).

1. Установка

На macOS / Linux / WSL2 запустите официальный скрипт. Флаг --no-onboard пропускает мастер настройки после установки.

bash
curl -fsSL https://openclaw.ai/install.sh | bash -s -- --no-onboard

openclaw --help

2. Запуск мастера

Запустите мастер и идите по шагам до настройки модели и аутентификации.

bash
openclaw onboard

3. Кастомный провайдер

На шаге модели и аутентификации выберите Custom provider. Совместимость Anthropic или OpenAI. Provider ID clavis, API Key, ваш sk- токен Clavis.

Anthropic-совместимыйhttps://api.clavis.to
OpenAI-совместимыйhttps://api.clavis.to/v1
Provider IDclavis
API Key${KEY}
Modelgpt-5.5

Примеры моделей: gpt-5.5, claude-opus-4-7, gemini-2.5-pro. Актуальный список и цены, на странице «Рейтинг» / «Модели».

4. Завершение и проверка

Для первой настройки оставьте порт шлюза, режим привязки и фоновый сервис по умолчанию.

bash
openclaw doctor
openclaw status
openclaw dashboard

Если дашборд отправляет сообщение и получает ответ модели, Clavis подключён успешно.

5. Установка скриптом (non-interactive)

Для деплой-скриптов и серверов, неинтерактивный режим. Здесь OpenAI-совместимый режим, поэтому Base URL содержит /v1.

bash
export CUSTOM_API_KEY="${KEY}"

openclaw onboard --non-interactive \
  --mode local \
  --auth-choice custom-api-key \
  --custom-base-url "https://api.clavis.to/v1" \
  --custom-model-id "gpt-5.5" \
  --custom-provider-id "clavis" \
  --custom-compatibility openai \
  --secret-input-mode ref \
  --gateway-port 18789 \
  --gateway-bind loopback

6. Проверка конфига вручную

Можно отредактировать ~/.openclaw/openclaw.json. Модель по умолчанию указывается в формате provider/model, например clavis/gpt-5.5.

json
{
  "agents": {
    "defaults": {
      "model": { "primary": "clavis/gpt-5.5" }
    }
  },
  "models": {
    "providers": {
      "clavis": {
        "baseUrl": "https://api.clavis.to/v1",
        "apiKey": "${CUSTOM_API_KEY}",
        "api": "openai-completions",
        "models": [
          { "id": "gpt-5.5", "name": "gpt-5.5" }
        ]
      }
    }
  }
}
Частые причины ошибок: неверный Base URL (Anthropic без /v1, OpenAI с /v1); модель по умолчанию написана как clavis/модель, а не просто имя; недостаточно баланса. Каналы (WhatsApp/Telegram), отдельная настройка, к провайдеру моделей не относятся.

🪽 Hermes

Агентный ассистент. Если в вашей версии есть нативные провайдеры (Anthropic / Gemini / OpenAI Responses) выбирайте их, это сохраняет семантику вызова инструментов. Если доступен только Custom OpenAI используйте OpenAI Compatible.

Кастомный провайдер

Добавьте Clavis в настройках моделей/провайдеров Hermes:

Base URLhttps://api.clavis.to
OpenAI Compatible URLhttps://api.clavis.to/v1
API Key${KEY}
Modelgpt-5.5
Для агентных задач берите быстрые модели без скрытого «думанья» (gpt-5.5, claude-sonnet-4-6), они быстрее выдают первый токен и не тратят токены на скрытый reasoning.

📱 Мобильные и десктоп-клиенты

Готовые приложения-ассистенты с поддержкой кастомного OpenAI-совместимого провайдера. Везде укажите URL и ваш ключ Clavis.

RikkaHUB, Android

Настройки → API Connections → добавьте «Custom OpenAI Compatible Provider»:

API URLhttps://api.clavis.to/v1
API Key${KEY}

Модели: claude-opus-4-7, gpt-5.5, gemini-3.5-flash.

Tavo, Android / iOS

В настройках подключения укажите:

API URLhttps://api.clavis.to/v1
API Key${KEY}

OMate, Android / iOS

Настройки → «API Configuration» / «Custom API»:

API URLhttps://api.clavis.to/v1
API Key${KEY}

Chatbox, Windows / macOS / Linux / iOS / Android

Настройки → AI Model Settings → провайдер «OpenAI API». Внимание: здесь нужен API Host (без /v1), Chatbox добавит /v1 сам:

API Hosthttps://api.clavis.to
API Key${KEY}
Это сторонние приложения, скачивайте их только с официальных сайтов/сторов. Clavis отвечает только за API-доступ; в самих приложениях ничего, кроме URL и ключа, менять не нужно.

Chat Completions

POST/v1/chat/completions

Создать завершение чата (OpenAI-совместимо)

Параметры запроса

model*stringID модели из /v1/models
messages*arrayМассив сообщений [{role, content}]
streambooleanВключить SSE-стриминг (по умолчанию false)
max_tokensintegerМаксимум токенов в ответе
temperaturenumber0.0 – 2.0

Пример

bash
curl https://api.clavis.to/v1/chat/completions \
  -H "Authorization: Bearer sk-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "stream": true,
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Explain async/await in Python"}
    ]
  }'

Models

GET/v1/models

Список всех активных моделей (без авторизации)

GET/v1/models/:model_id

Информация о конкретной модели

Пример ответа

json
{
  "object": "list",
  "data": [
    {
      "id": "gpt-4o",
      "owned_by": "OpenAI",
      "billing_type": "per_token",
      "pricing": {
        "input_per_1m_rub": 43.75,
        "output_per_1m_rub": 131.25
      },
      "context_window": 128000,
      "endpoints": ["openai"],
      "is_active": true
    }
  ]
}

Anthropic Messages API

POST/v1/messages

Anthropic-совместимый эндпоинт (для Claude SDK и Claude Code)

Поддерживает заголовок x-api-key (формат Anthropic SDK). Внутри конвертирует запрос в формат OpenAI и обратно.

Пример

python
import anthropic

client = anthropic.Anthropic(
    api_key="${KEY}",
    base_url="https://api.clavis.to",
)

message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello!"}]
)
print(message.content[0].text)

Embeddings

POST/v1/embeddings

Создать текстовые эмбеддинги

Пример

bash
curl https://api.clavis.to/v1/embeddings \
  -H "Authorization: Bearer sk-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": "The quick brown fox"
  }'

Code Edit, правка кода

POST/v1/edit/completions

Предсказать следующую правку в файле

Модель получает файл целиком, фрагмент под курсором и историю правок, а возвращает переписанный фрагмент. Это не чат: запрос обязан содержать теги разметки, иначе модель не поймёт, что править. Список моделей с поддержкой этого эндпоинта, GET /v1/models, поле endpoints содержит edit. Стриминг тут не поддерживается.

Обязательные теги в content

  • <|current_file_content|>, содержимое файла целиком
  • <|code_to_edit|>, фрагмент, который надо переписать
  • <|cursor|>, позиция курсора внутри этого фрагмента
  • <|recently_viewed_code_snippets|>, <|edit_diff_history|>, необязательный контекст: что пользователь недавно смотрел и правил

Пример

bash
curl https://api.clavis.to/v1/edit/completions \
  -H "Authorization: Bearer sk-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mercury-edit-2@inceptionlabs",
    "max_tokens": 256,
    "messages": [{
      "role": "user",
      "content": "<|current_file_content|>\ndef greet(name):\n    print(\"hi\")\n<|/current_file_content|>\n<|code_to_edit|>\ndef greet(name):\n    print(\"hi\")<|cursor|>\n<|/code_to_edit|>"
    }]
  }'

Ответ

json
{
  "id": "chatcmpl-...",
  "object": "edit.completion",
  "model": "mercury-edit-2@inceptionlabs",
  "choices": [{
    "index": 0,
    "finish_reason": "stop",
    "message": { "role": "assistant", "content": "def greet(name):\n    print(f\"hi {name}\")" }
  }],
  "usage": { "prompt_tokens": 208, "completion_tokens": 26, "total_tokens": 234 }
}

Fill-in-the-Middle, автодополнение

POST/v1/fim/completions

Дописать код между префиксом и суффиксом

Классический inline-автокомплит для редактора: prompt это текст до курсора, suffix после. Модель дописывает середину. Ответ в формате legacy-completions (choices[].text). Стриминг поддерживается. Модели с поддержкой, те, у кого в поле endpoints есть fim.

Параметры

  • prompt, обязательный, текст до курсора
  • suffix, текст после курсора
  • max_tokens, по умолчанию 512, максимум 8192
  • stop, top_p, top_k, frequency_penalty, presence_penalty, repetition_penalty, stream

Пример

bash
curl https://api.clavis.to/v1/fim/completions \
  -H "Authorization: Bearer sk-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mercury-edit-2@inceptionlabs",
    "prompt": "def fibonacci(n: int) -> int:\n    if n <= 1:\n        return n\n    return ",
    "suffix": "\n\nprint(fibonacci(10))\n",
    "max_tokens": 256
  }'

Ответ

json
{
  "id": "cmpl-...",
  "object": "text_completion",
  "model": "mercury-edit-2@inceptionlabs",
  "choices": [{
    "index": 0,
    "finish_reason": "stop",
    "text": "fibonacci(n - 1) + fibonacci(n - 2)"
  }],
  "usage": { "prompt_tokens": 34, "completion_tokens": 14, "total_tokens": 48 }
}

Image Generation

POST/v1/images/generations

Генерация изображений (DALL·E, Flux)

Пример

bash
curl https://api.clavis.to/v1/images/generations \
  -H "Authorization: Bearer sk-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dall-e-3",
    "prompt": "A sunset over mountains",
    "n": 1,
    "size": "1024x1024"
  }'

Management API, управление аккаунтом

Всё, что вы делаете в кабинете, доступно по одному ключу: баланс, остаток бесплатных запросов, логи, выпуск и отзыв API-ключей, счета на пополнение. Ключ управления начинается с clv- и живёт отдельно от обычных sk-: sk- умеет только вызывать модели, clv- умеет всё остальное и не умеет вызывать модели.

Выпустить ключ управления можно только при включённой двухфакторной аутентификации, и при его создании потребуется код из приложения. Кабинет: Ключи API, блок «Ключи управления аккаунтом». Отключение 2FA сразу отзывает все такие ключи.

Авторизация

bash
curl https://api.clavis.to/v1/manage/self \
  -H "Authorization: Bearer clv-your-management-key"

Права доступа

Права выбираются при создании ключа. Запрос без нужного права получает 403 с указанием, какого именно права не хватает.

account:readпрофиль, баланс, лимиты
usage:readстатистика и логи запросов
models:readкаталог, цены, доступность
keys:readпросмотр API-ключей
keys:writeсоздание и отзыв API-ключей
billing:readтранзакции и счета
billing:writeвыставление счёта

Эндпоинты

GET/v1/manage/self

Что умеет этот ключ: права, срок, ограничения по IP

GET/v1/manage/account

Профиль, баланс, включена ли 2FA, число активных ключей

GET/v1/manage/balance

Баланс, траты за сегодня и за месяц

GET/v1/manage/limits

Остаток бесплатных запросов на сутки и лимиты каждого ключа

GET/v1/manage/usage

Агрегаты за период: ?from&to&group_by=day|model|key|none

GET/v1/manage/logs

Лог запросов: ?limit&offset&model&key_id&only_errors

GET/v1/manage/models

Каталог: ?search&key_id&limit&offset

GET/v1/manage/models/:model_id

Модель: цена, доступность, можно ли её сейчас вызвать

GET/v1/manage/keys

Список API-ключей

POST/v1/manage/keys

Создать API-ключ. Секрет возвращается один раз

PATCH/v1/manage/keys/:id

Изменить имя, лимиты, список моделей

DELETE/v1/manage/keys/:id

Отозвать ключ

GET/v1/manage/transactions

Движения по балансу

GET/v1/manage/invoices

Счета и их статусы

POST/v1/manage/invoices

Выставить счёт, в ответ приходит ссылка на оплату

Ключ под конкретную модель

bash
curl -X POST https://api.clavis.to/v1/manage/keys \
  -H "Authorization: Bearer clv-your-management-key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "customer-42",
    "allowed_models": ["claude-opus-5"],
    "rpm_limit": 60,
    "spend_cap_rub": 500,
    "spend_window": "day"
  }'

Идентификатор без пула (claude-opus-5) разрешает любой пул этой модели, с пулом (claude-opus-5@gate1) — только его. Ответ содержит поле key с секретом: это единственный раз, когда он существует в открытом виде.

Сколько бесплатных запросов осталось

bash
curl https://api.clavis.to/v1/manage/limits \
  -H "Authorization: Bearer clv-your-management-key"
json
{
  "free_pool": {
    "pool": "free-pool-1",
    "requests_used_today": 7,
    "requests_limit_per_day": 25,
    "requests_remaining": 18,
    "resets_at": "2026-08-18T00:00:00+00:00",
    "min_balance_rub": 1.0,
    "eligible": true
  },
  "api_keys": [
    { "id": "…", "name": "prod", "rpm_limit": 60, "spend_cap_rub": 500, "spend_window": "day" }
  ]
}

Баланс и доступность модели

python
import requests

H = {"Authorization": "Bearer clv-your-management-key"}
BASE = "https://api.clavis.to/v1/manage"

balance = requests.get(f"{BASE}/balance", headers=H).json()
print(balance["balance_rub"], balance["spent_today_rub"])

m = requests.get(f"{BASE}/models/claude-opus-5", headers=H).json()
print(m["pricing"]["input_rub_per_1m"], m["availability"]["uptime_percent"])
if not m["access"]["can_call"]:
    print("blocked:", m["access"]["blocked_reason"])

Счёт на пополнение

bash
curl -X POST https://api.clavis.to/v1/manage/invoices \
  -H "Authorization: Bearer clv-your-management-key" \
  -H "Content-Type: application/json" \
  -d '{"amount_rub": 1000, "provider": "antilopay"}'
json
{
  "order_id": "clavis_9f2c…",
  "payment_url": "https://pay.antilopay.com/…",
  "amount_rub": 1000.0,
  "provider": "antilopay"
}

provider принимает antilopay (карты и СБП) или heleket (крипта). Статус оплаты потом читается через GET /v1/manage/invoices/:order_id.

Безопасность

Ключу можно задать срок жизни и список разрешённых IP или подсетей: запрос с другого адреса получит 403. Ключ управления не может выпустить другой ключ управления и не может сменить пароль, email или настройки 2FA, поэтому утечка не даёт закрепиться в аккаунте. Дата и адрес последнего запроса по каждому ключу видны в кабинете.

Биллинг и тарификация

Стоимость списывается после завершения каждого запроса на основе реально использованных токенов.

Per-token

Оплата за входные и выходные токены

Per-request

Фиксированная цена за запрос (изображения, TTS)

Рубли

Все цены в рублях, пополнение через СБП или карту РФ

Актуальные цены на все модели доступны на странице /models.

Ошибки

Все ошибки возвращаются в формате OpenAI: { "error": { "message", "type", "code", "status" } }. Код (code), стабильный машиночитаемый идентификатор.

json
{
  "error": {
    "message": "Your clavis balance is too low, top up.", "type": "payment_error", "code": "insufficient_balance", "status": 402
  }
}
КодHTTPЗначение
invalid_request400Неверный запрос или параметры.
system_message_placement400Системный промпт отправлен как сообщение с ролью "system", а пул требует его в верхнеуровневом поле "system". Перенесите системный текст в поле "system" или используйте эндпоинт /v1/messages.
invalid_tool_schema400Некорректный блок "tools": элемент null, пустой "type" или недопустимое имя функции. Имя только буквы, цифры, _ . : - без пробелов (Google не принимает имя, начинающееся с цифры; OpenAI точки и длину >64). Структурный мусор (null-элементы, отсутствующий "type", tool_choice на несуществующий инструмент) чинится автоматически, эта ошибка приходит только на неисправимое.
tools_not_supported400Модель не поддерживает вызов инструментов. Уберите "tools" или выберите модель с поддержкой tool calling.
empty_input400В запросе нет содержимого (пустые messages/input). Такой запрос не уходит к провайдеру.
unsupported_content400Модель принимает только текст, изображения и другой не-текстовый контент не поддерживаются. Выберите vision-модель.
context_length_exceeded400Промпт + max_tokens превышают контекстное окно модели. Сократите ввод или max_tokens.
content_filter400Запрос отклонён фильтром безопасности модели.
authentication_error401Отсутствует или неверный API-ключ.
insufficient_balance402Недостаточно средств на балансе clavis, пополните.
access_denied403Ключ не имеет доступа к этой модели (allowlist/ограничения ключа).
not_found404Неизвестный id модели или эндпоинт.
rate_limit_exceeded429Слишком много запросов (лимит ключа или модель троттлит). Снизьте частоту и повторите.
empty_response502Провайдер вернул пустой ответ (0 токенов, без контента). Запрос не тарифицируется, повторите или смените модель.
model_overloaded503Модель временно перегружена, повторите через несколько секунд.
model_unavailable503Модель временно недоступна, повторите позже или выберите другую.
upstream_timeout504Модель слишком долго отвечала, повторите, желательно с более коротким промптом.

Разбор ошибки 400

400 обычно означает, что запрос дошёл до API, но не прошёл валидацию: схема, поля, имя модели, параметры или определения инструментов (tools). Начните с минимального запроса, затем по одному добавляйте tools, изображения, стриминг и продвинутые параметры.

Быстрая диагностика

  • invalid_request, неверная форма запроса. Проверьте URL, заголовки, JSON, имя модели, названия полей и диапазоны параметров.
  • authentication_error, неверный ключ или заголовок авторизации. Claude-эндпоинт (/v1/messages) использует x-api-key, OpenAI, Authorization: Bearer.
  • not_found, модель недоступна или имя с опечаткой. Скопируйте точный id со страницы /models.
  • Поля из другого API. Не смешивайте схемы Chat Completions, Anthropic Messages, Responses и Gemini в одном запросе.
  • context_length_exceeded, контекст слишком большой. Сократите историю/файлы или начните новую сессию.
  • content_filter, блокировка фильтром безопасности. См. раздел «Фильтры безопасности» ниже.
  • Неверная схема инструмента. Имена функций должны быть валидны, parameters, корректным JSON Schema, а каждое поле из required, присутствовать в properties.

Вызов инструментов (tools / function calling)

Вызов инструментов полностью поддерживается для моделей Claude, и через /v1/messages (нативный формат Anthropic), и через /v1/chat/completions (формат OpenAI). Работает как с базовым id (например claude-opus-4-5-20251101), так и с явным выбором пула через суффикс (…@pool); стриминг тоже поддержан.

Не смешивайте форматы инструментов между схемами. Для Anthropic Messages используйте { "name", "input_schema" }; для Chat Completions { "type":"function", "function": { … } }. Отправка одного формата в чужую схему частая причина 400.

Claude / Anthropic

  • Передавайте anthropic-version: 2023-06-01 и max_tokens, без них Claude часто отвечает 400.
  • В messages кладите только ходы user/assistant. Системную инструкцию, в верхнеуровневое поле system.
  • Блок tool_result должен ссылаться на id предыдущего tool_use; неверный порядок или отсутствие id, ошибка валидации.
  • Мультимодальные блоки должны следовать нативной структуре Claude (source, media_type, base64).
  • При отладке убирайте необязательные сэмплинг-параметры (top_p, лишние stop_sequences).

OpenAI / Gemini

  • Responses API использует input; Chat Completions, messages. Не путайте их.
  • Мультимодальные поля зависят от эндпоинта, не отправляйте file_url/base64 туда, где они не поддержаны.
  • Для structured output схема должна быть парсимой, а промпт, не противоречить ей.
  • При 400 уберите продвинутые опциональные поля (stream_options, modalities) и повторите минимальный запрос.

Фильтры безопасности и ролплей

Фильтрация безопасности, это официальный контроль контента со стороны провайдера модели, а не ручная блокировка с нашей стороны. Ролплей, художественный текст и продолжение длинного контекста чаще вызывают срабатывание политик из-за чувствительных сцен, персонажей-несовершеннолетних, принуждения, насилия, явного сексуального контента, незаконных деталей, jailbreak-формулировок или накопленного контекста.

Что вы можете увидеть

  • Прямой отказ, модель пишет, что не может помочь, или уводит в безопасную сторону.
  • Пустой ответ, некоторые клиенты показывают пустое сообщение; это всё ещё может быть фильтр.
  • Оборванный вывод, стриминг останавливается на середине без нормального завершения.
  • Блокировка кандидатов, Gemini может вернуть finishReason: SAFETY или blockReason.
  • Коды ошибок, content_filter / policy / safety / blocked.
  • Отказ ещё до генерации. Пул alibabacloud проверяет текст запроса до того, как модель его увидит, и отвечает HTTP 400 с кодом content_filter. Токены в этом случае не расходуются, потому что генерации не было.

Почему отфильтрованные запросы всё равно тарифицируются

Модель уже обработала запрос: прочитала ввод, поняла контекст и провела классификацию безопасности, это расходует входные токены. Отказы и предупреждения тоже считаются как выходные токены, а при стриминге часть токенов уже сгенерирована. Официальные API возвращают usage за этот расход, и сервис обязан его учесть.

Тарификация идёт по фактически использованным токенам, которые сообщает провайдер модели. Сработавший фильтр безопасности не отменяет уже понесённый расход.

Что делать

  • Почистите карточки персонажей, уберите признаки несовершеннолетних, принуждение, отсутствие согласия, насилие и jailbreak-инструкции.
  • Переписывайте как комплаентную фантастику: взрослые персонажи, взаимное согласие, неявные формулировки, акцент на атмосфере и эмоциях.
  • Снижайте риск контекста, длинные чаты накапливают чувствительный контекст; начните новую сессию или сделайте безопасное резюме.
  • Не спамьте один и тот же заблокированный текст, это обычно вызывает ещё одно списание и ещё один отказ.
  • Смена модели, не гарантия: пороги отличаются, но официальные политики применяются всё равно, и обойти их вручную нельзя.

Этот раздел, только техническое объяснение поведения API. Фильтры, отказы и блокировки определяются официальными моделями и их политиками; за соответствие ввода и использования применимым правилам отвечает пользователь.

FAQ / Решение проблем

Оплатил, но баланс не обновился

Чаще всего это короткая задержка между вебхуком платёжной системы и зачислением. Откройте «Историю операций» в личном кабинете и проверьте статус платежа. Если списание прошло, но баланс не пополнился в течение нескольких минут, напишите в поддержку для ручной сверки.

Поддержка: support@clavis.to или Telegram @clavisto. Укажите id операции из истории платежей.

Claude Code: контекст переполнен

Выполните /clear, чтобы очистить текущий контекст и начать новый диалог. Для больших проектов делите работу на этапы, чтобы сессии не разрастались.

claude code
/clear

Токен скопирован не полностью

  • Используйте иконку копирования рядом с ключом, она копирует значение целиком.
  • Если выделяете вручную, выделите всю строку от sk- до конца.
  • Убедитесь, что нет лишних пробелов и переносов строк перед вставкой в клиент.

Не устанавливается Node.js

  • Установите Node.js 18 или новее.
  • На Windows запускайте PowerShell или CMD от имени администратора.
  • Переоткройте терминал после установки и проверьте версии.
shell
node --version
npm --version

Таймаут запроса

  • Используйте единый эндпоинт https://api.clavis.to (OpenAI-совместимый) или /v1/messages для Claude.
  • Проверьте локальный прокси, фаервол и DNS.
  • Убедитесь, что имя модели указано верно (точный id со страницы /models).
  • Для длинных генераций включайте стриминг, чтобы соединение не простаивало.

Агент не вызывает инструменты (пустые аргументы)

Вызов инструментов поддержан для Claude и через /v1/messages, и через /v1/chat/completions, с базовым id или суффиксом пула, в стриминге и без. Если аргументы приходят пустыми, почти всегда дело в формате запроса со стороны клиента: не смешивайте схемы tools разных API и не отправляйте Claude-инструменты в формате OpenAI и наоборот. Начните с минимального запроса с одним инструментом и проверьте, что приходит корректный tool_use/tool_calls с аргументами.