Создавайте с Claude
по предсказуемой цене.

AliCode — это drop-in шлюз к Claude API: тот же протокол, что у Anthropic, существенно ниже стоимость и без жёстких RPM-лимитов. Измените базовый URL — и продолжайте работу без изменений в коде.

Направьте любой инструмент, работающий по Anthropic Messages API или OpenAI Chat Completions API, на https://api.alicode.store и используйте ключ, начинающийся с sk-ali-. Отдельного обучения не требуется: протокол идентичен api.anthropic.com на всех поддерживаемых эндпоинтах, вплоть до байтового представления SSE-событий.

AliCode создан для того, чтобы сделать доступ к Claude API экономически предсказуемым. Официальные тарифы рассчитаны на корпоративные бюджеты; мы консолидируем спрос множества команд и разработчиков, заключаем оптовые контракты на мощности и передаём полученную экономию пользователям в виде прозрачной pay-as-you-go модели с оплатой по факту потребления.

Что вы получаете

  • Тот же протокол что у Anthropic. /v1/messages, SSE-события, content-блоки, tool_use, vision, кэширование промптов — идентичные байты. Если ваш код работает с официальным API, он работает у нас с заменой одной переменной окружения.
  • Оба API на одном эндпоинте. OpenAI Chat Completions тоже поддерживается — Cursor / Continue / OpenWebUI / любой OpenAI SDK скрипт просто меняет base URL. Никаких translation-прослоек с вашей стороны.
  • Files, batches, count_tokens. Полный паритет фич для SDK-хелперов — ваш клиентский код не требует ни одного `if`. Anthropic SDK автоматически их находит и использует так, словно говорит с официальным эндпоинтом.
  • Pay-as-you-go кредиты. Пополнение от 300 ₽. Кредиты не сгорают. Без подписок, минимальных платежей и обязательств — расходы прекращаются в тот момент, когда вы прекращаете обращения к API.
  • Без поминутных лимитов. Мы не разделяем доступ по тарифным уровням. Единственное ограничение — защита от злоупотреблений на уровне IP (1000 запросов/мин), что на порядки превышает потребности любого штатного агентского цикла.
  • Тот же конверт безопасности. Весь трафик через TLS 1.3, API-ключи с bcrypt-хешем в БД, спенд-кэпы и whitelist моделей на каждый ключ, мгновенный revoke, ни промпт ни ответ не логируются.

Для кого

AliCode рассчитан на разработчиков, для которых AI — повседневный рабочий инструмент, а не отдельная функция SaaS-продукта. Если вы постоянно работаете в Cline, Cursor, Claude Code, Continue или Aider, либо запускаете Python-сценарии с интенсивными обращениями к API (эмбеддинги, классификация, агентские циклы, пакетная суммаризация) — это решение для вас. Тарификация построена так, чтобы интенсивное использование оставалось доступным: пользователь Cursor, генерирующий 200K токенов Sonnet в день, платит порядка $5 в месяц вместо $60.

AliCode не является заменой корпоративных контрактов с Anthropic. Если вам требуется индивидуальный DPA, аудиторская отчётность SOC2, выделенные мощности или формальный SLA выше 99.5%, обращайтесь напрямую в Anthropic. Мы предоставляем перепродажу их мощностей в потребительском масштабе.

Доступные модели

МодельКонтекстМакс. выводДля чего
claude-haiku-4-5 200K64KАгентские циклы, быстрая классификация, дешёвые completion'ы
claude-sonnet-4-5 200K64KДефолт — ежедневный кодинг, vision, tool use
claude-sonnet-4-6 200K64KСвежий Sonnet — лучше слушает инструкции
claude-opus-4-5 200K64KТяжёлые рассуждения, расширенное мышление
claude-opus-4-7 200K128KТоп — агенты, глубокие рефакторы, многоступенчатое планирование

Старые ID моделей (claude-3-7-sonnet-latest, claude-3-5-haiku-latest, claude-opus-4-1) тоже принимаются как алиасы.

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

Пять минут от нуля до первого запроса.

  1. Зарегистрируйтесь (email + пароль).
  2. Откройте /dashboard/keysСоздать ключ → скопируйте. Начинается с sk-ali-…
  3. Сделайте первый запрос:
curl https://api.alicode.store/v1/messages \
  -H 'x-api-key: $ALICODE_KEY' \
  -H 'anthropic-version: 2023-06-01' \
  -H 'content-type: application/json' \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 256,
    "messages": [{"role":"user","content":"hi"}]
  }'
import os, anthropic

client = anthropic.Anthropic(
    api_key=os.environ["ALICODE_KEY"],
    base_url="https://api.alicode.store",
)

msg = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=256,
    messages=[{"role":"user","content":"hi"}],
)
print(msg.content[0].text)
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: process.env.ALICODE_KEY,
  baseURL: "https://api.alicode.store",
});

const msg = await client.messages.create({
  model: "claude-sonnet-4-5",
  max_tokens: 256,
  messages: [{ role: "user", content: "hi" }],
});
console.log(msg.content[0].text);

Всё. Ваш существующий код на Anthropic SDK работает без изменений.

Миграция с Anthropic

Одна переменная окружения, никаких правок кода. Замените api.anthropic.com на api.alicode.store; замените ваш sk-ant-… ключ на sk-ali-…

Bash / Docker

