API Reference

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

Один API в двух диалектах: OpenAI и Anthropic. Замените base_url и ключ — существующие SDK, агенты и редакторы продолжат работать.

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

CheApi совместим с OpenAI и Anthropic API. Чтобы начать, создайте ключ в кабинете, скопируйте его и подставьте https://cheapi.ru/v1 в качестве базового URL. Ключ показывается один раз — сохраните его в менеджере секретов.

  1. Зарегистрируйтесь и откройте раздел «Ключи».
  2. Создайте ключ и скопируйте значение вида che_sk_…
  3. Отправьте первый запрос любым 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)

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

response.json
{
  "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.

HTTP
Authorization: Bearer che_sk_ваш_ключ
# или
x-api-key: che_sk_ваш_ключ

Не публикуйте ключ

Ключи хранятся в виде SHA-256-хеша и не могут быть восстановлены. Если ключ попал в публичный репозиторий или чат — отзовите его в кабинете и создайте новый. Все запросы по отозванному ключу возвращают 401.

Один аккаунт может иметь до 10 активных ключей. Отдельный ключ удобно выдавать каждому сервису или окружению — так проще отзывать доступ и читать историю расходов.

Базовый URL

Все запросы отправляйте на https://cheapi.ru. OpenAI-совместимые пути начинаются с /v1; Anthropic-клиенты обычно добавляют /v1/messages сами.

НазначениеURL
OpenAI SDK base_urlhttps://cheapi.ru/v1
Anthropic SDK base_urlhttps://cheapi.ru
Codex CLI base_urlhttps://cheapi.ru/v1
Claude CodeANTHROPIC_BASE_URL=https://cheapi.ru

Проверка подключения

Самый простой тест — GET /v1/models с вашим ключом. Если вернулся список моделей, DNS, TLS и аутентификация настроены правильно.

Chat Completions

Основной эндпоинт для текстовых моделей. Полностью совместим с OpenAI Chat Completions: поддерживаются системные сообщения, инструменты, JSON-режим и стриминг.

POST/v1/chat/completions

Создаёт ответ модели на последовательность сообщений.

ПараметрТипОписание
modelstringID модели из каталога. Обязательный.
messagesarrayИстория сообщений с ролями system, user, assistant. Обязательный.
streambooleanВключает SSE-стриминг. По умолчанию false.
temperaturenumberВариативность ответа, обычно 0–2.
max_tokensintegerОграничение длины ответа в токенах.
toolsarrayОписание функций для tool calling. Формат — как в OpenAI.
response_formatobject{"type":"json_object"} для JSON-ответа, если модель поддерживает.

Ответ содержит choices[0].message.content и блок usage с количеством токенов. Именно usage используется для списания.

Responses API

Эндпоинт /v1/responses поддерживается для инструментов, которые используют новый OpenAI Responses API, в том числе Codex CLI. Формат запроса и ответа — как у OpenAI.

POST/v1/responses
bash
curl 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, изображения в контенте и стриминг.

POST/v1/messages

Anthropic-совместимый эндпоинт. Требует заголовок 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}. Каталог с ценами и описаниями есть на отдельной странице.

GET/v1/models
GET/v1/models/{id}
models.json
{
  "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-совместимый эндпоинт. Модели изображений имеют высокий коэффициент, но списание ограничено минимальным числом токенов за картинку — оно указано в каталоге.

POST/v1/images/generations
bash
curl 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
  }'

Стоимость изображения

Минимум — 177 400 расчётных токенов за изображение (примерно 2,03 ₽ при пополнении на 600 ₽). Точная стоимость видна в истории кабинета после генерации.

Аудио и транскрибация

Отправьте аудиофайл через multipart/form-data. Поддерживаются mp3, mp4, mpeg, mpga, m4a, wav и webm. Язык можно указать явно — для русского это ru.

POST/v1/audio/transcriptions
bash
curl 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.

POST/v1/embeddings
bash
curl 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.py
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, оценка делается по длине текста — баланс всё равно списывается.

Таймауты

Upstream-запрос ограничен 180 секундами. Для очень длинных генераций уменьшите 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.json
{
  "error": {
    "message": "Недостаточно средств на балансе. Пополните баланс в кабинете CheApi.",
    "type": "insufficient_balance",
    "code": "insufficient_balance"
  }
}

Лимиты

ЛимитЗначение
Запросы к API120 в минуту на ключ
Активные ключи10 на аккаунт
Песочница в кабинете20 запросов в минуту
Максимальная длина запросаЗависит от модели и upstream
Таймаут upstream180 секунд
История запросов90 дней

Лимит считается по каждому ключу отдельно. Если вашему проекту нужно больше 120 запросов в минуту, напишите на support@cheapi.ru — обсудим индивидуальный лимит.

Биллинг и токены

Баланс хранится в базовых токенах. Для каждого запроса считаются расчётные токены:

formula
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 / Nodebase_url = https://cheapi.ru/v1
Anthropic Python / TSbase_url = https://cheapi.ru
LangChainbaseURL в ChatOpenAI / ChatAnthropic
LlamaIndexapi_base = https://cheapi.ru/v1
Vercel AI SDKbaseURL: https://cheapi.ru/v1
Continue / ClineOpenAI-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 запроса из заголовка ответа — так мы быстрее найдём лог.