Быстрый старт
CheApi совместим с OpenAI и Anthropic API. Чтобы начать, создайте ключ в кабинете, скопируйте его и подставьте https://cheapi.ru/v1 в качестве базового URL. Ключ показывается один раз — сохраните его в менеджере секретов.
- Зарегистрируйтесь и откройте раздел «Ключи».
- Создайте ключ и скопируйте значение вида che_sk_…
- Отправьте первый запрос любым OpenAI-совместимым клиентом.
from openai import OpenAI
client = OpenAI(
api_key="che_sk_ваш_ключ",
base_url="https://cheapi.ru/v1",
)
response = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[
{"role": "user", "content": "Объясни, что такое идемпотентность"}
],
)
print(response.choices[0].message.content)Пример ответа:
{
"id": "chatcmpl_01J...",
"object": "chat.completion",
"created": 1767225600,
"model": "gpt-6.1-sol",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Привет! Чем помочь?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 18,
"completion_tokens": 7,
"total_tokens": 25
}
}Аутентификация
Передавайте ключ в заголовке Authorization как Bearer-токен. Для Anthropic-совместимых клиентов также поддерживается x-api-key.
Authorization: Bearer che_sk_ваш_ключ
# или
x-api-key: che_sk_ваш_ключНе публикуйте ключ
Один аккаунт может иметь до 10 активных ключей. Отдельный ключ удобно выдавать каждому сервису или окружению — так проще отзывать доступ и читать историю расходов.
Базовый URL
Все запросы отправляйте на https://cheapi.ru. OpenAI-совместимые пути начинаются с /v1; Anthropic-клиенты обычно добавляют /v1/messages сами.
| Назначение | URL |
|---|---|
| OpenAI SDK base_url | https://cheapi.ru/v1 |
| Anthropic SDK base_url | https://cheapi.ru |
| Codex CLI base_url | https://cheapi.ru/v1 |
| Claude Code | ANTHROPIC_BASE_URL=https://cheapi.ru |
Проверка подключения
GET /v1/models с вашим ключом. Если вернулся список моделей, DNS, TLS и аутентификация настроены правильно.Chat Completions
Основной эндпоинт для текстовых моделей. Полностью совместим с OpenAI Chat Completions: поддерживаются системные сообщения, инструменты, JSON-режим и стриминг.
/v1/chat/completionsСоздаёт ответ модели на последовательность сообщений.
| Параметр | Тип | Описание |
|---|---|---|
model | string | ID модели из каталога. Обязательный. |
messages | array | История сообщений с ролями system, user, assistant. Обязательный. |
stream | boolean | Включает SSE-стриминг. По умолчанию false. |
temperature | number | Вариативность ответа, обычно 0–2. |
max_tokens | integer | Ограничение длины ответа в токенах. |
tools | array | Описание функций для tool calling. Формат — как в OpenAI. |
response_format | object | {"type":"json_object"} для JSON-ответа, если модель поддерживает. |
Ответ содержит choices[0].message.content и блок usage с количеством токенов. Именно usage используется для списания.
Responses API
Эндпоинт /v1/responses поддерживается для инструментов, которые используют новый OpenAI Responses API, в том числе Codex CLI. Формат запроса и ответа — как у OpenAI.
/v1/responsescurl https://cheapi.ru/v1/responses \
-H "Authorization: Bearer $CHEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6.1-sol",
"input": "Суммаризируй этот текст: ...",
"stream": false
}'Если ваш клиент ожидает поле output_text, оно возвращается upstream-провайдером без изменений. Мы не переписываем ответы.
Anthropic Messages
Для Claude Code и Anthropic SDK используйте /v1/messages. Поддерживаются системный промпт, tool use, изображения в контенте и стриминг.
/v1/messagesAnthropic-совместимый эндпоинт. Требует заголовок anthropic-version.
from anthropic import Anthropic
client = Anthropic(
api_key="che_sk_ваш_ключ",
base_url="https://cheapi.ru",
)
message = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
messages=[
{"role": "user", "content": "Привет!"}
],
)
print(message.content[0].text)Подсчёт токенов
POST /v1/messages/count_tokens возвращает оценку входных токенов до отправки запроса. Удобно для контроля бюджета длинных документов.
Версия API
anthropic-version: 2023-06-01. Если клиент не передаёт заголовок, upstream может выбрать версию по умолчанию — лучше задать явно.Список моделей
GET /v1/models возвращает все доступные модели в формате OpenAI. Отдельная модель — GET /v1/models/{id}. Каталог с ценами и описаниями есть на отдельной странице.
/v1/models/v1/models/{id}{
"object": "list",
"data": [
{
"id": "gpt-6.1-sol",
"object": "model",
"created": 1735689600,
"owned_by": "openai"
},
{
"id": "claude-sonnet-5-5",
"object": "model",
"created": 1735689600,
"owned_by": "anthropic"
}
]
}Изображения
Генерация изображений работает через OpenAI-совместимый эндпоинт. Модели изображений имеют высокий коэффициент, но списание ограничено минимальным числом токенов за картинку — оно указано в каталоге.
/v1/images/generationscurl https://cheapi.ru/v1/images/generations \
-H "Authorization: Bearer $CHEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.5-sunburst",
"prompt": "минималистичный постер, зелёный градиент, без текста",
"size": "1024x1024",
"n": 1
}'Стоимость изображения
Аудио и транскрибация
Отправьте аудиофайл через multipart/form-data. Поддерживаются mp3, mp4, mpeg, mpga, m4a, wav и webm. Язык можно указать явно — для русского это ru.
/v1/audio/transcriptionscurl https://cheapi.ru/v1/audio/transcriptions \
-H "Authorization: Bearer $CHEAPI_API_KEY" \
-F "model=gpt-4o-transcribe" \
-F "file=@meeting.mp3" \
-F "language=ru"Стоимость зависит от длительности и модели. В ответе приходит текст расшифровки; в историю записывается модель, длительность и списанные токены.
Эмбеддинги
Векторные представления для RAG, семантического поиска и кластеризации. Формат — стандартный OpenAI Embeddings API.
/v1/embeddingscurl https://cheapi.ru/v1/embeddings \
-H "Authorization: Bearer $CHEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "text-embedding-v4",
"input": "CheApi — один ключ ко всем AI-моделям"
}'Размерность и формат вектора зависят от модели. Сохраняйте эмбеддинги вместе с ID модели — при смене модели векторное пространство меняется.
Стриминг
Передайте "stream": true, чтобы получать ответ частями через Server-Sent Events. Формат совместим с OpenAI: строки data: {...} и терминальное data: [DONE].
stream = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{"role": "user", "content": "Напиши хайку про код"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)Мы читаем стрим параллельно с клиентом, чтобы посчитать использование токенов после завершения. Если провайдер не вернул usage, оценка делается по длине текста — баланс всё равно списывается.
Таймауты
max_tokens или используйте стриминг — он не обрывается по тому же таймауту на клиенте.Ошибки
Ошибки OpenAI-путей возвращаются в формате {"error":{"message","type","code"}}, ошибки Anthropic-путей — в формате {"type":"error","error":{...}}. HTTP-статус соответствует причине.
| Код | Значение | Что делать |
|---|---|---|
400 | Неверный запрос | Проверьте JSON, model и обязательные поля. |
401 | Неверный ключ | Скопируйте ключ заново или создайте новый. |
402 | Недостаточно средств | Пополните баланс в кабинете. |
403 | Доступ запрещён | Проверьте права ключа и Origin для браузерных запросов. |
404 | Модель или путь не найден | Сверьтесь с GET /v1/models и документацией. |
429 | Лимит запросов | Снизьте частоту или напишите в поддержку. |
500 | Ошибка сервиса | Повторите запрос с экспоненциальной задержкой. |
502 | Ошибка upstream | Повторите позже; статус — на /status. |
503 | Провайдер недоступен | Проверьте статус или напишите в Telegram. |
{
"error": {
"message": "Недостаточно средств на балансе. Пополните баланс в кабинете CheApi.",
"type": "insufficient_balance",
"code": "insufficient_balance"
}
}Лимиты
| Лимит | Значение |
|---|---|
| Запросы к API | 120 в минуту на ключ |
| Активные ключи | 10 на аккаунт |
| Песочница в кабинете | 20 запросов в минуту |
| Максимальная длина запроса | Зависит от модели и upstream |
| Таймаут upstream | 180 секунд |
| История запросов | 90 дней |
Лимит считается по каждому ключу отдельно. Если вашему проекту нужно больше 120 запросов в минуту, напишите на support@cheapi.ru — обсудим индивидуальный лимит.
Биллинг и токены
Баланс хранится в базовых токенах. Для каждого запроса считаются расчётные токены:
charged = ceil((input + output + cached × 0.4) × coefficient)
cost_rub = charged × rate_rub_per_million / 1 000 000- input — входные токены (промпт, системные инструкции, история).
- output — токены ответа модели.
- cached — кешированный вход, считается по коэффициенту 0,4.
- coefficient — множитель модели из каталога (от ×0,2 до ×20).
Ставка rate_rub_per_million фиксируется при пополнении и зависит от суммы: при 600 ₽ это около 11,42 ₽ за 1 млн базовых токенов. Чем больше пополнение — тем ниже ставка. Подробная сетка — на странице цен.
Что видно в истории
Если upstream не вернул usage (например, при стриминге без финального чанка), мы оцениваем токены по длине текста. Это приблизительная оценка, но она не позволяет запросам быть бесплатными.
SDK и библиотеки
Подойдёт любой клиент, который умеет менять base URL. Ниже — минимальные конфигурации для популярных SDK.
| Инструмент | Настройка |
|---|---|
| OpenAI Python / Node | base_url = https://cheapi.ru/v1 |
| Anthropic Python / TS | base_url = https://cheapi.ru |
| LangChain | baseURL в ChatOpenAI / ChatAnthropic |
| LlamaIndex | api_base = https://cheapi.ru/v1 |
| Vercel AI SDK | baseURL: https://cheapi.ru/v1 |
| Continue / Cline | OpenAI-compatible provider + base URL |
Если библиотека проверяет домен или версию API, отключите строгую проверку — CheApi отвечает теми же схемами, но не является api.openai.com.
Инструменты
Готовые инструкции для CLI и редакторов: Codex CLI, Claude Code, Cursor, Windsurf, Zed, Continue, VS Code и JetBrains.
Остались вопросы?
Напишите в Telegram @cheapi_support или на support@cheapi.ru. Приложите ID запроса из заголовка ответа — так мы быстрее найдём лог.