bash
# before
export ANTHROPIC_API_KEY=sk-ant-…
export ANTHROPIC_BASE_URL=https://api.anthropic.com

# after
export ANTHROPIC_API_KEY=sk-ali-…
export ANTHROPIC_BASE_URL=https://api.alicode.store

Python SDK

python
# only this line changes
client = anthropic.Anthropic(
    api_key=os.environ['ALICODE_KEY'],
    base_url='https://api.alicode.store',
)

Node SDK

javascript
const client = new Anthropic({
  apiKey: process.env.ALICODE_KEY,
  baseURL: 'https://api.alicode.store',
});
Мы пропускаем все поддерживаемые Anthropic-флаги — anthropic-version, anthropic-beta (prompt caching, files API, message batches) — насквозь. Никакого форка клиентского кода не нужно.

Таблица совместимости

ВозможностьAnthropicAliCodeЗаметки
Messages APIПолная совместимость формата ответа по байтам
Стриминг SSEТе же имена событий и порядок
Tool useВключая параллельные вызовы инструментов
Visionbase64 / url / file_id — всё поддерживается
Кэширование промптовcache_control: ephemeral
Расширенное мышлениеполе thinking у Opus
Files APIПостоянные загрузки для vision/документов
Message BatchesJSONL-результаты, 50% от цены
Count tokensBPE-точно (±3-5%)
CitationsСкоро в Q3

Cursor

Cursor использует OpenAI-совместимый base URL. Переопределите его на наш.

  1. File → Preferences → Cursor Settings → Models
  2. Прокрутите до API Keys → включите OpenAI API Key.
  3. Вставьте свой sk-ali-… ключ.
  4. Включите Override OpenAI Base URL и вставьте https://api.alicode.store/v1
  5. Жмите Verify. Затем в Add or search model добавьте claude-sonnet-4-5 (или claude-haiku-4-5 / claude-opus-4-7).
Cursor на бесплатном плане ограничивает кастомные имена моделей. Если получили «Named models unavailable» — попробуйте известное имя типа gpt-4o, наш шлюз тоже его алиасит на правильную модель.

Cline

Cline — бесплатное агентское расширение для VS Code. Говорит на Anthropic-протоколе нативно.

  1. VS Code → Extensions → найдите Cline → установите.
  2. Откройте панель Cline (левый сайдбар) → Settings (вверху справа).
  3. API Provider: Anthropic
  4. API Key: sk-ali-…
  5. Use custom base URL: ✓ → https://api.alicode.store
  6. Model ID: claude-sonnet-4-5

Сохраните и начните новый таск. Cline будет использовать все свои инструменты (Read, Edit, Bash, и т.д.) через наш шлюз, включая стриминг tool_use и vision-блоки.

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

  • Дефолт для кодинга: claude-sonnet-4-5 — приемлемое качество с максимальной скоростью; на нём остаются 90% юзеров.
  • Дешёвая разведка: claude-haiku-4-5 — отлично для «объясни этот файл» / «найди баг»; в ~4× дешевле Sonnet.
  • Тяжёлые рефакторы: claude-opus-4-7 — когда Sonnet раз за разом косячит, переключитесь на Opus один turn и обратно.

Советы

  • Vision: перетащите картинки в инпут Cline — они уйдут как image content-блоки. Наш шлюз отправит их на captioning-провайдер, передаст caption Claude для рассуждения. Вы этого не видите — только ответ.
  • Веб-поиск: ничего объявлять не надо — мы автоматически инжектим web_search, когда Cline пытается его сделать через execute_command + curl. Спасает вашу песочницу от падений на network-вызовах.
  • Длинные сессии: автокомпактификация Cline работает идеально — мы поддерживаем context_management.compact_* для каждой модели.

Claude Code (Anthropic CLI)

Две переменные окружения, одна команда.

bash
export ANTHROPIC_BASE_URL=https://api.alicode.store
export ANTHROPIC_API_KEY=sk-ali-…
claude

Добавьте оба export в свой shell rc-файл (~/.zshrc / ~/.bashrc) чтобы они стали постоянными. На Windows: setx ANTHROPIC_BASE_URL ...

Claude Code автоматически использует кэширование промптов и расширенное мышление через anthropic-beta заголовки. Оба поддерживаются нашим шлюзом — ваши cache-хиты и thinking-блоки ведут себя идентично.

Continue.dev

Откройте конфиг Continue (иконка шестерёнки → Open config.yaml):

yaml
name: AliCode
models:
  - name: AliCode Sonnet
    provider: openai
    model: claude-sonnet-4-5
    apiKey: sk-ali-…
    apiBase: https://api.alicode.store/v1
    roles: [chat, edit, apply]

Roo Code

Roo — форк Cline с режимами (Code / Architect / Ask). Настройка как у Cline:

  • Provider: Anthropic
  • Base URL: https://api.alicode.store
  • API Key: sk-ali-…
  • Model ID: claude-sonnet-4-5

Python и Node SDK

Python (anthropic)

bash
pip install anthropic
python
from anthropic import Anthropic
client = Anthropic(api_key='sk-ali-…', base_url='https://api.alicode.store')

# Non-streaming
msg = client.messages.create(
    model='claude-sonnet-4-5',
    max_tokens=512,
    messages=[{'role': 'user', 'content': 'Hello'}],
)
print(msg.content[0].text)

# Streaming
with client.messages.stream(
    model='claude-sonnet-4-5',
    max_tokens=512,
    messages=[{'role': 'user', 'content': 'Tell me a joke'}],
) as stream:
    for text in stream.text_stream:
        print(text, end='', flush=True)

Node (@anthropic-ai/sdk)

bash
npm install @anthropic-ai/sdk
javascript
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({ apiKey: 'sk-ali-…', baseURL: 'https://api.alicode.store' });

const stream = await client.messages.stream({
  model: 'claude-sonnet-4-5',
  max_tokens: 512,
  messages: [{ role: 'user', content: 'Hi' }],
});
for await (const ev of stream) {
  if (ev.type === 'content_block_delta' && ev.delta.type === 'text_delta') {
    process.stdout.write(ev.delta.text);
  }
}

OpenAI SDK (для /v1/chat/completions)

python
from openai import OpenAI
client = OpenAI(api_key='sk-ali-…', base_url='https://api.alicode.store/v1')

resp = client.chat.completions.create(
    model='claude-sonnet-4-5',
    messages=[{'role': 'user', 'content': 'Hi'}],
)
print(resp.choices[0].message.content)

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

Все /v1/* эндпоинты требуют API-ключ. Принимаем его в любом из двух заголовков — выберите тот, что уже использует ваш SDK:

ЗаголовокФорматИспользуется
x-api-key sk-ali-… Anthropic SDK, Cline, Claude Code
AuthorizationBearer sk-ali-… OpenAI SDK, Cursor, Continue

Создание ключей

  1. Откройте /dashboard/keys.
  2. Жмите Создать ключ, дайте имя (например «production»).
  3. Скопируйте секрет — показан один раз. Мы храним только хеш.

Ограничения для ключа

У каждого ключа есть опциональные лимиты:

  • Лимит RPM — запросов в минуту, по умолчанию совпадает с тарифом аккаунта.
  • Spend cap (центы) — авто-revoke после трат на N центов с этого ключа.
  • Allowed models — whitelist; запросы с другими моделями получают 403.

Отзыв ключа из дашборда мгновенный. Отозванные ключи отдают 401 в течение секунд по всем серверам.

Перевыпуск ключей

Выпустите новый ключ, задеплойте, потом отзовите старый. Никакого даунтайма — оба работают параллельно до момента revoke. Рекомендуем перевыпускать продовые ключи раз в 90 дней.

Модель безопасности

Мы храним только bcrypt-хеш вашего секрета — плейнтекст показан один раз при создании и больше никогда. Если потеряли — выпустите новый ключ и отзовите старый; восстановить потерянный секрет мы не можем. Каждый запрос привязан к IP адресу с которого он пришёл (видно в дашборде), так что необычное использование легко аудитить.

Где хранить ключи

  • Local development: environment variable in your shell rc-file (~/.zshrc / ~/.bashrc), never committed to git.
  • CI/CD: encrypted secret in GitHub Actions / GitLab / Vercel / your platform's secret store.
  • Servers: /etc/environment or systemd EnvironmentFile=, root-readable only.
  • Never embed in client-side JS, mobile apps, or any place a user can extract bytes from disk.

If a key leaks, revoke it from the dashboard. Within seconds it returns 401 across every server we run.

POST/v1/messages

Anthropic-совместимый Messages-эндпоинт. Идентичен api.anthropic.com/v1/messages.

Тело запроса

ПолеТип Обяз.Описание
model string даclaude-sonnet-4-5, -haiku-4-5, -opus-4-8
messages array даФормат Anthropic: role + content-блоки
max_tokens int даЛимит вывода. Авто-поднимается до потолка модели.
system string|array нет Системный промпт; передайте массив блоков для cache_control-брейкпоинтов
stream bool нет Включить SSE (см. Стриминг)
tools array нет Схемы инструментов, вкл. серверный web_search_20250305
tool_choice object нет auto / any / tool / none
temperature float нет Диапазон 0–1. При отсутствии применяется разумное значение по умолчанию (ниже для вызовов инструментов/агента).
top_p float нет Nucleus sampling; предпочитайте temperature
top_k int нет Сэмплирование из топ-K кандидатов
stop_sequences array нет До 4 строк, останавливающих генерацию
thinking object нет {"type":"enabled","budget_tokens":4096} (Opus & Sonnet 4.5+)
metadata object нет {"user_id":"…"} для вашей аналитики

Формат ответа

json
{
  "id": "msg_011…",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-4-5",
  "content": [
    { "type": "text", "text": "Closures in PHP capture variables…" }
  ],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 42,
    "cache_creation_input_tokens": 0,
    "cache_read_input_tokens": 0,
    "output_tokens": 128
  }
}

Значения stop_reason

ЗначениеЧто означает
end_turn Модель закончила естественно
max_tokens Упёрлись в ваш лимит max_tokens посреди генерации
stop_sequence Вывод совпал с одной из ваших stop_sequences
tool_use Модель хочет вызвать инструмент — выполните его и продолжите диалог
pause_turn Долгий цикл инструмента приостановлен — продолжите, отправив те же сообщения обратно

POST/v1/messages/count_tokens

Считает токены планируемого запроса без вызова модели. Используется SDK для оценки стоимости, планирования context window и pre-check rate-лимитов.

То же тело запроса что у /v1/messages. Оценка использует cl100k_base BPE (ближайшая открытая аппроксимация токенайзера Claude) — типичная точность ±3-5% на прозе, ±8-10% на плотном коде/JSON.

bash
curl https://api.alicode.store/v1/messages/count_tokens \
  -H 'x-api-key: sk-ali-…' \
  -H 'content-type: application/json' \
  -d '{
    "model": "claude-sonnet-4-5",
    "system": "You are Claude.",
    "messages": [{"role":"user","content":"Hello world"}]
  }'
json
{ "input_tokens": 14 }

POST/v1/chat/completions

OpenAI-совместимый. Используется Cursor (через override base URL), Continue, OpenWebUI, любыми вашими скриптами на OpenAI SDK.

Внутри переводим OpenAI-форму запроса в Anthropic, ответ — обратно в OpenAI-форму, включая стриминг-чанки, tool_calls, vision image_url блоки и finish_reason.

bash
curl https://api.alicode.store/v1/chat/completions \
  -H 'Authorization: Bearer sk-ali-…' \
  -H 'content-type: application/json' \
  -d '{
    "model": "claude-sonnet-4-5",
    "messages": [{"role":"user","content":"ping"}]
  }'

Маппинг finish_reason

Anthropic stop_reasonOpenAI finish_reason
end_turn stop
max_tokens length
stop_sequence stop
tool_use tool_calls

GET/v1/models

Возвращает список публичных ID моделей. Два формата по одному пути, в зависимости от заголовка Accept:

  • OpenAI shape{ object: 'list', data: [{ id, object, owned_by, … }] }
  • Anthropic shape (GET /v1/models/{id} too) — full capabilities tree with image_input, thinking.adaptive, effort.max, prompt_caching, context_management.
bash
curl https://api.alicode.store/v1/models \
  -H 'Authorization: Bearer sk-ali-…'

# specific model
curl https://api.alicode.store/v1/models/claude-sonnet-4-5 \
  -H 'Authorization: Bearer sk-ali-…'

/v1/files

Постоянная загрузка для картинок, PDF и текстовых дампов. После загрузки вы ссылаетесь на файл по id в content сообщения, вместо отправки base64 каждый turn — экономит токены и bandwidth в длинных диалогах и батчах.

Beta-заголовок: anthropic-beta: files-api-2025-04-14 (принимается, но не обязателен).

POST/v1/files — upload

bash
curl https://api.alicode.store/v1/files \
  -H 'x-api-key: sk-ali-…' \
  -F 'file=@/path/to/image.png'
json
{
  "id": "file_011…",
  "type": "file",
  "filename": "image.png",
  "mime_type": "image/png",
  "size_bytes": 184320,
  "created_at": "2026-05-17T15:23:39Z",
  "downloadable": true
}

Использование файла в сообщении

json
{
  "model": "claude-sonnet-4-5",
  "max_tokens": 512,
  "messages": [{
    "role": "user",
    "content": [
      { "type": "image", "source": { "type": "file", "file_id": "file_011…" } },
      { "type": "text",  "text": "What is in this image?" }
    ]
  }]
}

Другие эндпоинты

Метод и путьНазначение
GET /v1/files Список, постранично через before_id / after_id / limit
GET /v1/files/{id} Метаданные
GET /v1/files/{id}/content Скачивание сырых байт (стримом)
DELETE /v1/files/{id} Мягкое удаление; 24ч до окончательной очистки

Лимиты

  • Максимум загрузки: 25 МБ на файл.
  • Допустимые mime: PNG, JPEG, WEBP, GIF, PDF, plain text, markdown, CSV.
  • SHA-256 dedup: повторная загрузка идентичных байт возвращает существующий file_id, новой записи нет.

/v1/messages/batches

Обрабатывает до 10 000 сообщений в одной async-джобе по 50% от обычной цены. Submit, poll, fetch results — всё асинхронно.

Beta-заголовок: anthropic-beta: message-batches-2024-09-24 (принимается, но не обязателен).

POST/v1/messages/batches — submit

bash
curl https://api.alicode.store/v1/messages/batches \
  -H 'x-api-key: sk-ali-…' \
  -H 'content-type: application/json' \
  -d '{
    "requests": [
      { "custom_id": "q-1", "params": { "model":"claude-sonnet-4-5", "max_tokens":100, "messages":[{"role":"user","content":"2+2"}] }},
      { "custom_id": "q-2", "params": { "model":"claude-sonnet-4-5", "max_tokens":100, "messages":[{"role":"user","content":"capital of france"}] }}
    ]
  }'
json
{
  "id": "msgbatch_011…",
  "type": "message_batch",
  "processing_status": "in_progress",
  "request_counts": {"processing":2,"succeeded":0,"errored":0,"canceled":0,"expired":0},
  "created_at": "2026-05-18T15:25:50Z",
  "expires_at": "2026-05-19T15:25:50Z",
  "results_url": null
}

Поллинг до завершения

bash
# Poll every few seconds
curl https://api.alicode.store/v1/messages/batches/msgbatch_011… \
  -H 'x-api-key: sk-ali-…'

# When processing_status == 'ended', fetch JSONL results
curl https://api.alicode.store/v1/messages/batches/msgbatch_011…/results \
  -H 'x-api-key: sk-ali-…'
json
{"custom_id":"q-1","result":{"type":"succeeded","message":{ … }}}
{"custom_id":"q-2","result":{"type":"succeeded","message":{ … }}}

Все эндпоинты

Метод и путьНазначение
POST /v1/messages/batches Создать батч (до 10K запросов)
GET /v1/messages/batches Список, курсорная пагинация
GET /v1/messages/batches/{id} Статус и счётчики
POST /v1/messages/batches/{id}/cancel Пометить на отмену; оставшиеся пропускаются
GET /v1/messages/batches/{id}/results Вывод JSONL стримом
DELETE /v1/messages/batches/{id} Удалить батч и результаты (должен быть завершён)

Валидация

  • custom_id обязателен и должен быть уникальным внутри батча.
  • Каждый объект params — это полное тело /v1/messages (без стриминга — батчи всегда возвращают завершённые сообщения).
  • Батчи протухают через 24 часа после создания; оставшиеся элементы получают статус expired.

Стриминг SSE

Поставьте stream: true. Сервер возвращает Anthropic-формат Server-Sent Events. События приходят в таком порядке:

  1. message_start — начальная метадата сообщения, пустой content.
  2. content_block_start — по одному на каждый блок (text / tool_use / thinking).
  3. content_block_delta — N дельт с text_delta, input_json_delta или thinking_delta.
  4. content_block_stop — закрытие текущего блока.
  5. message_delta — финальный stop_reason и счётчики usage.
  6. message_stop — конец стрима.
  7. ping — отправляется каждые ~15с для keepalive.

Сырые байты (сокращённо)

text
event: message_start
data: {"type":"message_start","message":{"id":"msg_…","model":"claude-sonnet-4-5","content":[]}}

event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":", world"}}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":9}}

event: message_stop
data: {"type":"message_stop"}

Использование через Python SDK

python
with client.messages.stream(
    model='claude-sonnet-4-5',
    max_tokens=512,
    messages=[{'role':'user','content':'Tell me a joke'}],
) as stream:
    for text in stream.text_stream:
        print(text, end='', flush=True)
Стриминг автоматически отключается когда вы объявляете web_search_20250305 — агентскому циклу нужен полный ответ для цепочки tool-вызовов. Ваш SDK незаметно фоллбэкается на blocking-ответ.

Использование инструментов

Передайте tools[] c input_schema (JSON Schema). Ассистент возвращает content-блоки типа tool_use; ваш клиент выполняет инструмент и шлёт tool_result в следующем user turn.

Раунд 1 — объявляем инструмент, получаем tool_use

json
{
  "model": "claude-sonnet-4-5",
  "max_tokens": 1024,
  "tools": [{
    "name": "get_weather",
    "description": "Get current weather for a city",
    "input_schema": {
      "type": "object",
      "properties": { "city": { "type": "string" } },
      "required": ["city"]
    }
  }],
  "messages": [{ "role": "user", "content": "What is the weather in Berlin?" }]
}

Ответ содержит блок tool_use:

json
{
  "stop_reason": "tool_use",
  "content": [
    { "type": "text",     "text": "Let me check that." },
    { "type": "tool_use", "id": "toolu_01abc", "name": "get_weather", "input": { "city": "Berlin" } }
  ]
}

Раунд 2 — отправляем tool_result обратно

json
{
  "model": "claude-sonnet-4-5",
  "max_tokens": 1024,
  "tools": [/* same tools[] */],
  "messages": [
    { "role": "user",      "content": "What is the weather in Berlin?" },
    { "role": "assistant", "content": [
        { "type": "text",     "text": "Let me check that." },
        { "type": "tool_use", "id": "toolu_01abc", "name": "get_weather", "input": { "city": "Berlin" } }
    ]},
    { "role": "user", "content": [
        { "type": "tool_result", "tool_use_id": "toolu_01abc", "content": "18°C, sunny" }
    ]}
  ]
}

tool_choice

ЗначениеПоведение
{"type":"auto"} По умолчанию — модель сама решает, вызывать ли инструмент
{"type":"any"} Заставляет модель вызвать ЛЮБОЙ из объявленных инструментов
{"type":"tool","name":"get_weather"} Заставляет вызвать именно этот инструмент
{"type":"none"} Отключает вызовы инструментов на этот turn

Параллельные вызовы: модель может вернуть несколько tool_use блоков в одном turn. Запустите их параллельно и верните все tool_result блоки в следующем сообщении пользователя.

Vision

Отправляйте картинки как content-блоки Anthropic типа image. Три варианта source:

source.typeСтруктураКогда использовать
base64{ media_type, data }Разовая отправка, картинка встроена в запрос
url { url } Публичные картинки в интернете
file { file_id } Переиспользуется в диалогах / батчах — см. Files API
json
{
  "model": "claude-sonnet-4-5",
  "max_tokens": 512,
  "messages": [{
    "role": "user",
    "content": [
      { "type": "text", "text": "What is in this image?" },
      { "type": "image", "source": {
          "type": "base64",
          "media_type": "image/jpeg",
          "data": "<base64-bytes>"
      }}
    ]
  }]
}

Постоянное vision через файлы

bash
# upload once
FILE_ID=$(curl -s https://api.alicode.store/v1/files \
  -H 'x-api-key: sk-ali-…' \
  -F 'file=@chart.png' | jq -r .id)

# reference in many turns / batches
curl https://api.alicode.store/v1/messages \
  -H 'x-api-key: sk-ali-…' \
  -H 'content-type: application/json' \
  -d "{
    \"model\":\"claude-sonnet-4-5\",
    \"max_tokens\":512,
    \"messages\":[{ \"role\":\"user\", \"content\":[
      { \"type\":\"image\", \"source\":{ \"type\":\"file\", \"file_id\":\"$FILE_ID\" } },
      { \"type\":\"text\",  \"text\":\"summarise this chart\" }
    ]}]
  }"

Кэширование промптов

Помечайте стабильные префиксы через cache_control: { type: "ephemeral" }. Следующие запросы переиспользующие этот префикс платят 10% от обычной цены input за закэшированную часть. TTL кэша: 5 минут с последнего хита.

До 4 breakpoints на запрос. Мы автоматически вставляем один breakpoint в конце system-блока если его нет, чтобы даже простые запросы получали выгоду от кэширования.

Куда ставить брейкпойнты

  • В конце системного промпта — самое популярное, самый большой выигрыш.
  • После длинного статичного документа в первом user-turn.
  • После tools[] объявления, если их много.

Пример

json
{
  "model": "claude-sonnet-4-5",
  "max_tokens": 256,
  "system": [
    { "type": "text", "text": "You are a senior support engineer. Follow company tone.\n\n[…3000 token style guide…]",
      "cache_control": { "type": "ephemeral" } }
  ],
  "messages": [{ "role": "user", "content": "Why is my server slow?" }]
}

Счётчики использования

json
"usage": {
  "input_tokens": 12,
  "cache_creation_input_tokens": 3045,
  "cache_read_input_tokens": 0,
  "output_tokens": 80
}

On the next request reusing the same prefix:

json
"usage": {
  "input_tokens": 14,
  "cache_creation_input_tokens": 0,
  "cache_read_input_tokens": 3045,
  "output_tokens": 80
}

Вы платите полную цену только за input_tokens (новый контент) и 10% за cache_read_input_tokens.

Расширенное мышление

Доступно у Opus и свежих Sonnet. Ассистент эмитит thinking-блоки content перед финальным ответом — видимое рассуждение, как внутренний монолог Claude Code.

Включается полем thinking в запросе:

json
{
  "model": "claude-opus-4-7",
  "max_tokens": 4096,
  "thinking": { "type": "enabled", "budget_tokens": 4096 },
  "messages": [{ "role": "user", "content": "Plan a refactor of this codebase…" }]
}

Ответ содержит и thinking, и text блоки:

json
"content": [
  { "type": "thinking", "thinking": "The user wants a refactor plan. Let me…", "signature": "msg_…" },
  { "type": "text",     "text": "Here is a 5-step plan: …" }
]
Thinking-токены биллятся как output-токены. Ставьте budget_tokens с запасом (1K-8K типично) — Opus может разогнаться до 30K+ если позволить.

Биллинг и лимиты

Цены за 1М токенов (USD)

МодельВходВыходЗапись кэшаЧтение кэша
claude-haiku-4-5 $0.80$4.00$1.00$0.08
claude-sonnet-4-5 $2.50$12.00$3.13$0.25
claude-opus-4-8 $3.00$14.00$3.75$0.30

Скидки

  • Batch API — 50% от цены за input и output.
  • Кэширование промптов — 90% скидки на cached префикс при чтении.

Пополнение

Пополнение от 300 ₽. Кредиты не сгорают. Никаких отписок не нужно.

Rate-лимиты

Никаких поминутных лимитов. Никаких суточных квот. Применяется только антифрод на уровне IP (1000 req/min, 50 одновременных коннектов) — далеко за пределами того что нужно реальному агенту. Per-key RPM и spend-cap настраиваются в дашборде.

Коды ошибок

Ошибки в формате Anthropic:

json
{ "type": "error", "error": { "type": "<error_type>", "message": "<human-readable>" }, "request_id": "req_011…" }
HTTPerror.typeЧто означает
400invalid_request_errorБитый JSON, нет поля, неверная модель, кривой tools[]
401authentication_errorОтсутствует или неверный x-api-key
402insufficient_creditsБаланс ниже расчётной стоимости
403permission_errorКлючу не разрешена эта модель
404not_found_errorНеизвестный id файла/батча/модели
413request_too_largeТело больше 50 МБ или загрузка файла > 25 МБ
415invalid_request_errorНеподдерживаемый mime_type при загрузке файла
429rate_limit_errorПревышен лимит частоты по ключу или IP
500api_errorБаг сервера — откройте тикет с request_id
502api_errorАпстрим упал (ретраябельно)
503overloaded_errorРежим защиты — повторите чуть позже

Стратегия повторов

Считайте 429, 502, 503 и idempotent-таймауты ретраябельными. Используйте экспоненциальный backoff начиная с 1с, удваивая, с jitter; не больше 3 попыток. Официальные SDK делают это сами — если у вас anthropic или @anthropic-ai/sdk, retry-with-backoff уже из коробки.

Не ретраите 400 / 401 / 402 / 403 / 404 / 413 / 415 — они указывают на проблему с самим запросом, повтор даст ту же ошибку. Сначала чините причину.

500 редко и означает баг на нашей стороне; мы видим их в мониторинге и обычно деплоим фикс за часы. Если упёрлись систематически — открывайте тикет с request-id, это самый быстрый путь для нас отследить.

Отладка падающего запроса

  1. Сначала смотрите HTTP-код — он говорит чья проблема (4xx = клиент, 5xx = сервер).
  2. Читайте поле error.message в JSON — оно специально человекочитаемое.
  3. Возьмите заголовок request-id из ответа. Даже на ошибках мы его возвращаем.
  4. Воспроизведите curl -v из чистой шеллы — убедитесь что это не ваш SDK добавляет странные заголовки.
  5. Если так и не разобрались — пишите на hello@alicode.store request-id, время и curl-команду. Найдём ваш запрос в логах.
Каждый ответ несёт заголовок request-id (он же есть в JSON при ошибках). Включайте его в support-письма — это единственное что позволяет нам найти ваш запрос в логах, не храня тело промпта.

FAQ и правовая информация

Самые частые вопросы перед регистрацией — кликните на любой чтобы развернуть ответ.

Как вы можете быть на 85% дешевле Anthropic?

Две причины. Первая: мы работаем на consumer-инфраструктуре без энтерпрайз-оверхеда — нет dedicated success engineers, on-prem деплоев, кастомных DPA на каждого клиента. Вторая: мы агрегируем тысячи мелких разрабов в один большой клиентский профиль и договариваемся об оптовых ставках на эту совокупную нагрузку. Официальный прайс Anthropic под энтерпрайз-procurement; наш — под одного инженера с банковской картой. Мы берём небольшую маржу посередине, вы оставляете разницу себе.

Размен честный: вы получаете то же качество модели и тот же протокол, но без энтерпрайз-SLA, кастомных юридических условий и приоритетной capacity при инцидентах. Для 99% инди / агентств / хоббистов — отличная сделка.

Это правда Claude или какая-то другая модель за кулисами?

Это настоящий Claude. Те же модели Anthropic, то же обучение, тот же интеллект. Мы не файнтьюним, не проксируем через какой-то более дешёвый open-source. Мы маршрутизируем ваш запрос на Claude-инференс и возвращаем сырые байты обратно. Единственная разница от прямого вызова Anthropic — URL и ваш API-ключ.

Сломается ли это как только Anthropic выкатит новую фичу?

Всё что проходит через расширения протокола — новые anthropic-beta флаги, новые типы content-блоков, новые типы инструментов — пропускается прозрачно. Обновления выкатываем за часы после публичного релиза Anthropic. Фичи требующие server-side стейта (Files API, Message Batches, count_tokens) реализованы за нашей инфрой, чтобы SDK-хелперы продолжали работать. Citations и code execution — следующие в роадмапе.

Это вообще легально? Вам можно ресейлить?

Да. Мы покупаем API-мощности по стандартным ставкам у авторизованных провайдеров и ресейлим доступ к ним. Это нормальные коммерческие отношения — ровно так работали cloud-ресейлеры, MSP и агрегаторы с 1990-х. Вы соглашаетесь использовать сервис по нашему AUP ниже; мы соглашаемся предоставлять купленные вами мощности.

Важно: вы должны соблюдать публичный Acceptable Use от Anthropic даже несмотря на то что зовёте нас — те же правила контента (никакого abuse, нелегального контента, scraping защищённых систем). Любые сигналы модерации от апстрима мы пропускаем.

Вы логируете мои промпты? Ответы?

Нет. Логируем только метадату запроса для биллинга — timestamp, IP, user_id, модель, количество input/output токенов, HTTP-статус. Тело промпта и тело ответа в нашу БД не попадают. Они проходят через память только на время запроса и освобождаются в момент отправки ответа.

Фичи памяти разговора (SessionMemory, Memdir) — opt-in: вам нужно явно включать их в запросе, и они хранят только то что вы попросите, привязанное к вашему аккаунту.

Где обрабатываются мои данные? Это GDPR-compliant?

Наш control-plane (аккаунт, биллинг, хеши API-ключей) работает в ЕС. Инференс модели выполняют региональные эндпоинты Anthropic — обычно US-East для англоязычных клиентов, EU доступны по запросу. Поскольку мы не храним контент промптов и ответов, GDPR data-subject права (доступ, удаление, переносимость) применяются только к метадате аккаунта, которую вы сами можете удалить из дашборда в любой момент.

Что если запрос упадёт посреди стрима?

Если апстрим вернёт 5xx до того как сгенерировались токены — вы получаете чистый 502, и запрос не тарифицируется (кредиты не списываются). Мы ротируем upstream-ключи и автоматически уводим в cooldown проблемные, поэтому повтор попадает на здоровый ключ; официальные SDK сами ретраят 502/503 с backoff.

Если стрим обрывается посреди ответа (редко, но возможно на плохих сетях) — получаете частичный контент, счётчики usage отражают только реально сгенерированное. SDK должен обрабатывать это как обычный короткий ответ.

Можно отменить? Получить refund?

Подписки нет, отменять нечего. Неиспользованные кредиты не сгорают — баланс остаётся в аккаунте навсегда, даже если вы не пользуетесь годами. Refund: если случайно пополнили не тот аккаунт — пишите в support в течение 24 часов, перенесём баланс. Обычные использованные кредиты не возвращаем (инференс уже оплачен апстриму).

Как именно работает биллинг?

Каждый запрос биллится по завершению ответа. Списываем input_tokens × input_rate + output_tokens × output_rate по ставкам из раздела Биллинг. Cache-чтения биллятся по 10% от input-ставки; batch-запросы — по 50% от обычной. Списание атомарное, видно в дашборде в течение секунд. Можно ставить per-key spend-caps чтобы жёстко стопать runaway-скрипты.

Чем это отличается от OpenRouter / Helicone / Together / Groq?

OpenRouter — это маршрутизирующий маркет; они предлагают много моделей от разных провайдеров с небольшой надбавкой к прайсу каждого. У них ширина, у нас глубина по Anthropic-протоколу: полные Files / Batches / count_tokens, дешёвый Claude, реальные Anthropic-SSE байты, prompt caching с прокидыванием cache_control. Если используете только Claude — у нас выгоднее.

Helicone — observability и кэш перед апстрим API; цены не меняет, добавляет аналитику. Можете поставить Helicone перед AliCode если нужно и то и то.

Together / Groq / Fireworks — open-source модели (Llama, Mixtral, Qwen). Другая категория. Дешевле, но это не Claude.

Латенси — потеряю ли я секунды?

Наш оверхед суб-миллисекундный: добавляем максимум ~5-15мс к first-token latency при маршрутизации через шлюз, в сравнении с прямым вызовом апстрима. Остальное — это то что отдаёт сам Anthropic. На практике разницу не заметите; собственная вариация Claude между вызовами сильно больше нашего routing-оверхеда.

Можно использовать в продакшене?

Да — мы обслуживаем продакшен-трафик платящих клиентов и относимся к шлюзу как к продакшен-системе: мониторинг, авто-скейл, репликация, ротация ключей, инцидент-response. Формальный SLA на free-tier не публикуем, но целимся в 99.5% месячный аптайм для платных аккаунтов; статус публикуется на /v1/health.

В чём разница между base64-картинкой и загрузкой через /v1/files?

Функционально идентично — то же качество vision, та же стоимость токенов за изображение. Разница в bandwidth и размере запроса: base64 раздувает на ~33% и пересылается на каждом turn длинного диалога; file_id грузится один раз и дешёво ссылается дальше.

Есть ли webhooks / async callbacks?

Пока нет. Для async-нагрузок используйте Message Batches — polling через GET /v1/messages/batches/{id} и реакция когда processing_status == "ended". Webhooks в роадмапе на Q3 вместе с Citations и Code Execution.

Есть командные / shared аккаунты?

Пока нет — каждый аккаунт single-user. Для командных setup'ов рекомендуем один аккаунт на команду + per-developer API-ключи (у каждого ключа своё имя и spend-cap, легко аттрибутировать). Командные workspace с общим биллингом — в планах.

Как обрабатываете abuse / runaway-скрипты?

Три линии защиты:

  • Per-key spend cap — задайте долларовый лимит на ключ в дашборде; при достижении ключ авто-отзывается.
  • Per-key RPM лимит — ограничиваем запросы в минуту на ключ для защиты от бесконечных циклов.
  • Аварийный стоп аккаунта — один клик в дашборде отзывает все ключи разом.
Можно скидку за объём?

Наши публичные ставки уже агрессивные. Если тратите больше $500/мес стабильно — пишите на hello@alicode.store с описанием use case; для постоянных heavy-юзеров и коммерческих партнёрств иногда устраиваем custom-ставки.

Cursor пишет "Named models unavailable", что делать?

Cursor на бесплатном плане ограничивает произвольные имена моделей у OpenAI-style эндпоинта. Workaround: в списке моделей Cursor добавьте известное OpenAI-имя вроде gpt-4o или gpt-4-turbo вместо claude-sonnet-4-5. Наш шлюз распознаёт алиасы и маршрутизирует на нужную Claude-модель.

Получаю 401 хотя ключ верный

Частые причины:

  • Ключ отозван, а вы закэшировали его локально — выпустите новый в дашборде.
  • Скопировали с лишним пробелом или \n в конце — обрежьте whitespace.
  • Используете Bearer на заголовке x-api-key (там должен быть голый ключ) или голый ключ на Authorization (там нужен префикс Bearer ).
  • Аккаунт заблокирован за abuse — проверьте почту на уведомление от нас.
Acceptable Use Policy (правила использования)

Используя AliCode, вы соглашаетесь не: генерировать контент сексуализирующий несовершеннолетних; харрасить, доксить или клеветать; создавать контент специально для введения в заблуждение или имитации реальных людей; массово создавать дезинформацию или спам; пытаться вломиться в системы которыми не владеете; регистрировать несколько аккаунтов чтобы обойти лимиты или бан; ресейлить доступ без предварительного письменного соглашения; использовать сервис способами нарушающими AUP самого Anthropic. Нарушения = немедленная блокировка аккаунта. Кредиты на заблокированных аккаунтах не возвращаются.

Условия использования (краткая версия)

AliCode предоставляется как есть, без гарантий любого рода. Сервис эксплуатируется его оператором в соответствии с законодательством Российской Федерации. Вы отвечаете за безопасность ваших API-ключей и легальность использования. Можем блокировать аккаунты за нарушения AUP без возврата. Кредиты не переносятся между аккаунтами. Цены могут меняться с разумным предварительным уведомлением; существующий баланс соблюдается по ставке покупки. Условия регулируются законодательством Российской Федерации — см. полные Условия использования.

Контакты и поддержка

General · billing
Abuse reports
Status · health

Response time on email is typically within 24h on weekdays. For server-side bugs include the request-id header from the failed call — that's how we find your trace in the logs.

Наш Telegram